diff --git a/apps/files/ajax/newfile.php b/apps/files/ajax/newfile.php
index 8548fc95ddf963d6ef131b8b94fa808a5d547e21..21db0a7834b93a2822eca39d82249caf4301b489 100644
--- a/apps/files/ajax/newfile.php
+++ b/apps/files/ajax/newfile.php
@@ -3,29 +3,29 @@
 // Init owncloud
 global $eventSource;
 
-if(!OC_User::isLoggedIn()) {
+if (!OC_User::isLoggedIn()) {
 	exit;
 }
 
 session_write_close();
 // Get the params
-$dir = isset( $_REQUEST['dir'] ) ? '/'.trim($_REQUEST['dir'], '/\\') : '';
-$filename = isset( $_REQUEST['filename'] ) ? trim($_REQUEST['filename'], '/\\') : '';
-$content = isset( $_REQUEST['content'] ) ? $_REQUEST['content'] : '';
-$source = isset( $_REQUEST['source'] ) ? trim($_REQUEST['source'], '/\\') : '';
+$dir = isset($_REQUEST['dir']) ? '/' . trim($_REQUEST['dir'], '/\\') : '';
+$filename = isset($_REQUEST['filename']) ? trim($_REQUEST['filename'], '/\\') : '';
+$content = isset($_REQUEST['content']) ? $_REQUEST['content'] : '';
+$source = isset($_REQUEST['source']) ? trim($_REQUEST['source'], '/\\') : '';
 
-if($source) {
-	$eventSource=new OC_EventSource();
+if ($source) {
+	$eventSource = new OC_EventSource();
 } else {
 	OC_JSON::callCheck();
 }
 
-if($filename == '') {
-	OCP\JSON::error(array("data" => array( "message" => "Empty Filename" )));
+if ($filename == '') {
+	OCP\JSON::error(array("data" => array("message" => "Empty Filename")));
 	exit();
 }
-if(strpos($filename, '/')!==false) {
-	OCP\JSON::error(array("data" => array( "message" => "Invalid Filename" )));
+if (strpos($filename, '/') !== false) {
+	OCP\JSON::error(array("data" => array("message" => "Invalid Filename")));
 	exit();
 }
 
@@ -34,7 +34,7 @@ function progress($notification_code, $severity, $message, $message_code, $bytes
 	static $lastsize = 0;
 	global $eventSource;
 
-	switch($notification_code) {
+	switch ($notification_code) {
 		case STREAM_NOTIFY_FILE_SIZE_IS:
 			$filesize = $bytes_max;
 			break;
@@ -43,52 +43,56 @@ function progress($notification_code, $severity, $message, $message_code, $bytes
 			if ($bytes_transferred > 0) {
 				if (!isset($filesize)) {
 				} else {
-					$progress = (int)(($bytes_transferred/$filesize)*100);
-					if($progress>$lastsize) {//limit the number or messages send
+					$progress = (int)(($bytes_transferred / $filesize) * 100);
+					if ($progress > $lastsize) { //limit the number or messages send
 						$eventSource->send('progress', $progress);
 					}
-					$lastsize=$progress;
+					$lastsize = $progress;
 				}
 			}
 			break;
 	}
 }
 
-if($source) {
-	if(substr($source, 0, 8)!='https://' and substr($source, 0, 7)!='http://') {
-		OCP\JSON::error(array("data" => array( "message" => "Not a valid source" )));
+if ($source) {
+	if (substr($source, 0, 8) != 'https://' and substr($source, 0, 7) != 'http://') {
+		OCP\JSON::error(array("data" => array("message" => "Not a valid source")));
 		exit();
 	}
 
-	$ctx = stream_context_create(null, array('notification' =>'progress'));
-	$sourceStream=fopen($source, 'rb', false, $ctx);
-	$target=$dir.'/'.$filename;
-	$result=\OC\Files\Filesystem::file_put_contents($target, $sourceStream);
-	if($result) {
+	$ctx = stream_context_create(null, array('notification' => 'progress'));
+	$sourceStream = fopen($source, 'rb', false, $ctx);
+	$target = $dir . '/' . $filename;
+	$result = \OC\Files\Filesystem::file_put_contents($target, $sourceStream);
+	if ($result) {
 		$meta = \OC\Files\Filesystem::getFileInfo($target);
-		$mime=$meta['mimetype'];
+		$mime = $meta['mimetype'];
 		$id = $meta['fileid'];
-		$eventSource->send('success', array('mime'=>$mime, 'size'=>\OC\Files\Filesystem::filesize($target), 'id' => $id));
+		$eventSource->send('success', array('mime' => $mime, 'size' => \OC\Files\Filesystem::filesize($target), 'id' => $id));
 	} else {
-		$eventSource->send('error', "Error while downloading ".$source. ' to '.$target);
+		$eventSource->send('error', "Error while downloading " . $source . ' to ' . $target);
 	}
 	$eventSource->close();
 	exit();
 } else {
-	if($content) {
-		if(\OC\Files\Filesystem::file_put_contents($dir.'/'.$filename, $content)) {
-			$meta = \OC\Files\Filesystem::getFileInfo($dir.'/'.$filename);
+	if ($content) {
+		if (\OC\Files\Filesystem::file_put_contents($dir . '/' . $filename, $content)) {
+			$meta = \OC\Files\Filesystem::getFileInfo($dir . '/' . $filename);
 			$id = $meta['fileid'];
-			OCP\JSON::success(array("data" => array('content'=>$content, 'id' => $id)));
+			OCP\JSON::success(array("data" => array('content' => $content, 'id' => $id)));
 			exit();
 		}
-	}elseif(\OC\Files\Filesystem::touch($dir . '/' . $filename)) {
-		$meta = \OC\Files\Filesystem::getFileInfo($dir.'/'.$filename);
+	} elseif (\OC\Files\Filesystem::touch($dir . '/' . $filename)) {
+		$meta = \OC\Files\Filesystem::getFileInfo($dir . '/' . $filename);
+		$templateManager = OC_Helper::getFileTemplateManager();
+		if ($content = $templateManager->getTemplate($meta['mimetype'])) {
+			\OC\Files\Filesystem::file_put_contents($dir . '/' . $filename, $content);
+		}
 		$id = $meta['fileid'];
-		OCP\JSON::success(array("data" => array('content'=>$content, 'id' => $id, 'mime' => $meta['mimetype'])));
+		OCP\JSON::success(array("data" => array('content' => $content, 'id' => $id, 'mime' => $meta['mimetype'])));
 		exit();
 	}
 }
 
 
-OCP\JSON::error(array("data" => array( "message" => "Error when creating the file" )));
+OCP\JSON::error(array("data" => array("message" => "Error when creating the file")));
diff --git a/lib/files/type/templatemanager.php b/lib/files/type/templatemanager.php
new file mode 100644
index 0000000000000000000000000000000000000000..cd1536d2732897a4e85f87c3eda6a20202d68ec7
--- /dev/null
+++ b/lib/files/type/templatemanager.php
@@ -0,0 +1,46 @@
+<?php
+/**
+ * Copyright (c) 2013 Robin Appelman <icewind@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OC\Files\Type;
+
+class TemplateManager {
+	protected $templates = array();
+
+	public function registerTemplate($mimetype, $path) {
+		$this->templates[$mimetype] = $path;
+	}
+
+	/**
+	 * get the path of the template for a mimetype
+	 *
+	 * @param string $mimetype
+	 * @return string | null
+	 */
+	public function getTemplatePath($mimetype) {
+		if (isset($this->templates[$mimetype])) {
+			return $this->templates[$mimetype];
+		} else {
+			return null;
+		}
+	}
+
+	/**
+	 * get the template content for a mimetype
+	 *
+	 * @param string $mimetype
+	 * @return string
+	 */
+	public function getTemplate($mimetype) {
+		$path = $this->getTemplatePath($mimetype);
+		if ($path) {
+			return file_get_contents($path);
+		} else {
+			return '';
+		}
+	}
+}
diff --git a/lib/helper.php b/lib/helper.php
index 801f06352d06a09f5fa8172e0dc91d7795291712..8b64baaea7275a993f98efcdfda23713c0a84bc0 100644
--- a/lib/helper.php
+++ b/lib/helper.php
@@ -28,6 +28,7 @@ class OC_Helper {
 	private static $tmpFiles = array();
 	private static $mimetypeIcons = array();
 	private static $mimetypeDetector;
+	private static $templateManager;
 
 	/**
 	 * @brief Creates an url using a defined route
@@ -357,6 +358,9 @@ class OC_Helper {
 		}
 	}
 
+	/**
+	 * @return \OC\Files\Type\Detection
+	 */
 	static public function getMimetypeDetector() {
 		if (!self::$mimetypeDetector) {
 			self::$mimetypeDetector = new \OC\Files\Type\Detection();
@@ -365,6 +369,16 @@ class OC_Helper {
 		return self::$mimetypeDetector;
 	}
 
+	/**
+	 * @return \OC\Files\Type\TemplateManager
+	 */
+	static public function getFileTemplateManager() {
+		if (!self::$templateManager) {
+			self::$templateManager = new \OC\Files\Type\TemplateManager();
+		}
+		return self::$templateManager;
+	}
+
 	/**
 	 * Try to guess the mimetype based on filename
 	 *