diff --git a/3rdparty b/3rdparty
index 21b466b72cdd4c823c011669593ecef1defb1f3c..dc87ea630287f27502eba825fbb19fcc33c34c86 160000
--- a/3rdparty
+++ b/3rdparty
@@ -1 +1 @@
-Subproject commit 21b466b72cdd4c823c011669593ecef1defb1f3c
+Subproject commit dc87ea630287f27502eba825fbb19fcc33c34c86
diff --git a/apps/files/ajax/newfile.php b/apps/files/ajax/newfile.php
index d224e79d01ba2dca4be3fc254ac5f3186cd48249..76c03c87a51fae369584d99af1b93f86bd6adaf2 100644
--- a/apps/files/ajax/newfile.php
+++ b/apps/files/ajax/newfile.php
@@ -79,7 +79,7 @@ if($source) {
 	$success = false;
 	if (!$content) {
 		$templateManager = OC_Helper::getFileTemplateManager();
-		$mimeType = OC_Helper::getMimeType($target);
+		$mimeType = OC_Helper::getMimetypeDetector()->detectPath($target);
 		$content = $templateManager->getTemplate($mimeType);
 	}
 
diff --git a/apps/files/css/files.css b/apps/files/css/files.css
index af0cb83581160409e75b054c19b0342bcc9b1796..498e34d70d4b080e357a30d8e55294ef6ca950f2 100644
--- a/apps/files/css/files.css
+++ b/apps/files/css/files.css
@@ -19,10 +19,13 @@
 	background:#f8f8f8; border:1px solid #ddd; border-radius:10px; border-top-left-radius:0;
 	box-shadow:0 2px 7px rgba(170,170,170,.4);
 }
-#new>ul>li { height:20px; margin:.3em; padding-left:2em; padding-bottom:0.1em;
+#new>ul>li { height:36px; margin:.3em; padding-left:3em; padding-bottom:0.1em;
 		background-repeat:no-repeat; cursor:pointer; }
-#new>ul>li>p { cursor:pointer; }
-#new>ul>li>form>input { padding:0.3em; margin:-0.3em; }
+#new>ul>li>p { cursor:pointer; padding-top: 7px; padding-bottom: 7px;}
+#new>ul>li>form>input {
+	padding: 5px;
+	margin: 2px 0;
+}
 
 #trash { margin: 0 1em; z-index:1010; float: right; }
 
@@ -72,7 +75,7 @@
 	color:#888; text-shadow:#fff 0 1px 0;
 }
 #filestable { position: relative; top:37px; width:100%; }
-#filestable tbody tr { background-color:#fff; height:2.5em; }
+tbody tr { background-color:#fff; height:2.5em; }
 tbody tr:hover, tbody tr:active {
 	background-color: rgb(240,240,240);
 }
@@ -85,54 +88,153 @@ span.extension { text-transform:lowercase; -ms-filter:"progid:DXImageTransform.M
 tr:hover span.extension { -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"; filter:alpha(opacity=100); opacity:1; color:#777; }
 table tr.mouseOver td { background-color:#eee; }
 table th { height:2em; padding:0 .5em; color:#999; }
-table th .name { float:left; margin-left:.5em; }
+table th .name {
+	position: absolute;
+	left: 55px;
+	top: 15px;
+}
 table th, table td { border-bottom:1px solid #ddd; text-align:left; font-weight:normal; }
-table td { border-bottom:1px solid #eee; font-style:normal; background-position:1em .5em; background-repeat:no-repeat; }
-table th#headerName { width:100em; /* not really sure why this works better than 100% … table styling */ }
-table th#headerSize, table td.filesize { min-width:3em; padding:0 1em; text-align:right; }
-table th#headerDate, table td.date { min-width:11em; padding:0 .1em 0 1em; text-align:left; }
+table td {
+	border-bottom: 1px solid #eee;
+	font-style: normal;
+	background-position: 8px center;
+	background-repeat: no-repeat;
+}
+table th#headerName {
+	position: relative;
+	width: 100em; /* not really sure why this works better than 100% … table styling */
+	padding: 0;
+}
+#headerName-container {
+	position: relative;
+	height: 50px;
+}
+table th#headerSize, table td.filesize {
+	min-width: 3em;
+	padding: 0 1em;
+	text-align: right;
+}
+table th#headerDate, table td.date {
+	-moz-box-sizing: border-box;
+	box-sizing: border-box;
+	position: relative;
+	min-width: 11em;
+	display: block;
+	height: 51px;
+}
 
 /* Multiselect bar */
-#filestable.multiselect { top:63px; }
+#filestable.multiselect {
+	top: 88px;
+}
 table.multiselect thead { position:fixed; top:82px; z-index:1; -moz-box-sizing: border-box; box-sizing: border-box; left: 0; padding-left: 80px; width:100%; }
+
 table.multiselect thead th {
 	background-color: rgba(210,210,210,.7);
 	color: #000;
 	font-weight: bold;
 	border-bottom: 0;
 }
-table.multiselect #headerName { width: 100%; }
+table.multiselect #headerName {
+	position: relative;
+	width: 100%;
+}
 table td.selection, table th.selection, table td.fileaction { width:2em; text-align:center; }
-table td.filename a.name { display:block; height:1.5em; vertical-align:middle; margin-left:3em; }
+table td.filename a.name {
+	position:relative; /* Firefox needs to explicitly have this default set … */
+	-moz-box-sizing: border-box;
+	box-sizing: border-box;
+	display: block;
+	height: 50px;
+	vertical-align: middle;
+	padding: 0;
+}
 table tr[data-type="dir"] td.filename a.name span.nametext {font-weight:bold; }
-table td.filename input.filename { width:100%; cursor:text; }
-table td.filename a, table td.login, table td.logout, table td.download, table td.upload, table td.create, table td.delete { padding:.2em .5em .5em 0; }
+table td.filename input.filename {
+	width: 80%;
+	font-size: 14px;
+	margin-top: 8px;
+	margin-left: 2px;
+	cursor: text;
+}
+table td.filename a, table td.login, table td.logout, table td.download, table td.upload, table td.create, table td.delete { padding:.2em .5em .5em .3em; }
 table td.filename .nametext, .uploadtext, .modified { float:left; padding:.3em 0; }
+
+#modified {
+	position: absolute;
+	top: 15px;
+}
+.modified {
+	position: relative;
+	top: 11px;
+	left: 5px;
+}
+
 /* TODO fix usability bug (accidental file/folder selection) */
-table td.filename .nametext { overflow:hidden; text-overflow:ellipsis; max-width:800px; }
+table td.filename .nametext {
+	position: absolute;
+	top: 16px;
+	left: 55px;
+	padding: 0;
+	overflow: hidden;
+	text-overflow: ellipsis;
+	max-width: 800px;
+}
 table td.filename .uploadtext { font-weight:normal; margin-left:.5em; }
 table td.filename form { font-size:.85em; margin-left:3em; margin-right:3em; }
 
+
 /* File checkboxes */
-#fileList tr td.filename>input[type="checkbox"]:first-child { -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; filter:alpha(opacity=0); opacity:0; float:left; margin:.7em 0 0 1em; /* bigger clickable area doesn’t work in FF width:2.8em; height:2.4em;*/ -webkit-transition:opacity 200ms; -moz-transition:opacity 200ms; -o-transition:opacity 200ms; transition:opacity 200ms; }
-#fileList tr td.filename>input[type="checkbox"]:hover:first-child { -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=80)"; filter:alpha(opacity=80); opacity:.8; }
-/* Always show checkbox when selected */
-#fileList tr td.filename>input[type="checkbox"]:checked:first-child { -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"; filter:alpha(opacity=100); opacity:1; }
-#fileList tr.selected td.filename>input[type="checkbox"]:first-child { -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"; filter:alpha(opacity=100); opacity:1; }
+#fileList tr td.filename>input[type="checkbox"]:first-child {
+	-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";
+	filter: alpha(opacity=0);
+	opacity: 0;
+	float: left;
+	margin: 32px 0 4px 32px; /* bigger clickable area doesn’t work in FF width:2.8em; height:2.4em;*/
+}
+/* Show checkbox when hovering, checked, or selected */
+#fileList tr:hover td.filename>input[type="checkbox"]:first-child,
+#fileList tr td.filename>input[type="checkbox"]:checked:first-child,
+#fileList tr.selected td.filename>input[type="checkbox"]:first-child {
+	-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";
+	filter: alpha(opacity=100);
+	opacity: 1;
+}
+/* Use label to have bigger clickable size for checkbox */
+#fileList tr td.filename>input[type="checkbox"] + label,
+#select_all + label {
+	height: 50px;
+	position: absolute;
+	width: 50px;
+	z-index: 5;
+}
+#fileList tr td.filename>input[type="checkbox"] + label {
+	left: 0;
+}
+#select_all + label {
+	top: 0;
+}
+#select_all {
+	position: absolute;
+	top: 18px;
+	left: 18px;
+}
+
 
 #fileList tr td.filename {
 	position:relative; width:100%;
 	-webkit-transition:background-image 500ms; -moz-transition:background-image 500ms; -o-transition:background-image 500ms; transition:background-image 500ms;
 }
-#select_all { float:left; margin:.4em 0.6em 0 .5em; }
+
 #uploadsize-message,#delete-confirm { display:none; }
 
 /* File actions */
 .fileactions {
-	position:absolute; top:.6em; right:0;
-	font-size:.8em;
+	position: absolute;
+	top: 16px;
+	right: 0;
+	font-size: 11px;
 }
-#fileList .name { position:relative; /* Firefox needs to explicitly have this default set … */ }
 #fileList tr:hover .fileactions { /* background to distinguish when overlaying with file names */
 	background-color: rgba(240,240,240,0.898);
 	box-shadow: -5px 0 7px rgba(240,240,240,0.898);
@@ -142,15 +244,39 @@ table td.filename form { font-size:.85em; margin-left:3em; margin-right:3em; }
 	box-shadow: -5px 0 7px rgba(230,230,230,.9);
 }
 #fileList .fileactions a.action img { position:relative; top:.2em; }
-#fileList a.action { display:inline; margin:-.5em 0; padding:1em .5em 1em .5em !important; }
+
 #fileList img.move2trash { display:inline; margin:-.5em 0; padding:1em .5em 1em .5em !important; float:right; }
-a.action.delete { float:right; }
+#fileList a.action.delete {
+	position: absolute;
+	right: 0;
+	top: 0;
+	margin: 0;
+	padding: 15px 14px 19px !important;
+}
 a.action>img { max-height:16px; max-width:16px; vertical-align:text-bottom; }
-.selectedActions { display:none; float:right; }
-.selectedActions a { display:inline; margin:-.5em 0; padding:.5em !important; }
-.selectedActions a img { position:relative; top:.3em; }
+
+/* Actions for selected files */
+.selectedActions {
+	display: none;
+	position: absolute;
+	top: -1px;
+	right: 0;
+	padding: 15px 8px;
+}
+.selectedActions a {
+	display: inline;
+	padding: 17px 5px;
+}
+.selectedActions a img {
+	position:relative;
+	top:.3em;
+}
+
 
 #fileList a.action {
+	display: inline;
+	margin: -.5em 0;
+	padding: 18px 8px !important;
 	-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";
 	filter: alpha(opacity=0);
 	opacity: 0;
@@ -185,9 +311,8 @@ a.action>img { max-height:16px; max-width:16px; vertical-align:text-bottom; }
 	padding-bottom: 8px;
 	border-bottom: none;
 }
-
 .summary .info {
-	margin-left: 3em;
+	margin-left: 55px;
 }
 
 #scanning-message{ top:40%; left:40%; position:absolute; display:none; }
diff --git a/apps/files/index.php b/apps/files/index.php
index e4d8e353858e185e3b5b654f8cd4814761080b12..f1e120c872cf55f29668414962b3184a5b8536e6 100644
--- a/apps/files/index.php
+++ b/apps/files/index.php
@@ -74,6 +74,7 @@ foreach ($content as $i) {
 		}
 	}
 	$i['directory'] = $dir;
+	$i['isPreviewAvailable'] = \OCP\Preview::isMimeSupported($i['mimetype']);
 	$files[] = $i;
 }
 
@@ -95,6 +96,7 @@ $list->assign('files', $files);
 $list->assign('baseURL', OCP\Util::linkTo('files', 'index.php') . '?dir=');
 $list->assign('downloadURL', OCP\Util::linkToRoute('download', array('file' => '/')));
 $list->assign('disableSharing', false);
+$list->assign('isPublic', false);
 $breadcrumbNav = new OCP\Template('files', 'part.breadcrumb', '');
 $breadcrumbNav->assign('breadcrumb', $breadcrumb);
 $breadcrumbNav->assign('baseURL', OCP\Util::linkTo('files', 'index.php') . '?dir=');
diff --git a/apps/files/js/file-upload.js b/apps/files/js/file-upload.js
index 1e6ab74fb6d92e59a8f5afb2c8d18f9b376525b8..3d620c5640b3dcf76272f2e6ede3e9c5cb68455b 100644
--- a/apps/files/js/file-upload.js
+++ b/apps/files/js/file-upload.js
@@ -227,7 +227,7 @@ $(document).ready(function() {
 		$(this).data('text',text);
 		$(this).children('p').remove();
 		var form=$('<form></form>');
-		var input=$('<input>');
+		var input=$('<input type="text">');
 		form.append(input);
 		$(this).append(form);
 		input.focus();
@@ -268,8 +268,9 @@ $(document).ready(function() {
 								tr.attr('data-mime',result.data.mime);
 								tr.attr('data-id', result.data.id);
 								tr.find('.filesize').text(humanFileSize(result.data.size));
-								getMimeIcon(result.data.mime,function(path){
-									tr.find('td.filename').attr('style','background-image:url('+path+')');
+								var path = getPathForPreview(name);
+								lazyLoadPreview(path, result.data.mime, function(previewpath){
+									tr.find('td.filename').attr('style','background-image:url('+previewpath+')');
 								});
 							} else {
 								OC.dialogs.alert(result.data.message, t('core', 'Error'));
@@ -330,8 +331,9 @@ $(document).ready(function() {
 						var tr=$('tr').filterAttr('data-file',localName);
 						tr.data('mime',mime).data('id',id);
 						tr.attr('data-id', id);
-						getMimeIcon(mime,function(path){
-							tr.find('td.filename').attr('style','background-image:url('+path+')');
+						var path = $('#dir').val()+'/'+localName;
+						lazyLoadPreview(path, mime, function(previewpath){
+							tr.find('td.filename').attr('style','background-image:url('+previewpath+')');
 						});
 					});
 					eventSource.listen('error',function(error){
diff --git a/apps/files/js/filelist.js b/apps/files/js/filelist.js
index e11cc70802bb38ae079931d516dbe7acb5159394..05e31094502eae0b84efd7329f2234ad322d4ef7 100644
--- a/apps/files/js/filelist.js
+++ b/apps/files/js/filelist.js
@@ -15,9 +15,10 @@ var FileList={
 		// filename td
 		td = $('<td></td>').attr({
 			"class": "filename",
-			"style": 'background-image:url('+iconurl+'); background-size: 16px;'
+			"style": 'background-image:url('+iconurl+'); background-size: 32px;'
 		});
-		td.append('<input type="checkbox" />');
+		var rand = Math.random().toString(16).slice(2);
+		td.append('<input id="select-'+rand+'" type="checkbox" /><label for="select-'+rand+'"></label>');
 		var link_elem = $('<a></a>').attr({
 			"class": "name",
 			"href": linktarget
@@ -187,8 +188,9 @@ var FileList={
 		if (id != null) {
 			tr.attr('data-id', id);
 		}
-		getMimeIcon(mime,function(path){
-			tr.find('td.filename').attr('style','background-image:url('+path+')');
+		var path = getPathForPreview(name);
+		lazyLoadPreview(path, mime, function(previewpath){
+			tr.find('td.filename').attr('style','background-image:url('+previewpath+')');
 		});
 		tr.find('td.filename').draggable(dragOptions);
 	},
@@ -200,7 +202,7 @@ var FileList={
 		tr=$('tr').filterAttr('data-file',name);
 		tr.data('renaming',true);
 		td=tr.children('td.filename');
-		input=$('<input class="filename"/>').val(name);
+		input=$('<input type="text" class="filename"/>').val(name);
 		form=$('<form></form>');
 		form.append(input);
 		td.children('a.name').hide();
diff --git a/apps/files/js/files.js b/apps/files/js/files.js
index 87311237e36cf6c9300c0c4415457f95c8b2b02c..d729077ea7229c08d16785b368d3ab492c4636e7 100644
--- a/apps/files/js/files.js
+++ b/apps/files/js/files.js
@@ -454,8 +454,9 @@ var createDragShadow = function(event){
 		if (elem.type === 'dir') {
 			newtr.find('td.filename').attr('style','background-image:url('+OC.imagePath('core', 'filetypes/folder.png')+')');
 		} else {
-			getMimeIcon(elem.mime,function(path){
-				newtr.find('td.filename').attr('style','background-image:url('+path+')');
+			var path = getPathForPreview(elem.name);
+			lazyLoadPreview(path, elem.mime, function(previewpath){
+				newtr.find('td.filename').attr('style','background-image:url('+previewpath+')');
 			});
 		}
 	});
@@ -631,6 +632,23 @@ function getMimeIcon(mime, ready){
 }
 getMimeIcon.cache={};
 
+function getPathForPreview(name) {
+	var path = $('#dir').val() + '/' + name;
+	return path;
+}
+
+function lazyLoadPreview(path, mime, ready) {
+	getMimeIcon(mime,ready);
+	var x = $('#filestable').data('preview-x');
+	var y = $('#filestable').data('preview-y');
+	var previewURL = OC.Router.generate('core_ajax_preview', {file: encodeURIComponent(path), x:x, y:y});
+	$.get(previewURL, function() {
+		previewURL = previewURL.replace('(','%28');
+		previewURL = previewURL.replace(')','%29');
+		ready(previewURL + '&reload=true');
+	});
+}
+
 function getUniqueName(name){
 	if($('tr').filterAttr('data-file',name).length>0){
 		var parts=name.split('.');
diff --git a/apps/files/templates/index.php b/apps/files/templates/index.php
index 360874103f830a5805d89f28d8c539e93dce112e..2f7e0af4f28c43a6f47143ed8a30074a318bdeda 100644
--- a/apps/files/templates/index.php
+++ b/apps/files/templates/index.php
@@ -10,7 +10,7 @@
 						data-type='file'><p><?php p($l->t('Text file'));?></p></li>
 					<li style="background-image:url('<?php p(OCP\mimetype_icon('dir')) ?>')"
 						data-type='folder'><p><?php p($l->t('Folder'));?></p></li>
-					<li style="background-image:url('<?php p(OCP\image_path('core', 'actions/public.png')) ?>')"
+					<li style="background-image:url('<?php p(OCP\image_path('core', 'filetypes/web.svg')) ?>')"
 						data-type='web'><p><?php p($l->t('From link'));?></p></li>
 				</ul>
 			</div>
@@ -59,21 +59,24 @@
 	<div id="emptyfolder"><?php p($l->t('Nothing in here. Upload something!'))?></div>
 <?php endif; ?>
 
-<table id="filestable" data-allow-public-upload="<?php p($_['publicUploadEnabled'])?>">
+<table id="filestable" data-allow-public-upload="<?php p($_['publicUploadEnabled'])?>" data-preview-x="36" data-preview-y="36">
 	<thead>
 		<tr>
 			<th id='headerName'>
-				<input type="checkbox" id="select_all" />
-				<span class='name'><?php p($l->t( 'Name' )); ?></span>
-				<span class='selectedActions'>
-					<?php if($_['allowZipDownload']) : ?>
-						<a href="" class="download">
-							<img class="svg" alt="Download"
-								 src="<?php print_unescaped(OCP\image_path("core", "actions/download.svg")); ?>" />
-							<?php p($l->t('Download'))?>
-						</a>
-					<?php endif; ?>
-				</span>
+				<div id="headerName-container">
+					<input type="checkbox" id="select_all" />
+					<label for="select_all"></label>
+					<span class="name"><?php p($l->t( 'Name' )); ?></span>
+					<span class="selectedActions">
+						<?php if($_['allowZipDownload']) : ?>
+							<a href="" class="download">
+								<img class="svg" alt="Download"
+									 src="<?php print_unescaped(OCP\image_path("core", "actions/download.svg")); ?>" />
+								<?php p($l->t('Download'))?>
+							</a>
+						<?php endif; ?>
+					</span>
+				</div>
 			</th>
 			<th id="headerSize"><?php p($l->t('Size')); ?></th>
 			<th id="headerDate">
diff --git a/apps/files/templates/part.list.php b/apps/files/templates/part.list.php
index 3e6f619868de068416d79819c7853beba6fb3174..4076c1bb3313ed892905ba1088453b0ea0f21425 100644
--- a/apps/files/templates/part.list.php
+++ b/apps/files/templates/part.list.php
@@ -1,5 +1,7 @@
 <input type="hidden" id="disableSharing" data-status="<?php p($_['disableSharing']); ?>">
 <?php foreach($_['files'] as $file):
+	//strlen('files/') => 6
+	$relativePath = substr($file['path'], 6);
 	// the bigger the file, the darker the shade of grey; megabytes*2
 	$simple_size_color = intval(160-$file['size']/(1024*1024)*2);
 	if($simple_size_color<0) $simple_size_color = 0;
@@ -13,16 +15,38 @@
 		data-file="<?php p($name);?>"
 		data-type="<?php ($file['type'] == 'dir')?p('dir'):p('file')?>"
 		data-mime="<?php p($file['mimetype'])?>"
-		data-size='<?php p($file['size']);?>'
-		data-permissions='<?php p($file['permissions']); ?>'>
+		data-size="<?php p($file['size']);?>"
+		data-permissions="<?php p($file['permissions']); ?>">
+		<?php if($file['isPreviewAvailable']): ?>
+		<td class="filename svg preview-icon"
+		<?php else: ?>
 		<td class="filename svg"
+		<?php endif; ?>
 		<?php if($file['type'] == 'dir'): ?>
 			style="background-image:url(<?php print_unescaped(OCP\mimetype_icon('dir')); ?>)"
 		<?php else: ?>
-			style="background-image:url(<?php print_unescaped(OCP\mimetype_icon($file['mimetype'])); ?>)"
+			<?php if($_['isPublic']): ?>
+				<?php
+				$relativePath = substr($relativePath, strlen($_['sharingroot']));
+				?>
+				<?php if($file['isPreviewAvailable']): ?>
+				style="background-image:url(<?php print_unescaped(OCP\publicPreview_icon($relativePath, $_['sharingtoken'])); ?>)"
+				<?php else: ?>
+				style="background-image:url(<?php print_unescaped(OCP\mimetype_icon($file['mimetype'])); ?>)"
+				<?php endif; ?>
+			<?php else: ?>
+				<?php if($file['isPreviewAvailable']): ?>
+				style="background-image:url(<?php print_unescaped(OCP\preview_icon($relativePath)); ?>)"
+				<?php else: ?>
+				style="background-image:url(<?php print_unescaped(OCP\mimetype_icon($file['mimetype'])); ?>)"
+				<?php endif; ?>
+			<?php endif; ?>
 		<?php endif; ?>
 			>
-		<?php if(!isset($_['readonly']) || !$_['readonly']): ?><input type="checkbox" /><?php endif; ?>
+		<?php if(!isset($_['readonly']) || !$_['readonly']): ?>
+			<input id="select-<?php p($file['fileid']); ?>" type="checkbox" />
+			<label for="select-<?php p($file['fileid']); ?>"></label>
+		<?php endif; ?>
 		<?php if($file['type'] == 'dir'): ?>
 			<a class="name" href="<?php p(rtrim($_['baseURL'],'/').'/'.trim($directory,'/').'/'.$name); ?>" title="">
 		<?php else: ?>
diff --git a/apps/files_sharing/ajax/publicpreview.php b/apps/files_sharing/ajax/publicpreview.php
new file mode 100644
index 0000000000000000000000000000000000000000..41a1c178a48f64243343c41842cdcadfa64c82e7
--- /dev/null
+++ b/apps/files_sharing/ajax/publicpreview.php
@@ -0,0 +1,85 @@
+<?php
+/**
+ * Copyright (c) 2013 Georg Ehrke georg@ownCloud.com
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+if(!\OC_App::isEnabled('files_sharing')){
+	exit;
+}
+
+$file = array_key_exists('file', $_GET) ? (string) urldecode($_GET['file']) : '';
+$maxX = array_key_exists('x', $_GET) ? (int) $_GET['x'] : '36';
+$maxY = array_key_exists('y', $_GET) ? (int) $_GET['y'] : '36';
+$scalingUp = array_key_exists('scalingup', $_GET) ? (bool) $_GET['scalingup'] : true;
+$token = array_key_exists('t', $_GET) ? (string) $_GET['t'] : '';
+
+if($token === ''){
+	\OC_Response::setStatus(400); //400 Bad Request
+	\OC_Log::write('core-preview', 'No token parameter was passed', \OC_Log::DEBUG);
+	exit;
+}
+
+$linkedItem = \OCP\Share::getShareByToken($token);
+if($linkedItem === false || ($linkedItem['item_type'] !== 'file' && $linkedItem['item_type'] !== 'folder')) {
+	\OC_Response::setStatus(404);
+	\OC_Log::write('core-preview', 'Passed token parameter is not valid', \OC_Log::DEBUG);
+	exit;
+}
+
+if(!isset($linkedItem['uid_owner']) || !isset($linkedItem['file_source'])) {
+	\OC_Response::setStatus(500);
+	\OC_Log::write('core-preview', 'Passed token seems to be valid, but it does not contain all necessary information . ("' . $token . '")', \OC_Log::WARN);
+	exit;
+}
+
+$userId = $linkedItem['uid_owner'];
+\OC_Util::setupFS($userId);
+
+$pathId = $linkedItem['file_source'];
+$path = \OC\Files\Filesystem::getPath($pathId);
+$pathInfo = \OC\Files\Filesystem::getFileInfo($path);
+$sharedFile = null;
+
+if($linkedItem['item_type'] === 'folder') {
+	$isvalid = \OC\Files\Filesystem::isValidPath($file);
+	if(!$isvalid) {
+		\OC_Response::setStatus(400); //400 Bad Request
+		\OC_Log::write('core-preview', 'Passed filename is not valid, might be malicious (file:"' . $file . '";ip:"' . $_SERVER['REMOTE_ADDR'] . '")', \OC_Log::WARN);
+		exit;
+	}
+	$sharedFile = \OC\Files\Filesystem::normalizePath($file);
+}
+
+if($linkedItem['item_type'] === 'file') {
+	$parent = $pathInfo['parent'];
+	$path = \OC\Files\Filesystem::getPath($parent);
+	$sharedFile = $pathInfo['name'];
+}
+
+$path = \OC\Files\Filesystem::normalizePath($path, false);
+if(substr($path, 0, 1) === '/') {
+	$path = substr($path, 1);
+}
+
+if($maxX === 0 || $maxY === 0) {
+	\OC_Response::setStatus(400); //400 Bad Request
+	\OC_Log::write('core-preview', 'x and/or y set to 0', \OC_Log::DEBUG);
+	exit;
+}
+
+$root = 'files/' . $path;
+
+try{
+	$preview = new \OC\Preview($userId, $root);
+	$preview->setFile($sharedFile);
+	$preview->setMaxX($maxX);
+	$preview->setMaxY($maxY);
+	$preview->setScalingUp($scalingUp);
+
+	$preview->show();
+} catch (\Exception $e) {
+	\OC_Response::setStatus(500);
+	\OC_Log::write('core', $e->getmessage(), \OC_Log::DEBUG);
+}
\ No newline at end of file
diff --git a/apps/files_sharing/appinfo/routes.php b/apps/files_sharing/appinfo/routes.php
new file mode 100644
index 0000000000000000000000000000000000000000..02815b5eb42919936c19278333517faf562c1cb1
--- /dev/null
+++ b/apps/files_sharing/appinfo/routes.php
@@ -0,0 +1,5 @@
+<?php
+$this->create('core_ajax_public_preview', '/publicpreview.png')->action(
+function() {
+	require_once __DIR__ . '/../ajax/publicpreview.php';
+});
\ No newline at end of file
diff --git a/apps/files_sharing/js/public.js b/apps/files_sharing/js/public.js
index 7ffd5e068730ce53eeb76236a3ff38e647dcbfae..357c6fdf5404548de49e44a8b1ed3ca45deef361 100644
--- a/apps/files_sharing/js/public.js
+++ b/apps/files_sharing/js/public.js
@@ -16,7 +16,7 @@ $(document).ready(function() {
 	if (typeof FileActions !== 'undefined') {
 		var mimetype = $('#mimetype').val();
 		// Show file preview if previewer is available, images are already handled by the template
-		if (mimetype.substr(0, mimetype.indexOf('/')) != 'image') {
+		if (mimetype.substr(0, mimetype.indexOf('/')) != 'image' && $('.publicpreview').length === 0) {
 			// Trigger default action if not download TODO
 			var action = FileActions.getDefault(mimetype, 'file', OC.PERMISSION_READ);
 			if (typeof action === 'undefined') {
diff --git a/apps/files_sharing/public.php b/apps/files_sharing/public.php
index e9fdf6e4c9514aae2a7f3c27a856b75e86ff4e61..ec6b4e815f80ba5fc9c42728bfa0cf81d5eaf02e 100644
--- a/apps/files_sharing/public.php
+++ b/apps/files_sharing/public.php
@@ -172,6 +172,7 @@ if (isset($path)) {
 					} else {
 						$i['extension'] = '';
 					}
+					$i['isPreviewAvailable'] = \OCP\Preview::isMimeSupported($i['mimetype']);
 				}
 				$i['directory'] = $getPath;
 				$i['permissions'] = OCP\PERMISSION_READ;
@@ -194,6 +195,9 @@ if (isset($path)) {
 			$list->assign('baseURL', OCP\Util::linkToPublic('files') . $urlLinkIdentifiers . '&path=');
 			$list->assign('downloadURL',
 				OCP\Util::linkToPublic('files') . $urlLinkIdentifiers . '&download&path=');
+			$list->assign('isPublic', true);
+			$list->assign('sharingtoken', $token);
+			$list->assign('sharingroot', $basePath);
 			$breadcrumbNav = new OCP\Template('files', 'part.breadcrumb', '');
 			$breadcrumbNav->assign('breadcrumb', $breadcrumb);
 			$breadcrumbNav->assign('baseURL', OCP\Util::linkToPublic('files') . $urlLinkIdentifiers . '&path=');
diff --git a/apps/files_sharing/templates/public.php b/apps/files_sharing/templates/public.php
index 746a715f3cc3d95d6e523c348399e49ae9ab3684..c164b3ea2b791f214ffd4ce5326dcd08b18a54f1 100644
--- a/apps/files_sharing/templates/public.php
+++ b/apps/files_sharing/templates/public.php
@@ -79,6 +79,10 @@
 						<source src="<?php p($_['downloadURL']); ?>" type="<?php p($_['mimetype']); ?>" />
 					</video>
 				</div>
+			<?php elseif (\OC\Preview::isMimeSupported($_['mimetype'])): ?>
+				<div id="imgframe">
+					<img src="<?php p(OCP\Util::linkToRoute( 'core_ajax_public_preview', array('x' => 500, 'y' => 500, 'file' => urlencode($_['directory_path']), 't' => $_['dirToken']))); ?>" class="publicpreview"/>
+				</div>
 			<?php else: ?>
 				<ul id="noPreview">
 					<li class="error">
diff --git a/apps/files_trashbin/ajax/preview.php b/apps/files_trashbin/ajax/preview.php
new file mode 100644
index 0000000000000000000000000000000000000000..a0846b051c7217ff270ae88ad9a9258330a1be88
--- /dev/null
+++ b/apps/files_trashbin/ajax/preview.php
@@ -0,0 +1,42 @@
+<?php
+/**
+ * Copyright (c) 2013 Georg Ehrke georg@ownCloud.com
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+\OC_Util::checkLoggedIn();
+
+if(!\OC_App::isEnabled('files_trashbin')){
+	exit;
+}
+
+$file = array_key_exists('file', $_GET) ? (string) urldecode($_GET['file']) : '';
+$maxX = array_key_exists('x', $_GET) ? (int) $_GET['x'] : '44';
+$maxY = array_key_exists('y', $_GET) ? (int) $_GET['y'] : '44';
+$scalingUp = array_key_exists('scalingup', $_GET) ? (bool) $_GET['scalingup'] : true;
+
+if($file === '') {
+	\OC_Response::setStatus(400); //400 Bad Request
+	\OC_Log::write('core-preview', 'No file parameter was passed', \OC_Log::DEBUG);
+	exit;
+}
+
+if($maxX === 0 || $maxY === 0) {
+	\OC_Response::setStatus(400); //400 Bad Request
+	\OC_Log::write('core-preview', 'x and/or y set to 0', \OC_Log::DEBUG);
+	exit;
+}
+
+try{
+	$preview = new \OC\Preview(\OC_User::getUser(), 'files_trashbin/files');
+	$preview->setFile($file);
+	$preview->setMaxX($maxX);
+	$preview->setMaxY($maxY);
+	$preview->setScalingUp($scalingUp);
+
+	$preview->showPreview();
+}catch(\Exception $e) {
+	\OC_Response::setStatus(500);
+	\OC_Log::write('core', $e->getmessage(), \OC_Log::DEBUG);
+}
\ No newline at end of file
diff --git a/apps/files_trashbin/appinfo/routes.php b/apps/files_trashbin/appinfo/routes.php
new file mode 100644
index 0000000000000000000000000000000000000000..b1c3f02741edde288e37139dad7a59d9dba63969
--- /dev/null
+++ b/apps/files_trashbin/appinfo/routes.php
@@ -0,0 +1,5 @@
+<?php
+$this->create('core_ajax_trashbin_preview', '/preview.png')->action(
+function() {
+	require_once __DIR__ . '/../ajax/preview.php';
+});
\ No newline at end of file
diff --git a/apps/files_trashbin/index.php b/apps/files_trashbin/index.php
index 27f8407db0641c13d5e803db502b62071f54b6df..0baeab1de9734ad9e821ecfb6333e6573f534793 100644
--- a/apps/files_trashbin/index.php
+++ b/apps/files_trashbin/index.php
@@ -64,6 +64,7 @@ foreach ($result as $r) {
 		$i['directory'] = '';
 	}
 	$i['permissions'] = OCP\PERMISSION_READ;
+	$i['isPreviewAvailable'] = \OCP\Preview::isMimeSupported($r['mime']);
 	$files[] = $i;
 }
 
diff --git a/apps/files_trashbin/lib/trash.php b/apps/files_trashbin/lib/trash.php
index 880832f9afa1f8606d7208925a76c2cf5a7579d3..c79afdc0c2ec91c11a3bd1f968335d0607d77103 100644
--- a/apps/files_trashbin/lib/trash.php
+++ b/apps/files_trashbin/lib/trash.php
@@ -904,4 +904,7 @@ class Trashbin {
 		return true;
 	}
 
+	public static function preview_icon($path) {
+		return \OC_Helper::linkToRoute( 'core_ajax_trashbin_preview', array('x' => 36, 'y' => 36, 'file' => urlencode($path) ));
+	}
 }
diff --git a/apps/files_trashbin/templates/part.list.php b/apps/files_trashbin/templates/part.list.php
index 254b08dd36a31e39d0a289ef35e7ded6547fa255..f7cc6b01bbb5eb9eb381e8ce81d5b2128651e64c 100644
--- a/apps/files_trashbin/templates/part.list.php
+++ b/apps/files_trashbin/templates/part.list.php
@@ -21,11 +21,19 @@
 		data-timestamp='<?php p($file['timestamp']);?>'
 		data-dirlisting=0
 		<?php endif; ?>>
+		<?php if($file['isPreviewAvailable']): ?>
+		<td class="filename svg preview-icon"
+		<?php else: ?>
 		<td class="filename svg"
+		<?php endif; ?>
 		<?php if($file['type'] === 'dir'): ?>
 			style="background-image:url(<?php print_unescaped(OCP\mimetype_icon('dir')); ?>)"
 		<?php else: ?>
-			style="background-image:url(<?php print_unescaped(OCP\mimetype_icon($file['mimetype'])); ?>)"
+				<?php if($file['isPreviewAvailable']): ?>
+				style="background-image:url(<?php print_unescaped(OCA\Files_Trashbin\Trashbin::preview_icon(!$_['dirlisting'] ? ($file['name'].'.d'.$file['timestamp']) : ($file['directory'].'/'.$file['name']))); ?>)"
+				<?php else: ?>
+				style="background-image:url(<?php print_unescaped(OCP\mimetype_icon($file['mimetype'])); ?>)"
+				<?php endif; ?>
 		<?php endif; ?>
 			>
 		<?php if(!isset($_['readonly']) || !$_['readonly']): ?><input type="checkbox" /><?php endif; ?>
diff --git a/config/config.sample.php b/config/config.sample.php
index f5cb33732f840d038f6be31206225a0d59aba4fd..5f748438bc7ab605623ad85c70a171255a48b437 100644
--- a/config/config.sample.php
+++ b/config/config.sample.php
@@ -201,4 +201,17 @@ $CONFIG = array(
 'customclient_desktop' => '', //http://owncloud.org/sync-clients/
 'customclient_android' => '', //https://play.google.com/store/apps/details?id=com.owncloud.android
 'customclient_ios' => '', //https://itunes.apple.com/us/app/owncloud/id543672169?mt=8
+
+// PREVIEW
+'enable_previews' => true,
+/* the max width of a generated preview, if value is null, there is no limit */
+'preview_max_x' => null,
+/* the max height of a generated preview, if value is null, there is no limit */
+'preview_max_y' => null,
+/* the max factor to scale a preview, default is set to 10 */
+'preview_max_scale_factor' => 10,
+/* custom path for libreoffice / openoffice binary */
+'preview_libreoffice_path' => '/usr/bin/libreoffice',
+/* cl parameters for libreoffice / openoffice */
+'preview_office_cl_parameters' => '',
 );
diff --git a/core/ajax/preview.php b/core/ajax/preview.php
new file mode 100644
index 0000000000000000000000000000000000000000..af0f0493f4ce67e8e7706ab2709f1a7afe930312
--- /dev/null
+++ b/core/ajax/preview.php
@@ -0,0 +1,40 @@
+<?php
+/**
+ * Copyright (c) 2013 Georg Ehrke georg@ownCloud.com
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+\OC_Util::checkLoggedIn();
+
+$file = array_key_exists('file', $_GET) ? (string) urldecode($_GET['file']) : '';
+$maxX = array_key_exists('x', $_GET) ? (int) $_GET['x'] : '36';
+$maxY = array_key_exists('y', $_GET) ? (int) $_GET['y'] : '36';
+$scalingUp = array_key_exists('scalingup', $_GET) ? (bool) $_GET['scalingup'] : true;
+
+if($file === '') {
+	//400 Bad Request
+	\OC_Response::setStatus(400);
+	\OC_Log::write('core-preview', 'No file parameter was passed', \OC_Log::DEBUG);
+	exit;
+}
+
+if($maxX === 0 || $maxY === 0) {
+	//400 Bad Request
+	\OC_Response::setStatus(400);
+	\OC_Log::write('core-preview', 'x and/or y set to 0', \OC_Log::DEBUG);
+	exit;
+}
+
+try{
+	$preview = new \OC\Preview(\OC_User::getUser(), 'files');
+	$preview->setFile($file);
+	$preview->setMaxX($maxX);
+	$preview->setMaxY($maxY);
+	$preview->setScalingUp($scalingUp);
+
+	$preview->show();
+}catch(\Exception $e) {
+	\OC_Response::setStatus(500);
+	\OC_Log::write('core', $e->getmessage(), \OC_Log::DEBUG);
+}
\ No newline at end of file
diff --git a/core/css/styles.css b/core/css/styles.css
index 34e8e8ae416e6db05ee6a4c6f7c82f986af23872..85f65a2f42709acf74aa9d3b9ea4cfa55a61942c 100644
--- a/core/css/styles.css
+++ b/core/css/styles.css
@@ -145,7 +145,8 @@ a.disabled, a.disabled:hover, a.disabled:focus {
 
 .searchbox input[type="search"] { font-size:1.2em; padding:.2em .5em .2em 1.5em; background:#fff url('../img/actions/search.svg') no-repeat .5em center; border:0; -moz-border-radius:1em; -webkit-border-radius:1em; border-radius:1em; -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=70)"; filter:alpha(opacity=70);opacity:.7; -webkit-transition:opacity 300ms; -moz-transition:opacity 300ms; -o-transition:opacity 300ms; transition:opacity 300ms; margin-top:10px; float:right; }
 input[type="submit"].enabled { background:#66f866; border:1px solid #5e5; -moz-box-shadow:0 1px 1px #f8f8f8, 0 1px 1px #cfc inset; -webkit-box-shadow:0 1px 1px #f8f8f8, 0 1px 1px #cfc inset; box-shadow:0 1px 1px #f8f8f8, 0 1px 1px #cfc inset; }
-#select_all{ margin-top:.4em }
+
+
 
 /* CONTENT ------------------------------------------------------------------ */
 #controls {
diff --git a/core/img/filetypes/application-epub+zip.png b/core/img/filetypes/application-epub+zip.png
new file mode 100644
index 0000000000000000000000000000000000000000..b3e3b28b4d51b91305d967d445879de4cf25fcbe
Binary files /dev/null and b/core/img/filetypes/application-epub+zip.png differ
diff --git a/core/img/filetypes/application-epub+zip.svg b/core/img/filetypes/application-epub+zip.svg
new file mode 100644
index 0000000000000000000000000000000000000000..041f9f15e6847977c52600f94b917124ab2ea6ad
--- /dev/null
+++ b/core/img/filetypes/application-epub+zip.svg
@@ -0,0 +1,761 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="32px"
+   height="32px"
+   id="svg3194"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="application-epub+zip.svg"
+   inkscape:export-filename="application-epub+zip.png"
+   inkscape:export-xdpi="90"
+   inkscape:export-ydpi="90">
+  <defs
+     id="defs3196">
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3195"
+       id="linearGradient3066"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.502671,0,0,0.64629877,3.711822,0.79617735)"
+       x1="23.99999"
+       y1="14.915504"
+       x2="23.99999"
+       y2="32.595779" />
+    <linearGradient
+       id="linearGradient3195">
+      <stop
+         id="stop3197"
+         style="stop-color:#ffffff;stop-opacity:1"
+         offset="0" />
+      <stop
+         id="stop3199"
+         style="stop-color:#ffffff;stop-opacity:0.23529412"
+         offset="0.12291458" />
+      <stop
+         id="stop3201"
+         style="stop-color:#ffffff;stop-opacity:0.15686275"
+         offset="0.93706012" />
+      <stop
+         id="stop3203"
+         style="stop-color:#ffffff;stop-opacity:0.39215687"
+         offset="1" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2867-449-88-871-390-598-476-591-434-148-57-177-641-289-620-227-114-444-680-744-8-7"
+       id="radialGradient3069"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,0.96917483,-0.82965977,0,24.014205,-1.7852207)"
+       cx="10.90426"
+       cy="8.4497671"
+       fx="10.90426"
+       fy="8.4497671"
+       r="19.99999" />
+    <linearGradient
+       id="linearGradient2867-449-88-871-390-598-476-591-434-148-57-177-641-289-620-227-114-444-680-744-8-7">
+      <stop
+         id="stop5430-8-6"
+         style="stop-color:#5f5f5f;stop-opacity:1"
+         offset="0" />
+      <stop
+         id="stop5432-3-5"
+         style="stop-color:#4f4f4f;stop-opacity:1"
+         offset="0.26238" />
+      <stop
+         id="stop5434-1-6"
+         style="stop-color:#3b3b3b;stop-opacity:1"
+         offset="0.704952" />
+      <stop
+         id="stop5436-8-9"
+         style="stop-color:#2b2b2b;stop-opacity:1"
+         offset="1" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3707-319-631-407-324-616-674-812-821-107-178-392-400-6-7"
+       id="linearGradient3071"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.65627449,0,0,0.6892852,1.2531134,-0.21112011)"
+       x1="24"
+       y1="44"
+       x2="24"
+       y2="3.8990016" />
+    <linearGradient
+       id="linearGradient3707-319-631-407-324-616-674-812-821-107-178-392-400-6-7">
+      <stop
+         id="stop5440-4-4"
+         style="stop-color:#272727;stop-opacity:1"
+         offset="0" />
+      <stop
+         id="stop5442-3-5"
+         style="stop-color:#454545;stop-opacity:1"
+         offset="1" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3731"
+       id="linearGradient3075"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.56756757,0,0,0.67567567,2.3783793,-0.21620881)"
+       x1="23.99999"
+       y1="4.999989"
+       x2="23.99999"
+       y2="43" />
+    <linearGradient
+       id="linearGradient3731">
+      <stop
+         id="stop3733"
+         style="stop-color:#ffffff;stop-opacity:1"
+         offset="0" />
+      <stop
+         id="stop3735"
+         style="stop-color:#ffffff;stop-opacity:0.23529412"
+         offset="0.02706478" />
+      <stop
+         id="stop3737"
+         style="stop-color:#ffffff;stop-opacity:0.15686275"
+         offset="0.97377032" />
+      <stop
+         id="stop3739"
+         style="stop-color:#ffffff;stop-opacity:0.39215687"
+         offset="1" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2867-449-88-871-390-598-476-591-434-148-57-177-641-289-620-227-114-444-680-744-8"
+       id="radialGradient3078"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.165708e-8,1.6179162,-1.483354,-2.9808191e-8,28.734063,-9.2240923)"
+       cx="7.4956832"
+       cy="8.4497671"
+       fx="7.4956832"
+       fy="8.4497671"
+       r="19.99999" />
+    <linearGradient
+       id="linearGradient2867-449-88-871-390-598-476-591-434-148-57-177-641-289-620-227-114-444-680-744-8">
+      <stop
+         id="stop5430-8"
+         style="stop-color:#5f5f5f;stop-opacity:1"
+         offset="0" />
+      <stop
+         id="stop5432-3"
+         style="stop-color:#4f4f4f;stop-opacity:1"
+         offset="0.26238" />
+      <stop
+         id="stop5434-1"
+         style="stop-color:#3b3b3b;stop-opacity:1"
+         offset="0.704952" />
+      <stop
+         id="stop5436-8"
+         style="stop-color:#2b2b2b;stop-opacity:1"
+         offset="1" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3707-319-631-407-324-616-674-812-821-107-178-392-400-6"
+       id="linearGradient3080"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.60000001,0,0,0.69230771,1.8000008,-0.61538474)"
+       x1="24"
+       y1="44"
+       x2="24"
+       y2="3.8990016" />
+    <linearGradient
+       id="linearGradient3707-319-631-407-324-616-674-812-821-107-178-392-400-6">
+      <stop
+         id="stop5440-4"
+         style="stop-color:#272727;stop-opacity:1"
+         offset="0" />
+      <stop
+         id="stop5442-3"
+         style="stop-color:#454545;stop-opacity:1"
+         offset="1" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient8967-1"
+       id="radialGradient3083"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,1.8069473,-2.0594306,0,30.190262,-41.983847)"
+       cx="24.501682"
+       cy="6.6475959"
+       fx="24.501682"
+       fy="6.6475959"
+       r="17.49832" />
+    <linearGradient
+       id="linearGradient8967">
+      <stop
+         id="stop8969"
+         style="stop-color:#ddcfbd;stop-opacity:1"
+         offset="0" />
+      <stop
+         id="stop8971"
+         style="stop-color:#856f50;stop-opacity:1"
+         offset="1" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3319-1"
+       id="linearGradient3085"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.45330736,0,0,0.48530928,1.9941631,0.11705426)"
+       x1="32.901409"
+       y1="4.6481781"
+       x2="32.901409"
+       y2="61.481758" />
+    <linearGradient
+       id="linearGradient3319">
+      <stop
+         id="stop3321"
+         style="stop-color:#a79071;stop-opacity:1"
+         offset="0" />
+      <stop
+         id="stop3323"
+         style="stop-color:#6f5d45;stop-opacity:1"
+         offset="1" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2346"
+       id="linearGradient3088"
+       gradientUnits="userSpaceOnUse"
+       x1="10.654308"
+       y1="1"
+       x2="10.654308"
+       y2="3"
+       gradientTransform="matrix(0.60000001,0,0,0.75000464,0.6000147,0.12497942)" />
+    <linearGradient
+       id="linearGradient2346">
+      <stop
+         id="stop2348"
+         style="stop-color:#eeeeee;stop-opacity:1"
+         offset="0" />
+      <stop
+         id="stop2350"
+         style="stop-color:#d9d9da;stop-opacity:1"
+         offset="1" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3707-319-631-407-324-616-674-812-821-107-178-392-400-6-2"
+       id="linearGradient3090"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.60000001,0,0,0.07692307,1.8001714,0.15384638)"
+       x1="24"
+       y1="44"
+       x2="24"
+       y2="3.8990016" />
+    <linearGradient
+       id="linearGradient3707-319-631-407-324-616-674-812-821-107-178-392-400-6-2">
+      <stop
+         id="stop5440-4-8"
+         style="stop-color:#272727;stop-opacity:1"
+         offset="0" />
+      <stop
+         id="stop5442-3-8"
+         style="stop-color:#454545;stop-opacity:1"
+         offset="1" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3101">
+      <stop
+         offset="0"
+         style="stop-color:#9b876c;stop-opacity:1"
+         id="stop3103" />
+      <stop
+         offset="0.95429963"
+         style="stop-color:#9b876c;stop-opacity:1"
+         id="stop3105" />
+      <stop
+         offset="0.95717829"
+         style="stop-color:#c2c2c2;stop-opacity:1"
+         id="stop3107" />
+      <stop
+         offset="1"
+         style="stop-color:#c2c2c2;stop-opacity:1"
+         id="stop3109" />
+    </linearGradient>
+    <linearGradient
+       y2="4.882647"
+       x2="24.640038"
+       y1="3.1234391"
+       x1="24.62738"
+       gradientTransform="matrix(0.69041563,0,0,1.0164576,0.2501926,-2.4916513)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient3190"
+       xlink:href="#linearGradient2346"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="0.065301567"
+       x2="54.887218"
+       y1="0.065301567"
+       x1="5.2122574"
+       gradientTransform="matrix(0.49253714,0,0,0.4937733,0.8902917,0.14413039)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient3192"
+       xlink:href="#linearGradient3911"
+       inkscape:collect="always" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3688-166-749"
+       id="radialGradient2976"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(2.003784,0,0,1.4,27.98813,-17.4)"
+       cx="4.9929786"
+       cy="43.5"
+       fx="4.9929786"
+       fy="43.5"
+       r="2.5" />
+    <linearGradient
+       id="linearGradient3688-166-749">
+      <stop
+         id="stop2883"
+         style="stop-color:#181818;stop-opacity:1"
+         offset="0" />
+      <stop
+         id="stop2885"
+         style="stop-color:#181818;stop-opacity:0"
+         offset="1" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3688-464-309"
+       id="radialGradient2978"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(2.003784,0,0,1.4,-20.01187,-104.4)"
+       cx="4.9929786"
+       cy="43.5"
+       fx="4.9929786"
+       fy="43.5"
+       r="2.5" />
+    <linearGradient
+       id="linearGradient3688-464-309">
+      <stop
+         id="stop2889"
+         style="stop-color:#181818;stop-opacity:1"
+         offset="0" />
+      <stop
+         id="stop2891"
+         style="stop-color:#181818;stop-opacity:0"
+         offset="1" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3702-501-757"
+       id="linearGradient2980"
+       gradientUnits="userSpaceOnUse"
+       x1="25.058096"
+       y1="47.027729"
+       x2="25.058096"
+       y2="39.999443" />
+    <linearGradient
+       id="linearGradient3702-501-757">
+      <stop
+         id="stop2895"
+         style="stop-color:#181818;stop-opacity:0"
+         offset="0" />
+      <stop
+         id="stop2897"
+         style="stop-color:#181818;stop-opacity:1"
+         offset="0.5" />
+      <stop
+         id="stop2899"
+         style="stop-color:#181818;stop-opacity:0"
+         offset="1" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3100"
+       id="linearGradient3072"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.40540539,0,0,0.45945944,-21.967425,1.9253706)"
+       x1="23.99999"
+       y1="4.431067"
+       x2="24.107431"
+       y2="43.758408" />
+    <linearGradient
+       id="linearGradient3100">
+      <stop
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:1"
+         id="stop3102" />
+      <stop
+         offset="0.06169702"
+         style="stop-color:#ffffff;stop-opacity:0.23529412"
+         id="stop3104" />
+      <stop
+         offset="0.93279684"
+         style="stop-color:#ffffff;stop-opacity:0.15686275"
+         id="stop3106" />
+      <stop
+         offset="1"
+         style="stop-color:#ffffff;stop-opacity:0.39215687"
+         id="stop3108" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2867-449-88-871-390-598-476-591-434-148-57-177-641-289-620-227-114-444-680-744-8-3"
+       id="radialGradient3075"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,1.1385335,-0.98890268,-2.0976135e-8,-4.5816524,-4.7978939)"
+       cx="7.4956832"
+       cy="8.4497671"
+       fx="7.4956832"
+       fy="8.4497671"
+       r="19.99999" />
+    <linearGradient
+       id="linearGradient2867-449-88-871-390-598-476-591-434-148-57-177-641-289-620-227-114-444-680-744-8-3">
+      <stop
+         id="stop5430-8-4"
+         style="stop-color:#5f5f5f;stop-opacity:1"
+         offset="0" />
+      <stop
+         id="stop5432-3-0"
+         style="stop-color:#4f4f4f;stop-opacity:1"
+         offset="0.26238" />
+      <stop
+         id="stop5434-1-7"
+         style="stop-color:#3b3b3b;stop-opacity:1"
+         offset="0.704952" />
+      <stop
+         id="stop5436-8-7"
+         style="stop-color:#2b2b2b;stop-opacity:1"
+         offset="1" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3707-319-631-407-324-616-674-812-821-107-178-392-400-6-77"
+       id="linearGradient3077"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.40000001,0,0,0.48717951,-22.537695,1.2600855)"
+       x1="24"
+       y1="44"
+       x2="24"
+       y2="3.8990016" />
+    <linearGradient
+       id="linearGradient3707-319-631-407-324-616-674-812-821-107-178-392-400-6-77">
+      <stop
+         id="stop5440-4-82"
+         style="stop-color:#272727;stop-opacity:1"
+         offset="0" />
+      <stop
+         id="stop5442-3-9"
+         style="stop-color:#454545;stop-opacity:1"
+         offset="1" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient8967-1"
+       id="radialGradient3080"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0,1.2711776,-1.4972812,0,-1.7843744,-27.838648)"
+       cx="24.501682"
+       cy="6.6475959"
+       fx="24.501682"
+       fy="6.6475959"
+       r="17.49832" />
+    <linearGradient
+       id="linearGradient8967-1">
+      <stop
+         id="stop8969-2"
+         style="stop-color:#c4ea71;stop-opacity:1;"
+         offset="0" />
+      <stop
+         id="stop8971-2"
+         style="stop-color:#7c9d35;stop-opacity:1;"
+         offset="1" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3319-1"
+       id="linearGradient3082"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.32957099,0,0,0.34141245,-22.283968,1.7791087)"
+       x1="32.901409"
+       y1="4.6481781"
+       x2="32.901409"
+       y2="61.481758" />
+    <linearGradient
+       id="linearGradient3319-1">
+      <stop
+         id="stop3321-3"
+         style="stop-color:#96bf3e;stop-opacity:1;"
+         offset="0" />
+      <stop
+         id="stop3323-6"
+         style="stop-color:#4d6b0d;stop-opacity:1;"
+         offset="1" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2346-4"
+       id="linearGradient3085-0"
+       gradientUnits="userSpaceOnUse"
+       x1="10.654308"
+       y1="1"
+       x2="10.654308"
+       y2="3"
+       gradientTransform="matrix(0.39999999,0,0,0.50000335,-23.337674,1.202378)" />
+    <linearGradient
+       id="linearGradient2346-4">
+      <stop
+         id="stop2348-6"
+         style="stop-color:#eeeeee;stop-opacity:1"
+         offset="0" />
+      <stop
+         id="stop2350-4"
+         style="stop-color:#d9d9da;stop-opacity:1"
+         offset="1" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3707-319-631-407-324-616-674-812-821-107-178-392-400-6-2-9"
+       id="linearGradient3087"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.39999999,0,0,0.05128207,-22.537569,1.2216233)"
+       x1="24"
+       y1="44"
+       x2="24"
+       y2="3.8990016" />
+    <linearGradient
+       id="linearGradient3707-319-631-407-324-616-674-812-821-107-178-392-400-6-2-9">
+      <stop
+         id="stop5440-4-8-9"
+         style="stop-color:#272727;stop-opacity:1"
+         offset="0" />
+      <stop
+         id="stop5442-3-8-1"
+         style="stop-color:#454545;stop-opacity:1"
+         offset="1" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2346-4"
+       id="linearGradient3090-0"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.52589466,0,0,1.0164584,-24.496147,-1.5392617)"
+       x1="24.640038"
+       y1="3.3805361"
+       x2="24.640038"
+       y2="4.4969802" />
+    <linearGradient
+       id="linearGradient3159">
+      <stop
+         id="stop3161"
+         style="stop-color:#eeeeee;stop-opacity:1"
+         offset="0" />
+      <stop
+         id="stop3163"
+         style="stop-color:#d9d9da;stop-opacity:1"
+         offset="1" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3911"
+       id="linearGradient3092"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.37516915,0,0,0.49377366,-24.008579,1.096522)"
+       x1="10.199131"
+       y1="0.065301567"
+       x2="54.887218"
+       y2="0.065301567" />
+    <linearGradient
+       id="linearGradient3911">
+      <stop
+         id="stop3913"
+         style="stop-color:#96bf3e;stop-opacity:1;"
+         offset="0" />
+      <stop
+         id="stop3915"
+         style="stop-color:#4d6b0d;stop-opacity:1;"
+         offset="1" />
+    </linearGradient>
+    <radialGradient
+       r="2.5"
+       fy="43.5"
+       fx="4.9929786"
+       cy="43.5"
+       cx="4.9929786"
+       gradientTransform="matrix(2.003784,0,0,1.4,27.98813,-17.4)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient3082-993"
+       xlink:href="#linearGradient3688-166-749-49"
+       inkscape:collect="always" />
+    <linearGradient
+       id="linearGradient3688-166-749-49">
+      <stop
+         offset="0"
+         style="stop-color:#181818;stop-opacity:1"
+         id="stop3079" />
+      <stop
+         offset="1"
+         style="stop-color:#181818;stop-opacity:0"
+         id="stop3081" />
+    </linearGradient>
+    <radialGradient
+       r="2.5"
+       fy="43.5"
+       fx="4.9929786"
+       cy="43.5"
+       cx="4.9929786"
+       gradientTransform="matrix(2.003784,0,0,1.4,-20.01187,-104.4)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient3084-992"
+       xlink:href="#linearGradient3688-464-309-276"
+       inkscape:collect="always" />
+    <linearGradient
+       id="linearGradient3688-464-309-276">
+      <stop
+         offset="0"
+         style="stop-color:#181818;stop-opacity:1"
+         id="stop3085" />
+      <stop
+         offset="1"
+         style="stop-color:#181818;stop-opacity:0"
+         id="stop3087" />
+    </linearGradient>
+    <linearGradient
+       y2="39.999443"
+       x2="25.058096"
+       y1="47.027729"
+       x1="25.058096"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient3086-631"
+       xlink:href="#linearGradient3702-501-757-979"
+       inkscape:collect="always" />
+    <linearGradient
+       id="linearGradient3702-501-757-979">
+      <stop
+         offset="0"
+         style="stop-color:#181818;stop-opacity:0"
+         id="stop3091" />
+      <stop
+         offset="0.5"
+         style="stop-color:#181818;stop-opacity:1"
+         id="stop3093" />
+      <stop
+         offset="1"
+         style="stop-color:#181818;stop-opacity:0"
+         id="stop3095" />
+    </linearGradient>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="6.0877475"
+     inkscape:cx="26.638683"
+     inkscape:cy="15.835736"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="1075"
+     inkscape:window-height="715"
+     inkscape:window-x="289"
+     inkscape:window-y="24"
+     inkscape:window-maximized="0" />
+  <metadata
+     id="metadata3199">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <g
+       style="display:inline"
+       id="g2036"
+       transform="matrix(0.64999974,0,0,0.3333336,0.39999974,15.33333)">
+      <g
+         style="opacity:0.4"
+         id="g3712"
+         transform="matrix(1.052632,0,0,1.285713,-1.263158,-13.42854)">
+        <rect
+           style="fill:url(#radialGradient2976);fill-opacity:1;stroke:none"
+           id="rect2801"
+           y="40"
+           x="38"
+           height="7"
+           width="5" />
+        <rect
+           style="fill:url(#radialGradient2978);fill-opacity:1;stroke:none"
+           id="rect3696"
+           transform="scale(-1,-1)"
+           y="-47"
+           x="-10"
+           height="7"
+           width="5" />
+        <rect
+           style="fill:url(#linearGradient2980);fill-opacity:1;stroke:none"
+           id="rect3700"
+           y="40"
+           x="10"
+           height="7.0000005"
+           width="28" />
+      </g>
+    </g>
+    <path
+       inkscape:connector-curvature="0"
+       style="fill:url(#linearGradient3190);fill-opacity:1;stroke:url(#linearGradient3192);stroke-width:1.01739752;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:0;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline"
+       id="path2723"
+       d="M 27.491301,2.3043778 C 27.288172,1.6493136 27.414776,1.1334476 27.302585,0.5086989 l -20.7938863,0 0.1227276,1.9826025" />
+    <path
+       inkscape:connector-curvature="0"
+       style="color:#000000;fill:url(#linearGradient3088);fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient3090);stroke-width:0.99999994;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       id="rect5505-21-3-9"
+       d="m 7.5001709,3.5 -2.4000002,0 C 4.7576618,3.5 4.5001708,3.46825 4.5001708,3.426829 l 0,-2.0973288 c 0,-0.66594375 0.3354193,-0.82950023 0.7745366,-0.82950023 l 2.2254635,0" />
+    <rect
+       ry="0.5"
+       style="fill:url(#radialGradient3083);fill-opacity:1.0;stroke:url(#linearGradient3085);stroke-width:1.01904130000000004;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:0;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;display:inline"
+       id="rect2719"
+       y="2.5095644"
+       x="5.5095205"
+       rx="0.5"
+       height="26.980959"
+       width="21.980959" />
+    <path
+       inkscape:connector-curvature="0"
+       style="color:#000000;fill:url(#radialGradient3078);fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient3080);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       id="rect5505-21-3"
+       d="m 7.5,2.5000001 c 0,0 0,18.7742959 0,26.9999999 l -2.4,0 c -0.3425089,0 -0.6,-0.285772 -0.6,-0.658537 l 0,-26.3414629 z" />
+    <rect
+       style="opacity:0.5;fill:none;stroke:url(#linearGradient3075);stroke-width:0.99999988;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+       id="rect6741-0"
+       y="3.5000002"
+       x="5.5"
+       height="25"
+       width="21" />
+    <path
+       id="path3859"
+       d="m 16.999886,20.304641 -3.77084,-3.713998 3.77084,-3.71347 1.25705,1.237774 -2.514099,2.475696 1.256974,1.237999 3.770839,-3.713469 -3.284841,-3.235063 c -0.268233,-0.264393 -0.703306,-0.264393 -0.971768,0 l -5.312867,5.232353 c -0.268232,0.264166 -0.268232,0.692646 0,0.95704 l 5.312944,5.232203 c 0.268462,0.264392 0.703534,0.264392 0.971766,0 l 5.312942,-5.232203 c 0.268231,-0.264394 0.268231,-0.692874 0,-0.95704 l -0.77128,-0.759367 -5.02766,4.951545 z"
+       inkscape:connector-curvature="0"
+       style="opacity:0.2;fill:#000000;fill-opacity:1" />
+    <path
+       style="fill:#ffffff;fill-opacity:1"
+       inkscape:connector-curvature="0"
+       d="m 16.999886,19.122826 -3.77084,-3.713998 3.77084,-3.713469 1.25705,1.237773 -2.514099,2.475696 1.256974,1.238 3.770839,-3.71347 -3.284841,-3.2350632 c -0.268233,-0.2643933 -0.703306,-0.2643933 -0.971768,0 l -5.312867,5.2323532 c -0.268232,0.264167 -0.268232,0.692647 0,0.95704 l 5.312944,5.232203 c 0.268462,0.264392 0.703534,0.264392 0.971766,0 l 5.312942,-5.232203 c 0.268231,-0.264393 0.268231,-0.692873 0,-0.95704 l -0.77128,-0.759366 -5.02766,4.951544 z"
+       id="path10" />
+  </g>
+</svg>
diff --git a/core/img/filetypes/application-msexcel.png b/core/img/filetypes/application-msexcel.png
deleted file mode 100644
index b977d7e52e2446ea01201c5c7209ac3a05f12c9f..0000000000000000000000000000000000000000
Binary files a/core/img/filetypes/application-msexcel.png and /dev/null differ
diff --git a/core/img/filetypes/application-mspowerpoint.png b/core/img/filetypes/application-mspowerpoint.png
deleted file mode 100644
index c4eff0387d5888c638ba09473ba6d2369f7b56f0..0000000000000000000000000000000000000000
Binary files a/core/img/filetypes/application-mspowerpoint.png and /dev/null differ
diff --git a/core/img/filetypes/application-msword.png b/core/img/filetypes/application-msword.png
deleted file mode 100644
index ae8ecbf47672a874c0958d0d113a56162c2bd364..0000000000000000000000000000000000000000
Binary files a/core/img/filetypes/application-msword.png and /dev/null differ
diff --git a/core/img/filetypes/application-pdf.png b/core/img/filetypes/application-pdf.png
index 8f8095e46fa4965700afe1f9d065d8a37b101676..a9ab6d279b6147ad8d0f6319ecdde08a637c8e70 100644
Binary files a/core/img/filetypes/application-pdf.png and b/core/img/filetypes/application-pdf.png differ
diff --git a/core/img/filetypes/application-pdf.svg b/core/img/filetypes/application-pdf.svg
new file mode 100644
index 0000000000000000000000000000000000000000..47c2caabdad0fb841017072628e05a6252fe8152
--- /dev/null
+++ b/core/img/filetypes/application-pdf.svg
@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="32" width="32" version="1.1" xmlns:cc="http://creativecommons.org/ns#" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:dc="http://purl.org/dc/elements/1.1/">
+ <defs>
+  <linearGradient id="e" y2="43" gradientUnits="userSpaceOnUse" x2="24" gradientTransform="matrix(.62162 0 0 .62162 1.0811 2.0811)" y1="5" x1="24">
+   <stop stop-color="#fff" offset="0"/>
+   <stop stop-color="#fff" stop-opacity=".23529" offset=".063165"/>
+   <stop stop-color="#fff" stop-opacity=".15686" offset=".95056"/>
+   <stop stop-color="#fff" stop-opacity=".39216" offset="1"/>
+  </linearGradient>
+  <linearGradient id="d" y2="54.78" gradientUnits="userSpaceOnUse" x2="167.98" gradientTransform="matrix(.44444 0 0 .44444 -24 2.7778)" y1="8.5081" x1="167.98">
+   <stop stop-color="#fffdf3" offset="0"/>
+   <stop stop-color="#fbebeb" offset="1"/>
+  </linearGradient>
+  <radialGradient id="a" gradientUnits="userSpaceOnUse" cy="9.9941" cx="8.2761" gradientTransform="matrix(0 4.2742 -5.2474 0 68.489 -37.143)" r="12.672">
+   <stop stop-color="#f89b7e" offset="0"/>
+   <stop stop-color="#e35d4f" offset=".26238"/>
+   <stop stop-color="#c6262e" offset=".66094"/>
+   <stop stop-color="#690b2c" offset="1"/>
+  </radialGradient>
+  <radialGradient id="c" gradientUnits="userSpaceOnUse" cy="43.5" cx="4.993" gradientTransform="matrix(2.0038 0 0 1.4 27.988 -17.4)" r="2.5">
+   <stop stop-color="#181818" offset="0"/>
+   <stop stop-color="#181818" stop-opacity="0" offset="1"/>
+  </radialGradient>
+  <radialGradient id="b" gradientUnits="userSpaceOnUse" cy="43.5" cx="4.993" gradientTransform="matrix(2.0038 0 0 1.4 -20.012 -104.4)" r="2.5">
+   <stop stop-color="#181818" offset="0"/>
+   <stop stop-color="#181818" stop-opacity="0" offset="1"/>
+  </radialGradient>
+  <linearGradient id="f" y2="39.999" gradientUnits="userSpaceOnUse" x2="25.058" y1="47.028" x1="25.058">
+   <stop stop-color="#181818" stop-opacity="0" offset="0"/>
+   <stop stop-color="#181818" offset=".5"/>
+   <stop stop-color="#181818" stop-opacity="0" offset="1"/>
+  </linearGradient>
+ </defs>
+ <g transform="matrix(0.7 0 0 .33333 -0.8 15.333)">
+  <g opacity=".4" transform="matrix(1.0526 0 0 1.2857 -1.2632 -13.429)">
+   <rect height="7" width="5" y="40" x="38" fill="url(#c)"/>
+   <rect transform="scale(-1)" height="7" width="5" y="-47" x="-10" fill="url(#b)"/>
+   <rect height="7" width="28" y="40" x="10" fill="url(#f)"/>
+  </g>
+ </g>
+ <g>
+  <g>
+   <rect style="color:#000000" rx="2" ry="2" height="25" width="25" y="4.5" x="3.5" fill="url(#a)"/>
+   <path opacity=".15" style="color:#000000" d="m18.188 4.9688a1.0386 1.0386 0 0 0 -0.46875 0.25c-8.0692 6.9232-12.522 7.7862-13.782 7.8752a1.0386 1.0386 0 0 0 -0.4375 0.125v8.7187a1.0386 1.0386 0 0 0 0.5 0.125c1.2408 0 3.1922 0.83225 5.0625 2.2812 1.726 1.337 3.383 3.164 4.594 5.156h12.844c1.108 0 2-0.892 2-2v-0.125c-1.2349-2.981-2.1282-7.0748-2.8125-10.781-0.003-0.023 0.003-0.0395 0-0.0625-0.61012-4.7373 0.28634-8.959 0.625-10.281a1.0386 1.0386 0 0 0 -1 -1.2812h-6.9062a1.0386 1.0386 0 0 0 -0.21875 0zm0 4.875c-0.19809 1.3497-0.34502 2.9178-0.46875 4.7812-0.23961 3.6087-0.31211 8.3302-0.34375 13.438-1.2326-2.3066-3.3956-4.6736-5.8438-6.6875-1.4134-1.1626-2.8465-2.1591-4.125-2.9062-0.81148-0.4742-1.5307-0.8115-2.2188-1.0312 1.5275-0.29509 3.8744-0.90217 6.625-2.625 2.3056-1.4441 4.5975-3.3663 6.375-4.9687z" fill-rule="evenodd" fill="#661215"/>
+   <path opacity=".3" style="color:#000000" d="m18.406 6c-8.18 7.019-12.852 8.016-14.406 8.125v2.5312c1.1732-0.164 4.1092-0.751 7.25-2.718 4.027-2.523 8.844-7.313 8.844-7.313-1.302 2.5536-1.684 11.312-1.719 22.875h8.125c0.60271 0 1.1339-0.26843 1.5-0.6875 0.00027-0.0105 0-0.0207 0-0.0312-1.565-3.227-2.576-7.895-3.344-12.062-0.655-4.973 0.298-9.3183 0.656-10.719h-6.9062zm-14.406 12.219v2.8125c3.2857 0 8.2665 3.8155 10.875 8.4688h2.2188c-1.665-4.451-10.589-11.282-13.094-11.282z" fill-rule="evenodd" fill="#661215"/>
+   <path style="color:#000000" d="m18.408 5c-8.18 7.019-12.854 8.01-14.408 8.119v2.5225c1.1732-0.16382 4.1224-0.73265 7.2632-2.6998 4.0274-2.5225 8.8421-7.3113 8.8421-7.3113-1.32 2.5898-1.705 11.522-1.73 23.333h8.441c0.661 0 1.184-0.523 1.184-1.183-1.565-3.227-2.588-7.893-3.355-12.06-0.656-4.973 0.312-9.3203 0.671-10.721h-6.9079zm-14.408 12.23v2.7938c3.3961 0 8.6171 4.0752 11.143 8.9398h2.1215c-1.187-4.423-10.673-11.734-13.264-11.734z" fill="url(#d)"/>
+  </g>
+  <path opacity=".05" d="m25.688 5.0313c-3.216 1.9588-13.74 7.9437-21.688 7.1877v5.4062s17.674 2.6262 24-2.5938v-8.7187c0-0.69873-0.55021-1.2812-1.25-1.2812h-1.0625zm2.312 12.25c-3.181 3.168-6.45 7.386-8.625 11.719h2.5312c1.761-2.975 4.072-6.235 6.094-8.25v-3.4688z" fill-rule="evenodd"/>
+ </g>
+ <rect opacity=".5" stroke-linejoin="round" rx="1" ry="1" height="23" width="23" stroke="url(#e)" stroke-linecap="round" y="5.5" x="4.5" fill="none"/>
+ <rect opacity=".35" stroke-linejoin="round" style="color:#000000" rx="2" ry="2" height="25" width="25" stroke="#410000" stroke-linecap="round" y="4.5" x="3.5" fill="none"/>
+</svg>
diff --git a/core/img/filetypes/application-rss+xml.png b/core/img/filetypes/application-rss+xml.png
index 315c4f4fa62cb720326ba3f54259666ba3999e42..e5bb322c5733e7d2961fd27e049e4249a0d2a5c1 100644
Binary files a/core/img/filetypes/application-rss+xml.png and b/core/img/filetypes/application-rss+xml.png differ
diff --git a/core/img/filetypes/application-rss+xml.svg b/core/img/filetypes/application-rss+xml.svg
new file mode 100644
index 0000000000000000000000000000000000000000..4fd98545a7de5cc4e476a4a80b3a1e64677b333e
--- /dev/null
+++ b/core/img/filetypes/application-rss+xml.svg
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="32px" width="32px" version="1.1" xmlns:cc="http://creativecommons.org/ns#" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:dc="http://purl.org/dc/elements/1.1/">
+ <defs>
+  <linearGradient id="g" y2="43" gradientUnits="userSpaceOnUse" x2="24" gradientTransform="matrix(.57063 0 0 .57063 2.3049 3.3049)" y1="5.5641" x1="24">
+   <stop stop-color="#fff" offset="0"/>
+   <stop stop-color="#fff" stop-opacity=".23529" offset=".036262"/>
+   <stop stop-color="#fff" stop-opacity=".15686" offset=".95056"/>
+   <stop stop-color="#fff" stop-opacity=".39216" offset="1"/>
+  </linearGradient>
+  <radialGradient id="b" fx="7.2758" gradientUnits="userSpaceOnUse" cy="9.9571" cx="7.8061" gradientTransform="matrix(-1.0673e-7 3.4663 -5.3421 -1.0405e-7 69.185 -26.355)" r="12.672">
+   <stop stop-color="#ffcd7d" offset="0"/>
+   <stop stop-color="#fc8f36" offset=".26238"/>
+   <stop stop-color="#e23a0e" offset=".70495"/>
+   <stop stop-color="#ac441f" offset="1"/>
+  </radialGradient>
+  <linearGradient id="f" y2=".91791" gradientUnits="userSpaceOnUse" x2="25" gradientTransform="matrix(.66015 0 0 .52505 .15636 5.186)" y1="47.935" x1="25">
+   <stop stop-color="#ba3d12" offset="0"/>
+   <stop stop-color="#db6737" offset="1"/>
+  </linearGradient>
+  <radialGradient id="d" xlink:href="#a" gradientUnits="userSpaceOnUse" cy="486.65" cx="605.71" gradientTransform="matrix(.015663 0 0 .0082353 17.61 24.981)" r="117.14"/>
+  <linearGradient id="a">
+   <stop offset="0"/>
+   <stop stop-opacity="0" offset="1"/>
+  </linearGradient>
+  <radialGradient id="c" xlink:href="#a" gradientUnits="userSpaceOnUse" cy="486.65" cx="605.71" gradientTransform="matrix(-.015663 0 0 .0082353 14.39 24.981)" r="117.14"/>
+  <linearGradient id="e" y2="609.51" gradientUnits="userSpaceOnUse" y1="366.65" gradientTransform="matrix(.045769 0 0 .0082353 -.54232 24.981)" x2="302.86" x1="302.86">
+   <stop stop-opacity="0" offset="0"/>
+   <stop offset=".5"/>
+   <stop stop-opacity="0" offset="1"/>
+  </linearGradient>
+ </defs>
+ <g>
+  <rect opacity=".15" height="2" width="22.1" y="28" x="4.95" fill="url(#e)"/>
+  <path opacity=".15" d="m4.95 28v1.9999c-0.80662 0.0038-1.95-0.44807-1.95-1.0001 0-0.552 0.90012-0.99982 1.95-0.99982z" fill="url(#c)"/>
+  <path opacity=".15" d="m27.05 28v1.9999c0.80661 0.0038 1.95-0.44807 1.95-1.0001 0-0.552-0.90012-0.99982-1.95-0.99982z" fill="url(#d)"/>
+  <path stroke-linejoin="round" style="color:#000000" d="m4.4473 5.4473c5.2946 0 23.105 0.00147 23.105 0.00147l0.000029 23.104h-23.105v-23.105z" stroke="url(#f)" stroke-width=".89464" fill="url(#b)"/>
+ </g>
+ <path opacity=".5" stroke-linejoin="round" d="m26.557 27.557h-21.113v-21.113h21.113z" stroke="url(#g)" stroke-linecap="round" stroke-width=".88668" fill="none"/>
+ <path d="m7.0633 24.902c0-0.30708 0.10601-0.56488 0.31803-0.7734 0.21203-0.2123 0.47138-0.31845 0.77805-0.31846 0.2991 0.000007 0.55277 0.10616 0.76101 0.31846 0.21202 0.20852 0.31803 0.46632 0.31803 0.7734 0 0.29951-0.10601 0.55541-0.31803 0.76771-0.20824 0.20852-0.46191 0.31278-0.76101 0.31277-0.30667 0.000007-0.56603-0.10425-0.77805-0.31277-0.2121-0.209-0.3181-0.465-0.3181-0.768m-0.0633-4.931v1.816c2.3202 0 4.2047 1.8882 4.2047 4.2129h1.8223c0-3.33-2.7035-6.0293-6.027-6.0293zm0.00312-3.9745v2.0078c4.4053 0 7.9822 3.5816 7.9822 7.9928h2.0147c0.000015-5.5219-4.4823-10.001-9.9969-10.001z" fill="#fff"/>
+</svg>
diff --git a/core/img/filetypes/application-sgf.png b/core/img/filetypes/application-sgf.png
deleted file mode 100644
index 48996c54394314e0f78157c6b06e472d90ce6038..0000000000000000000000000000000000000000
Binary files a/core/img/filetypes/application-sgf.png and /dev/null differ
diff --git a/core/img/filetypes/application-vnd.oasis.opendocument.formula.png b/core/img/filetypes/application-vnd.oasis.opendocument.formula.png
deleted file mode 100644
index e0cf49542d44e8a72f53a170b524bf73b6c94fef..0000000000000000000000000000000000000000
Binary files a/core/img/filetypes/application-vnd.oasis.opendocument.formula.png and /dev/null differ
diff --git a/core/img/filetypes/application-vnd.oasis.opendocument.graphics.png b/core/img/filetypes/application-vnd.oasis.opendocument.graphics.png
deleted file mode 100644
index b326a0543a5e4505ecea5aba7bbb0ebe07bfc902..0000000000000000000000000000000000000000
Binary files a/core/img/filetypes/application-vnd.oasis.opendocument.graphics.png and /dev/null differ
diff --git a/core/img/filetypes/application-vnd.oasis.opendocument.presentation.png b/core/img/filetypes/application-vnd.oasis.opendocument.presentation.png
deleted file mode 100644
index 7c6fd24684095b2e90d6706e80dfae9d4ad394a7..0000000000000000000000000000000000000000
Binary files a/core/img/filetypes/application-vnd.oasis.opendocument.presentation.png and /dev/null differ
diff --git a/core/img/filetypes/application-vnd.oasis.opendocument.spreadsheet.png b/core/img/filetypes/application-vnd.oasis.opendocument.spreadsheet.png
deleted file mode 100644
index 8b0e85b067039c2bd583db7fd94d746a6848547b..0000000000000000000000000000000000000000
Binary files a/core/img/filetypes/application-vnd.oasis.opendocument.spreadsheet.png and /dev/null differ
diff --git a/core/img/filetypes/application-vnd.oasis.opendocument.text.png b/core/img/filetypes/application-vnd.oasis.opendocument.text.png
deleted file mode 100644
index 48452eb3e864edda22f57c862e72945879f58321..0000000000000000000000000000000000000000
Binary files a/core/img/filetypes/application-vnd.oasis.opendocument.text.png and /dev/null differ
diff --git a/core/img/filetypes/application-x-7z-compressed.png b/core/img/filetypes/application-x-7z-compressed.png
deleted file mode 100644
index 2cd08aebf954b1fbd87e53856815e091d7b29d16..0000000000000000000000000000000000000000
Binary files a/core/img/filetypes/application-x-7z-compressed.png and /dev/null differ
diff --git a/core/img/filetypes/application-x-bzip-compressed-tar.png b/core/img/filetypes/application-x-bzip-compressed-tar.png
deleted file mode 100644
index 2cd08aebf954b1fbd87e53856815e091d7b29d16..0000000000000000000000000000000000000000
Binary files a/core/img/filetypes/application-x-bzip-compressed-tar.png and /dev/null differ
diff --git a/core/img/filetypes/application-x-bzip.png b/core/img/filetypes/application-x-bzip.png
deleted file mode 100644
index 2cd08aebf954b1fbd87e53856815e091d7b29d16..0000000000000000000000000000000000000000
Binary files a/core/img/filetypes/application-x-bzip.png and /dev/null differ
diff --git a/core/img/filetypes/application-x-compressed-tar.png b/core/img/filetypes/application-x-compressed-tar.png
deleted file mode 100644
index 2cd08aebf954b1fbd87e53856815e091d7b29d16..0000000000000000000000000000000000000000
Binary files a/core/img/filetypes/application-x-compressed-tar.png and /dev/null differ
diff --git a/core/img/filetypes/application-x-deb.png b/core/img/filetypes/application-x-deb.png
deleted file mode 100644
index 2cd08aebf954b1fbd87e53856815e091d7b29d16..0000000000000000000000000000000000000000
Binary files a/core/img/filetypes/application-x-deb.png and /dev/null differ
diff --git a/core/img/filetypes/application-x-debian-package.png b/core/img/filetypes/application-x-debian-package.png
deleted file mode 100644
index 1d6db5f933a4adcdc492dd91c4c75017005f4fcf..0000000000000000000000000000000000000000
Binary files a/core/img/filetypes/application-x-debian-package.png and /dev/null differ
diff --git a/core/img/filetypes/application-x-gzip.png b/core/img/filetypes/application-x-gzip.png
deleted file mode 100644
index 2cd08aebf954b1fbd87e53856815e091d7b29d16..0000000000000000000000000000000000000000
Binary files a/core/img/filetypes/application-x-gzip.png and /dev/null differ
diff --git a/core/img/filetypes/application-x-lzma-compressed-tar.png b/core/img/filetypes/application-x-lzma-compressed-tar.png
deleted file mode 100644
index 2cd08aebf954b1fbd87e53856815e091d7b29d16..0000000000000000000000000000000000000000
Binary files a/core/img/filetypes/application-x-lzma-compressed-tar.png and /dev/null differ
diff --git a/core/img/filetypes/application-x-rar.png b/core/img/filetypes/application-x-rar.png
deleted file mode 100644
index 2cd08aebf954b1fbd87e53856815e091d7b29d16..0000000000000000000000000000000000000000
Binary files a/core/img/filetypes/application-x-rar.png and /dev/null differ
diff --git a/core/img/filetypes/application-x-rpm.png b/core/img/filetypes/application-x-rpm.png
deleted file mode 100644
index 2cd08aebf954b1fbd87e53856815e091d7b29d16..0000000000000000000000000000000000000000
Binary files a/core/img/filetypes/application-x-rpm.png and /dev/null differ
diff --git a/core/img/filetypes/application-x-tar.png b/core/img/filetypes/application-x-tar.png
deleted file mode 100644
index 2cd08aebf954b1fbd87e53856815e091d7b29d16..0000000000000000000000000000000000000000
Binary files a/core/img/filetypes/application-x-tar.png and /dev/null differ
diff --git a/core/img/filetypes/application-x-tarz.png b/core/img/filetypes/application-x-tarz.png
deleted file mode 100644
index 2cd08aebf954b1fbd87e53856815e091d7b29d16..0000000000000000000000000000000000000000
Binary files a/core/img/filetypes/application-x-tarz.png and /dev/null differ
diff --git a/core/img/filetypes/application-zip.png b/core/img/filetypes/application-zip.png
deleted file mode 100644
index 2cd08aebf954b1fbd87e53856815e091d7b29d16..0000000000000000000000000000000000000000
Binary files a/core/img/filetypes/application-zip.png and /dev/null differ
diff --git a/core/img/filetypes/application.png b/core/img/filetypes/application.png
index 1dee9e366094e87db68c606d0522d72d4b939818..9152cc1b744f1c06d0d5ae87c2965311f117fc1c 100644
Binary files a/core/img/filetypes/application.png and b/core/img/filetypes/application.png differ
diff --git a/core/img/filetypes/application.svg b/core/img/filetypes/application.svg
new file mode 100644
index 0000000000000000000000000000000000000000..870a4ac24671ef2562c30a86ddcda62e23f8d635
--- /dev/null
+++ b/core/img/filetypes/application.svg
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="32" width="32" version="1.1" xmlns:cc="http://creativecommons.org/ns#" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:dc="http://purl.org/dc/elements/1.1/">
+ <defs>
+  <linearGradient id="e" y2="25" xlink:href="#a" gradientUnits="userSpaceOnUse" x2="16" gradientTransform="matrix(1 0 0 -1 0 34.004)" y1="9" x1="16"/>
+  <linearGradient id="a">
+   <stop offset="0"/>
+   <stop stop-opacity="0" offset="1"/>
+  </linearGradient>
+  <linearGradient id="f" y2="25" xlink:href="#a" gradientUnits="userSpaceOnUse" x2="16" y1="9" x1="16"/>
+  <linearGradient id="g" y2="4.9969" gradientUnits="userSpaceOnUse" x2="19.927" gradientTransform="matrix(.66667 0 0 .66667 0.0000011 .33333)" y1="44.949" x1="19.927">
+   <stop stop-color="#505050" offset="0"/>
+   <stop stop-color="#8e8e8e" offset="1"/>
+  </linearGradient>
+  <linearGradient id="i" y2="43" gradientUnits="userSpaceOnUse" x2="24" gradientTransform="matrix(.62162 0 0 .62162 1.0811 2.0811)" y1="5" x1="24">
+   <stop stop-color="#fff" offset="0"/>
+   <stop stop-color="#fff" stop-opacity=".23529" offset=".063165"/>
+   <stop stop-color="#fff" stop-opacity=".15686" offset=".95056"/>
+   <stop stop-color="#fff" stop-opacity=".39216" offset="1"/>
+  </linearGradient>
+  <radialGradient id="b" gradientUnits="userSpaceOnUse" cy="8.4498" cx="7.4957" gradientTransform="matrix(1.2454e-8 1.4981 -1.5848 -2.76e-8 29.391 -6.3556)" r="20">
+   <stop stop-color="#c7c7c7" offset="0"/>
+   <stop stop-color="#a6a6a6" offset=".26238"/>
+   <stop stop-color="#7b7b7b" offset=".70495"/>
+   <stop stop-color="#595959" offset="1"/>
+  </radialGradient>
+  <linearGradient id="h" y2="3.899" gradientUnits="userSpaceOnUse" x2="24" gradientTransform="matrix(.64103 0 0 .64103 .61539 1.6154)" y1="44" x1="24">
+   <stop stop-color="#505050" offset="0"/>
+   <stop stop-color="#8e8e8e" offset="1"/>
+  </linearGradient>
+  <radialGradient id="d" gradientUnits="userSpaceOnUse" cy="43.5" cx="4.993" gradientTransform="matrix(2.0038 0 0 1.4 27.988 -17.4)" r="2.5">
+   <stop stop-color="#181818" offset="0"/>
+   <stop stop-color="#181818" stop-opacity="0" offset="1"/>
+  </radialGradient>
+  <radialGradient id="c" gradientUnits="userSpaceOnUse" cy="43.5" cx="4.993" gradientTransform="matrix(2.0038 0 0 1.4 -20.012 -104.4)" r="2.5">
+   <stop stop-color="#181818" offset="0"/>
+   <stop stop-color="#181818" stop-opacity="0" offset="1"/>
+  </radialGradient>
+  <linearGradient id="j" y2="39.999" gradientUnits="userSpaceOnUse" x2="25.058" y1="47.028" x1="25.058">
+   <stop stop-color="#181818" stop-opacity="0" offset="0"/>
+   <stop stop-color="#181818" offset=".5"/>
+   <stop stop-color="#181818" stop-opacity="0" offset="1"/>
+  </linearGradient>
+ </defs>
+ <g transform="matrix(0.7 0 0 .33333 -0.8 15.333)">
+  <g opacity=".4" transform="matrix(1.0526 0 0 1.2857 -1.2632 -13.429)">
+   <rect height="7" width="5" y="40" x="38" fill="url(#d)"/>
+   <rect transform="scale(-1)" height="7" width="5" y="-47" x="-10" fill="url(#c)"/>
+   <rect height="7" width="28" y="40" x="10" fill="url(#j)"/>
+  </g>
+ </g>
+ <rect stroke-linejoin="round" height="25" stroke="url(#h)" stroke-linecap="round" fill="url(#b)" style="color:#000000" rx="2" ry="2" width="25" y="4.5" x="3.5"/>
+ <rect opacity=".5" stroke-linejoin="round" rx="1" ry="1" height="23" width="23" stroke="url(#i)" stroke-linecap="round" y="5.5" x="4.5" fill="none"/>
+ <g>
+  <path opacity="0.41" style="color:#000000" d="m15 10c-0.277 0-0.5 0.223-0.5 0.5v1.6875c-0.54864 0.14074-1.055 0.37601-1.5312 0.65625l-1.219-1.219c-0.19587-0.19587-0.49163-0.19587-0.6875 0l-1.437 1.437c-0.19587 0.19587-0.19587 0.49163 0 0.6875l1.2188 1.2188c-0.28 0.476-0.516 0.982-0.656 1.531h-1.688c-0.277 0-0.5 0.223-0.5 0.5v2c0 0.277 0.223 0.5 0.5 0.5h1.6875c0.14074 0.54864 0.37601 1.055 0.65625 1.5312l-1.219 1.219c-0.19587 0.19587-0.19587 0.49163 0 0.6875l1.4375 1.4375c0.19587 0.19587 0.49163 0.19587 0.6875 0l1.2188-1.2188c0.47623 0.28024 0.98261 0.51551 1.5312 0.65625v1.6875c0 0.277 0.223 0.5 0.5 0.5h2c0.277 0 0.5-0.223 0.5-0.5v-1.6875c0.54864-0.14074 1.055-0.37601 1.5312-0.65625l1.219 1.219c0.19587 0.19587 0.49163 0.19587 0.6875 0l1.4375-1.4375c0.19587-0.19587 0.19587-0.49163 0-0.6875l-1.22-1.219c0.28-0.476 0.516-0.982 0.656-1.531h1.6875c0.277 0 0.5-0.223 0.5-0.5v-2c0-0.277-0.223-0.5-0.5-0.5h-1.6875c-0.14-0.549-0.376-1.055-0.656-1.531l1.219-1.219c0.19587-0.19587 0.19587-0.49163 0-0.6875l-1.437-1.437c-0.19587-0.19587-0.49163-0.19587-0.6875 0l-1.2188 1.2188c-0.476-0.28-0.982-0.516-1.531-0.656v-1.688c0-0.277-0.223-0.5-0.5-0.5h-2zm1 5c1.6569 0 3 1.3431 3 3s-1.3431 3-3 3-3-1.3431-3-3 1.3431-3 3-3z" fill="#fff"/>
+  <path style="color:#000000" d="m15 9c-0.277 0-0.5 0.223-0.5 0.5v1.6875c-0.54864 0.14074-1.055 0.37601-1.5312 0.65625l-1.219-1.219c-0.19587-0.19587-0.49163-0.19587-0.6875 0l-1.437 1.437c-0.19587 0.19587-0.19587 0.49163 0 0.6875l1.2188 1.2188c-0.28 0.476-0.516 0.982-0.656 1.531h-1.688c-0.277 0-0.5 0.223-0.5 0.5v2c0 0.277 0.223 0.5 0.5 0.5h1.6875c0.14074 0.54864 0.37601 1.055 0.65625 1.5312l-1.219 1.219c-0.19587 0.19587-0.19587 0.49163 0 0.6875l1.4375 1.4375c0.19587 0.19587 0.49163 0.19587 0.6875 0l1.2188-1.2188c0.47623 0.28024 0.98261 0.51551 1.5312 0.65625v1.6875c0 0.277 0.223 0.5 0.5 0.5h2c0.277 0 0.5-0.223 0.5-0.5v-1.6875c0.54864-0.14074 1.055-0.37601 1.5312-0.65625l1.219 1.219c0.19587 0.19587 0.49163 0.19587 0.6875 0l1.4375-1.4375c0.19587-0.19587 0.19587-0.49163 0-0.6875l-1.22-1.219c0.28-0.476 0.516-0.982 0.656-1.531h1.6875c0.277 0 0.5-0.223 0.5-0.5v-2c0-0.277-0.223-0.5-0.5-0.5h-1.6875c-0.14-0.549-0.376-1.055-0.656-1.531l1.219-1.219c0.19587-0.19587 0.19587-0.49163 0-0.6875l-1.437-1.437c-0.19587-0.19587-0.49163-0.19587-0.6875 0l-1.2188 1.2188c-0.476-0.28-0.982-0.516-1.531-0.656v-1.688c0-0.277-0.223-0.5-0.5-0.5h-2zm1 5c1.6569 0 3 1.3431 3 3s-1.3431 3-3 3-3-1.3431-3-3 1.3431-3 3-3z" fill="url(#g)"/>
+  <path opacity=".1" stroke-linejoin="round" style="color:#000000" d="m15.062 9.5625c-0.02465 0.61514 0.0508 1.2431-0.0404 1.8499-0.22156 0.48267-0.86813 0.38946-1.2591 0.66131-0.35888 0.1777-0.83286 0.55716-1.2005 0.17633l-1.1562-1.1562-1.3125 1.3125c0.41328 0.43651 0.87815 0.8308 1.2579 1.2948 0.23668 0.48316-0.28717 0.88122-0.39325 1.3266-0.17191 0.37402-0.17866 1.0023-0.7161 1.0335-0.55991 0.0032-1.1199 0.000478-1.6798 0.0014v1.875c0.61514 0.02465 1.2431-0.0508 1.8499 0.0404 0.48267 0.22156 0.38946 0.86813 0.66131 1.2591 0.1777 0.35888 0.55716 0.83286 0.17633 1.2005l-1.1562 1.1562 1.3125 1.3125c0.43651-0.41328 0.8308-0.87815 1.2948-1.2579 0.48316-0.23668 0.88122 0.28717 1.3266 0.39325 0.37402 0.17191 1.0023 0.17866 1.0335 0.7161 0.0032 0.55991 0.000478 1.1199 0.0014 1.6798h1.875c0.02465-0.61514-0.0508-1.2431 0.0404-1.8499 0.22156-0.48267 0.86813-0.38946 1.2591-0.66131 0.35888-0.1777 0.83286-0.55716 1.2005-0.17633l1.1562 1.1562 1.3125-1.3125c-0.41328-0.43651-0.87815-0.8308-1.2579-1.2948-0.23668-0.48316 0.28717-0.88122 0.39325-1.3266 0.17191-0.37402 0.17866-1.0023 0.7161-1.0335 0.55991-0.0032 1.1199-0.000478 1.6798-0.0014v-1.875c-0.61514-0.02465-1.2431 0.0508-1.8499-0.0404-0.482-0.222-0.389-0.869-0.661-1.26-0.177-0.359-0.557-0.833-0.176-1.201l1.1562-1.1562-1.3125-1.3125c-0.43651 0.41328-0.8308 0.87815-1.2948 1.2579-0.48316 0.23668-0.88122-0.28717-1.3266-0.39325-0.37402-0.17191-1.0023-0.17866-1.0335-0.7161-0.0032-0.55991-0.000478-1.1199-0.0014-1.6798h-1.875z" stroke="url(#f)" fill="none"/>
+  <path opacity=".1" stroke-linejoin="round" style="color:#000000" d="m16 20.566c1.9374 0.05315 3.6634-1.7201 3.5613-3.6545 0.004-1.9389-1.8147-3.6163-3.7447-3.4659-1.9392 0.04516-3.5671 1.9074-3.3688 3.832 0.10413 1.8114 1.739 3.3229 3.5521 3.2884z" stroke="url(#e)" fill="none"/>
+ </g>
+</svg>
diff --git a/core/img/filetypes/audio.png b/core/img/filetypes/audio.png
index a8b3ede3df956f8d505543b190bc8d1b5b4dce75..3f56a7e2a9a976c91965495dfe7bc76667df5f75 100644
Binary files a/core/img/filetypes/audio.png and b/core/img/filetypes/audio.png differ
diff --git a/core/img/filetypes/audio.svg b/core/img/filetypes/audio.svg
new file mode 100644
index 0000000000000000000000000000000000000000..d5eda38e8aaf39c5a54521ed95d185903f6d2643
--- /dev/null
+++ b/core/img/filetypes/audio.svg
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="32px" width="32px" version="1.1" xmlns:cc="http://creativecommons.org/ns#" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:dc="http://purl.org/dc/elements/1.1/">
+ <defs>
+  <linearGradient id="e" y2="24.628" gradientUnits="userSpaceOnUse" x2="20.055" gradientTransform="matrix(.52104 0 0 .81327 3.4707 .35442)" y1="15.298" x1="16.626">
+   <stop stop-color="#fff" offset="0"/>
+   <stop stop-color="#fff" stop-opacity="0" offset="1"/>
+  </linearGradient>
+  <linearGradient id="d" y2="43" gradientUnits="userSpaceOnUse" x2="24" gradientTransform="matrix(.62162 0 0 .62162 1.0811 2.0811)" y1="5" x1="24">
+   <stop stop-color="#fff" offset="0"/>
+   <stop stop-color="#fff" stop-opacity=".23529" offset=".063165"/>
+   <stop stop-color="#fff" stop-opacity=".15686" offset=".95056"/>
+   <stop stop-color="#fff" stop-opacity=".39216" offset="1"/>
+  </linearGradient>
+  <radialGradient id="a" gradientUnits="userSpaceOnUse" cy="8.4498" cx="7.4957" gradientTransform="matrix(1.2454e-8 1.4981 -1.5848 -2.76e-8 29.391 -6.3556)" r="20">
+   <stop stop-color="#3e3e3e" offset="0"/>
+   <stop stop-color="#343434" offset=".26238"/>
+   <stop stop-color="#272727" offset=".70495"/>
+   <stop stop-color="#1d1d1d" offset="1"/>
+  </radialGradient>
+  <radialGradient id="c" gradientUnits="userSpaceOnUse" cy="43.5" cx="4.993" gradientTransform="matrix(2.0038 0 0 1.4 27.988 -17.4)" r="2.5">
+   <stop stop-color="#181818" offset="0"/>
+   <stop stop-color="#181818" stop-opacity="0" offset="1"/>
+  </radialGradient>
+  <radialGradient id="b" gradientUnits="userSpaceOnUse" cy="43.5" cx="4.993" gradientTransform="matrix(2.0038 0 0 1.4 -20.012 -104.4)" r="2.5">
+   <stop stop-color="#181818" offset="0"/>
+   <stop stop-color="#181818" stop-opacity="0" offset="1"/>
+  </radialGradient>
+  <linearGradient id="f" y2="39.999" gradientUnits="userSpaceOnUse" x2="25.058" y1="47.028" x1="25.058">
+   <stop stop-color="#181818" stop-opacity="0" offset="0"/>
+   <stop stop-color="#181818" offset=".5"/>
+   <stop stop-color="#181818" stop-opacity="0" offset="1"/>
+  </linearGradient>
+ </defs>
+ <g transform="matrix(0.7 0 0 .33333 -0.8 15.333)">
+  <g opacity=".4" transform="matrix(1.0526 0 0 1.2857 -1.2632 -13.429)">
+   <rect height="7" width="5" y="40" x="38" fill="url(#c)"/>
+   <rect transform="scale(-1)" height="7" width="5" y="-47" x="-10" fill="url(#b)"/>
+   <rect height="7" width="28" y="40" x="10" fill="url(#f)"/>
+  </g>
+ </g>
+ <rect style="color:#000000" height="25" width="25" y="4.5" x="3.5" fill="url(#a)"/>
+ <rect opacity=".7" style="color:#000000" height="25" width="25" stroke="#000" y="4.5" x="3.5" fill="none"/>
+ <rect opacity=".5" height="23" width="23" stroke="url(#d)" stroke-linecap="round" y="5.5" x="4.5" fill="none"/>
+ <g>
+  <path opacity=".1" d="m4 5 0.008 15c0.6904-0.015 23.468-5.529 23.992-5.795v-9.205z" fill-rule="evenodd" fill="url(#e)"/>
+  <path opacity=".1" style="color:#000000" d="m16.467 8.0001c-0.53931-0.077588-0.45336 0.42193-0.44484 0.7731-0.0059 4.1692 0.01172 8.3407-0.0088 12.508-0.145 0.32452-0.55212 0.0099-0.80112 0.07215-1.7342-0.05405-3.6017 1.1946-3.847 3.0302-0.25326 1.3789 1.032 2.5932 2.3216 2.6149 1.9178 0.05257 3.5779-1.8787 3.3343-3.8146 0.0065-3.3283-0.01298-6.6593 0.0097-9.9859 0.13139-0.31618 0.4856-0.01847 0.65097 0.09458 1.5212 0.9203 2.8505 2.4463 2.9447 4.3279 0.0815 1.0885-0.14664 2.173-0.46032 3.2072 1.3984-2.3007 1.3227-5.5038-0.40514-7.6054-1.3305-1.3884-2.5797-3.0451-2.8335-5.0311-0.04896-0.18667-0.30655-0.18423-0.46044-0.19158z" fill="#fff"/>
+  <path opacity=".9" style="color:#000000" d="m16.467 7.0001c-0.53931-0.077588-0.45336 0.42193-0.44484 0.7731-0.0059 4.1692 0.01172 8.3407-0.0088 12.508-0.145 0.32452-0.55212 0.0099-0.80112 0.07215-1.7342-0.05405-3.6017 1.1946-3.847 3.0302-0.25326 1.3789 1.032 2.5932 2.3216 2.6149 1.9178 0.05257 3.5779-1.8787 3.3343-3.8146 0.0065-3.3283-0.01298-6.6593 0.0097-9.9859 0.13139-0.31618 0.4856-0.01847 0.65097 0.09458 1.5212 0.9203 2.8505 2.4463 2.9447 4.3279 0.0815 1.0885-0.14664 2.173-0.46032 3.2072 1.3984-2.3007 1.3227-5.5038-0.40514-7.6054-1.33-1.388-2.58-3.0443-2.833-5.0303-0.049-0.1866-0.307-0.1842-0.461-0.1916z"/>
+ </g>
+</svg>
diff --git a/core/img/filetypes/calendar.png b/core/img/filetypes/calendar.png
new file mode 100644
index 0000000000000000000000000000000000000000..d85b1db651c258b22d7707dbdf57a19bc92f832a
Binary files /dev/null and b/core/img/filetypes/calendar.png differ
diff --git a/core/img/filetypes/calendar.svg b/core/img/filetypes/calendar.svg
new file mode 100644
index 0000000000000000000000000000000000000000..0016749b93614c3dfb2a95e24001e17e85417ad4
--- /dev/null
+++ b/core/img/filetypes/calendar.svg
@@ -0,0 +1,94 @@
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="32" width="32" version="1.1" xmlns:cc="http://creativecommons.org/ns#" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:dc="http://purl.org/dc/elements/1.1/">
+ <defs>
+  <radialGradient id="radialGradient3134" spreadMethod="reflect" gradientUnits="userSpaceOnUse" cy="4.9179" cx="14" gradientTransform="matrix(1.0912316,-1.8501946e-8,3.7499995e-8,1.5922783,7.222757,-4.4685113)" r="2">
+   <stop stop-color="#FFF" offset="0"/>
+   <stop stop-color="#8f8f8f" offset="1"/>
+  </radialGradient>
+  <radialGradient id="radialGradient3139" spreadMethod="reflect" gradientUnits="userSpaceOnUse" cy="4.9179" cx="14" gradientTransform="matrix(1.0912316,-1.8501946e-8,3.7499995e-8,1.5922783,-5.7772427,-4.4685114)" r="2">
+   <stop stop-color="#FFF" offset="0"/>
+   <stop stop-color="#8f8f8f" offset="1"/>
+  </radialGradient>
+  <linearGradient id="linearGradient3144" y2="43" gradientUnits="userSpaceOnUse" x2="24" gradientTransform="matrix(0.60000361,0,0,0.64185429,1.599978,-16.778802)" y1="5" x1="24">
+   <stop stop-color="#FFF" offset="0"/>
+   <stop stop-color="#FFF" stop-opacity="0.23529412" offset="0.063165"/>
+   <stop stop-color="#FFF" stop-opacity="0.15686275" offset="0.95056"/>
+   <stop stop-color="#FFF" stop-opacity="0.39215687" offset="1"/>
+  </linearGradient>
+  <linearGradient id="linearGradient3147" y2="43" gradientUnits="userSpaceOnUse" x2="24" gradientTransform="matrix(0.62162164,0,0,0.62162164,1.0810837,2.0810874)" y1="5" x1="24">
+   <stop stop-color="#FFF" offset="0"/>
+   <stop stop-color="#FFF" stop-opacity="0.23529412" offset="0.063165"/>
+   <stop stop-color="#FFF" stop-opacity="0.15686275" offset="0.95056"/>
+   <stop stop-color="#FFF" stop-opacity="0.39215687" offset="1"/>
+  </linearGradient>
+  <radialGradient id="radialGradient3150" gradientUnits="userSpaceOnUse" cy="8.4498" cx="7.4957" gradientTransform="matrix(0,0.90632943,-1.9732085,-3.8243502e-8,32.673223,-1.9201377)" r="20">
+   <stop stop-color="#f89b7e" offset="0"/>
+   <stop stop-color="#e35d4f" offset="0.26238"/>
+   <stop stop-color="#c6262e" offset="0.66094"/>
+   <stop stop-color="#690b2c" offset="1"/>
+  </radialGradient>
+  <linearGradient id="linearGradient3152" y2="3.899" gradientUnits="userSpaceOnUse" x2="24" gradientTransform="matrix(0.64102567,0,0,0.64102567,0.6153831,1.615384)" y1="44" x1="24">
+   <stop stop-color="#791235" offset="0"/>
+   <stop stop-color="#dd3b27" offset="1"/>
+  </linearGradient>
+  <linearGradient id="linearGradient3155" y2="18.684" gradientUnits="userSpaceOnUse" x2="23.954" gradientTransform="matrix(0.65,0,0,0.50000001,0.4000028,3.9999996)" y1="15.999" x1="23.954">
+   <stop stop-color="#000" offset="0"/>
+   <stop stop-color="#000" stop-opacity="0" offset="1"/>
+  </linearGradient>
+  <linearGradient id="linearGradient3158" y2="44.984" gradientUnits="userSpaceOnUse" x2="19.36" gradientTransform="matrix(0.64102564,0,0,0.64185429,0.6153845,0.95838337)" y1="16.138" x1="19.36">
+   <stop stop-color="#f4f4f4" offset="0"/>
+   <stop stop-color="#dbdbdb" offset="1"/>
+  </linearGradient>
+  <linearGradient id="linearGradient3160" y2="3.8905" gradientUnits="userSpaceOnUse" x2="24" gradientTransform="matrix(0.64102564,0,0,0.64185429,0.6153845,1.5793381)" y1="44" x1="24">
+   <stop stop-color="#787878" offset="0"/>
+   <stop stop-color="#AAA" offset="1"/>
+  </linearGradient>
+  <radialGradient id="radialGradient2976" gradientUnits="userSpaceOnUse" cy="43.5" cx="4.993" gradientTransform="matrix(2.003784,0,0,1.4,27.98813,-17.4)" r="2.5">
+   <stop stop-color="#181818" offset="0"/>
+   <stop stop-color="#181818" stop-opacity="0" offset="1"/>
+  </radialGradient>
+  <radialGradient id="radialGradient2978" gradientUnits="userSpaceOnUse" cy="43.5" cx="4.993" gradientTransform="matrix(2.003784,0,0,1.4,-20.01187,-104.4)" r="2.5">
+   <stop stop-color="#181818" offset="0"/>
+   <stop stop-color="#181818" stop-opacity="0" offset="1"/>
+  </radialGradient>
+  <linearGradient id="linearGradient2980" y2="39.999" gradientUnits="userSpaceOnUse" x2="25.058" y1="47.028" x1="25.058">
+   <stop stop-color="#181818" stop-opacity="0" offset="0"/>
+   <stop stop-color="#181818" offset="0.5"/>
+   <stop stop-color="#181818" stop-opacity="0" offset="1"/>
+  </linearGradient>
+  <linearGradient id="linearGradient3566" y2="3.899" gradientUnits="userSpaceOnUse" x2="24" gradientTransform="matrix(0.64102567,0,0,0.64102567,0.6153831,0.6153843)" y1="44" x1="24">
+   <stop stop-color="#791235" offset="0"/>
+   <stop stop-color="#dd3b27" offset="1"/>
+  </linearGradient>
+ </defs>
+ <metadata>
+  <rdf:RDF>
+   <cc:Work rdf:about="">
+    <dc:format>image/svg+xml</dc:format>
+    <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
+    <dc:title/>
+   </cc:Work>
+  </rdf:RDF>
+ </metadata>
+ <path stroke-linejoin="round" style="enable-background:accumulate;color:#000000;" d="m5.5,3.5c7.0683,0.00685,14.137-0.013705,21.205,0.010288,1.238,0.083322,1.9649,1.3578,1.7949,2.5045l-24.99-0.7199c0.081-0.9961,0.9903-1.8161,1.9897-1.7949z" stroke-dashoffset="0" stroke="url(#linearGradient3566)" stroke-linecap="round" stroke-miterlimit="4" stroke-dasharray="none" stroke-width="1" fill="none"/>
+ <g transform="matrix(0.6999997,0,0,0.3333336,-0.8000003,15.33333)">
+  <g opacity="0.4" transform="matrix(1.052632,0,0,1.285713,-1.263158,-13.42854)">
+   <rect height="7" width="5" y="40" x="38" fill="url(#radialGradient2976)"/>
+   <rect transform="scale(-1,-1)" height="7" width="5" y="-47" x="-10" fill="url(#radialGradient2978)"/>
+   <rect height="7" width="28" y="40" x="10" fill="url(#linearGradient2980)"/>
+  </g>
+ </g>
+ <path stroke-linejoin="round" style="enable-background:accumulate;color:#000000;" d="m28.5,7.0148s0.0137,13.794-0.01029,20.69c-0.084,1.238-1.358,1.965-2.505,1.795-6.896-0.007-13.794,0.014-20.69-0.01-1.238-0.084-1.9649-1.358-1.7949-2.505,0.0068-6.896,0.0103-20.69,0.0103-20.69z" fill-rule="nonzero" stroke-dashoffset="0" stroke="url(#linearGradient3160)" stroke-linecap="round" stroke-miterlimit="4" stroke-dasharray="none" stroke-width="0.99999994" fill="url(#linearGradient3158)"/>
+ <rect opacity="0.3" style="enable-background:accumulate;" fill-rule="nonzero" rx="0" ry="0" height="2" width="26" y="12" x="3" fill="url(#linearGradient3155)"/>
+ <path stroke-linejoin="round" style="enable-background:accumulate;color:#000000;" d="m5.5,4.5c7.0683,0.00685,14.137-0.013705,21.205,0.010288,1.238,0.083322,1.9649,1.3578,1.7949,2.5045l0.073,4.4852h-25.073l0.0103-5.2051c0.081-0.9961,0.9903-1.8161,1.9897-1.7949z" fill-rule="nonzero" stroke-dashoffset="0" stroke="url(#linearGradient3152)" stroke-linecap="round" stroke-miterlimit="4" stroke-dasharray="none" stroke-width="1" fill="url(#radialGradient3150)"/>
+ <rect opacity="0.5" stroke-linejoin="round" stroke-dasharray="none" stroke-dashoffset="0" rx="1" ry="1" height="23" width="23" stroke="url(#linearGradient3147)" stroke-linecap="round" stroke-miterlimit="4" y="5.5" x="4.5" stroke-width="1" fill="none"/>
+ <path opacity="0.5" stroke-linejoin="round" d="m26.5,10.5h-21" stroke-dashoffset="0" stroke="url(#linearGradient3144)" stroke-linecap="square" stroke-miterlimit="4" stroke-dasharray="none" stroke-width="0.99999982" fill="none"/>
+ <rect opacity="0.4" style="enable-background:accumulate;" fill-rule="nonzero" rx="1.8086" ry="1.5304" height="7.0604" width="3" y="2.9396" x="8" fill="#FFF"/>
+ <rect style="enable-background:accumulate;" fill-rule="nonzero" rx="1.5869" ry="1.5869" height="2.7652" width="3" y="6.2348" x="8" fill="#cc3429"/>
+ <rect style="enable-background:accumulate;" fill-rule="nonzero" rx="1.8086" ry="1.3912" height="7" width="3" y="1.0188" x="8" fill="url(#radialGradient3139)"/>
+ <rect opacity="0.4" style="enable-background:accumulate;" fill-rule="nonzero" rx="1.8086" ry="1.5304" height="7.0604" width="3" y="2.9396" x="21" fill="#FFF"/>
+ <rect style="enable-background:accumulate;" fill-rule="nonzero" rx="1.5869" ry="1.5869" height="2.7652" width="3" y="6.2348" x="21" fill="#cc3429"/>
+ <rect style="enable-background:accumulate;" fill-rule="nonzero" rx="1.8086" ry="1.3912" height="7" width="3" y="1.0188" x="21" fill="url(#radialGradient3134)"/>
+ <rect style="enable-background:accumulate;color:#000000;" height="3.9477" width="19.876" y="14.023" x="6.1231" fill="#c5c5c5"/>
+ <path opacity="0.3" stroke-linejoin="round" style="enable-background:accumulate;color:#000000;" d="M6.5182,14.553,25.505,14.564,25.415,26.505,6.4289,26.494zm0.33122,8.8955,18.622,0.01098m-18.89-2.957,18.622,0.01098m-18.532-14.898,18.622,0.011m-3.6545-2.8956-0.0893,11.828m-2.9014-11.783-0.0893,11.828m-2.902-11.917-0.089,11.827m-2.9014-11.783-0.0893,11.828m-2.8347-11.839-0.0893,11.828" stroke-dashoffset="0" stroke="#000" stroke-linecap="round" stroke-miterlimit="4" stroke-dasharray="none" stroke-width="1" fill="none"/>
+</svg>
diff --git a/core/img/filetypes/code-script.png b/core/img/filetypes/code-script.png
deleted file mode 100644
index 63fe6ceff5bfcedb9670279d4bb8d25807f6ecee..0000000000000000000000000000000000000000
Binary files a/core/img/filetypes/code-script.png and /dev/null differ
diff --git a/core/img/filetypes/code.png b/core/img/filetypes/code.png
deleted file mode 100644
index 0c76bd1297751b66230f74719504b2adb02b1615..0000000000000000000000000000000000000000
Binary files a/core/img/filetypes/code.png and /dev/null differ
diff --git a/core/img/filetypes/database.png b/core/img/filetypes/database.png
index 3d09261a26eb97c6dedc1d3504cbc2cf915eb642..24788b2a37f04a4d44d09fabc5ef8c062015fa42 100644
Binary files a/core/img/filetypes/database.png and b/core/img/filetypes/database.png differ
diff --git a/core/img/filetypes/database.svg b/core/img/filetypes/database.svg
new file mode 100644
index 0000000000000000000000000000000000000000..6dfac54e68b2de928371dbaa1fd30f43a78fd7cb
--- /dev/null
+++ b/core/img/filetypes/database.svg
@@ -0,0 +1,54 @@
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="32" width="32" version="1.1" xmlns:cc="http://creativecommons.org/ns#" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:dc="http://purl.org/dc/elements/1.1/">
+ <defs>
+  <linearGradient id="linearGradient3136" y2="-24.582" spreadMethod="reflect" gradientUnits="userSpaceOnUse" x2="102.31" gradientTransform="matrix(0.4581255,0,0,0.4388939,-31.619713,14.933095)" y1="-2.3925" x1="102.31">
+   <stop stop-color="#a5a6a8" offset="0"/>
+   <stop stop-color="#e8e8e8" offset="1"/>
+  </linearGradient>
+  <linearGradient id="linearGradient3138" y2="-2.3758" gradientUnits="userSpaceOnUse" x2="109.96" gradientTransform="matrix(0.4581255,0,0,0.4388939,-31.619713,14.933095)" y1="-24.911" x1="109.96">
+   <stop stop-color="#b3b3b3" offset="0"/>
+   <stop stop-color="#dadada" offset="1"/>
+  </linearGradient>
+  <linearGradient id="linearGradient3141" y2="-7.6657" xlink:href="#linearGradient2793" spreadMethod="reflect" gradientUnits="userSpaceOnUse" x2="89.424" gradientTransform="matrix(0.4578345,0,0,0.432286,-31.591968,18.911518)" y1="-7.6657" x1="103.95"/>
+  <linearGradient id="linearGradient2793">
+   <stop stop-color="#868688" offset="0"/>
+   <stop stop-color="#d9d9da" offset="1"/>
+  </linearGradient>
+  <linearGradient id="linearGradient3143" y2="27.546" xlink:href="#linearGradient3858" gradientUnits="userSpaceOnUse" x2="89.018" gradientTransform="translate(-78.157465,-9.546111)" y1="22.537" x1="89.018"/>
+  <linearGradient id="linearGradient3858">
+   <stop stop-color="#a0a0a0" offset="0"/>
+   <stop stop-color="#4a4a4a" offset="1"/>
+  </linearGradient>
+  <linearGradient id="linearGradient3147" y2="-7.6657" xlink:href="#linearGradient2793" spreadMethod="reflect" gradientUnits="userSpaceOnUse" x2="89.424" gradientTransform="matrix(0.4578345,0,0,0.432286,-31.591968,24.911518)" y1="-7.6657" x1="103.95"/>
+  <linearGradient id="linearGradient3149" y2="27.546" xlink:href="#linearGradient3858" gradientUnits="userSpaceOnUse" x2="89.018" gradientTransform="translate(-78.157465,-3.546111)" y1="22.537" x1="89.018"/>
+  <linearGradient id="linearGradient3153" y2="-7.6657" xlink:href="#linearGradient2793" spreadMethod="reflect" gradientUnits="userSpaceOnUse" x2="89.424" gradientTransform="matrix(0.4578345,0,0,0.432286,-31.591968,30.911518)" y1="-7.6657" x1="103.95"/>
+  <linearGradient id="linearGradient3155" y2="27.546" xlink:href="#linearGradient3858" gradientUnits="userSpaceOnUse" x2="89.018" gradientTransform="translate(-78.157465,2.453889)" y1="22.537" x1="89.018"/>
+  <linearGradient id="linearGradient3098" y2="44.137" gradientUnits="userSpaceOnUse" x2="21.381" gradientTransform="matrix(0.59999998,0,0,0.60526317,1.6000001,2.1710523)" y1="5.0525" x1="21.381">
+   <stop stop-color="#FFF" offset="0"/>
+   <stop stop-color="#FFF" stop-opacity="0.23529412" offset="0.081258"/>
+   <stop stop-color="#FFF" stop-opacity="0.15686275" offset="0.92328"/>
+   <stop stop-color="#FFF" stop-opacity="0.39215687" offset="1"/>
+  </linearGradient>
+  <radialGradient id="radialGradient3232" gradientUnits="userSpaceOnUse" cy="41.636" cx="23.335" gradientTransform="matrix(0.5745243,0,0,0.2209368,2.59375,17.801069)" r="22.627">
+   <stop stop-color="#000" offset="0"/>
+   <stop stop-color="#000" stop-opacity="0" offset="1"/>
+  </radialGradient>
+ </defs>
+ <metadata>
+  <rdf:RDF>
+   <cc:Work rdf:about="">
+    <dc:format>image/svg+xml</dc:format>
+    <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
+    <dc:title/>
+   </cc:Work>
+  </rdf:RDF>
+ </metadata>
+ <path opacity="0.3" d="m29,27c0.0011,2.7613-5.8195,5-13,5s-13.001-2.239-13-5c-0.0011-2.761,5.8195-5,13-5s13.001,2.2387,13,5z" fill-rule="evenodd" fill="url(#radialGradient3232)"/>
+ <path d="m27.49,25.068c0,2.4466-5.1487,4.4322-11.493,4.4322-6.344,0-11.493-1.9856-11.493-4.4322,0.11446-5.4694-1.4047-4.34,11.493-4.4322,13.193-0.0952,11.331-1.1267,11.493,4.4322z" stroke="url(#linearGradient3155)" stroke-miterlimit="4" stroke-dasharray="none" stroke-width="1" fill="url(#linearGradient3153)"/>
+ <path d="m27.5,21c0,2.4853-5.1487,4.5-11.5,4.5s-11.5-2.0147-11.5-4.5,5.1487-4.5,11.5-4.5,11.5,2.0147,11.5,4.5z" stroke="#d8d8d8" stroke-miterlimit="4" stroke-dasharray="none" stroke-width="1" fill="#868688"/>
+ <path d="m27.49,19.068c0,2.4466-5.1487,4.4322-11.493,4.4322-6.344,0-11.493-1.9856-11.493-4.4322,0.11446-5.4694-1.4047-4.34,11.493-4.4322,13.193-0.0952,11.331-1.1267,11.493,4.4322z" stroke="url(#linearGradient3149)" stroke-miterlimit="4" stroke-dasharray="none" stroke-width="1" fill="url(#linearGradient3147)"/>
+ <path d="m27.5,15c0,2.4853-5.1487,4.5-11.5,4.5s-11.5-2.0147-11.5-4.5,5.1487-4.5,11.5-4.5,11.5,2.0147,11.5,4.5z" stroke="#d8d8d8" stroke-miterlimit="4" stroke-dasharray="none" stroke-width="1" fill="#868688"/>
+ <path d="M27.49,13.068c0,2.446-5.149,4.432-11.493,4.432-6.3435,0-11.492-1.986-11.492-4.432,0.1144-5.4697-1.4047-4.3402,11.492-4.4325,13.193-0.0952,11.331-1.1267,11.493,4.4325z" stroke="url(#linearGradient3143)" stroke-miterlimit="4" stroke-dasharray="none" stroke-width="1" fill="url(#linearGradient3141)"/>
+ <path d="m27.5,9c0,2.4853-5.1487,4.5-11.5,4.5s-11.5-2.015-11.5-4.5c0-2.4853,5.1487-4.5,11.5-4.5,6.351,0,11.5,2.0147,11.5,4.5z" stroke="url(#linearGradient3138)" stroke-miterlimit="4" stroke-dasharray="none" stroke-width="1" fill="url(#linearGradient3136)"/>
+ <rect opacity="0.5" style="enable-background:accumulate;color:#000000;" rx="17.5" ry="4" height="23" width="21" stroke="url(#linearGradient3098)" y="5.5" x="5.5" stroke-width="1" fill="none"/>
+</svg>
diff --git a/core/img/filetypes/file.png b/core/img/filetypes/file.png
index 8b8b1ca0000bc8fa8d0379926736029f8fabe364..c20f13c2e13af5bccf96b77dd66a6a0df0508c90 100644
Binary files a/core/img/filetypes/file.png and b/core/img/filetypes/file.png differ
diff --git a/core/img/filetypes/file.svg b/core/img/filetypes/file.svg
new file mode 100644
index 0000000000000000000000000000000000000000..3d91c3411439a69c131882426d83008dc00c4ba0
--- /dev/null
+++ b/core/img/filetypes/file.svg
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="32" width="32" version="1.1" xmlns:cc="http://creativecommons.org/ns#" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:dc="http://purl.org/dc/elements/1.1/">
+ <defs>
+  <linearGradient id="a">
+   <stop offset="0"/>
+   <stop stop-opacity="0" offset="1"/>
+  </linearGradient>
+  <linearGradient id="f" y2="43" gradientUnits="userSpaceOnUse" x2="24" gradientTransform="matrix(.56757 0 0 .72973 2.3784 -2.5135)" y1="5.5641" x1="24">
+   <stop stop-color="#fff" offset="0"/>
+   <stop stop-color="#fff" stop-opacity=".23529" offset=".036262"/>
+   <stop stop-color="#fff" stop-opacity=".15686" offset=".95056"/>
+   <stop stop-color="#fff" stop-opacity=".39216" offset="1"/>
+  </linearGradient>
+  <linearGradient id="e" y2="47.013" gradientUnits="userSpaceOnUse" x2="25.132" gradientTransform="matrix(.65714 0 0 .63012 .22856 -1.0896)" y1=".98521" x1="25.132">
+   <stop stop-color="#f4f4f4" offset="0"/>
+   <stop stop-color="#dbdbdb" offset="1"/>
+  </linearGradient>
+  <radialGradient id="c" xlink:href="#a" gradientUnits="userSpaceOnUse" cy="486.65" cx="605.71" gradientTransform="matrix(.015663 0 0 .0082353 17.61 25.981)" r="117.14"/>
+  <radialGradient id="b" xlink:href="#a" gradientUnits="userSpaceOnUse" cy="486.65" cx="605.71" gradientTransform="matrix(-.015663 0 0 .0082353 14.39 25.981)" r="117.14"/>
+  <linearGradient id="d" y2="609.51" gradientUnits="userSpaceOnUse" x2="302.86" gradientTransform="matrix(.045769 0 0 .0082353 -.54232 25.981)" y1="366.65" x1="302.86">
+   <stop stop-opacity="0" offset="0"/>
+   <stop offset=".5"/>
+   <stop stop-opacity="0" offset="1"/>
+  </linearGradient>
+ </defs>
+ <g>
+  <g>
+   <rect opacity=".15" height="2" width="22.1" y="29" x="4.95" fill="url(#d)"/>
+   <path opacity=".15" d="m4.95 29v1.9999c-0.80662 0.0038-1.95-0.44807-1.95-1.0001 0-0.552 0.90012-0.99982 1.95-0.99982z" fill="url(#b)"/>
+   <path opacity=".15" d="m27.05 29v1.9999c0.80661 0.0038 1.95-0.44807 1.95-1.0001 0-0.552-0.90012-0.99982-1.95-0.99982z" fill="url(#c)"/>
+  </g>
+  <path d="m4.5 0.49996c5.2705 0 23 0.00185 23 0.00185l0.000028 28.998h-23v-29z" fill="url(#e)"/>
+ </g>
+ <path stroke-linejoin="round" d="m26.5 28.5h-21v-27h21z" stroke="url(#f)" stroke-linecap="round" fill="none"/>
+ <path stroke-linejoin="round" opacity=".3" d="m4.5 0.49996c5.2705 0 23 0.00185 23 0.00185l0.000028 28.998h-23v-29z" stroke="#000" stroke-width=".99992" fill="none"/>
+</svg>
diff --git a/core/img/filetypes/flash.png b/core/img/filetypes/flash.png
index 9f5db634a4fb42ad33c7a78f5488f03308d3317c..bcde641da3ca196a8212a5b6d91a62013f1430ab 100644
Binary files a/core/img/filetypes/flash.png and b/core/img/filetypes/flash.png differ
diff --git a/core/img/filetypes/flash.svg b/core/img/filetypes/flash.svg
new file mode 100644
index 0000000000000000000000000000000000000000..cb823703d9b42c512a3c1c15765ed82163fef4d5
--- /dev/null
+++ b/core/img/filetypes/flash.svg
@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="32" width="32" version="1.1" xmlns:cc="http://creativecommons.org/ns#" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:dc="http://purl.org/dc/elements/1.1/">
+ <defs>
+  <linearGradient id="a">
+   <stop offset="0"/>
+   <stop stop-opacity="0" offset="1"/>
+  </linearGradient>
+  <linearGradient id="j" y2="43" gradientUnits="userSpaceOnUse" x2="24" gradientTransform="matrix(.56757 0 0 .72973 2.3784 -2.5135)" y1="5.5641" x1="24">
+   <stop stop-color="#fff" offset="0"/>
+   <stop stop-color="#fff" stop-opacity=".23529" offset=".036262"/>
+   <stop stop-color="#fff" stop-opacity=".15686" offset=".95056"/>
+   <stop stop-color="#fff" stop-opacity=".39216" offset="1"/>
+  </linearGradient>
+  <linearGradient id="i" y2="47.013" gradientUnits="userSpaceOnUse" x2="25.132" gradientTransform="matrix(.65714 0 0 .63012 .22856 -1.0896)" y1=".98521" x1="25.132">
+   <stop stop-color="#f4f4f4" offset="0"/>
+   <stop stop-color="#dbdbdb" offset="1"/>
+  </linearGradient>
+  <radialGradient id="d" xlink:href="#a" gradientUnits="userSpaceOnUse" cy="486.65" cx="605.71" gradientTransform="matrix(.015663 0 0 .0082353 17.61 25.981)" r="117.14"/>
+  <radialGradient id="c" xlink:href="#a" gradientUnits="userSpaceOnUse" cy="486.65" cx="605.71" gradientTransform="matrix(-.015663 0 0 .0082353 14.39 25.981)" r="117.14"/>
+  <linearGradient id="h" y2="609.51" gradientUnits="userSpaceOnUse" x2="302.86" gradientTransform="matrix(.045769 0 0 .0082353 -.54232 25.981)" y1="366.65" x1="302.86">
+   <stop stop-opacity="0" offset="0"/>
+   <stop offset=".5"/>
+   <stop stop-opacity="0" offset="1"/>
+  </linearGradient>
+  <linearGradient id="g" y2="25.726" gradientUnits="userSpaceOnUse" x2="27.401" gradientTransform="matrix(.65714 0 0 .65901 .22856 .17230)" y1="22.442" x1="27.401">
+   <stop offset="0"/>
+   <stop stop-opacity="0" offset="1"/>
+  </linearGradient>
+  <linearGradient id="f" y2="35" gradientUnits="userSpaceOnUse" x2="25" gradientTransform="matrix(.65714 0 0 .65901 .22856 .17230)" y1="12" x1="25">
+   <stop offset="0"/>
+   <stop stop-opacity="0" offset="1"/>
+  </linearGradient>
+  <radialGradient id="b" fx="30.345" gradientUnits="userSpaceOnUse" cy="10.417" cx="28.897" gradientTransform="matrix(.85740 -2.1584e-8 0 1.4143 -9.1048 9.1644)" r="20">
+   <stop stop-color="#f8b17e" offset="0"/>
+   <stop stop-color="#e35d4f" offset=".26238"/>
+   <stop stop-color="#c6262e" offset=".66094"/>
+   <stop stop-color="#690b54" offset="1"/>
+  </radialGradient>
+  <linearGradient id="e" y2="36.647" gradientUnits="userSpaceOnUse" x2="21.587" gradientTransform="matrix(.65714 0 0 .65901 -0.1 -.12653)" y1="11.492" x1="21.587">
+   <stop stop-color="#911313" offset="0"/>
+   <stop stop-color="#bc301e" offset="1"/>
+  </linearGradient>
+ </defs>
+ <g>
+  <g>
+   <rect opacity=".15" height="2" width="22.1" y="29" x="4.95" fill="url(#h)"/>
+   <path opacity=".15" d="m4.95 29v1.9999c-0.80662 0.0038-1.95-0.44807-1.95-1.0001 0-0.552 0.90012-0.99982 1.95-0.99982z" fill="url(#c)"/>
+   <path opacity=".15" d="m27.05 29v1.9999c0.80661 0.0038 1.95-0.44807 1.95-1.0001 0-0.552-0.90012-0.99982-1.95-0.99982z" fill="url(#d)"/>
+  </g>
+  <path d="m4.5 0.49996c5.2705 0 23 0.00185 23 0.00185l0.000028 28.998h-23v-29z" fill="url(#i)"/>
+ </g>
+ <path stroke-linejoin="round" d="m26.5 28.5h-21v-27h21z" stroke="url(#j)" stroke-linecap="round" fill="none"/>
+ <path stroke-linejoin="round" opacity=".3" d="m4.5 0.49996c5.2705 0 23 0.00185 23 0.00185l0.000028 28.998h-23v-29z" stroke="#000" stroke-width=".99992" fill="none"/>
+ <path opacity=".6" style="color:#000000" d="m22.499 8.0004c-2.6636-0.029674-5.0587 1.658-6.5324 3.7793-0.94364 1.305-1.5732 2.7991-2.0832 4.3148-0.69136 1.6778-1.5201 3.4583-3.0765 4.5016-0.45903 0.43459-1.0981 0.2-1.5957 0.43224-0.34845 0.3228-0.14701 0.84514-0.20078 1.2625 0.014388 0.76734-0.029122 1.5402 0.022375 2.304 0.18898 0.54758 0.88853 0.37796 1.3325 0.38828 2.2257-0.09973 4.2002-1.5034 5.3804-3.336 0.54977-0.82122 0.97797-1.7194 1.3143-2.6473 1.5061-0.0077 3.0142 0.01532 4.519-0.01144 0.47522-0.09148 0.43944-0.63085 0.42264-1.001-0.0162-0.88446 0.03272-1.7755-0.02502-2.6558-0.16487-0.50455-0.76136-0.34818-1.1638-0.37106h-1.4529c0.52776-1.2578 1.4889-2.5011 2.8611-2.8681 0.36161 0.0036 0.81834-0.19473 0.77518-0.62481-0.01611-1.0312 0.03245-2.0689-0.02468-3.096-0.06232-0.20565-0.25794-0.35925-0.47259-0.37101z" fill="#fff"/>
+ <g stroke-linecap="round">
+  <path stroke-linejoin="round" style="color:#000000" d="m9.5 20.5v3s4.9977 0.73959 7.2131-6c0.14685-0.000002 4.7869 0 4.7869 0v-3h-3s1.2833-3.7081 4-4l-0.000016-3s-5.0297-0.35936-7.7464 6.7199c-2.35 6.933-5.254 6.28-5.254 6.28z" stroke="url(#e)" fill="url(#b)"/>
+  <path opacity=".1" style="color:#000000" d="m21.5 9.8357v-1.2407c-1.6165 0.19395-3.8735 2.0585-4.8706 4.0955-0.67454 1.078-0.96187 2.016-1.4144 3.1932-0.81519 1.9428-2.1324 4.1368-4.0625 5.1513" stroke="url(#f)" fill="none"/>
+  <path opacity=".1" style="color:#000000" d="m20.5 16.656v-1.1418l-2.3993-0.02926" stroke="url(#g)" fill="none"/>
+ </g>
+</svg>
diff --git a/core/img/filetypes/folder-drag-accept.png b/core/img/filetypes/folder-drag-accept.png
new file mode 100644
index 0000000000000000000000000000000000000000..19c2d2eebd41e50454157f035df9c69dbcfc5717
Binary files /dev/null and b/core/img/filetypes/folder-drag-accept.png differ
diff --git a/core/img/filetypes/folder-drag-accept.svg b/core/img/filetypes/folder-drag-accept.svg
new file mode 100644
index 0000000000000000000000000000000000000000..a7885c80be77e1c4d9ecd1f73c2a4259856ff6f1
--- /dev/null
+++ b/core/img/filetypes/folder-drag-accept.svg
@@ -0,0 +1,335 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="32px"
+   height="32px"
+   id="svg17313"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="folder-drag-accept.svg"
+   inkscape:export-filename="folder-drag-accept.png"
+   inkscape:export-xdpi="90"
+   inkscape:export-ydpi="90">
+  <defs
+     id="defs17315">
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3454-2-5-0-3-4"
+       id="linearGradient8576"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.89186139,0,0,0.86792712,3.12074,9.575029)"
+       x1="27.557428"
+       y1="7.162672"
+       x2="27.557428"
+       y2="21.386522" />
+    <linearGradient
+       id="linearGradient3454-2-5-0-3-4">
+      <stop
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:1"
+         id="stop3456-4-9-38-1-8" />
+      <stop
+         offset="0.0097359"
+         style="stop-color:#ffffff;stop-opacity:0.23529412"
+         id="stop3458-39-80-3-5-5" />
+      <stop
+         offset="0.99001008"
+         style="stop-color:#ffffff;stop-opacity:0.15686275"
+         id="stop3460-7-0-2-4-2" />
+      <stop
+         offset="1"
+         style="stop-color:#ffffff;stop-opacity:0.39215687"
+         id="stop3462-0-9-8-7-2" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6129-963-697-142-998-580-273-5"
+       id="linearGradient8564"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.7467531,0,0,0.5519934,-1.92198,5.720099)"
+       x1="22.934725"
+       y1="49.629246"
+       x2="22.809399"
+       y2="36.657963" />
+    <linearGradient
+       id="linearGradient6129-963-697-142-998-580-273-5">
+      <stop
+         id="stop2661-1"
+         style="stop-color:#0a0a0a;stop-opacity:0.498"
+         offset="0" />
+      <stop
+         id="stop2663-85"
+         style="stop-color:#0a0a0a;stop-opacity:0"
+         offset="1" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4632-0-6-4-3-4"
+       id="linearGradient8568"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.64444432,0,0,0.54135319,0.53343,5.488719)"
+       x1="35.792694"
+       y1="17.118193"
+       x2="35.792694"
+       y2="43.761127" />
+    <linearGradient
+       id="linearGradient4632-0-6-4-3-4">
+      <stop
+         style="stop-color:#b4cee1;stop-opacity:1;"
+         offset="0"
+         id="stop4634-4-4-7-7-4" />
+      <stop
+         style="stop-color:#5d9fcd;stop-opacity:1;"
+         offset="1"
+         id="stop4636-3-1-5-1-3" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5048-585-0"
+       id="linearGradient16107"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.05114282,0,0,0.01591575,-2.4899573,22.29927)"
+       x1="302.85715"
+       y1="366.64789"
+       x2="302.85715"
+       y2="609.50507" />
+    <linearGradient
+       id="linearGradient5048-585-0">
+      <stop
+         id="stop2667-18"
+         style="stop-color:#000000;stop-opacity:0"
+         offset="0" />
+      <stop
+         id="stop2669-9"
+         style="stop-color:#000000;stop-opacity:1"
+         offset="0.5" />
+      <stop
+         id="stop2671-33"
+         style="stop-color:#000000;stop-opacity:0"
+         offset="1" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5060-179-67"
+       id="radialGradient16109"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.01983573,0,0,0.01591575,16.38765,22.29927)"
+       cx="605.71429"
+       cy="486.64789"
+       fx="605.71429"
+       fy="486.64789"
+       r="117.14286" />
+    <linearGradient
+       id="linearGradient5060-179-67">
+      <stop
+         id="stop2675-81"
+         style="stop-color:#000000;stop-opacity:1"
+         offset="0" />
+      <stop
+         id="stop2677-2"
+         style="stop-color:#000000;stop-opacity:0"
+         offset="1" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5060-820-4"
+       id="radialGradient16111"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.01983573,0,0,0.01591575,15.60139,22.29927)"
+       cx="605.71429"
+       cy="486.64789"
+       fx="605.71429"
+       fy="486.64789"
+       r="117.14286" />
+    <linearGradient
+       id="linearGradient5060-820-4">
+      <stop
+         id="stop2681-5"
+         style="stop-color:#000000;stop-opacity:1"
+         offset="0" />
+      <stop
+         id="stop2683-00"
+         style="stop-color:#000000;stop-opacity:0"
+         offset="1" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4325"
+       id="linearGradient8584"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.54383556,0,0,0.61466406,3.26879,5.091139)"
+       x1="21.37039"
+       y1="4.73244"
+       x2="21.37039"
+       y2="34.143417" />
+    <linearGradient
+       id="linearGradient4325">
+      <stop
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:1"
+         id="stop4327" />
+      <stop
+         offset="0.1106325"
+         style="stop-color:#ffffff;stop-opacity:0.23529412"
+         id="stop4329" />
+      <stop
+         offset="0.99001008"
+         style="stop-color:#ffffff;stop-opacity:0.15686275"
+         id="stop4331" />
+      <stop
+         offset="1"
+         style="stop-color:#ffffff;stop-opacity:0.39215687"
+         id="stop4333" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4646-7-4-3-5"
+       id="linearGradient8580"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.61904762,0,0,0.61904762,-30.3919,1.428569)"
+       x1="62.988873"
+       y1="17.469706"
+       x2="62.988873"
+       y2="20.469706" />
+    <linearGradient
+       id="linearGradient4646-7-4-3-5">
+      <stop
+         offset="0"
+         style="stop-color:#f9f9f9;stop-opacity:1"
+         id="stop4648-8-0-3-6" />
+      <stop
+         offset="1"
+         style="stop-color:#d8d8d8;stop-opacity:1"
+         id="stop4650-1-7-3-4" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3104-8-8-97-4-6-11-5-5-0">
+      <stop
+         offset="0"
+         style="stop-color:#000000;stop-opacity:0.32173914"
+         id="stop3106-5-4-3-5-0-2-1-0-6" />
+      <stop
+         offset="1"
+         style="stop-color:#000000;stop-opacity:0.27826086"
+         id="stop3108-4-3-7-8-2-0-7-9-1" />
+    </linearGradient>
+    <linearGradient
+       y2="3.6336823"
+       x2="-51.786404"
+       y1="53.514328"
+       x1="-51.786404"
+       gradientTransform="matrix(0.50703384,0,0,0.50300255,68.02913,1.329769)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient17311"
+       xlink:href="#linearGradient3104-8-8-97-4-6-11-5-5-0"
+       inkscape:collect="always" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="11.197802"
+     inkscape:cx="16"
+     inkscape:cy="16"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     inkscape:window-width="1366"
+     inkscape:window-height="744"
+     inkscape:window-x="0"
+     inkscape:window-y="24"
+     inkscape:window-maximized="1" />
+  <metadata
+     id="metadata17318">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <path
+       style="opacity:0.8;color:#000000;fill:none;stroke:url(#linearGradient17311);stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       id="use8307"
+       inkscape:connector-curvature="0"
+       d="m 4.00009,6.500079 c -0.43342,0.005 -0.5,0.21723 -0.5,0.6349 l 0,1.36502 c -1.24568,0 -1,-0.002 -1,0.54389 l 0,9.45611 27,-1.36005 0,-8.09606 c 0,-0.41767 -0.34799,-0.54876 -0.78141,-0.54389 l -14.21859,0 0,-1.36502 c 0,-0.41767 -0.26424,-0.63977 -0.69767,-0.6349 z"
+       sodipodi:nodetypes="csccccsccscc" />
+    <path
+       id="use8309"
+       d="m 4.00009,6.999999 0,2 -1,0 0,6 26,0 0,-6 -15,0 0,-2 z"
+       style="color:#000000;fill:url(#linearGradient8580);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccccccc" />
+    <path
+       id="use8311"
+       d="m 4.50009,7.499999 0,2 -1,0 0,6 25,0 0,-6 -15,0 0,-2 z"
+       style="color:#000000;fill:none;stroke:url(#linearGradient8584);stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccccccc" />
+    <g
+       id="use8313"
+       transform="translate(9e-5,-1.000001)">
+      <rect
+         style="opacity:0.3;fill:url(#linearGradient16107);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible"
+         id="rect16101"
+         y="28.134747"
+         x="3.6471815"
+         height="3.8652544"
+         width="24.694677" />
+      <path
+         style="opacity:0.3;fill:url(#radialGradient16109);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible"
+         id="path16103"
+         inkscape:connector-curvature="0"
+         d="m 28.341859,28.13488 c 0,0 0,3.865041 0,3.865041 1.021491,0.0073 2.469468,-0.86596 2.469468,-1.932769 0,-1.06681 -1.139908,-1.932272 -2.469468,-1.932272 z" />
+      <path
+         style="opacity:0.3;fill:url(#radialGradient16111);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible"
+         id="path16105"
+         inkscape:connector-curvature="0"
+         d="m 3.6471816,28.13488 c 0,0 0,3.865041 0,3.865041 -1.0214912,0.0073 -2.4694678,-0.86596 -2.4694678,-1.932769 0,-1.06681 1.1399068,-1.932272 2.4694678,-1.932272 z" />
+    </g>
+    <path
+       style="color:#000000;fill:url(#linearGradient8568);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.9176628;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       id="use8315"
+       inkscape:connector-curvature="0"
+       d="m 0.92644,14.421049 c -0.69105,0.067 -0.32196,0.76007 -0.37705,1.14977 0.0802,0.25184 1.5982,13.2362 1.5982,13.68205 0,0.38752 0.22667,0.32187 0.80101,0.32187 8.4994,0 17.89808,0 26.39748,0 0.61872,0.012 0.48796,0.006 0.48796,-0.32797 0.0452,-0.17069 1.63945,-14.29767 1.66234,-14.52079 0,-0.23495 0.0581,-0.30493 -0.30493,-0.30493 -9.0765,0 -21.1885,0 -30.26501,0 z"
+       sodipodi:nodetypes="ccsscccsc" />
+    <path
+       style="opacity:0.4;fill:url(#linearGradient8564);fill-opacity:1;stroke:none"
+       id="use8317"
+       inkscape:connector-curvature="0"
+       d="m 0.68182,13.999999 30.63618,2.3e-4 c 0.4137,0 0.68181,0.24597 0.68181,0.55177 l -1.67322,14.91546 c 0.01,0.38693 -0.1364,0.54035 -0.61707,0.53224 l -27.25613,-0.01 c -0.4137,0 -0.83086,-0.22836 -0.83086,-0.53417 L 0,14.551709 c 0,-0.3058 0.26812,-0.55199 0.68182,-0.55199 z"
+       sodipodi:nodetypes="cscccccccc" />
+    <path
+       sodipodi:nodetypes="ccccc"
+       inkscape:connector-curvature="0"
+       id="use8572"
+       d="m 1.49991,15.411759 1.62516,13.17647 25.74917,0 1.62467,-13.17647 z"
+       style="opacity:0.5;color:#000000;fill:none;stroke:url(#linearGradient8576);stroke-width:0.90748531;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
+    <path
+       style="opacity:0.3;color:#000000;fill:none;stroke:#000000;stroke-width:0.9176628;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+       id="use8315-2"
+       inkscape:connector-curvature="0"
+       d="m 0.92644,14.42105 c -0.69105,0.067 -0.32196,0.76007 -0.37705,1.14977 0.0802,0.25184 1.5982,13.236199 1.5982,13.682049 0,0.38752 0.22667,0.32187 0.80101,0.32187 8.4994,0 17.89808,0 26.39748,0 0.61872,0.012 0.48796,0.006 0.48796,-0.32797 0.0452,-0.17069 1.63945,-14.297669 1.66234,-14.520789 0,-0.23495 0.0581,-0.30493 -0.30493,-0.30493 -9.0765,0 -21.1885,0 -30.26501,0 z"
+       sodipodi:nodetypes="ccsscccsc" />
+  </g>
+</svg>
diff --git a/core/img/filetypes/folder-external.png b/core/img/filetypes/folder-external.png
new file mode 100644
index 0000000000000000000000000000000000000000..997f07b2bacc1ae5bb09b5addb1539254fffb6c6
Binary files /dev/null and b/core/img/filetypes/folder-external.png differ
diff --git a/core/img/filetypes/folder-external.svg b/core/img/filetypes/folder-external.svg
new file mode 100644
index 0000000000000000000000000000000000000000..89ec9a8ecaae43de01426d4946890aae0e2ec016
--- /dev/null
+++ b/core/img/filetypes/folder-external.svg
@@ -0,0 +1,68 @@
+<svg xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="32px" width="32px" version="1.1" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/">
+ <metadata>
+  <rdf:RDF>
+   <cc:Work rdf:about="">
+    <dc:format>image/svg+xml</dc:format>
+    <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
+    <dc:title/>
+   </cc:Work>
+  </rdf:RDF>
+ </metadata>
+ <defs>
+  <linearGradient id="c" y2="21.387" gradientUnits="userSpaceOnUse" x2="27.557" gradientTransform="matrix(.89186 0 0 1.0539 3.1208 5.4125)" y1="7.1627" x1="27.557">
+   <stop stop-color="#fff" offset="0"/>
+   <stop stop-color="#fff" stop-opacity=".23529" offset="0.0097359"/>
+   <stop stop-color="#fff" stop-opacity=".15686" offset="0.99001"/>
+   <stop stop-color="#fff" stop-opacity=".39216" offset="1"/>
+  </linearGradient>
+  <linearGradient id="d" y2="36.658" gradientUnits="userSpaceOnUse" x2="22.809" gradientTransform="matrix(0.74675,0,0,0.65549,-1.9219,3.1676)" y1="49.629" x1="22.935">
+   <stop stop-color="#0a0a0a" stop-opacity=".498" offset="0"/>
+   <stop stop-color="#0a0a0a" stop-opacity="0" offset="1"/>
+  </linearGradient>
+  <linearGradient id="e" y2="43.761" gradientUnits="userSpaceOnUse" x2="35.793" gradientTransform="matrix(.64444 0 0 .64286 .53352 .89286)" y1="17.118" x1="35.793">
+   <stop stop-color="#b4cee1" offset="0"/>
+   <stop stop-color="#5d9fcd" offset="1"/>
+  </linearGradient>
+  <linearGradient id="f" y2="609.51" gradientUnits="userSpaceOnUse" x2="302.86" gradientTransform="matrix(.051143 0 0 .015916 -2.49 22.299)" y1="366.65" x1="302.86">
+   <stop stop-opacity="0" offset="0"/>
+   <stop offset="0.5"/>
+   <stop stop-opacity="0" offset="1"/>
+  </linearGradient>
+  <radialGradient id="b" gradientUnits="userSpaceOnUse" cy="486.65" cx="605.71" gradientTransform="matrix(.019836 0 0 .015916 16.388 22.299)" r="117.14">
+   <stop offset="0"/>
+   <stop stop-opacity="0" offset="1"/>
+  </radialGradient>
+  <radialGradient id="a" gradientUnits="userSpaceOnUse" cy="486.65" cx="605.71" gradientTransform="matrix(-.019836 0 0 .015916 15.601 22.299)" r="117.14">
+   <stop offset="0"/>
+   <stop stop-opacity="0" offset="1"/>
+  </radialGradient>
+  <linearGradient id="g" y2="34.143" gradientUnits="userSpaceOnUse" x2="21.37" gradientTransform="matrix(.54384 0 0 .61466 3.2689 5.0911)" y1="4.7324" x1="21.37">
+   <stop stop-color="#fff" offset="0"/>
+   <stop stop-color="#fff" stop-opacity=".23529" offset="0.11063"/>
+   <stop stop-color="#fff" stop-opacity=".15686" offset="0.99001"/>
+   <stop stop-color="#fff" stop-opacity=".39216" offset="1"/>
+  </linearGradient>
+  <linearGradient id="h" y2="16" gradientUnits="userSpaceOnUse" x2="62.989" gradientTransform="matrix(.61905 0 0 .61905 -30.392 1.4286)" y1="13" x1="62.989">
+   <stop stop-color="#f9f9f9" offset="0"/>
+   <stop stop-color="#d8d8d8" offset="1"/>
+  </linearGradient>
+  <linearGradient id="i" y2="3.6337" gradientUnits="userSpaceOnUse" y1="53.514" gradientTransform="matrix(.50703 0 0 0.503 68.029 1.3298)" x2="-51.786" x1="-51.786">
+   <stop stop-opacity=".32174" offset="0"/>
+   <stop stop-opacity=".27826" offset="1"/>
+  </linearGradient>
+ </defs>
+ <path opacity=".8" style="color:#000000;" d="m4.0002,6.5001c-0.43342,0.005-0.5,0.21723-0.5,0.6349v1.365c-1.2457,0-1-0.002-1,0.54389,0.0216,6.5331,0,6.9014,0,7.4561,0.90135,0,27-2.349,27-3.36v-4.0961c0-0.41767-0.34799-0.54876-0.78141-0.54389h-14.219v-1.365c0-0.41767-0.26424-0.63977-0.69767-0.6349h-9.8023z" stroke="url(#i)" fill="none"/>
+ <path style="color:#000000;" d="m4.0002,7v2h-1v4h26v-4h-15v-2h-10z" fill="url(#h)"/>
+ <path style="color:#000000;" d="m4.5002,7.5v2h-1v4h25v-4h-15v-2h-9z" stroke="url(#g)" stroke-linecap="round" fill="none"/>
+ <g transform="translate(.00017936 -1)">
+  <rect opacity="0.3" height="3.8653" width="24.695" y="28.135" x="3.6472" fill="url(#f)"/>
+  <path opacity=".3" d="m28.342,28.135v3.865c1.0215,0.0073,2.4695-0.86596,2.4695-1.9328s-1.1399-1.9323-2.4695-1.9323z" fill="url(#b)"/>
+  <path opacity=".3" d="m3.6472,28.135v3.865c-1.0215,0.0073-2.4695-0.86596-2.4695-1.9328s1.1399-1.9323,2.4695-1.9323z" fill="url(#a)"/>
+ </g>
+ <path style="color:#000000;" d="m1.927,11.5c-0.69105,0.0796-0.32196,0.90258-0.37705,1.3654,0.0802,0.29906,0.59771,15.718,0.59771,16.247,0,0.46018,0.22667,0.38222,0.80101,0.38222h26.397c0.61872,0.0143,0.48796,0.007,0.48796-0.38947,0.0452-0.20269,0.63993-16.978,0.66282-17.243,0-0.279,0.0581-0.3621-0.30493-0.3621h-28.265z" fill="url(#e)"/>
+ <path opacity="0.4" fill="url(#d)" d="m1.682,13,28.636,0.00027c0.4137,0,0.68181,0.29209,0.68181,0.65523l-0.6735,17.712c0.01,0.45948-0.1364,0.64166-0.61707,0.63203l-27.256-0.0115c-0.4137,0-0.83086-0.27118-0.83086-0.63432l-0.62244-17.698c0-0.36314,0.26812-0.65549,0.68182-0.65549z"/>
+ <path opacity=".5" style="color:#000000;" d="m2.5002,12.5,0.62498,16h25.749l0.62498-16z" stroke="url(#c)" stroke-linecap="round" fill="none"/>
+ <path opacity=".3" stroke-linejoin="round" style="color:#000000;" d="m1.927,11.5c-0.69105,0.0796-0.32196,0.90258-0.37705,1.3654,0.0802,0.29906,0.59771,15.718,0.59771,16.247,0,0.46018,0.22667,0.38222,0.80101,0.38222h26.397c0.61872,0.0143,0.48796,0.007,0.48796-0.38947,0.0452-0.20269,0.63993-16.978,0.66282-17.243,0-0.279,0.0581-0.3621-0.30493-0.3621h-28.265z" stroke="#000" stroke-linecap="round" fill="none"/>
+ <path opacity="0.3" fill="#FFF" d="m16,16,2,2-3,3,2,2,3-3,2,2,0-6-6,0zm-4,1c-0.554,0-1,0.446-1,1v8c0,0.554,0.446,1,1,1h8c0.554,0,1-0.446,1-1v-3l-1-1v4h-8v-8h4l-1-1h-3z"/>
+ <path opacity="0.7" fill="#000" d="m16,15,2,2-3,3,2,2,3-3,2,2,0-6-6,0zm-4,1c-0.554,0-1,0.446-1,1v8c0,0.554,0.446,1,1,1h8c0.554,0,1-0.446,1-1v-3l-1-1v4h-8v-8h4l-1-1h-3z"/>
+</svg>
diff --git a/core/img/filetypes/folder-public.png b/core/img/filetypes/folder-public.png
new file mode 100644
index 0000000000000000000000000000000000000000..c716607e26e3c2cf8f82dd754e820d475cb99f70
Binary files /dev/null and b/core/img/filetypes/folder-public.png differ
diff --git a/core/img/filetypes/folder-public.svg b/core/img/filetypes/folder-public.svg
new file mode 100644
index 0000000000000000000000000000000000000000..a949833f95a49f570750c3faed1016db06f4a0a2
--- /dev/null
+++ b/core/img/filetypes/folder-public.svg
@@ -0,0 +1,68 @@
+<svg xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="32px" width="32px" version="1.1" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/">
+ <metadata>
+  <rdf:RDF>
+   <cc:Work rdf:about="">
+    <dc:format>image/svg+xml</dc:format>
+    <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
+    <dc:title/>
+   </cc:Work>
+  </rdf:RDF>
+ </metadata>
+ <defs>
+  <linearGradient id="c" y2="21.387" gradientUnits="userSpaceOnUse" x2="27.557" gradientTransform="matrix(.89186 0 0 1.0539 3.1208 5.4125)" y1="7.1627" x1="27.557">
+   <stop stop-color="#fff" offset="0"/>
+   <stop stop-color="#fff" stop-opacity=".23529" offset="0.0097359"/>
+   <stop stop-color="#fff" stop-opacity=".15686" offset="0.99001"/>
+   <stop stop-color="#fff" stop-opacity=".39216" offset="1"/>
+  </linearGradient>
+  <linearGradient id="d" y2="36.658" gradientUnits="userSpaceOnUse" x2="22.809" gradientTransform="matrix(0.74675,0,0,0.65549,-1.9219,3.1676)" y1="49.629" x1="22.935">
+   <stop stop-color="#0a0a0a" stop-opacity=".498" offset="0"/>
+   <stop stop-color="#0a0a0a" stop-opacity="0" offset="1"/>
+  </linearGradient>
+  <linearGradient id="e" y2="43.761" gradientUnits="userSpaceOnUse" x2="35.793" gradientTransform="matrix(.64444 0 0 .64286 .53352 .89286)" y1="17.118" x1="35.793">
+   <stop stop-color="#b4cee1" offset="0"/>
+   <stop stop-color="#5d9fcd" offset="1"/>
+  </linearGradient>
+  <linearGradient id="f" y2="609.51" gradientUnits="userSpaceOnUse" x2="302.86" gradientTransform="matrix(.051143 0 0 .015916 -2.49 22.299)" y1="366.65" x1="302.86">
+   <stop stop-opacity="0" offset="0"/>
+   <stop offset="0.5"/>
+   <stop stop-opacity="0" offset="1"/>
+  </linearGradient>
+  <radialGradient id="b" gradientUnits="userSpaceOnUse" cy="486.65" cx="605.71" gradientTransform="matrix(.019836 0 0 .015916 16.388 22.299)" r="117.14">
+   <stop offset="0"/>
+   <stop stop-opacity="0" offset="1"/>
+  </radialGradient>
+  <radialGradient id="a" gradientUnits="userSpaceOnUse" cy="486.65" cx="605.71" gradientTransform="matrix(-.019836 0 0 .015916 15.601 22.299)" r="117.14">
+   <stop offset="0"/>
+   <stop stop-opacity="0" offset="1"/>
+  </radialGradient>
+  <linearGradient id="g" y2="34.143" gradientUnits="userSpaceOnUse" x2="21.37" gradientTransform="matrix(.54384 0 0 .61466 3.2689 5.0911)" y1="4.7324" x1="21.37">
+   <stop stop-color="#fff" offset="0"/>
+   <stop stop-color="#fff" stop-opacity=".23529" offset="0.11063"/>
+   <stop stop-color="#fff" stop-opacity=".15686" offset="0.99001"/>
+   <stop stop-color="#fff" stop-opacity=".39216" offset="1"/>
+  </linearGradient>
+  <linearGradient id="h" y2="16" gradientUnits="userSpaceOnUse" x2="62.989" gradientTransform="matrix(.61905 0 0 .61905 -30.392 1.4286)" y1="13" x1="62.989">
+   <stop stop-color="#f9f9f9" offset="0"/>
+   <stop stop-color="#d8d8d8" offset="1"/>
+  </linearGradient>
+  <linearGradient id="i" y2="3.6337" gradientUnits="userSpaceOnUse" y1="53.514" gradientTransform="matrix(.50703 0 0 0.503 68.029 1.3298)" x2="-51.786" x1="-51.786">
+   <stop stop-opacity=".32174" offset="0"/>
+   <stop stop-opacity=".27826" offset="1"/>
+  </linearGradient>
+ </defs>
+ <path opacity=".8" style="color:#000000;" d="m4.0002,6.5001c-0.43342,0.005-0.5,0.21723-0.5,0.6349v1.365c-1.2457,0-1-0.002-1,0.54389,0.0216,6.5331,0,6.9014,0,7.4561,0.90135,0,27-2.349,27-3.36v-4.0961c0-0.41767-0.34799-0.54876-0.78141-0.54389h-14.219v-1.365c0-0.41767-0.26424-0.63977-0.69767-0.6349h-9.8023z" stroke="url(#i)" fill="none"/>
+ <path style="color:#000000;" d="m4.0002,7v2h-1v4h26v-4h-15v-2h-10z" fill="url(#h)"/>
+ <path style="color:#000000;" d="m4.5002,7.5v2h-1v4h25v-4h-15v-2h-9z" stroke="url(#g)" stroke-linecap="round" fill="none"/>
+ <g transform="translate(.00017936 -1)">
+  <rect opacity="0.3" height="3.8653" width="24.695" y="28.135" x="3.6472" fill="url(#f)"/>
+  <path opacity=".3" d="m28.342,28.135v3.865c1.0215,0.0073,2.4695-0.86596,2.4695-1.9328s-1.1399-1.9323-2.4695-1.9323z" fill="url(#b)"/>
+  <path opacity=".3" d="m3.6472,28.135v3.865c-1.0215,0.0073-2.4695-0.86596-2.4695-1.9328s1.1399-1.9323,2.4695-1.9323z" fill="url(#a)"/>
+ </g>
+ <path style="color:#000000;" d="m1.927,11.5c-0.69105,0.0796-0.32196,0.90258-0.37705,1.3654,0.0802,0.29906,0.59771,15.718,0.59771,16.247,0,0.46018,0.22667,0.38222,0.80101,0.38222h26.397c0.61872,0.0143,0.48796,0.007,0.48796-0.38947,0.0452-0.20269,0.63993-16.978,0.66282-17.243,0-0.279,0.0581-0.3621-0.30493-0.3621h-28.265z" fill="url(#e)"/>
+ <path opacity="0.4" fill="url(#d)" d="m1.682,13,28.636,0.00027c0.4137,0,0.68181,0.29209,0.68181,0.65523l-0.6735,17.712c0.01,0.45948-0.1364,0.64166-0.61707,0.63203l-27.256-0.0115c-0.4137,0-0.83086-0.27118-0.83086-0.63432l-0.62244-17.698c0-0.36314,0.26812-0.65549,0.68182-0.65549z"/>
+ <path opacity=".5" style="color:#000000;" d="m2.5002,12.5,0.62498,16h25.749l0.62498-16z" stroke="url(#c)" stroke-linecap="round" fill="none"/>
+ <path opacity=".3" stroke-linejoin="round" style="color:#000000;" d="m1.927,11.5c-0.69105,0.0796-0.32196,0.90258-0.37705,1.3654,0.0802,0.29906,0.59771,15.718,0.59771,16.247,0,0.46018,0.22667,0.38222,0.80101,0.38222h26.397c0.61872,0.0143,0.48796,0.007,0.48796-0.38947,0.0452-0.20269,0.63993-16.978,0.66282-17.243,0-0.279,0.0581-0.3621-0.30493-0.3621h-28.265z" stroke="#000" stroke-linecap="round" fill="none"/>
+ <path opacity="0.3" fill="#FFF" d="m16,14c-3.866,0-7,3.134-7,7s3.134,7,7,7,7-3.134,7-7-3.134-7-7-7zm0.80208,0.89323c1.2011,0.02671,2.2625,0.74821,3.3359,1.2214l1.732,2.3971-0.274,1.03,0.529,0.3281-0.009,1.2213c-0.0121,0.34937,0.005,0.69921-0.0091,1.0482-0.16635,0.66235-0.55063,1.2666-0.875,1.8685-0.21989,0.10841,0.02005-0.7185-0.11849-0.97526,0.032-0.5934-0.471-0.566-0.811-0.2364-0.421,0.2454-1.346,0.3194-1.376-0.3464-0.239-0.8001-0.035-1.6526,0.291-2.3971l-0.537-0.6563,0.191-1.6862-0.857-0.8658,0.201-0.948-1.0028-0.5651c-0.1977-0.1552-0.5738-0.2166-0.6563-0.4284,0.0814-0.0046,0.166-0.0109,0.2461-0.0091zm-2.4609,0.0091c0.03144,0.0046,0.06999,0.02643,0.1276,0.07292,0.338,0.1857-0.0825,0.3964-0.1823,0.5925-0.5398,0.3651,0.166,0.6641,0.401,0.957,0.3767-0.1082,0.7535-0.6467,1.3034-0.483,0.7034-0.2195,0.5913,0.5891,0.9935,0.9479,0.0522,0.1689,0.88,0.7185,0.3828,0.5377-0.4095-0.3174-0.8649-0.2935-1.1576,0.1641-0.7909,0.4286-0.3228-0.8252-0.7018-1.1302-0.5729-0.6392-0.3328,0.4775-0.401,0.8112-0.3725-0.0081-1.0681-0.2866-1.4492,0.1641l0.3736,0.6106,0.4467-0.6836c0.1085-0.2474,0.2447,0.1923,0.3645,0.2735,0.1431,0.2759,0.823,0.7434,0.3099,0.875-0.7606,0.4219-1.3589,1.0618-2.0052,1.6315-0.218,0.46-0.663,0.4074-0.9388,0.0273-0.6672-0.4105-0.6177,0.6566-0.5833,1.0573l0.58333-0.36458v0.60156c-0.0165,0.1138-0.0024,0.2322-0.0091,0.3464-0.4087,0.427-0.8207-0.5995-1.1758-0.8295l-0.0273-1.5039c0.0129-0.4225-0.0763-0.8551,0.0091-1.2669,0.8038-0.8625,1.6202-1.7561,2.0964-2.8529h0.78385c0.5478,0.2654,0.2357-0.5881,0.4557-0.556zm-1.1576,7.8204c0.0951-0.01014,0.20328,0.01157,0.31901,0.07292,0.73794,0.10562,1.2897,0.6409,1.8776,1.0482,0.46872,0.46452,1.4828,0.31578,1.5951,1.1029-0.17061,0.85375-1.0105,1.3122-1.75,1.6133-0.1846,0.103-0.383,0.185-0.5925,0.219-0.6856,0.171-0.982-0.532-1.1211-1.058-0.3104-0.65-1.0862-1.142-0.9752-1.941,0.0182-0.397,0.235-1.0134,0.6471-1.0573z"/>
+ <path opacity="0.7" d="m16,13c-3.866,0-7,3.134-7,7s3.134,7,7,7,7-3.134,7-7-3.134-7-7-7zm0.80208,0.89323c1.2011,0.02671,2.2625,0.74821,3.3359,1.2214l1.732,2.3971-0.274,1.03,0.529,0.3281-0.009,1.2213c-0.0121,0.34937,0.005,0.69921-0.0091,1.0482-0.16635,0.66235-0.55063,1.2666-0.875,1.8685-0.21989,0.10841,0.02005-0.7185-0.11849-0.97526,0.032-0.5934-0.471-0.566-0.811-0.2364-0.421,0.2454-1.346,0.3194-1.376-0.3464-0.239-0.8001-0.035-1.6526,0.291-2.3971l-0.537-0.6563,0.191-1.6862-0.857-0.8658,0.201-0.948-1.0028-0.5651c-0.1977-0.1552-0.5738-0.2166-0.6563-0.4284,0.0814-0.0046,0.166-0.0109,0.2461-0.0091zm-2.4609,0.0091c0.03144,0.0046,0.06999,0.02643,0.1276,0.07292,0.338,0.1857-0.0825,0.3964-0.1823,0.5925-0.5398,0.3651,0.166,0.6641,0.401,0.957,0.3767-0.1082,0.7535-0.6467,1.3034-0.483,0.7034-0.2195,0.5913,0.5891,0.9935,0.9479,0.0522,0.1689,0.88,0.7185,0.3828,0.5377-0.4095-0.3174-0.8649-0.2935-1.1576,0.1641-0.7909,0.4286-0.3228-0.8252-0.7018-1.1302-0.5729-0.6392-0.3328,0.4775-0.401,0.8112-0.3725-0.0081-1.0681-0.2866-1.4492,0.1641l0.3736,0.6106,0.4467-0.6836c0.1085-0.2474,0.2447,0.1923,0.3645,0.2735,0.1431,0.2759,0.823,0.7434,0.3099,0.875-0.7606,0.4219-1.3589,1.0618-2.0052,1.6315-0.218,0.46-0.663,0.4074-0.9388,0.0273-0.6672-0.4105-0.6177,0.6566-0.5833,1.0573l0.58333-0.36458v0.60156c-0.0165,0.1138-0.0024,0.2322-0.0091,0.3464-0.4087,0.427-0.8207-0.5995-1.1758-0.8295l-0.0273-1.5039c0.0129-0.4225-0.0763-0.8551,0.0091-1.2669,0.8038-0.8625,1.6202-1.7561,2.0964-2.8529h0.78385c0.5478,0.2654,0.2357-0.5881,0.4557-0.556zm-1.1576,7.8204c0.0951-0.01014,0.20328,0.01157,0.31901,0.07292,0.73794,0.10562,1.2897,0.6409,1.8776,1.0482,0.46872,0.46452,1.4828,0.31578,1.5951,1.1029-0.17061,0.85375-1.0105,1.3122-1.75,1.6133-0.1846,0.103-0.383,0.185-0.5925,0.219-0.6856,0.171-0.982-0.532-1.1211-1.058-0.3104-0.65-1.0862-1.142-0.9752-1.941,0.0182-0.397,0.235-1.0134,0.6471-1.0573z"/>
+</svg>
diff --git a/core/img/filetypes/folder-shared.png b/core/img/filetypes/folder-shared.png
new file mode 100644
index 0000000000000000000000000000000000000000..e547a242062eb9687929fb640e99d33468e85500
Binary files /dev/null and b/core/img/filetypes/folder-shared.png differ
diff --git a/core/img/filetypes/folder-shared.svg b/core/img/filetypes/folder-shared.svg
new file mode 100644
index 0000000000000000000000000000000000000000..56aa9634d27306803bc02897f76afc5a52c772a2
--- /dev/null
+++ b/core/img/filetypes/folder-shared.svg
@@ -0,0 +1,68 @@
+<svg xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="32px" width="32px" version="1.1" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/">
+ <metadata>
+  <rdf:RDF>
+   <cc:Work rdf:about="">
+    <dc:format>image/svg+xml</dc:format>
+    <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
+    <dc:title/>
+   </cc:Work>
+  </rdf:RDF>
+ </metadata>
+ <defs>
+  <linearGradient id="c" y2="21.387" gradientUnits="userSpaceOnUse" x2="27.557" gradientTransform="matrix(.89186 0 0 1.0539 3.1208 5.4125)" y1="7.1627" x1="27.557">
+   <stop stop-color="#fff" offset="0"/>
+   <stop stop-color="#fff" stop-opacity=".23529" offset="0.0097359"/>
+   <stop stop-color="#fff" stop-opacity=".15686" offset="0.99001"/>
+   <stop stop-color="#fff" stop-opacity=".39216" offset="1"/>
+  </linearGradient>
+  <linearGradient id="d" y2="36.658" gradientUnits="userSpaceOnUse" x2="22.809" gradientTransform="matrix(.74675 0 0 .65549 -1.9219 1.1676)" y1="49.629" x1="22.935">
+   <stop stop-color="#0a0a0a" stop-opacity=".498" offset="0"/>
+   <stop stop-color="#0a0a0a" stop-opacity="0" offset="1"/>
+  </linearGradient>
+  <linearGradient id="e" y2="43.761" gradientUnits="userSpaceOnUse" x2="35.793" gradientTransform="matrix(.64444 0 0 .64286 .53352 .89286)" y1="17.118" x1="35.793">
+   <stop stop-color="#b4cee1" offset="0"/>
+   <stop stop-color="#5d9fcd" offset="1"/>
+  </linearGradient>
+  <linearGradient id="f" y2="609.51" gradientUnits="userSpaceOnUse" x2="302.86" gradientTransform="matrix(.051143 0 0 .015916 -2.49 22.299)" y1="366.65" x1="302.86">
+   <stop stop-opacity="0" offset="0"/>
+   <stop offset="0.5"/>
+   <stop stop-opacity="0" offset="1"/>
+  </linearGradient>
+  <radialGradient id="b" gradientUnits="userSpaceOnUse" cy="486.65" cx="605.71" gradientTransform="matrix(.019836 0 0 .015916 16.388 22.299)" r="117.14">
+   <stop offset="0"/>
+   <stop stop-opacity="0" offset="1"/>
+  </radialGradient>
+  <radialGradient id="a" gradientUnits="userSpaceOnUse" cy="486.65" cx="605.71" gradientTransform="matrix(-.019836 0 0 .015916 15.601 22.299)" r="117.14">
+   <stop offset="0"/>
+   <stop stop-opacity="0" offset="1"/>
+  </radialGradient>
+  <linearGradient id="g" y2="34.143" gradientUnits="userSpaceOnUse" x2="21.37" gradientTransform="matrix(.54384 0 0 .61466 3.2689 5.0911)" y1="4.7324" x1="21.37">
+   <stop stop-color="#fff" offset="0"/>
+   <stop stop-color="#fff" stop-opacity=".23529" offset="0.11063"/>
+   <stop stop-color="#fff" stop-opacity=".15686" offset="0.99001"/>
+   <stop stop-color="#fff" stop-opacity=".39216" offset="1"/>
+  </linearGradient>
+  <linearGradient id="h" y2="16" gradientUnits="userSpaceOnUse" x2="62.989" gradientTransform="matrix(.61905 0 0 .61905 -30.392 1.4286)" y1="13" x1="62.989">
+   <stop stop-color="#f9f9f9" offset="0"/>
+   <stop stop-color="#d8d8d8" offset="1"/>
+  </linearGradient>
+  <linearGradient id="i" y2="3.6337" gradientUnits="userSpaceOnUse" y1="53.514" gradientTransform="matrix(.50703 0 0 0.503 68.029 1.3298)" x2="-51.786" x1="-51.786">
+   <stop stop-opacity=".32174" offset="0"/>
+   <stop stop-opacity=".27826" offset="1"/>
+  </linearGradient>
+ </defs>
+ <path opacity=".8" style="color:#000000;" d="m4.0002,6.5001c-0.43342,0.005-0.5,0.21723-0.5,0.6349v1.365c-1.2457,0-1-0.002-1,0.54389,0.0216,6.5331,0,6.9014,0,7.4561,0.90135,0,27-2.349,27-3.36v-4.0961c0-0.41767-0.34799-0.54876-0.78141-0.54389h-14.219v-1.365c0-0.41767-0.26424-0.63977-0.69767-0.6349h-9.8023z" stroke="url(#i)" fill="none"/>
+ <path style="color:#000000;" d="m4.0002,7v2h-1v4h26v-4h-15v-2h-10z" fill="url(#h)"/>
+ <path style="color:#000000;" d="m4.5002,7.5v2h-1v4h25v-4h-15v-2h-9z" stroke="url(#g)" stroke-linecap="round" fill="none"/>
+ <g transform="translate(.00017936 -1)">
+  <rect opacity="0.3" height="3.8653" width="24.695" y="28.135" x="3.6472" fill="url(#f)"/>
+  <path opacity=".3" d="m28.342,28.135v3.865c1.0215,0.0073,2.4695-0.86596,2.4695-1.9328s-1.1399-1.9323-2.4695-1.9323z" fill="url(#b)"/>
+  <path opacity=".3" d="m3.6472,28.135v3.865c-1.0215,0.0073-2.4695-0.86596-2.4695-1.9328s1.1399-1.9323,2.4695-1.9323z" fill="url(#a)"/>
+ </g>
+ <path style="color:#000000;" d="m1.927,11.5c-0.69105,0.0796-0.32196,0.90258-0.37705,1.3654,0.0802,0.29906,0.59771,15.718,0.59771,16.247,0,0.46018,0.22667,0.38222,0.80101,0.38222h26.397c0.61872,0.0143,0.48796,0.007,0.48796-0.38947,0.0452-0.20269,0.63993-16.978,0.66282-17.243,0-0.279,0.0581-0.3621-0.30493-0.3621h-28.265z" fill="url(#e)"/>
+ <path opacity=".4" d="m1.682,11,28.636,0.00027c0.4137,0,0.68181,0.29209,0.68181,0.65523l-0.6735,17.712c0.01,0.45948-0.1364,0.64166-0.61707,0.63203l-27.256-0.0115c-0.4137,0-0.83086-0.27118-0.83086-0.63432l-0.62244-17.698c0-0.36314,0.26812-0.65549,0.68182-0.65549z" fill="url(#d)"/>
+ <path opacity=".5" style="color:#000000;" d="m2.5002,12.5,0.62498,16h25.749l0.62498-16z" stroke="url(#c)" stroke-linecap="round" fill="none"/>
+ <path opacity=".3" stroke-linejoin="round" style="color:#000000;" d="m1.927,11.5c-0.69105,0.0796-0.32196,0.90258-0.37705,1.3654,0.0802,0.29906,0.59771,15.718,0.59771,16.247,0,0.46018,0.22667,0.38222,0.80101,0.38222h26.397c0.61872,0.0143,0.48796,0.007,0.48796-0.38947,0.0452-0.20269,0.63993-16.978,0.66282-17.243,0-0.279,0.0581-0.3621-0.30493-0.3621h-28.265z" stroke="#000" stroke-linecap="round" fill="none"/>
+ <path opacity="0.3" style="block-progression:tb;text-indent:0;color:#000000;text-transform:none;" fill="#FFF" d="m12.388,16.483c-0.96482,0-1.7833,0.70559-1.7833,1.6162,0.0069,0.28781,0.03259,0.64272,0.20434,1.3933v0.01858l0.01857,0.01857c0.05513,0.15793,0.13537,0.24827,0.24149,0.37154,0.10612,0.12326,0.23263,0.26834,0.35294,0.39011,0.01415,0.01433,0.02323,0.0232,0.03715,0.03716,0.02386,0.10383,0.05276,0.21557,0.0743,0.3158,0.05732,0.26668,0.05144,0.45553,0.03716,0.52015-0.4146,0.1454-0.9304,0.3187-1.3932,0.5199-0.2598,0.113-0.4949,0.2139-0.6873,0.3344-0.1923,0.1206-0.3836,0.2116-0.4458,0.483-0.000797,0.01237-0.000797,0.02479,0,0.03716-0.06076,0.55788-0.15266,1.3783-0.22291,1.932-0.015166,0.11656,0.046264,0.23943,0.14861,0.29723,0.84033,0.45393,2.1312,0.63663,3.418,0.63161,1.2868-0.005,2.5674-0.19845,3.3808-0.63161,0.10234-0.0578,0.16378-0.18067,0.14861-0.29723-0.0224-0.173-0.05-0.5633-0.0743-0.9474-0.0243-0.384-0.0454-0.7617-0.0743-0.9845-0.0101-0.0552-0.0362-0.1074-0.0743-0.1486-0.2584-0.3086-0.6445-0.4973-1.096-0.6874-0.4122-0.1735-0.8954-0.3538-1.3746-0.5573-0.02682-0.05975-0.05346-0.23358,0-0.50157,0.01436-0.07196,0.03684-0.14903,0.05573-0.22292,0.04503-0.05044,0.08013-0.09166,0.13003-0.14861,0.1064-0.1215,0.2207-0.2489,0.3157-0.3715,0.0951-0.1226,0.1728-0.2279,0.223-0.3715l0.01857-0.01858c0.1941-0.7837,0.1942-1.1107,0.2043-1.3933v-0.01857c0-0.91058-0.81848-1.6162-1.7833-1.6162zm5.101-1.4831c-1.4067,0-2.6,1.0287-2.6,2.3562,0.01,0.4196,0.04751,0.93701,0.29791,2.0312v0.02708l0.02708,0.02708c0.08038,0.23025,0.19736,0.36196,0.35208,0.54166s0.33917,0.39121,0.51458,0.56874c0.02064,0.02089,0.03386,0.03383,0.05416,0.05418,0.03479,0.15137,0.07693,0.31428,0.10833,0.46041,0.08357,0.38879,0.07499,0.66411,0.05417,0.75832-0.6045,0.2122-1.3565,0.465-2.0312,0.7583-0.3789,0.1647-0.7217,0.3118-1.0021,0.4875-0.28044,0.17574-0.55934,0.30851-0.64999,0.70416-0.0012,0.01804-0.0012,0.03613,0,0.05418-0.08858,0.81334-0.22257,2.0094-0.325,2.8166-0.02211,0.16993,0.06745,0.34906,0.21666,0.43333,1.2252,0.66179,3.1072,0.92814,4.9833,0.92082,1.8761-0.0073,3.7431-0.28932,4.9291-0.92082,0.14921-0.08427,0.23878-0.2634,0.21666-0.43333-0.0327-0.25234-0.07287-0.82136-0.10833-1.3812-0.03546-0.55988-0.06625-1.1106-0.10833-1.4354-0.01468-0.0805-0.05274-0.15661-0.10833-0.21666-0.377-0.4498-0.94-0.7248-1.598-1.002-0.601-0.253-1.306-0.5158-2.004-0.8125-0.0391-0.08711-0.07795-0.34054,0-0.73124,0.02093-0.10491,0.05371-0.21727,0.08125-0.325,0.06566-0.07354,0.11683-0.13363,0.18958-0.21666,0.15516-0.17709,0.32189-0.36287,0.46041-0.54166s0.25186-0.33217,0.325-0.54166l0.02708-0.02708c0.28309-1.1425,0.28324-1.6193,0.29792-2.0312v-0.02708c0-1.3275-1.1933-2.3562-2.6-2.3562z"/>
+ <path opacity="0.7" style="block-progression:tb;color:#000000;text-transform:none;text-indent:0;" d="m12.388,15.483c-0.96482,0-1.7833,0.70559-1.7833,1.6162,0.0069,0.28781,0.03259,0.64272,0.20434,1.3933v0.01858l0.01857,0.01857c0.05513,0.15793,0.13537,0.24827,0.24149,0.37154,0.10612,0.12326,0.23263,0.26834,0.35294,0.39011,0.01415,0.01433,0.02323,0.0232,0.03715,0.03716,0.02386,0.10383,0.05276,0.21557,0.0743,0.3158,0.05732,0.26668,0.05144,0.45553,0.03716,0.52015-0.4146,0.1454-0.9304,0.3187-1.3932,0.5199-0.2598,0.113-0.4949,0.2139-0.6873,0.3344-0.1923,0.1206-0.3836,0.2116-0.4458,0.483-0.000797,0.01237-0.000797,0.02479,0,0.03716-0.06076,0.55788-0.15266,1.3783-0.22291,1.932-0.015166,0.11656,0.046264,0.23943,0.14861,0.29723,0.84033,0.45393,2.1312,0.63663,3.418,0.63161,1.2868-0.005,2.5674-0.19845,3.3808-0.63161,0.10234-0.0578,0.16378-0.18067,0.14861-0.29723-0.0224-0.173-0.05-0.5633-0.0743-0.9474-0.0243-0.384-0.0454-0.7617-0.0743-0.9845-0.0101-0.0552-0.0362-0.1074-0.0743-0.1486-0.2584-0.3086-0.6445-0.4973-1.096-0.6874-0.4122-0.1735-0.8954-0.3538-1.3746-0.5573-0.02682-0.05975-0.05346-0.23358,0-0.50157,0.01436-0.07196,0.03684-0.14903,0.05573-0.22292,0.04503-0.05044,0.08013-0.09166,0.13003-0.14861,0.1064-0.1215,0.2207-0.2489,0.3157-0.3715,0.0951-0.1226,0.1728-0.2279,0.223-0.3715l0.01857-0.01858c0.1941-0.7837,0.1942-1.1107,0.2043-1.3933v-0.01857c0-0.91058-0.81848-1.6162-1.7833-1.6162zm5.101-1.4831c-1.4067,0-2.6,1.0287-2.6,2.3562,0.01,0.4196,0.04751,0.93701,0.29791,2.0312v0.02708l0.02708,0.02708c0.08038,0.23025,0.19736,0.36196,0.35208,0.54166s0.33917,0.39121,0.51458,0.56874c0.02064,0.02089,0.03386,0.03383,0.05416,0.05418,0.03479,0.15137,0.07693,0.31428,0.10833,0.46041,0.08357,0.38879,0.07499,0.66411,0.05417,0.75832-0.6045,0.2122-1.3565,0.465-2.0312,0.7583-0.3789,0.1647-0.7217,0.3118-1.0021,0.4875-0.28044,0.17574-0.55934,0.30851-0.64999,0.70416-0.0012,0.01804-0.0012,0.03613,0,0.05418-0.08858,0.81334-0.22257,2.0094-0.325,2.8166-0.02211,0.16993,0.06745,0.34906,0.21666,0.43333,1.2252,0.66179,3.1072,0.92814,4.9833,0.92082,1.8761-0.0073,3.7431-0.28932,4.9291-0.92082,0.14921-0.08427,0.23878-0.2634,0.21666-0.43333-0.0327-0.25234-0.07287-0.82136-0.10833-1.3812-0.03546-0.55988-0.06625-1.1106-0.10833-1.4354-0.01468-0.0805-0.05274-0.15661-0.10833-0.21666-0.377-0.4498-0.94-0.7248-1.598-1.002-0.601-0.253-1.306-0.5158-2.004-0.8125-0.0391-0.08711-0.07795-0.34054,0-0.73124,0.02093-0.10491,0.05371-0.21727,0.08125-0.325,0.06566-0.07354,0.11683-0.13363,0.18958-0.21666,0.15516-0.17709,0.32189-0.36287,0.46041-0.54166s0.25186-0.33217,0.325-0.54166l0.02708-0.02708c0.28309-1.1425,0.28324-1.6193,0.29792-2.0312v-0.02708c0-1.3275-1.1933-2.3562-2.6-2.3562z"/>
+</svg>
diff --git a/core/img/filetypes/folder.png b/core/img/filetypes/folder.png
index 784e8fa48234f4f64b6922a6758f254ee0ca08ec..b7be63d58369d5da485f12ead9ca6982c8e8e563 100644
Binary files a/core/img/filetypes/folder.png and b/core/img/filetypes/folder.png differ
diff --git a/core/img/filetypes/folder.svg b/core/img/filetypes/folder.svg
new file mode 100644
index 0000000000000000000000000000000000000000..92d4cc2271816f50eabae1e5b092f117561adc1a
--- /dev/null
+++ b/core/img/filetypes/folder.svg
@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="32px" width="32px" version="1.1" xmlns:cc="http://creativecommons.org/ns#" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:dc="http://purl.org/dc/elements/1.1/">
+ <defs>
+  <linearGradient id="c" y2="21.387" gradientUnits="userSpaceOnUse" x2="27.557" gradientTransform="matrix(.89186 0 0 1.0539 3.1208 5.4125)" y1="7.1627" x1="27.557">
+   <stop stop-color="#fff" offset="0"/>
+   <stop stop-color="#fff" stop-opacity=".23529" offset=".0097359"/>
+   <stop stop-color="#fff" stop-opacity=".15686" offset=".99001"/>
+   <stop stop-color="#fff" stop-opacity=".39216" offset="1"/>
+  </linearGradient>
+  <linearGradient id="d" y2="36.658" gradientUnits="userSpaceOnUse" x2="22.809" gradientTransform="matrix(.74675 0 0 .65549 -1.9219 1.1676)" y1="49.629" x1="22.935">
+   <stop stop-color="#0a0a0a" stop-opacity=".498" offset="0"/>
+   <stop stop-color="#0a0a0a" stop-opacity="0" offset="1"/>
+  </linearGradient>
+  <linearGradient id="e" y2="43.761" gradientUnits="userSpaceOnUse" x2="35.793" gradientTransform="matrix(.64444 0 0 .64286 .53352 .89286)" y1="17.118" x1="35.793">
+   <stop stop-color="#b4cee1" offset="0"/>
+   <stop stop-color="#5d9fcd" offset="1"/>
+  </linearGradient>
+  <linearGradient id="f" y2="609.51" gradientUnits="userSpaceOnUse" x2="302.86" gradientTransform="matrix(.051143 0 0 .015916 -2.49 22.299)" y1="366.65" x1="302.86">
+   <stop stop-opacity="0" offset="0"/>
+   <stop offset=".5"/>
+   <stop stop-opacity="0" offset="1"/>
+  </linearGradient>
+  <radialGradient id="b" gradientUnits="userSpaceOnUse" cy="486.65" cx="605.71" gradientTransform="matrix(.019836 0 0 .015916 16.388 22.299)" r="117.14">
+   <stop offset="0"/>
+   <stop stop-opacity="0" offset="1"/>
+  </radialGradient>
+  <radialGradient id="a" gradientUnits="userSpaceOnUse" cy="486.65" cx="605.71" gradientTransform="matrix(-.019836 0 0 .015916 15.601 22.299)" r="117.14">
+   <stop offset="0"/>
+   <stop stop-opacity="0" offset="1"/>
+  </radialGradient>
+  <linearGradient id="g" y2="34.143" gradientUnits="userSpaceOnUse" x2="21.37" gradientTransform="matrix(.54384 0 0 .61466 3.2689 5.0911)" y1="4.7324" x1="21.37">
+   <stop stop-color="#fff" offset="0"/>
+   <stop stop-color="#fff" stop-opacity=".23529" offset=".11063"/>
+   <stop stop-color="#fff" stop-opacity=".15686" offset=".99001"/>
+   <stop stop-color="#fff" stop-opacity=".39216" offset="1"/>
+  </linearGradient>
+  <linearGradient id="h" y2="16" gradientUnits="userSpaceOnUse" x2="62.989" gradientTransform="matrix(.61905 0 0 .61905 -30.392 1.4286)" y1="13" x1="62.989">
+   <stop stop-color="#f9f9f9" offset="0"/>
+   <stop stop-color="#d8d8d8" offset="1"/>
+  </linearGradient>
+  <linearGradient id="i" y2="3.6337" gradientUnits="userSpaceOnUse" y1="53.514" gradientTransform="matrix(.50703 0 0 0.503 68.029 1.3298)" x2="-51.786" x1="-51.786">
+   <stop stop-opacity=".32174" offset="0"/>
+   <stop stop-opacity=".27826" offset="1"/>
+  </linearGradient>
+ </defs>
+ <g>
+  <path opacity=".8" style="color:#000000" d="m4.0002 6.5001c-0.43342 0.005-0.5 0.21723-0.5 0.6349v1.365c-1.2457 0-1-0.002-1 0.54389 0.0216 6.5331 0 6.9014 0 7.4561 0.90135 0 27-2.349 27-3.36v-4.0961c0-0.41767-0.34799-0.54876-0.78141-0.54389h-14.219v-1.365c0-0.41767-0.26424-0.63977-0.69767-0.6349h-9.8023z" stroke="url(#i)" fill="none"/>
+  <path style="color:#000000" d="m4.0002 7v2h-1v4h26v-4h-15v-2h-10z" fill="url(#h)"/>
+  <path style="color:#000000" d="m4.5002 7.5v2h-1v4h25v-4h-15v-2h-9z" stroke="url(#g)" stroke-linecap="round" fill="none"/>
+ </g>
+ <g transform="translate(.00017936 -1)">
+  <rect opacity=".3" height="3.8653" width="24.695" y="28.135" x="3.6472" fill="url(#f)"/>
+  <path opacity=".3" d="m28.342 28.135v3.865c1.0215 0.0073 2.4695-0.86596 2.4695-1.9328s-1.1399-1.9323-2.4695-1.9323z" fill="url(#b)"/>
+  <path opacity=".3" d="m3.6472 28.135v3.865c-1.0215 0.0073-2.4695-0.86596-2.4695-1.9328s1.1399-1.9323 2.4695-1.9323z" fill="url(#a)"/>
+ </g>
+ <path style="color:#000000" d="m1.927 11.5c-0.69105 0.0796-0.32196 0.90258-0.37705 1.3654 0.0802 0.29906 0.59771 15.718 0.59771 16.247 0 0.46018 0.22667 0.38222 0.80101 0.38222h26.397c0.61872 0.0143 0.48796 0.007 0.48796-0.38947 0.0452-0.20269 0.63993-16.978 0.66282-17.243 0-0.279 0.0581-0.3621-0.30493-0.3621h-28.265z" fill="url(#e)"/>
+ <path opacity=".4" d="m1.682 11 28.636 0.00027c0.4137 0 0.68181 0.29209 0.68181 0.65523l-0.6735 17.712c0.01 0.45948-0.1364 0.64166-0.61707 0.63203l-27.256-0.0115c-0.4137 0-0.83086-0.27118-0.83086-0.63432l-0.62244-17.698c0-0.36314 0.26812-0.65549 0.68182-0.65549z" fill="url(#d)"/>
+ <path opacity=".5" style="color:#000000" d="m2.5002 12.5 0.62498 16h25.749l0.62498-16z" stroke="url(#c)" stroke-linecap="round" fill="none"/>
+ <path opacity=".3" stroke-linejoin="round" style="color:#000000" d="m1.927 11.5c-0.69105 0.0796-0.32196 0.90258-0.37705 1.3654 0.0802 0.29906 0.59771 15.718 0.59771 16.247 0 0.46018 0.22667 0.38222 0.80101 0.38222h26.397c0.61872 0.0143 0.48796 0.007 0.48796-0.38947 0.0452-0.20269 0.63993-16.978 0.66282-17.243 0-0.279 0.0581-0.3621-0.30493-0.3621h-28.265z" stroke="#000" stroke-linecap="round" fill="none"/>
+</svg>
diff --git a/core/img/filetypes/font.png b/core/img/filetypes/font.png
index 81e41de7d3a9bcc50267b34d0005487d5c7cc7c0..9404c3ca6ac330d3639a00e0b4c618e52172c2a2 100644
Binary files a/core/img/filetypes/font.png and b/core/img/filetypes/font.png differ
diff --git a/core/img/filetypes/font.svg b/core/img/filetypes/font.svg
new file mode 100644
index 0000000000000000000000000000000000000000..8fca5ff9eff1ba40f42db87a027ded7dd235e70f
--- /dev/null
+++ b/core/img/filetypes/font.svg
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="32" width="32" version="1.0" xmlns:cc="http://creativecommons.org/ns#" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:dc="http://purl.org/dc/elements/1.1/">
+ <defs>
+  <linearGradient id="a">
+   <stop offset="0"/>
+   <stop stop-opacity="0" offset="1"/>
+  </linearGradient>
+  <linearGradient id="h" y2="45.497" gradientUnits="userSpaceOnUse" x2="22.056" gradientTransform="matrix(.85825 0 0 .86435 .35576 -11.07)" y1="15.834" x1="22.056">
+   <stop stop-color="#575757" offset="0"/>
+   <stop stop-color="#333" offset="1"/>
+  </linearGradient>
+  <radialGradient id="e" xlink:href="#a" gradientUnits="userSpaceOnUse" cy="36.686" cx="-6.1603" gradientTransform="matrix(.25444 0 0 .18504 6.1544 20.059)" r="14.098"/>
+  <radialGradient id="d" xlink:href="#a" gradientUnits="userSpaceOnUse" cy="36.686" cx="-6.1603" gradientTransform="matrix(.83270 0 0 .18284 17.869 20.171)" r="14.098"/>
+  <radialGradient id="c" xlink:href="#a" gradientUnits="userSpaceOnUse" cy="36.686" cx="-6.1603" gradientTransform="matrix(.69391 0 0 .18504 25.492 20.059)" r="14.098"/>
+  <linearGradient id="g" y2="103.13" gradientUnits="userSpaceOnUse" x2="143.92" gradientTransform="matrix(.97891 0 0 .95244 -119.66 -63.433)" y1="75.221" x1="143.92">
+   <stop stop-color="#f8b17e" offset="0"/>
+   <stop stop-color="#e35d4f" offset=".31210"/>
+   <stop stop-color="#c6262e" offset=".57054"/>
+   <stop stop-color="#690b54" offset="1"/>
+  </linearGradient>
+  <linearGradient id="f" y2="75.221" gradientUnits="userSpaceOnUse" x2="153.41" gradientTransform="matrix(.97891 0 0 .95244 -119.66 -63.433)" y1="98.785" x1="153.41">
+   <stop stop-color="#791235" offset="0"/>
+   <stop stop-color="#dd3b27" offset="1"/>
+  </linearGradient>
+  <radialGradient id="b" xlink:href="#a" gradientUnits="userSpaceOnUse" cy="36.686" cx="-6.1603" gradientTransform="matrix(.25444 0 0 .18504 22.459 20.059)" r="14.098"/>
+ </defs>
+ <g>
+  <g fill-rule="evenodd">
+   <path opacity=".2" d="m24.478 26.848a3.587 2.6087 0 1 1 -7.1739 0 3.587 2.6087 0 1 1 7.1739 0z" fill="url(#b)"/>
+   <path d="m29.106 9.9132c-0.478-1.0813-1.642-0.968-2.441-1.1397-2.646-0.3044-5.287 0.181-7.504 1.6705-2.1399 1.4497-4.0763 3.4112-5.4365 5.9425-1.1823 2.2548-1.7132 5.267-0.96727 8.1364 0.58709 1.9316 2.3544 3.1247 3.845 2.803 2.2818-0.38055 3.9079-2.4984 5.2493-4.5646 0.60658-0.85208 0.97918-1.9805 1.6952-2.6966-0.1019 1.8363-0.14753 3.7435 0.26981 5.6082 0.2372 1.0995 1.1049 1.9662 1.9843 1.9261 0.89467-0.10266 1.5757-0.87918 2.3174-1.386 0.66706-0.59088 1.4312-1.0989 1.9035-1.9532-0.08137-1.4151-1.3465-0.52654-1.7881-0.04084-0.61732 0.97151-1.8927 0.19955-1.6199-1.1225 0.14283-3.0198 0.84698-5.8557 1.4425-8.7028 0.3348-1.5009 0.68722-2.9931 1.0492-4.4802h-0.000001zm-3.696 1.8848c-1.1333 3.5797-2.3575 7.223-4.4519 9.9984-0.98815 1.2662-2.437 2.4144-4.0344 1.8053-1.1039-0.48951-1.3597-2.0989-1.3836-3.3097-0.14247-3.5752 1.5838-6.5362 3.7419-8.3224 1.5043-1.1975 3.4487-1.7396 5.3479-1.1547 0.35854 0.1335 0.74746 0.47906 0.78012 0.983v-0.000001z" stroke="url(#f)" fill="url(#g)"/>
+   <path opacity=".2" d="m31 26.848a9.7826 2.6087 0 1 1 -19.565 0 9.7826 2.6087 0 1 1 19.565 0z" fill="url(#c)"/>
+   <path opacity=".05" d="m24.478 26.879a11.739 2.5777 0 1 1 -23.478 0 11.739 2.5777 0 1 1 23.478 0z" fill="url(#d)"/>
+   <path opacity=".2" d="m8.1739 26.848a3.587 2.6087 0 1 1 -7.1739 0 3.587 2.6087 0 1 1 7.1739 0z" fill="url(#e)"/>
+  </g>
+  <path d="m19.663 27.5c-0.79147-2.2568-1.583-4.5913-2.3744-6.8481h-9.7253c-0.8117 2.284-1.6229 4.564-2.4341 6.848h-3.1514c3.0005-8.2609 6.001-15.739 9.0016-24h2.8497c3.0061 8.2609 6.0122 15.739 9.0183 24h-3.1849zm-3.337-10.109-3.913-10.391-3.913 10.391z" stroke="#333" stroke-width="1px" fill="url(#h)"/>
+ </g>
+</svg>
diff --git a/core/img/filetypes/image-svg+xml.png b/core/img/filetypes/image-svg+xml.png
index a1291c2dfad75b289f88ab762a3a32ccb436c1ed..e3dd52489d3772962e22cdf47569b53616fe73eb 100644
Binary files a/core/img/filetypes/image-svg+xml.png and b/core/img/filetypes/image-svg+xml.png differ
diff --git a/core/img/filetypes/image-svg+xml.svg b/core/img/filetypes/image-svg+xml.svg
new file mode 100644
index 0000000000000000000000000000000000000000..06df5f54da62e2a1413c6b76279eb6b909c364d5
--- /dev/null
+++ b/core/img/filetypes/image-svg+xml.svg
@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="32px" width="32px" version="1.1" xmlns:cc="http://creativecommons.org/ns#" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:dc="http://purl.org/dc/elements/1.1/">
+ <defs>
+  <linearGradient id="h" y2="43" gradientUnits="userSpaceOnUse" x2="24" gradientTransform="matrix(.56757 0 0 .72973 2.3784 -2.5135)" y1="5.5641" x1="24">
+   <stop stop-color="#fff" offset="0"/>
+   <stop stop-color="#fff" stop-opacity=".23529" offset=".036262"/>
+   <stop stop-color="#fff" stop-opacity=".15686" offset=".95056"/>
+   <stop stop-color="#fff" stop-opacity=".39216" offset="1"/>
+  </linearGradient>
+  <linearGradient id="g" y2="47.013" gradientUnits="userSpaceOnUse" x2="25.132" gradientTransform="matrix(.65714 0 0 .63012 .22856 -1.0896)" y1=".98521" x1="25.132">
+   <stop stop-color="#f4f4f4" offset="0"/>
+   <stop stop-color="#dbdbdb" offset="1"/>
+  </linearGradient>
+  <linearGradient id="f" y2="2.9062" gradientUnits="userSpaceOnUse" x2="-51.786" gradientTransform="matrix(.53064 0 0 .58970 39.27 -1.7919)" y1="50.786" x1="-51.786">
+   <stop stop-color="#a0a0a0" offset="0"/>
+   <stop stop-color="#bebebe" offset="1"/>
+  </linearGradient>
+  <radialGradient id="c" xlink:href="#a" gradientUnits="userSpaceOnUse" cy="486.65" cx="605.71" gradientTransform="matrix(.015663 0 0 .0082353 17.61 25.981)" r="117.14"/>
+  <linearGradient id="a">
+   <stop offset="0"/>
+   <stop stop-opacity="0" offset="1"/>
+  </linearGradient>
+  <radialGradient id="b" xlink:href="#a" gradientUnits="userSpaceOnUse" cy="486.65" cx="605.71" gradientTransform="matrix(-.015663 0 0 .0082353 14.39 25.981)" r="117.14"/>
+  <linearGradient id="e" y2="609.51" gradientUnits="userSpaceOnUse" y1="366.65" gradientTransform="matrix(.045769 0 0 .0082353 -.54232 25.981)" x2="302.86" x1="302.86">
+   <stop stop-opacity="0" offset="0"/>
+   <stop offset=".5"/>
+   <stop stop-opacity="0" offset="1"/>
+  </linearGradient>
+  <linearGradient id="d" y2="13.664" gradientUnits="userSpaceOnUse" x2="16.887" gradientTransform="matrix(.65943 0 0 .64652 -27.821 1.2237)" y1="24.24" x1="28.534">
+   <stop stop-color="#fda852" offset="0"/>
+   <stop stop-color="#fff" stop-opacity="0" offset="1"/>
+  </linearGradient>
+ </defs>
+ <g>
+  <g>
+   <rect opacity=".15" height="2" width="22.1" y="29" x="4.95" fill="url(#e)"/>
+   <path opacity=".15" d="m4.95 29v1.9999c-0.80662 0.0038-1.95-0.44807-1.95-1.0001 0-0.552 0.90012-0.99982 1.95-0.99982z" fill="url(#b)"/>
+   <path opacity=".15" d="m27.05 29v1.9999c0.80661 0.0038 1.95-0.44807 1.95-1.0001 0-0.552-0.90012-0.99982-1.95-0.99982z" fill="url(#c)"/>
+  </g>
+  <path stroke-linejoin="round" d="m4.5 0.49996c5.2705 0 23 0.00185 23 0.00185l0.000028 28.998h-23v-29z" stroke="url(#f)" stroke-width=".99992" fill="url(#g)"/>
+ </g>
+ <path stroke-linejoin="round" d="m26.5 28.5h-21v-27h21z" stroke="url(#h)" stroke-linecap="round" fill="none"/>
+ <g transform="translate(27.788 -2.3184)">
+  <g>
+   <path d="m-17.037 24.229c2.7541 1.8316 8.7672-0.61882 3.7681-7.1764-4.9538-6.4982 4.9219-10.76 7.8525-3.2453" fill-rule="evenodd" stroke="#ea541a" stroke-width="1px" fill="url(#d)"/>
+   <rect height="2" width="2" y="22.818" x="-18.788" fill="#ea541a"/>
+   <rect height="2" width="2" y="12.818" x="-6.788" fill="#ea541a"/>
+  </g>
+  <path d="m-17.699 11.147 9.5001 12.316" stroke="#ea541a" stroke-width="1px" fill="none"/>
+  <g>
+   <path d="m-16.288 11.318c0.000372 0.55218-0.44745 1-1 1s-1.0004-0.44782-1-1c-0.000372-0.55218 0.44745-1 1-1s1.0004 0.44782 1 1z" stroke="#ea541a" fill="#e6e6e6"/>
+   <path d="m-7.288 23.318c0.000373 0.55218-0.44745 1-1 1s-1.0004-0.44782-1-1c-0.000372-0.55218 0.44745-1 1-1s1.0004 0.44782 1 1z" stroke="#ea541a" fill="#e6e6e6"/>
+   <rect height="2" width="2" y="15.818" x="-14.788" fill="#ea541a"/>
+  </g>
+ </g>
+</svg>
diff --git a/core/img/filetypes/image.png b/core/img/filetypes/image.png
index 4a158fef7e0da8fd19525f574f2c4966443866cf..087f5dcdbdf61777512cbf7985715f0a12124a19 100644
Binary files a/core/img/filetypes/image.png and b/core/img/filetypes/image.png differ
diff --git a/core/img/filetypes/image.svg b/core/img/filetypes/image.svg
new file mode 100644
index 0000000000000000000000000000000000000000..50991f7359df5cb322ca24ac1b41250fb3091bcd
--- /dev/null
+++ b/core/img/filetypes/image.svg
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="32" width="32" version="1.0" xmlns:cc="http://creativecommons.org/ns#" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:dc="http://purl.org/dc/elements/1.1/">
+ <defs>
+  <radialGradient id="c" xlink:href="#a" gradientUnits="userSpaceOnUse" cy="486.65" cx="605.71" gradientTransform="matrix(.028917 0 0 .012353 26.973 38.471)" r="117.14"/>
+  <linearGradient id="a">
+   <stop offset="0"/>
+   <stop stop-opacity="0" offset="1"/>
+  </linearGradient>
+  <radialGradient id="b" xlink:href="#a" gradientUnits="userSpaceOnUse" cy="486.65" cx="605.71" gradientTransform="matrix(-.028917 0 0 .012353 21.027 38.471)" r="117.14"/>
+  <linearGradient id="k" y2="609.51" gradientUnits="userSpaceOnUse" x2="302.86" gradientTransform="matrix(.084497 0 0 .012353 -6.5396 38.471)" y1="366.65" x1="302.86">
+   <stop stop-opacity="0" offset="0"/>
+   <stop offset=".5"/>
+   <stop stop-opacity="0" offset="1"/>
+  </linearGradient>
+  <linearGradient id="e" y2="24.628" gradientUnits="userSpaceOnUse" x2="20.055" gradientTransform="matrix(.57894 0 0 .65062 2.0784 1.9502)" y1="15.298" x1="16.626">
+   <stop stop-color="#fff" offset="0"/>
+   <stop stop-color="#fff" stop-opacity="0" offset="1"/>
+  </linearGradient>
+  <linearGradient id="h" y2="43" gradientUnits="userSpaceOnUse" x2="24" gradientTransform="matrix(.77477 0 0 .61261 -2.5946 1.2973)" y1="5.5641" x1="24">
+   <stop stop-color="#fff" offset="0"/>
+   <stop stop-color="#fff" stop-opacity=".23529" offset=".036262"/>
+   <stop stop-color="#fff" stop-opacity=".15686" offset=".95056"/>
+   <stop stop-color="#fff" stop-opacity=".39216" offset="1"/>
+  </linearGradient>
+  <linearGradient id="g" y2="47.013" gradientUnits="userSpaceOnUse" x2="25.132" gradientTransform="matrix(.85714 0 0 .52148 -4.5714 2.6844)" y1=".98521" x1="25.132">
+   <stop stop-color="#f4f4f4" offset="0"/>
+   <stop stop-color="#dbdbdb" offset="1"/>
+  </linearGradient>
+  <linearGradient id="f" y2="2.9062" gradientUnits="userSpaceOnUse" x2="-51.786" gradientTransform="matrix(.69214 0 0 .48803 46.352 2.1033)" y1="50.786" x1="-51.786">
+   <stop stop-color="#a0a0a0" offset="0"/>
+   <stop stop-color="#bebebe" offset="1"/>
+  </linearGradient>
+  <linearGradient id="j" y2="96.253" gradientUnits="userSpaceOnUse" x2="45.567" gradientTransform="matrix(.32723 0 0 .25356 -38.234 -30.559)" y1="15.27" x1="45.414">
+   <stop stop-color="#262626" offset="0"/>
+   <stop stop-color="#4d4d4d" offset="1"/>
+  </linearGradient>
+  <linearGradient id="i" y2="-40.164" gradientUnits="userSpaceOnUse" x2="-24.098" gradientTransform="matrix(.74286 0 0 .74074 1.8384 4.0069)" y1="-13.091" x1="-24.032">
+   <stop stop-color="#1d1d1d" offset="0"/>
+   <stop offset="1"/>
+  </linearGradient>
+  <linearGradient id="d" y2="-174.97" gradientUnits="userSpaceOnUse" x2="149.98" gradientTransform="matrix(.28088 0 0 .28276 -22.128 49.806)" y1="-104.24" x1="149.98">
+   <stop stop-color="#272727" offset="0"/>
+   <stop stop-color="#454545" offset="1"/>
+  </linearGradient>
+ </defs>
+ <g>
+  <g opacity=".4" transform="matrix(.66667 0 0 .66667 0 -1.6667)" stroke-width=".0225">
+   <rect height="3" width="40.8" y="43" x="3.6" fill="url(#k)"/>
+   <path d="m3.6 43v2.9998c-1.4891 0.006-3.6-0.672-3.6-1.5s1.6618-1.5 3.6-1.5z" fill="url(#b)"/>
+   <path d="m44.4 43v2.9998c1.4891 0.0056 3.6-0.67211 3.6-1.5001 0-0.828-1.6618-1.4997-3.6-1.4997z" fill="url(#c)"/>
+  </g>
+  <path stroke-linejoin="round" d="m0.99997 4c6.8745 0 30 0.0015 30 0.0015l0.000036 23.999h-30v-24z" stroke="url(#f)" stroke-width=".0066667" fill="url(#g)"/>
+  <path stroke-linejoin="round" d="m30.333 27.333h-28.667v-22.667h28.667z" stroke="url(#h)" stroke-linecap="round" stroke-width=".0066667" fill="none"/>
+ </g>
+ <g>
+  <rect transform="matrix(-.99999 .0037552 .0024409 -1 0 0)" rx="0" ry="0" height="19.903" width="25.952" stroke="url(#i)" stroke-linecap="round" y="-26.012" x="-29.015" stroke-width=".0066668" fill="url(#j)"/>
+  <path style="color:#000000" d="m14.458 9.5417c-0.73638 0-1.3333 1.1939-1.3333 2.6667 0 0.24505 0.01072 0.48294 0.04167 0.70833-0.15826-0.15989-0.30816-0.33156-0.5-0.47917-1.1673-0.89808-2.4885-1.1461-2.9375-0.5625-0.44904 0.58363 0.14525 1.7894 1.3125 2.6875 0.22148 0.1704 0.44175 0.29391 0.66667 0.41667-0.25479 0.03257-0.52266 0.08822-0.79167 0.16667-1.4139 0.41232-2.3937 1.3347-2.1875 2.0417 0.20616 0.70693 1.5236 0.93315 2.9375 0.52083 0.2651-0.07731 0.52042-0.1633 0.75-0.27083-0.05604 0.10202-0.11595 0.20204-0.16667 0.3125-2.7782 2.4796-5.0625 7.2292-5.0625 7.2292l0.95833 0.02083c0.5207-1.25 1.8077-3.994 3.7925-6.293-0.28085 1.1684-0.0992 2.2006 0.5 2.4167 0.69271 0.24982 1.667-0.67708 2.1667-2.0625 0.04494-0.12462 0.06976-0.25209 0.10417-0.375 0.05396 0.11891 0.10152 0.23517 0.16667 0.35417 0.70727 1.2918 1.8124 2.062 2.4583 1.7083 0.64591-0.35364 0.58227-1.6874-0.125-2.9792-0.04035-0.07369-0.08227-0.13821-0.125-0.20833 0.07835 0.02437 0.14794 0.04131 0.22917 0.0625 1.4251 0.37181 2.7308 0.10836 2.9167-0.60417 0.18591-0.71253-0.82495-1.5865-2.25-1.9583-0.02183-0.0057-0.04073-0.01544-0.0625-0.02083 0.01921-0.01078 0.04331-0.0098 0.0625-0.02083 1.2754-0.73638 2.014-1.8623 1.6458-2.5-0.36819-0.63772-1.7037-0.54888-2.9792 0.1875-0.40854 0.23587-0.74162 0.50638-1.0208 0.79167 0.10589-0.38234 0.16667-0.82364 0.16667-1.2917 0-1.4728-0.59695-2.6667-1.3333-2.6667zm0.042 4.4583c0.92048 0 1.6667 0.74619 1.6667 1.6667 0 0.92047-0.74619 1.6667-1.6667 1.6667-0.92048 0-1.6667-0.74619-1.6667-1.6667 0-0.921 0.747-1.667 1.667-1.667z" fill="url(#d)"/>
+  <path fill="#d2d2d2" d="m14.458 10.188c-0.73638 0-1.3333 1.1939-1.3333 2.6667 0 0.24504 0.01072 0.48294 0.04167 0.70833-0.15826-0.15989-0.30816-0.33156-0.5-0.47917-1.1673-0.89808-2.4885-1.1461-2.9375-0.5625-0.44904 0.58363 0.14525 1.7894 1.3125 2.6875 0.22148 0.1704 0.44175 0.29391 0.66667 0.41667-0.25479 0.03257-0.52266 0.08822-0.79167 0.16667-1.4139 0.41232-2.3937 1.3347-2.1875 2.0417 0.20616 0.70693 1.5236 0.93315 2.9375 0.52083 0.2651-0.07731 0.52042-0.1633 0.75-0.27083-0.05604 0.10202-0.11595 0.20204-0.16667 0.3125-2.7782 2.479-5.0625 7.229-5.0625 7.229l0.95833 0.02083c0.52039-1.2493 1.8073-3.9927 3.7917-6.2917-0.28085 1.1684-0.0992 2.2006 0.5 2.4167 0.69271 0.24982 1.667-0.67708 2.1667-2.0625 0.04494-0.12462 0.06976-0.25209 0.10417-0.375 0.05396 0.11891 0.10152 0.23517 0.16667 0.35417 0.70727 1.2918 1.8124 2.062 2.4583 1.7083 0.64591-0.35364 0.58227-1.6874-0.125-2.9792-0.04035-0.07369-0.08227-0.13821-0.125-0.20833 0.07835 0.02437 0.14794 0.04131 0.22917 0.0625 1.4251 0.37181 2.7308 0.10836 2.9167-0.60417 0.18591-0.71253-0.82495-1.5865-2.25-1.9583-0.02183-0.0057-0.04073-0.01544-0.0625-0.02083 0.01921-0.01078 0.04331-0.0098 0.0625-0.02083 1.2754-0.73638 2.014-1.8623 1.6458-2.5-0.36819-0.63772-1.7037-0.54888-2.9792 0.1875-0.40854 0.23587-0.74162 0.50638-1.0208 0.79167 0.10589-0.38234 0.16667-0.82364 0.16667-1.2917 0-1.4728-0.59695-2.6667-1.3333-2.6667zm0.042 4.458c0.92048 0 1.6667 0.74619 1.6667 1.6667 0 0.92048-0.74619 1.6667-1.6667 1.6667-0.92048 0-1.6667-0.74619-1.6667-1.6667 0-0.92048 0.74619-1.6667 1.6667-1.6667z"/>
+  <path opacity=".15" d="m2.6667 5.6667 0.0087 12c0.7672-0.012 26.076-4.424 26.658-4.636l-0.000092-7.3644z" fill-rule="evenodd" fill="url(#e)"/>
+ </g>
+</svg>
diff --git a/core/img/filetypes/link.png b/core/img/filetypes/link.png
deleted file mode 100644
index 68f21d30116710e48a8bf462cb32441e51fad5f6..0000000000000000000000000000000000000000
Binary files a/core/img/filetypes/link.png and /dev/null differ
diff --git a/core/img/filetypes/model.png b/core/img/filetypes/model.png
deleted file mode 100644
index 7851cf34c946e5667221e3478668503eb1cd733f..0000000000000000000000000000000000000000
Binary files a/core/img/filetypes/model.png and /dev/null differ
diff --git a/core/img/filetypes/ms-excel.png b/core/img/filetypes/ms-excel.png
deleted file mode 100644
index b977d7e52e2446ea01201c5c7209ac3a05f12c9f..0000000000000000000000000000000000000000
Binary files a/core/img/filetypes/ms-excel.png and /dev/null differ
diff --git a/core/img/filetypes/ms-powerpoint.png b/core/img/filetypes/ms-powerpoint.png
deleted file mode 100644
index c4eff0387d5888c638ba09473ba6d2369f7b56f0..0000000000000000000000000000000000000000
Binary files a/core/img/filetypes/ms-powerpoint.png and /dev/null differ
diff --git a/core/img/filetypes/package-x-generic.png b/core/img/filetypes/package-x-generic.png
new file mode 100644
index 0000000000000000000000000000000000000000..e08cc5480ce6d314765a370c2d9012772305c7fe
Binary files /dev/null and b/core/img/filetypes/package-x-generic.png differ
diff --git a/core/img/filetypes/package-x-generic.svg b/core/img/filetypes/package-x-generic.svg
new file mode 100644
index 0000000000000000000000000000000000000000..13ab5b7550e2daa8661925a1508cb5f96ccbeb17
--- /dev/null
+++ b/core/img/filetypes/package-x-generic.svg
@@ -0,0 +1,62 @@
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="32" width="32" version="1.1" xmlns:cc="http://creativecommons.org/ns#" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:dc="http://purl.org/dc/elements/1.1/">
+ <metadata>
+  <rdf:RDF>
+   <cc:Work rdf:about="">
+    <dc:format>image/svg+xml</dc:format>
+    <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
+    <dc:title/>
+   </cc:Work>
+  </rdf:RDF>
+ </metadata>
+ <defs>
+  <linearGradient id="linearGradient2886" y2="17.5" spreadMethod="reflect" gradientUnits="userSpaceOnUse" x2="3.0052" gradientTransform="matrix(0.70749164,0,0,0.69402746,-0.97979919,-1.6454802)" y1="17.5" x1="44.995">
+   <stop stop-color="#FFF" stop-opacity="0" offset="0"/>
+   <stop stop-color="#FFF" offset="0.245"/>
+   <stop stop-color="#FFF" offset="0.7735"/>
+   <stop stop-color="#FFF" stop-opacity="0" offset="1"/>
+  </linearGradient>
+  <linearGradient id="linearGradient2889" y2="8" gradientUnits="userSpaceOnUse" x2="26" gradientTransform="matrix(0.99999976,0,0,0.71428568,-7.9999942,-1.7142862)" y1="22" x1="26">
+   <stop stop-color="#FFF" offset="0"/>
+   <stop stop-color="#FFF" offset="0.30213"/>
+   <stop stop-color="#FFF" stop-opacity="0.6901961" offset="0.39747"/>
+   <stop stop-color="#FFF" stop-opacity="0" offset="1"/>
+  </linearGradient>
+  <linearGradient id="linearGradient2892" y2="45.934" gradientUnits="userSpaceOnUse" x2="43.007" gradientTransform="matrix(0.90694933,0,0,0.81526518,-5.2693853,-5.0638302)" y1="30.555" x1="23.452">
+   <stop stop-color="#FFF" stop-opacity="0" offset="0"/>
+   <stop stop-color="#FFF" stop-opacity="0" offset="1"/>
+  </linearGradient>
+  <linearGradient id="linearGradient2895" y2="37.277" gradientUnits="userSpaceOnUse" x2="24.997" gradientTransform="matrix(0.90694933,0,0,1.0807825,-5.2693853,-11.995491)" y1="15.378" x1="24.823">
+   <stop stop-color="#dac197" offset="0"/>
+   <stop stop-color="#c1a581" offset="0.23942"/>
+   <stop stop-color="#dbc298" offset="0.27582"/>
+   <stop stop-color="#a68b60" offset="1"/>
+  </linearGradient>
+  <linearGradient id="linearGradient2897" y2="45.042" gradientUnits="userSpaceOnUse" x2="15.464" gradientTransform="matrix(0.70732457,0,0,0.69402746,-0.97578945,-1.3832872)" y1="7.9757" x1="15.464">
+   <stop stop-color="#c9af8b" offset="0"/>
+   <stop stop-color="#ad8757" offset="0.23942"/>
+   <stop stop-color="#c2a57f" offset="0.27582"/>
+   <stop stop-color="#9d7d53" offset="1"/>
+  </linearGradient>
+  <radialGradient id="radialGradient2903" xlink:href="#linearGradient3681" gradientUnits="userSpaceOnUse" cy="41.5" cx="5" gradientTransform="matrix(0.5938225,0,0,1.5366531,-6.6594735,-103.93618)" r="5"/>
+  <linearGradient id="linearGradient3681">
+   <stop stop-color="#000" offset="0"/>
+   <stop stop-color="#000" stop-opacity="0" offset="1"/>
+  </linearGradient>
+  <linearGradient id="linearGradient2905" y2="35" gradientUnits="userSpaceOnUse" x2="17.554" gradientTransform="matrix(1.7570316,0,0,1.3969574,-17.394014,-16.411698)" y1="46" x1="17.554">
+   <stop stop-color="#000" stop-opacity="0" offset="0"/>
+   <stop stop-color="#000" offset="0.5"/>
+   <stop stop-color="#000" stop-opacity="0" offset="1"/>
+  </linearGradient>
+  <radialGradient id="radialGradient2983" xlink:href="#linearGradient3681" gradientUnits="userSpaceOnUse" cy="41.5" cx="5" gradientTransform="matrix(0.5938225,0,0,1.5366531,41.140892,-103.93618)" r="5"/>
+ </defs>
+ <g opacity="0.4" transform="matrix(0.6905424,0,0,0.6781532,-0.50408884,-0.4485072)">
+  <rect transform="scale(-1,-1)" height="15.367" width="2.9602" y="-47.848" x="-3.6904" fill="url(#radialGradient2903)"/>
+  <rect height="15.367" width="40.412" y="32.482" x="3.6904" fill="url(#linearGradient2905)"/>
+  <rect transform="scale(1,-1)" height="15.367" width="2.9602" y="-47.848" x="44.11" fill="url(#radialGradient2983)"/>
+ </g>
+ <path stroke-linejoin="miter" d="m5.3977,4.5159,20.864,0c1.218,0,1.7661-0.19887,2.116,0.69403l2.1232,5.29v18.081c0,1.078,0.0728,0.91332-1.1452,0.91332h-26.712c-1.218,0-1.1452,0.16471-1.1452-0.91332v-18.081l2.1232-5.29c0.3401-0.87486,0.55789-0.69403,1.7759-0.69403z" fill-rule="nonzero" stroke-dashoffset="0" display="block" stroke="url(#linearGradient2897)" stroke-linecap="round" stroke-miterlimit="4" stroke-dasharray="none" stroke-width="0.99420077" fill="url(#linearGradient2895)"/>
+ <path opacity="0.50549454" stroke-linejoin="miter" d="m6.0608,5.219,19.56,0c1.1418,0,1.8485,0.38625,2.3268,1.4478l1.6473,4.4555v16.063c0,1.0137-0.57913,1.5241-1.721,1.5241h-23.86c-1.1418,0-1.6076-0.56135-1.6076-1.5751v-16.012l1.5942-4.551c0.31884-0.82269,0.91924-1.3522,2.0611-1.3522z" stroke-dashoffset="0" display="block" stroke="url(#linearGradient2892)" stroke-linecap="butt" stroke-miterlimit="4" stroke-dasharray="none" stroke-width="0.74211526" fill="none"/>
+ <path opacity="0.4" style="enable-background:accumulate;" d="m14,4h4v10h-1.1812-1.2094-0.97359-0.63585v-10z" fill-rule="nonzero" fill="url(#linearGradient2889)"/>
+ <path opacity="0.4" stroke-linejoin="miter" d="m1.5001,10.5,29,0" stroke="url(#linearGradient2886)" stroke-linecap="square" stroke-width="0.99999994px" fill="none"/>
+</svg>
diff --git a/core/img/filetypes/presentation.png b/core/img/filetypes/presentation.png
deleted file mode 100644
index b4aaad9a45c9abbee2d47611a6963101b64a8023..0000000000000000000000000000000000000000
Binary files a/core/img/filetypes/presentation.png and /dev/null differ
diff --git a/core/img/filetypes/readme-2.txt b/core/img/filetypes/readme-2.txt
deleted file mode 100644
index 5a606f9a0bb06cd53594eb4bd7cb0028dc48c686..0000000000000000000000000000000000000000
--- a/core/img/filetypes/readme-2.txt
+++ /dev/null
@@ -1,28 +0,0 @@
-15.02.2012
-
-Following new icons have been added:
-core/img/filetypes/application-vnd.oasis.opendocument.formula.png
-core/img/filetypes/application-vnd.oasis.opendocument.graphics.png
-core/img/filetypes/application-vnd.oasis.opendocument.presentation.png
-core/img/filetypes/application-vnd.oasis.opendocument.spreadsheet.png
-core/img/filetypes/application-vnd.oasis.opendocument.text.png
-	Download: http://odftoolkit.org/ODF-Icons#ODF_Icons
-	License: Apache 2.0
-	
-core/img/filetypes/application-x-7z-compressed.png
-core/img/filetypes/application-x-bzip-compressed-tar.png
-core/img/filetypes/application-x-bzip.png
-core/img/filetypes/application-x-compressed-tar.png
-core/img/filetypes/application-x-deb.png
-core/img/filetypes/application-x-debian-package.png
-core/img/filetypes/application-x-gzip.png
-core/img/filetypes/application-x-lzma-compressed-tar.png
-core/img/filetypes/application-x-rar.png
-core/img/filetypes/application-x-rpm.png
-core/img/filetypes/application-x-tar.png
-core/img/filetypes/application-x-tarz.png
-core/img/filetypes/application-zip.png
-	Author: Gomez Hyuuga
-	License: Creative Commons Attribution-Share Alike 3.0 Unported License	
-	Download: http://kde-look.org/content/show.php/?content=101767
-
diff --git a/core/img/filetypes/readme.txt b/core/img/filetypes/readme.txt
deleted file mode 100644
index 400a64d7857425f6aa49877a91a9bf8a5737400a..0000000000000000000000000000000000000000
--- a/core/img/filetypes/readme.txt
+++ /dev/null
@@ -1,22 +0,0 @@
-Silk icon set 1.3
-
-_________________________________________
-Mark James
-http://www.famfamfam.com/lab/icons/silk/
-_________________________________________
-
-This work is licensed under a
-Creative Commons Attribution 2.5 License.
-[ http://creativecommons.org/licenses/by/2.5/ ]
-
-This means you may use it for any purpose,
-and make any changes you like.
-All I ask is that you include a link back
-to this page in your credits.
-
-Are you using this icon set? Send me an email
-(including a link or picture if available) to
-mjames@gmail.com
-
-Any other questions about this icon set please
-contact mjames@gmail.com
\ No newline at end of file
diff --git a/core/img/filetypes/ruby.png b/core/img/filetypes/ruby.png
deleted file mode 100644
index f59b7c4365fa1720af1aa04eb47167ddaa6eeed4..0000000000000000000000000000000000000000
Binary files a/core/img/filetypes/ruby.png and /dev/null differ
diff --git a/core/img/filetypes/spreadsheet.png b/core/img/filetypes/spreadsheet.png
deleted file mode 100644
index abcd93689a08ec9bdbf0984927e8da06c043c7cd..0000000000000000000000000000000000000000
Binary files a/core/img/filetypes/spreadsheet.png and /dev/null differ
diff --git a/core/img/filetypes/text-calendar.png b/core/img/filetypes/text-calendar.png
deleted file mode 100644
index 658913852d60fc6ca8557568d26b8e93e7d56525..0000000000000000000000000000000000000000
Binary files a/core/img/filetypes/text-calendar.png and /dev/null differ
diff --git a/core/img/filetypes/text-code.png b/core/img/filetypes/text-code.png
new file mode 100644
index 0000000000000000000000000000000000000000..753d151f538842c2636a94e0f9231fc4ef1c301f
Binary files /dev/null and b/core/img/filetypes/text-code.png differ
diff --git a/core/img/filetypes/text-code.svg b/core/img/filetypes/text-code.svg
new file mode 100644
index 0000000000000000000000000000000000000000..61a5c19f5119a7e7d655f29c9460daaac95e29e0
--- /dev/null
+++ b/core/img/filetypes/text-code.svg
@@ -0,0 +1,66 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="32px" width="32px" version="1.1" xmlns:cc="http://creativecommons.org/ns#" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:dc="http://purl.org/dc/elements/1.1/">
+ <defs>
+  <linearGradient id="g" y2="43" gradientUnits="userSpaceOnUse" x2="24" gradientTransform="matrix(.56757 0 0 .72973 2.3784 -2.5135)" y1="5.5641" x1="24">
+   <stop stop-color="#fff" offset="0"/>
+   <stop stop-color="#fff" stop-opacity=".23529" offset=".036262"/>
+   <stop stop-color="#fff" stop-opacity=".15686" offset=".95056"/>
+   <stop stop-color="#fff" stop-opacity=".39216" offset="1"/>
+  </linearGradient>
+  <linearGradient id="f" y2="47.013" gradientUnits="userSpaceOnUse" x2="25.132" gradientTransform="matrix(.65714 0 0 .63012 .22856 -1.0896)" y1=".98521" x1="25.132">
+   <stop stop-color="#f4f4f4" offset="0"/>
+   <stop stop-color="#dbdbdb" offset="1"/>
+  </linearGradient>
+  <linearGradient id="e" y2="2.9062" gradientUnits="userSpaceOnUse" x2="-51.786" gradientTransform="matrix(.53064 0 0 .58970 39.27 -1.7919)" y1="50.786" x1="-51.786">
+   <stop stop-color="#a0a0a0" offset="0"/>
+   <stop stop-color="#bebebe" offset="1"/>
+  </linearGradient>
+  <radialGradient id="c" xlink:href="#a" gradientUnits="userSpaceOnUse" cy="486.65" cx="605.71" gradientTransform="matrix(.015663 0 0 .0082353 17.61 25.981)" r="117.14"/>
+  <linearGradient id="a">
+   <stop offset="0"/>
+   <stop stop-opacity="0" offset="1"/>
+  </linearGradient>
+  <radialGradient id="b" xlink:href="#a" gradientUnits="userSpaceOnUse" cy="486.65" cx="605.71" gradientTransform="matrix(-.015663 0 0 .0082353 14.39 25.981)" r="117.14"/>
+  <linearGradient id="d" y2="609.51" gradientUnits="userSpaceOnUse" y1="366.65" gradientTransform="matrix(.045769 0 0 .0082353 -.54232 25.981)" x2="302.86" x1="302.86">
+   <stop stop-opacity="0" offset="0"/>
+   <stop offset=".5"/>
+   <stop stop-opacity="0" offset="1"/>
+  </linearGradient>
+ </defs>
+ <g>
+  <g>
+   <rect opacity=".15" height="2" width="22.1" y="29" x="4.95" fill="url(#d)"/>
+   <path opacity=".15" d="m4.95 29v1.9999c-0.80662 0.0038-1.95-0.44807-1.95-1.0001 0-0.552 0.90012-0.99982 1.95-0.99982z" fill="url(#b)"/>
+   <path opacity=".15" d="m27.05 29v1.9999c0.80661 0.0038 1.95-0.44807 1.95-1.0001 0-0.552-0.90012-0.99982-1.95-0.99982z" fill="url(#c)"/>
+  </g>
+  <path stroke-linejoin="round" d="m4.5 0.49996c5.2705 0 23 0.00185 23 0.00185l0.000028 28.998h-23v-29z" stroke="url(#e)" stroke-width=".99992" fill="url(#f)"/>
+ </g>
+ <path stroke-linejoin="round" d="m26.5 28.5h-21v-27h21z" stroke="url(#g)" stroke-linecap="round" fill="none"/>
+ <path d="m8 5.505h2.3438zm2.6875 0h2.1875zm2.5312 0h1.9375zm2.25 0h0.84375zm-7.4688 2h3.6562zm4.0625 0h1.75zm2.0625 0h0.875zm1.2188 0h1.5938zm1.9375 0h1.625zm-9.282 1.995h4.2812zm4.625 0h4.625zm1.703 8h0.84375zm1.1875 0h1.875zm2.25 0h4.9062zm-2.6875 2.075h1.8438zm-1.028 5.925h2.9688zm3.8562 0h1.1875z" stroke="#89adc2" stroke-width="1px" fill="none"/>
+ <g transform="translate(27.06 6.7752)">
+  <path d="m-15.57 10.277h0.93368v1h-0.93368z" fill="#d48eb3"/>
+  <path d="m-14.483 10.277h0.41011v1h-0.41011z" fill="#d48eb3"/>
+  <path opacity=".7" d="m-19.06 16.277h1.9967v1h-1.9967v-1z" fill="#666"/>
+  <path opacity=".7" d="m-16.907 16.277h2.1395v1h-2.1395v-1z" fill="#666"/>
+  <g fill="#d48eb3">
+   <path d="m-14.611 16.277h0.85436v1h-0.85436v-1z"/>
+   <path d="m-13.6 16.277h2.0125v1h-2.0125v-1z"/>
+   <path d="m-9.8967 16.277h0.53704v1h-0.53704v-1z"/>
+   <path d="m-11.431 16.277h1.3779v1h-1.3779v-1z"/>
+   <path d="m-9.2031 16.277h0.31492v1h-0.31492v-1z"/>
+   <path d="m-8.7317 16.277h0.85436v1h-0.85436v-1z"/>
+   <path d="m-16.466 12.277h2.3933v1h-2.3933z"/>
+  </g>
+  <path d="m-19.06 14.277h1.8063v1h-1.8063v-1z" fill="#94d48e"/>
+  <path d="m-17.105 14.277h0.56877v1h-0.56877v-1z" fill="#94d48e"/>
+  <path opacity=".7" d="m-16.387 14.277h1.2986v1h-1.2986v-1z" fill="#666"/>
+  <path opacity=".7" d="m-14.939 14.277h0.88609v1h-0.88609v-1z" fill="#666"/>
+  <path d="m-19.06 18.277h1.4875v1h-1.4875v-1z" fill="#de6161"/>
+  <path opacity=".7" d="m-17.334 18.277h2.6472v1h-2.6472v-1z" fill="#666"/>
+ </g>
+ <g>
+  <path d="m8 12v1h3.0625v-1h-3.062zm0 2v1h3.0938v-1h-3.094z" fill="#b78ed4"/>
+  <path d="m12.406 12v1h5.594v-1zm0.03125 2v1h5.0938v-1z" fill="#d48eb3"/>
+  <path d="m8 17v1h2.5312v-1zm0 2.031v0.969h2.2188v-0.96875z" fill="#94d48e"/>
+ </g>
+</svg>
diff --git a/core/img/filetypes/text-css.png b/core/img/filetypes/text-css.png
deleted file mode 100644
index 23f3101811f2e402b8c581ba2e39977a675e0295..0000000000000000000000000000000000000000
Binary files a/core/img/filetypes/text-css.png and /dev/null differ
diff --git a/core/img/filetypes/text-html.png b/core/img/filetypes/text-html.png
index 55d1072eafda48abb0a5fcecb98b114d866077b9..dd17b7501034216c35e9273dc7e3858d486d2aed 100644
Binary files a/core/img/filetypes/text-html.png and b/core/img/filetypes/text-html.png differ
diff --git a/core/img/filetypes/text-html.svg b/core/img/filetypes/text-html.svg
new file mode 100644
index 0000000000000000000000000000000000000000..c41964738d00009d54bb1f773ae9ba1fc3e59c27
--- /dev/null
+++ b/core/img/filetypes/text-html.svg
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="32px" width="32px" version="1.1" xmlns:cc="http://creativecommons.org/ns#" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:dc="http://purl.org/dc/elements/1.1/">
+ <defs>
+  <linearGradient id="g" y2="43" gradientUnits="userSpaceOnUse" x2="24" gradientTransform="matrix(.56757 0 0 .72973 2.3784 -2.5135)" y1="5.5641" x1="24">
+   <stop stop-color="#fff" offset="0"/>
+   <stop stop-color="#fff" stop-opacity=".23529" offset=".036262"/>
+   <stop stop-color="#fff" stop-opacity=".15686" offset=".95056"/>
+   <stop stop-color="#fff" stop-opacity=".39216" offset="1"/>
+  </linearGradient>
+  <linearGradient id="f" y2="47.013" gradientUnits="userSpaceOnUse" x2="25.132" gradientTransform="matrix(.65714 0 0 .63012 .22856 -1.0896)" y1=".98521" x1="25.132">
+   <stop stop-color="#f4f4f4" offset="0"/>
+   <stop stop-color="#dbdbdb" offset="1"/>
+  </linearGradient>
+  <linearGradient id="e" y2="2.9062" gradientUnits="userSpaceOnUse" x2="-51.786" gradientTransform="matrix(.53064 0 0 .58970 39.27 -1.7919)" y1="50.786" x1="-51.786">
+   <stop stop-color="#a0a0a0" offset="0"/>
+   <stop stop-color="#bebebe" offset="1"/>
+  </linearGradient>
+  <radialGradient id="c" xlink:href="#a" gradientUnits="userSpaceOnUse" cy="486.65" cx="605.71" gradientTransform="matrix(.015663 0 0 .0082353 17.61 25.981)" r="117.14"/>
+  <linearGradient id="a">
+   <stop offset="0"/>
+   <stop stop-opacity="0" offset="1"/>
+  </linearGradient>
+  <radialGradient id="b" xlink:href="#a" gradientUnits="userSpaceOnUse" cy="486.65" cx="605.71" gradientTransform="matrix(-.015663 0 0 .0082353 14.39 25.981)" r="117.14"/>
+  <linearGradient id="d" y2="609.51" gradientUnits="userSpaceOnUse" y1="366.65" gradientTransform="matrix(.045769 0 0 .0082353 -.54232 25.981)" x2="302.86" x1="302.86">
+   <stop stop-opacity="0" offset="0"/>
+   <stop offset=".5"/>
+   <stop stop-opacity="0" offset="1"/>
+  </linearGradient>
+ </defs>
+ <g>
+  <g>
+   <rect opacity=".15" height="2" width="22.1" y="29" x="4.95" fill="url(#d)"/>
+   <path opacity=".15" d="m4.95 29v1.9999c-0.80662 0.0038-1.95-0.44807-1.95-1.0001 0-0.552 0.90012-0.99982 1.95-0.99982z" fill="url(#b)"/>
+   <path opacity=".15" d="m27.05 29v1.9999c0.80661 0.0038 1.95-0.44807 1.95-1.0001 0-0.552-0.90012-0.99982-1.95-0.99982z" fill="url(#c)"/>
+  </g>
+  <path stroke-linejoin="round" d="m4.5 0.49996c5.2705 0 23 0.00185 23 0.00185l0.000028 28.998h-23v-29z" stroke="url(#e)" stroke-width=".99992" fill="url(#f)"/>
+ </g>
+ <path stroke-linejoin="round" d="m26.5 28.5h-21v-27h21z" stroke="url(#g)" stroke-linecap="round" fill="none"/>
+ <g fill="#fff">
+  <rect opacity=".6" style="color:#000000" fill-rule="evenodd" transform="matrix(1 0 -.42525 .90508 0 0)" height="8.839" width="1.2412" y="14.363" x="23.867"/>
+  <path opacity=".6" d="m23.142 16.907-2.939-3.68 0.979-1.227 3.818 4.907-3.919 5.093-1.081-1.12 3.142-3.973z"/>
+  <path opacity=".6" d="m8.8581 16.907 2.9389-3.68-0.979-1.227-3.818 4.907 3.919 5.093 1.081-1.12-3.1419-3.973z"/>
+ </g>
+ <g>
+  <path opacity=".4" d="m8.8581 15.907 2.9389-3.68-0.979-1.227-3.818 4.907 3.919 5.093 1.081-1.12-3.1419-3.973z" fill="#666"/>
+  <rect opacity=".4" style="color:#000000" fill-rule="evenodd" transform="matrix(1 0 -.42525 .90508 0 0)" height="8.839" width="1.2412" y="13.259" x="23.397"/>
+  <path opacity=".4" d="m23.142 15.907-2.939-3.68 0.979-1.227 3.818 4.907-3.919 5.093-1.081-1.12 3.142-3.973z" fill="#666"/>
+ </g>
+</svg>
diff --git a/core/img/filetypes/text-vcard.png b/core/img/filetypes/text-vcard.png
index c02f315d20749098a50e79bd9525eed3cda7be6b..2e52d1ecb3a51b897b64d06b8db16e89c398b9e6 100644
Binary files a/core/img/filetypes/text-vcard.png and b/core/img/filetypes/text-vcard.png differ
diff --git a/core/img/filetypes/text-vcard.svg b/core/img/filetypes/text-vcard.svg
new file mode 100644
index 0000000000000000000000000000000000000000..27054be57e62f3536a56f15796debd964895f693
--- /dev/null
+++ b/core/img/filetypes/text-vcard.svg
@@ -0,0 +1,60 @@
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="32" width="32" version="1.1" xmlns:cc="http://creativecommons.org/ns#" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:dc="http://purl.org/dc/elements/1.1/">
+ <defs>
+  <linearGradient id="linearGradient5060">
+   <stop stop-color="#000" offset="0"/>
+   <stop stop-color="#000" stop-opacity="0" offset="1"/>
+  </linearGradient>
+  <linearGradient id="linearGradient3013" y2="43" gradientUnits="userSpaceOnUse" x2="24" gradientTransform="matrix(0.56756757,0,0,0.72972971,2.378382,-2.5135063)" y1="5.5641" x1="24">
+   <stop stop-color="#FFF" offset="0"/>
+   <stop stop-color="#FFF" stop-opacity="0.23529412" offset="0.036262"/>
+   <stop stop-color="#FFF" stop-opacity="0.15686275" offset="0.95056"/>
+   <stop stop-color="#FFF" stop-opacity="0.39215687" offset="1"/>
+  </linearGradient>
+  <linearGradient id="linearGradient3016" y2="47.013" gradientUnits="userSpaceOnUse" x2="25.132" gradientTransform="matrix(0.65714319,0,0,0.63012397,0.228556,-1.0896478)" y1="0.98521" x1="25.132">
+   <stop stop-color="#f4f4f4" offset="0"/>
+   <stop stop-color="#dbdbdb" offset="1"/>
+  </linearGradient>
+  <radialGradient id="radialGradient3021" xlink:href="#linearGradient5060" gradientUnits="userSpaceOnUse" cy="486.65" cx="605.71" gradientTransform="matrix(0.01566318,0,0,0.00823529,17.610433,25.980565)" r="117.14"/>
+  <radialGradient id="radialGradient3024" xlink:href="#linearGradient5060" gradientUnits="userSpaceOnUse" cy="486.65" cx="605.71" gradientTransform="matrix(-0.01566318,0,0,0.00823529,14.389566,25.980565)" r="117.14"/>
+  <linearGradient id="linearGradient3027" y2="609.51" gradientUnits="userSpaceOnUse" x2="302.86" gradientTransform="matrix(0.04576928,0,0,0.00823529,-0.5423243,25.980548)" y1="366.65" x1="302.86">
+   <stop stop-color="#000" stop-opacity="0" offset="0"/>
+   <stop stop-color="#000" offset="0.5"/>
+   <stop stop-color="#000" stop-opacity="0" offset="1"/>
+  </linearGradient>
+  <linearGradient id="linearGradient3032" y2="32.596" gradientUnits="userSpaceOnUse" x2="24" gradientTransform="matrix(0.502671,0,0,0.64629877,2.711822,0.7961773)" y1="14.916" x1="24">
+   <stop stop-color="#FFF" offset="0"/>
+   <stop stop-color="#FFF" stop-opacity="0.23529412" offset="0.12291"/>
+   <stop stop-color="#FFF" stop-opacity="0.15686275" offset="0.93706"/>
+   <stop stop-color="#FFF" stop-opacity="0.39215687" offset="1"/>
+  </linearGradient>
+  <radialGradient id="radialGradient3035" gradientUnits="userSpaceOnUse" cy="8.4498" cx="10.904" gradientTransform="matrix(0,0.96917483,-0.82965977,0,23.014205,-1.785221)" r="20">
+   <stop stop-color="#5f5f5f" offset="0"/>
+   <stop stop-color="#4f4f4f" offset="0.26238"/>
+   <stop stop-color="#3b3b3b" offset="0.70495"/>
+   <stop stop-color="#2b2b2b" offset="1"/>
+  </radialGradient>
+  <linearGradient id="linearGradient3037" y2="3.899" gradientUnits="userSpaceOnUse" x2="24" gradientTransform="matrix(0.65627449,0,0,0.6892852,0.2531134,-0.2111202)" y1="44" x1="24">
+   <stop stop-color="#272727" offset="0"/>
+   <stop stop-color="#454545" offset="1"/>
+  </linearGradient>
+ </defs>
+ <metadata>
+  <rdf:RDF>
+   <cc:Work rdf:about="">
+    <dc:format>image/svg+xml</dc:format>
+    <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
+    <dc:title/>
+   </cc:Work>
+  </rdf:RDF>
+ </metadata>
+ <rect opacity="0.15" fill-rule="nonzero" height="2" width="22.1" y="29" x="4.95" fill="url(#linearGradient3027)"/>
+ <path opacity="0.15" d="m4.95,29v1.9999c-0.80662,0.0038-1.95-0.44807-1.95-1.0001,0-0.552,0.90012-0.99982,1.95-0.99982z" fill-rule="nonzero" fill="url(#radialGradient3024)"/>
+ <path opacity="0.15" d="m27.05,29v1.9999c0.80661,0.0038,1.95-0.44807,1.95-1.0001,0-0.552-0.90012-0.99982-1.95-0.99982z" fill-rule="nonzero" fill="url(#radialGradient3021)"/>
+ <path d="m4.5,0.49996c5.2705,0,23,0.00185,23,0.00185l0.000028,28.998h-23v-29z" fill="url(#linearGradient3016)"/>
+ <path stroke-linejoin="round" d="m26.5,28.5-21,0,0-27,21,0z" stroke-dashoffset="0" stroke="url(#linearGradient3013)" stroke-linecap="round" stroke-miterlimit="4" stroke-dasharray="none" stroke-width="0.99999994" fill="none"/>
+ <path stroke-linejoin="round" opacity="0.3" d="m4.5,0.49996c5.2705,0,23,0.00185,23,0.00185l0.000028,28.998h-23v-29z" stroke-dashoffset="0" stroke="#000" stroke-linecap="butt" stroke-miterlimit="4" stroke-dasharray="none" stroke-width="0.99992186000000005" fill="none"/>
+ <path opacity="0.4" style="enable-background:accumulate;" d="m15.942,10c-0.43193-0.00263-0.8112,0.0802-1.0693,0.25173-0.33304,0.22128-0.47989,0.24937-0.57286,0.09682-0.08897-0.14595-0.16986-0.12965-0.24824,0.07745-0.06628,0.17515-0.20484,0.25511-0.36281,0.19364-0.15062-0.05862-0.21239-0.03973-0.15276,0.05809,0.05729,0.09402,0.02929,0.17427-0.05728,0.17427s-0.36382,0.2966-0.61105,0.65837c-0.39411,0.57668-0.45839,0.84025-0.45829,2.0526,0.000055,0.76062,0.07517,1.5012-0.15276,1.5491-0.13368,0.02806-0.12095,0.55674-0.05728,1.1037,0.08325,0.71528,0.20761,1.0657,0.55377,1.3942,0.53917,0.51164,1.0312,1.3973,1.0312,1.8783,0,0.65888-1.5163,1.812-3.7844,2.8648l-0.001,1.647h11.999l0.001-1.818c-1.8832-0.86856-3.4418-2.0704-3.4418-2.6933,0-0.47982,0.47343-1.3672,1.0121-1.8783,0.34616-0.32849,0.48961-0.6789,0.57286-1.3942,0.06366-0.54699,0.07227-1.0601-0.05728-1.1037-0.17854-0.06014-0.17188-0.79471-0.17188-1.5491-0.000001-1.0814-0.06787-1.4838-0.34372-1.9364-0.54889-0.9006-2.3323-1.6188-3.6281-1.6265z" fill-rule="evenodd" fill="#FFF"/>
+ <path stroke-linejoin="round" style="enable-background:accumulate;color:#000000;" d="m15.942,9.5292c-0.6255-0.1462-1.3748,0.30347-1.3748,0.30347l-0.6729,0.33632s-0.72918,0.63672-0.73698,0.85303c-0.41044,0.72679-0.22336,1.6075-0.26498,2.4026,0.03999,0.68261-0.43452,1.1887-0.1965,1.8808-0.03472,0.66822,0.51558,1.0601,0.86937,1.5434,0.39816,0.61145,0.93889,1.4093,0.51306,2.141-0.78719,1.1416-2.0959,1.7466-3.2907,2.3686-0.4059,0.04157-0.25309,0.43145-0.28027,0.70942-0.000647,0.22106-0.07334,0.51408,0.25088,0.41058h10.742v-1.1474c-1.1567-0.58611-2.3639-1.2139-3.1747-2.2562-0.48709-0.69808,0.0011-1.5369,0.38553-2.1576,0.2993-0.51701,0.92489-0.84736,0.93383-1.5066,0.23004-0.66882-0.1171-1.2225-0.18189-1.8604-0.08471-0.84572,0.14453-1.7705-0.25914-2.5574-0.54732-0.80518-1.5498-1.1578-2.4596-1.3737-0.26389-0.053253-0.53234-0.088037-0.80184-0.09011z" fill-rule="nonzero" stroke-dashoffset="0" stroke="url(#linearGradient3037)" stroke-linecap="round" stroke-miterlimit="4" stroke-dasharray="none" stroke-width="0.99999994" fill="url(#radialGradient3035)"/>
+ <path opacity="0.5" stroke-linejoin="round" style="enable-background:accumulate;color:#000000;" d="m15.797,10.502c-0.10657-0.01105-0.27196,0.03765-0.51076,0.15329-0.17676,0.08559-0.43781,0.15994-0.7045,0.21077l0.01761,0.01916c-0.0033,0.002-0.1837,0.11082-0.29941,0.19161-0.02225,0.01554-0.034,0.0057-0.05284,0.01916-0.0059,0.0083-0.01447,0.01546-0.01761,0.01916-0.07635,0.08979-0.22535,0.27657-0.33464,0.47903-0.11417,0.2115-0.16633,0.4404-0.15851,0.49819a0.52517,0.57134,0,0,1,0.01761,0.13413c-0.05039,0.58523,0.11775,1.3768-0.1409,2.261a0.52517,0.57134,0,0,1,-0.035,0.115c-0.09831,0.18139-0.02434,0.78987,0.1409,1.2455,0.54115,0.61932,1.1974,1.4444,1.18,2.5676a0.52517,0.57134,0,0,1,-0.0176,0.13412c-0.28591,1.0661-1.1672,1.5797-1.726,2.0119a0.52517,0.57134,0,0,1,-0.01761,0.01916c-0.524,0.378-1.084,0.623-1.637,0.919h9c-1.027-0.52495-2.0438-1.1451-2.8532-2.1077-0.0057-0.0069-0.0119-0.01231-0.01761-0.01916-0.37728-0.42677-0.45342-1.0116-0.36986-1.4754,0.08208-0.45566,0.27492-0.83741,0.45793-1.1497,0.0063-0.01067,0.01139-0.02783,0.01761-0.03833,0.18432-0.36085,0.41144-0.60748,0.5636-0.80477,0.15849-0.2055,0.22438-0.31795,0.22896-0.47903a0.52517,0.57134,0,0,1,0.03523,-0.15329c0.05659-0.18584,0.03263-0.33442-0.01761-0.57483-0.04928-0.23579-0.14777-0.55211-0.17612-0.9389-0.000556-0.0075,0.000501-0.01151,0-0.01916-0.04688-0.50185,0.0086-0.95368,0-1.3413-0.0086-0.3855-0.07421-0.66627-0.22896-0.90057-0.0021-0.0024,0.0021-0.01679,0-0.01916-0.54915-0.61896-1.4523-0.93653-2.3073-0.97721a0.52517,0.57134,0,0,1,-0.03523,0z" stroke-dashoffset="0" stroke="url(#linearGradient3032)" stroke-linecap="round" stroke-miterlimit="4" stroke-dasharray="none" stroke-width="1" fill="none"/>
+</svg>
diff --git a/core/img/filetypes/text-x-c++.png b/core/img/filetypes/text-x-c++.png
deleted file mode 100644
index a87cf847cb768acb8c600759ce433ce1bad3cdc0..0000000000000000000000000000000000000000
Binary files a/core/img/filetypes/text-x-c++.png and /dev/null differ
diff --git a/core/img/filetypes/text-x-c.png b/core/img/filetypes/text-x-c.png
index 34a05cccf064b35701b61ba1d395048873d7b48e..b9edd1e866e457027339e21329e367e84f9dd304 100644
Binary files a/core/img/filetypes/text-x-c.png and b/core/img/filetypes/text-x-c.png differ
diff --git a/core/img/filetypes/text-x-c.svg b/core/img/filetypes/text-x-c.svg
new file mode 100644
index 0000000000000000000000000000000000000000..35a6a0cdfe2840ce53d8156732bc3f9171f650dd
--- /dev/null
+++ b/core/img/filetypes/text-x-c.svg
@@ -0,0 +1,75 @@
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="32.002" width="32" version="1.1" xmlns:cc="http://creativecommons.org/ns#" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:dc="http://purl.org/dc/elements/1.1/">
+ <defs>
+  <linearGradient id="linearGradient3161" y2="14" xlink:href="#linearGradient3830" gradientUnits="userSpaceOnUse" x2="25" gradientTransform="translate(0,-4.6093084e-4)" y1="43" x1="25"/>
+  <linearGradient id="linearGradient3830">
+   <stop stop-color="#FFF" offset="0"/>
+   <stop stop-color="#FFF" stop-opacity="0" offset="1"/>
+  </linearGradient>
+  <linearGradient id="linearGradient3164" y2="28.585" xlink:href="#linearGradient3830" gradientUnits="userSpaceOnUse" x2="30" gradientTransform="translate(0,-4.6093084e-4)" y1="9.9828" x1="30"/>
+  <radialGradient id="radialGradient3167" fx="7.2758" gradientUnits="userSpaceOnUse" cy="9.9571" cx="7.8061" gradientTransform="matrix(-1.6167311e-7,6.6018651,-8.0922115,-1.9817022e-7,104.56429,-60.072946)" r="12.672">
+   <stop stop-color="#90dbec" offset="0"/>
+   <stop stop-color="#55c1ec" offset="0.26238"/>
+   <stop stop-color="#3689e6" offset="0.70495"/>
+   <stop stop-color="#2b63a0" offset="1"/>
+  </radialGradient>
+  <linearGradient id="linearGradient3169" y2="0.91791" gradientUnits="userSpaceOnUse" x2="25" gradientTransform="translate(0,-4.6093084e-4)" y1="47.935" x1="25">
+   <stop stop-color="#185f9a" offset="0"/>
+   <stop stop-color="#599ec9" offset="1"/>
+  </linearGradient>
+  <radialGradient id="radialGradient3172" gradientUnits="userSpaceOnUse" cy="63.965" cx="15.116" gradientTransform="matrix(1.139227,0,0,0.4068666,6.7799989,7.7466159)" r="12.289">
+   <stop stop-color="#000" offset="0"/>
+   <stop stop-color="#000" stop-opacity="0" offset="1"/>
+  </radialGradient>
+  <linearGradient id="linearGradient3243" y2="0.50543" gradientUnits="userSpaceOnUse" x2="21.253" gradientTransform="translate(0,0.99953907)" y1="44.301" x1="21.253">
+   <stop stop-color="#AAA" offset="0"/>
+   <stop stop-color="#c8c8c8" offset="1"/>
+  </linearGradient>
+  <linearGradient id="linearGradient3988" y2="43" gradientUnits="userSpaceOnUse" x2="24" gradientTransform="matrix(0.89189189,0,0,1.1351351,2.5945999,-4.7432314)" y1="5.5641" x1="24">
+   <stop stop-color="#FFF" offset="0"/>
+   <stop stop-color="#FFF" stop-opacity="0.23529412" offset="0.036262"/>
+   <stop stop-color="#FFF" stop-opacity="0.15686275" offset="0.95056"/>
+   <stop stop-color="#FFF" stop-opacity="0.39215687" offset="1"/>
+  </linearGradient>
+  <linearGradient id="linearGradient3322" y2="47.013" gradientUnits="userSpaceOnUse" x2="25.132" gradientTransform="matrix(1,0,0,0.9561695,-9.9999999e-8,-1.9149218)" y1="0.98521" x1="25.132">
+   <stop stop-color="#f4f4f4" offset="0"/>
+   <stop stop-color="#dbdbdb" offset="1"/>
+  </linearGradient>
+  <linearGradient id="linearGradient3324" y2="2.9062" gradientUnits="userSpaceOnUse" x2="-51.786" gradientTransform="matrix(0.8074968,0,0,0.8948322,59.410232,-2.9805531)" y1="50.786" x1="-51.786">
+   <stop stop-color="#a0a0a0" offset="0"/>
+   <stop stop-color="#bebebe" offset="1"/>
+  </linearGradient>
+  <radialGradient id="radialGradient3327" xlink:href="#linearGradient5060" gradientUnits="userSpaceOnUse" cy="486.65" cx="605.71" gradientTransform="matrix(0.02303995,0,0,0.01470022,26.360882,37.040176)" r="117.14"/>
+  <linearGradient id="linearGradient5060">
+   <stop stop-color="#000" offset="0"/>
+   <stop stop-color="#000" stop-opacity="0" offset="1"/>
+  </linearGradient>
+  <radialGradient id="radialGradient3330" xlink:href="#linearGradient5060" gradientUnits="userSpaceOnUse" cy="486.65" cx="605.71" gradientTransform="matrix(-0.02303994,0,0,0.01470022,21.62311,37.040176)" r="117.14"/>
+  <linearGradient id="linearGradient4091" y2="609.51" gradientUnits="userSpaceOnUse" x2="302.86" gradientTransform="matrix(0.06732488,0,0,0.01470022,-0.3411391,37.040146)" y1="366.65" x1="302.86">
+   <stop stop-color="#000" stop-opacity="0" offset="0"/>
+   <stop stop-color="#000" offset="0.5"/>
+   <stop stop-color="#000" stop-opacity="0" offset="1"/>
+  </linearGradient>
+ </defs>
+ <metadata>
+  <rdf:RDF>
+   <cc:Work rdf:about="">
+    <dc:format>image/svg+xml</dc:format>
+    <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
+    <dc:title/>
+   </cc:Work>
+  </rdf:RDF>
+ </metadata>
+ <g transform="matrix(0.66666667,0,0,0.66666667,0,0.00184133)">
+  <rect opacity="0.3" fill-rule="nonzero" height="3.5701" width="32.508" y="42.43" x="7.7378" fill="url(#linearGradient4091)"/>
+  <path opacity="0.3" d="m7.7378,42.43v3.5699c-1.1865,0.0067-2.8684-0.79982-2.8684-1.7852,0-0.98533,1.324-1.7847,2.8684-1.7847z" fill-rule="nonzero" fill="url(#radialGradient3330)"/>
+  <path opacity="0.3" d="m40.246,42.43v3.5699c1.1865,0.0067,2.8684-0.79982,2.8684-1.7852,0-0.98533-1.324-1.7847-2.8684-1.7847z" fill-rule="nonzero" fill="url(#radialGradient3327)"/>
+  <path stroke-linejoin="round" d="M6.5,0.4972c8.02,0,35,0.0028,35,0.0028l0.000042,44.003h-35v-44.006z" stroke-dashoffset="0" stroke="url(#linearGradient3324)" stroke-linecap="butt" stroke-miterlimit="4" stroke-dasharray="none" stroke-width="0.99992186" fill="url(#linearGradient3322)"/>
+  <path stroke-linejoin="round" d="m40.5,43.5-33,0,0-42,33,0z" stroke-dashoffset="0" stroke="url(#linearGradient3988)" stroke-linecap="round" stroke-miterlimit="4" stroke-dasharray="none" stroke-width="1" fill="none"/>
+  <path d="m11,6.9995,0,1,2.375,0,0-1zm2.6875,0,0,1,2.25,0,0-1zm2.5625,0,0,1,1.9688,0,0-1zm2.2812,0,0,1,0.875,0,0-1zm1.1875,0,0,1,1.9375,0,0-1zm2.2812,0,0,1,5,0,0-1zm-11,2,0,1,3.7812,0,0-1zm4.1562,0,0,1,1.8125,0,0-1zm2.1562,0,0,1,0.84375,0,0-1zm1.2188,0,0,1,1.625,0,0-1zm2,0,0,1,1.625,0,0-1zm1.9688,0,0,1,2.6562,0,0-1zm3.0312,0,0,1,3.4688,0,0-1zm-16.904,2.0005v1h4.1875v-1zm4.5,0,0,1,4.5,0,0-1zm-4.5,2,0,1,2.3125,0,0-1zm2.625,0,0,1,2.1562,0,0-1zm2.4688,0,0,1,1.9062,0,0-1zm-5.0938,3,0,1,3.0625,0,0-1zm3.4062,0,0,1,5.5938,0,0-1zm-3.4062,2,0,1,3.0938,0,0-1zm3.4375,0,0,1,5.0938,0,0-1c-2.793,2.816-6.7194,8.5464-5.0938,0zm5.4688,0,0,1,1.9062,0,0-1zm2.2188,0,0,1,1.9062,0,0-1zm2.2188,0,0,1,2.75,0,0-1zm3.0938,0,0,1,0.5625,0,0-1zm-16.438,3,0,1,2.3438,0,0-1zm0,2,0,1,1,0,0-1zm0,2,0,1,2.75,0,0-1zm9,0,0,1,2.3438,0,0-1zm2.6562,0,0,1,2.1875,0,0-1zm2.5,0,0,1,1.8438,0,0-1zm-14.156,2,0,1,2.9375,0,0-1zm9,0,0,1,1.875,0,0-1zm2.1875,0,0,1,4.8125,0,0-1zm5.125,0,0,1,3.6875,0,0-1zm-16.312,2,0,1,2.5312,0,0-1zm9,0,0,1,2.4375,0,0-1zm2.7812,0,0,1,4.2812,0,0-1zm4.5938,0,0,1,2.9375,0,0-1zm-16.376,2.156v0.96875h2.2188v-0.96875zm2.5625,0,0,0.96875,2.125,0,0-0.96875zm-2.562,2.844v1h4.2812v-1zm4.625,0,0,1,4.5938,0,0-1zm11.75,0,0,1,2.9688,0,0-1zm3.2812,0,0,1,1.1562,0,0-1zm1.5,0,0,1,0.6875,0,0-1zm1,0,0,1,1.8438,0,0-1zm-22.156,2,0,1,3.6875,0,0-1zm3.9688,0,0,1,1.7812,0,0-1zm2.1562,0,0,1,0.8125,0,0-1zm1.0312,0,0,1,1.625,0,0-1zm1.875,0,0,1,1.625,0,0-1zm2.125,0,0,1,2.5938,0,0-1zm2.9062,0,0,1,3.375,0,0-1zm3.8438,0,0,1,2.2812,0,0-1zm2.5625,0,0,1,0.53125,0,0-1zm-20.469,2,0,1,3.0312,0,0-1zm3.3438,0,0,1,3.3438,0,0-1zm5.5938,0,0,1,2.4375,0,0-1zm2.75,0,0,1,2.25,0,0-1zm2.5938,0,0,1,1.9375,0,0-1zm2.25,0,0,1,3.0938,0,0-1zm3.4375,0,0,1,5.0312,0,0-1z" fill="url(#linearGradient3243)"/>
+  <path opacity="0.3" d="M38,33.772c0.002,2.762-6.267,5.001-14,5.001s-14.002-2.239-14-5.001c-0.0015-2.762,6.267-5.001,14-5.001,7.7331,0,14.002,2.2392,14,5.001z" fill="url(#radialGradient3172)"/>
+  <path stroke-linejoin="round" style="enable-background:accumulate;" d="m24,10.5c-6.9,0-12.5,5.6-12.5,12.5s5.6,12.5,12.5,12.5c5.1254,0,10-3.5,11.553-8h-5.536c-1.3314,1.7506-3.794,3-6.0175,3-4.14,0-7.5-3.36-7.5-7.5-0.000002-4.14,3.36-7.5,7.5-7.5,2.6674,0,5.1835,1.9004,6.5132,4h4.9491c-0.46238-4.5-5.9604-9-11.462-9z" fill-rule="nonzero" stroke-dashoffset="0" stroke="url(#linearGradient3169)" stroke-linecap="square" stroke-miterlimit="4" stroke-dasharray="none" stroke-width="1" fill="url(#radialGradient3167)"/>
+  <path opacity="0.5" stroke-linejoin="miter" style="enable-background:accumulate;" d="m34.125,17.937c-1.85-3.7875-5.876-6.4337-10.125-6.375-4.4493-0.06217-8.7511,2.7592-10.485,6.8537-1.8453,4.1071-0.95053,9.2567,2.2024,12.479,2.1403,2.3057,5.2836,3.5679,8.4064,3.5424" stroke-dashoffset="0" stroke="url(#linearGradient3164)" stroke-linecap="square" stroke-miterlimit="4" stroke-dasharray="none" stroke-width="1" fill="none"/>
+  <path opacity="0.5" stroke-linejoin="miter" style="enable-background:accumulate;" d="m23.561,14.448c-4.0197,0.13299-7.6119,3.4686-8.0541,7.4638-0.56609,3.8529,1.8882,7.8464,5.5554,9.1288,3.0106,1.1697,7.3287,0.17216,9.3618-2.5497h4.5763" stroke-dashoffset="0" stroke="url(#linearGradient3161)" stroke-linecap="square" stroke-miterlimit="4" stroke-dasharray="none" stroke-width="1" fill="none"/>
+ </g>
+</svg>
diff --git a/core/img/filetypes/text-x-csharp.png b/core/img/filetypes/text-x-csharp.png
deleted file mode 100644
index ffb8fc932f321d19049a51e0134459e7d6549226..0000000000000000000000000000000000000000
Binary files a/core/img/filetypes/text-x-csharp.png and /dev/null differ
diff --git a/core/img/filetypes/text-x-h.png b/core/img/filetypes/text-x-h.png
index e902abb07671254da98cd4eb0f7d21fab89d2332..37a8805b50696aa9cf36c610871a96cb1d5b3bba 100644
Binary files a/core/img/filetypes/text-x-h.png and b/core/img/filetypes/text-x-h.png differ
diff --git a/core/img/filetypes/text-x-h.svg b/core/img/filetypes/text-x-h.svg
new file mode 100644
index 0000000000000000000000000000000000000000..38ed04690fc7e27c88f13dc47e2131b95b551bde
--- /dev/null
+++ b/core/img/filetypes/text-x-h.svg
@@ -0,0 +1,79 @@
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="32.002" width="32" version="1.1" xmlns:cc="http://creativecommons.org/ns#" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:dc="http://purl.org/dc/elements/1.1/">
+ <defs>
+  <linearGradient id="linearGradient3471" y2="36.456" gradientUnits="userSpaceOnUse" x2="21.038" gradientTransform="matrix(0.58514285,0,0,0.60235363,3.8713637,10.911281)" y1="29.845" x1="21.038">
+   <stop stop-color="#FFF" offset="0"/>
+   <stop stop-color="#FFF" stop-opacity="0" offset="1"/>
+  </linearGradient>
+  <linearGradient id="linearGradient4596-7" y2="34.607" gradientUnits="userSpaceOnUse" x2="26.884" gradientTransform="translate(4.1160985,-1.6069009)" y1="12.607" x1="26.884">
+   <stop stop-color="#FFF" offset="0"/>
+   <stop stop-color="#FFF" stop-opacity="0.23529412" offset="0.090909"/>
+   <stop stop-color="#FFF" stop-opacity="0.15686275" offset="0.95455"/>
+   <stop stop-color="#FFF" stop-opacity="0.39215687" offset="1"/>
+  </linearGradient>
+  <radialGradient id="radialGradient3394" fx="9.3065" xlink:href="#linearGradient3242-6-6" gradientUnits="userSpaceOnUse" cy="10.244" cx="9.8368" gradientTransform="matrix(0,7.1403659,-7.3430977,0,93.723115,-67.567174)" r="12.672"/>
+  <linearGradient id="linearGradient3242-6-6">
+   <stop stop-color="#f8b17e" offset="0"/>
+   <stop stop-color="#e35d4f" offset="0.26238"/>
+   <stop stop-color="#c6262e" offset="0.66094"/>
+   <stop stop-color="#690b54" offset="1"/>
+  </linearGradient>
+  <linearGradient id="linearGradient3396" y2="4.9451" xlink:href="#linearGradient2490-6-6" gradientUnits="userSpaceOnUse" x2="25" gradientTransform="matrix(0.98529211,0,0,1.0090832,-3.0293205,-2.6661519)" y1="49.945" x1="25"/>
+  <linearGradient id="linearGradient2490-6-6">
+   <stop stop-color="#791235" offset="0"/>
+   <stop stop-color="#dd3b27" offset="1"/>
+  </linearGradient>
+  <radialGradient id="radialGradient3399" fx="9.3065" xlink:href="#linearGradient3242-6-6" gradientUnits="userSpaceOnUse" cy="10.244" cx="9.8368" gradientTransform="matrix(0,7.1403659,-7.3430977,0,93.723115,-67.168075)" r="12.672"/>
+  <linearGradient id="linearGradient3401" y2="4.9451" xlink:href="#linearGradient2490-6-6" gradientUnits="userSpaceOnUse" x2="25" gradientTransform="matrix(0.98529211,0,0,1.0090832,-3.0293205,-2.2670529)" y1="49.945" x1="25"/>
+  <linearGradient id="linearGradient3797" y2="0.4976" gradientUnits="userSpaceOnUse" x2="23.749" y1="44.759" x1="23.749">
+   <stop stop-color="#a3a3a3" offset="0"/>
+   <stop stop-color="#bababa" offset="1"/>
+  </linearGradient>
+  <linearGradient id="linearGradient3988" y2="43" gradientUnits="userSpaceOnUse" x2="24" gradientTransform="matrix(0.89189189,0,0,1.1351351,2.5945999,-4.7432314)" y1="5.5641" x1="24">
+   <stop stop-color="#FFF" offset="0"/>
+   <stop stop-color="#FFF" stop-opacity="0.23529412" offset="0.036262"/>
+   <stop stop-color="#FFF" stop-opacity="0.15686275" offset="0.95056"/>
+   <stop stop-color="#FFF" stop-opacity="0.39215687" offset="1"/>
+  </linearGradient>
+  <linearGradient id="linearGradient3322" y2="47.013" gradientUnits="userSpaceOnUse" x2="25.132" gradientTransform="matrix(1,0,0,0.9561695,-9.9999999e-8,-1.9149218)" y1="0.98521" x1="25.132">
+   <stop stop-color="#f4f4f4" offset="0"/>
+   <stop stop-color="#dbdbdb" offset="1"/>
+  </linearGradient>
+  <linearGradient id="linearGradient3324" y2="2.9062" gradientUnits="userSpaceOnUse" x2="-51.786" gradientTransform="matrix(0.8074968,0,0,0.8948322,59.410232,-2.9805531)" y1="50.786" x1="-51.786">
+   <stop stop-color="#a0a0a0" offset="0"/>
+   <stop stop-color="#bebebe" offset="1"/>
+  </linearGradient>
+  <radialGradient id="radialGradient3327" xlink:href="#linearGradient5060" gradientUnits="userSpaceOnUse" cy="486.65" cx="605.71" gradientTransform="matrix(0.02303995,0,0,0.01470022,26.360882,37.040176)" r="117.14"/>
+  <linearGradient id="linearGradient5060">
+   <stop stop-color="#000" offset="0"/>
+   <stop stop-color="#000" stop-opacity="0" offset="1"/>
+  </linearGradient>
+  <radialGradient id="radialGradient3330" xlink:href="#linearGradient5060" gradientUnits="userSpaceOnUse" cy="486.65" cx="605.71" gradientTransform="matrix(-0.02303994,0,0,0.01470022,21.62311,37.040176)" r="117.14"/>
+  <linearGradient id="linearGradient4333" y2="609.51" gradientUnits="userSpaceOnUse" x2="302.86" gradientTransform="matrix(0.06732488,0,0,0.01470022,-0.3411391,37.040146)" y1="366.65" x1="302.86">
+   <stop stop-color="#000" stop-opacity="0" offset="0"/>
+   <stop stop-color="#000" offset="0.5"/>
+   <stop stop-color="#000" stop-opacity="0" offset="1"/>
+  </linearGradient>
+ </defs>
+ <metadata>
+  <rdf:RDF>
+   <cc:Work rdf:about="">
+    <dc:format>image/svg+xml</dc:format>
+    <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
+    <dc:title/>
+   </cc:Work>
+  </rdf:RDF>
+ </metadata>
+ <g transform="matrix(0.66666667,0,0,0.66666667,0,0.00184133)">
+  <rect opacity="0.3" fill-rule="nonzero" height="3.5701" width="32.508" y="42.43" x="7.7378" fill="url(#linearGradient4333)"/>
+  <path opacity="0.3" d="m7.7378,42.43v3.5699c-1.1865,0.0067-2.8684-0.79982-2.8684-1.7852,0-0.98533,1.324-1.7847,2.8684-1.7847z" fill-rule="nonzero" fill="url(#radialGradient3330)"/>
+  <path opacity="0.3" d="m40.246,42.43v3.5699c1.1865,0.0067,2.8684-0.79982,2.8684-1.7852,0-0.98533-1.324-1.7847-2.8684-1.7847z" fill-rule="nonzero" fill="url(#radialGradient3327)"/>
+  <path stroke-linejoin="round" d="M6.5,0.4972c8.02,0,35,0.0028,35,0.0028l0.000042,44.003h-35v-44.006z" stroke-dashoffset="0" stroke="url(#linearGradient3324)" stroke-linecap="butt" stroke-miterlimit="4" stroke-dasharray="none" stroke-width="0.99992186" fill="url(#linearGradient3322)"/>
+  <path stroke-linejoin="round" d="m40.5,43.5-33,0,0-42,33,0z" stroke-dashoffset="0" stroke="url(#linearGradient3988)" stroke-linecap="round" stroke-miterlimit="4" stroke-dasharray="none" stroke-width="1" fill="none"/>
+  <path d="m11,21,0,1,2.3438,0,0-1h-2.344zm0,4,0,1,2.75,0,0-1-2.75,0zm0,2,0,1,2.9375,0,0-1h-5.282zm0,2,0,1,2.5312,0,0-1h-4.875zm0,2.1562,0,0.96875,2.2188,0,0-0.96875-2.2188,0zm0.406-10.156v1h2.25v-1h-2.25zm-2.75,2,0,1,1,0,0-1-1,0zm3.1562,2,0,1,1.8438,0,0-1-1.8438,0zm0.125,2,0,1,2.7188,0,0-1-2.7188,0zm-0.34375,2,0,1,2.0625,0,0-1-2.0625,0zm-0.375,2.1562,0,0.96875,2.125,0,0-0.96875-2.125,0zm-2.562,2.844v1h4.2812v-1h-4.281zm0,2,0,1,3.6875,0,0-1h-3.688zm3.9688,0,0,1,1.7812,0,0-1-1.7812,0zm-0.625,2,0,1,3.3438,0,0-1-3.3438,0zm-3.344,0h3.0367v1h-3.037v-1zm3.4062-22,0,1,5.5938,0,0-1-5.5938,0zm0.03125,2,0,1,5.0938,0,0-1-5.0938,0zm1.1875,16,0,1,4.5938,0,0-1-4.5938,0zm4.9375,0,0,1,1.8125,0,0-1-1.8125,0zm2.1562,0,0,1,4.3125,0,0-1-4.3125,0zm4.6562,0,0,1,2.9688,0,0-1-2.9688,0zm3.2812,0,0,1,1.1562,0,0-1-1.1562,0zm1.5,0,0,1,0.6875,0,0-1-0.6875,0zm1,0,0,1,1.8438,0,0-1-1.8438,0zm-16.031,2,0,1,0.8125,0,0-1-0.8125,0zm1.0312,0,0,1,1.625,0,0-1-1.625,0zm1.875,0,0,1,1.625,0,0-1-1.625,0zm2.125,0,0,1,2.5938,0,0-1-2.5938,0zm2.9062,0,0,1,3.375,0,0-1-3.375,0zm3.8438,0,0,1,2.2812,0,0-1-2.2812,0zm2.5625,0,0,1h0.532v-1h-0.531zm-20.468-20v1h3.0625v-1h-3.062zm0,2,0,1,3.0938,0,0-1h-3.094zm0-11,0,1,2.375,0,0-1-2.375,0zm2.6875,0,0,1,2.25,0,0-1-2.25,0zm2.5625,0,0,1,1.9688,0,0-1-1.9688,0zm2.2812,0,0,1,0.875,0,0-1-0.875,0zm1.1875,0,0,1,1.9375,0,0-1-1.9375,0zm2.2812,0,0,1,5,0,0-1-5,0zm-11,2l0.001,1h3.7812v-1h-3.7812zm4.1562,0,0,1,1.8125,0,0-1-1.8125,0zm2.1562,0,0,1,0.84375,0,0-1-0.84375,0zm1.2188,0,0,1,1.625,0,0-1-1.625,0zm2,0,0,1,1.625,0,0-1-1.625,0zm1.9688,0,0,1,2.6562,0,0-1-2.6562,0zm3.0312,0,0,1,3.4688,0,0-1-3.4688,0zm-14.53,2v1h4.1875v-1h-4.188zm4.5,0,0,1,4.5,0,0-1-4.5,0zm-4.5,2,0,1,2.3125,0,0-1h-2.312zm2.625,0,0,1,2.1562,0,0-1-2.1562,0zm2.4688,0,0,1,1.9062,0,0-1-1.9062,0zm3.8125,5,0,1,1.9062,0,0-1-1.9062,0zm2.2188,0,0,1,1.9062,0,0-1-1.9062,0zm2.2188,0,0,1,2.75,0,0-1-2.75,0zm3.0938,0,0,1,0.5625,0,0-1-0.5625,0zm-7.438,7v1h2.3438v-1h-2.344zm2.6562,0,0,1,2.1875,0,0-1-2.1875,0zm2.5,0,0,1h1.844v-1h-1.844zm-5.156,2v1h1.875v-1h-1.875zm2.1875,0,0,1,4.8125,0,0-1-4.8125,0zm5.125,0,0,1,3.6875,0,0-1-3.6875,0zm-7.313,2v1h2.4375v-1h-2.438zm2.7812,0,0,1,4.2812,0,0-1-4.2812,0zm4.5938,0,0,1,2.9375,0,0-1-2.9375,0zm-7.375,2.125v0.96875h1.875v-0.96875h-1.875zm2.1875,0,0,0.96875,1.9062,0,0-0.96875-1.9062,0zm2.2188,0,0,0.96875,2.7188,0,0-0.96875-2.7188,0zm3.0312,0,0,0.96875,0.5625,0,0-0.96875-0.5625,0zm0.875,0,0,0.96875,3.5312,0,0-0.96875-3.5312,0zm-8.375,6.875,0,1,2.4375,0,0-1-2.4375,0zm2.75,0,0,1,2.25,0,0-1-2.25,0zm2.5938,0,0,1,1.9375,0,0-1-1.9375,0zm2.25,0,0,1,3.0938,0,0-1-3.0938,0zm3.4375,0,0,1,5.0312,0,0-1-5.0312,0z" fill="url(#linearGradient3797)"/>
+  <path stroke-linejoin="round" style="color:#000000;enable-background:accumulate;" d="m34.549,33.5-4.4021,0,0-9.6523c-0.000012-1.1924-0.18283-2.0842-0.54845-2.6754-0.35602-0.6011-0.90929-0.90166-1.6598-0.90167-0.56771,0.000013-1.044,0.11826-1.4289,0.35476-0.38489,0.23652-0.69279,0.58634-0.92371,1.0495-0.23094,0.46316-0.39451,1.0347-0.49072,1.7147-0.09623,0.67996-0.14434,1.4584-0.14433,2.3355v7.7751h-4.4021v-23h4.4021l0.02888,8.588c0.47147-0.85731,1.0728-1.4732,1.8041-1.8477,0.73126-0.3843,1.5588-0.57646,2.4825-0.57648,0.79861,0.000017,1.5203,0.11827,2.1649,0.35476,0.65428,0.22666,1.2124,0.58635,1.6742,1.079,0.46184,0.49273,0.81785,1.1234,1.068,1.892,0.25016,0.7588,0.37524,1.6703,0.37526,2.7346v10.776z" fill-rule="nonzero" stroke-dashoffset="0" stroke="url(#linearGradient3401)" stroke-linecap="butt" stroke-miterlimit="4" stroke-width="0.99999994" fill="url(#radialGradient3399)"/>
+  <path stroke-linejoin="round" style="color:#000000;enable-background:accumulate;" d="m11.5,30.987c-0.000001-0.46315,0.06254-0.8524,0.18763-1.1677,0.1347-0.32519,0.31752-0.58633,0.54845-0.78342,0.23092-0.19708,0.50034-0.33997,0.80825-0.42866,0.3079-0.08868,0.63986-0.13303,0.99588-0.13303,0.33676,0.000004,0.65429,0.04435,0.95258,0.13303,0.3079,0.08869,0.57731,0.23158,0.80825,0.42866,0.23092,0.19709,0.41374,0.45823,0.54845,0.78342,0.1347,0.31534,0.20206,0.70459,0.20206,1.1677-0.000007,0.44345-0.06736,0.82284-0.20206,1.1382-0.13471,0.31534-0.31753,0.57648-0.54845,0.78342-0.23093,0.20694-0.50035,0.35476-0.80825,0.44344-0.299,0.1-0.616,0.149-0.953,0.149-0.35602,0-0.68798-0.04927-0.99588-0.14782-0.30791-0.08869-0.57732-0.2365-0.80825-0.44344s-0.41375-0.46808-0.54845-0.78342c-0.12509-0.31534-0.18763-0.69473-0.18763-1.1382" fill-rule="nonzero" stroke-dashoffset="0" stroke="url(#linearGradient3396)" stroke-linecap="butt" stroke-miterlimit="4" stroke-width="0.99999994" fill="url(#radialGradient3394)"/>
+  <path stroke-linejoin="round" opacity="0.5" style="color:#000000;enable-background:accumulate;" d="m18.531,11.75,0,20.719,2.4062,0,0-6.6875c-0.000007-0.91545,0.051-1.7426,0.15625-2.4688,0.11019-0.76037,0.32838-1.4191,0.625-2,0.30993-0.60695,0.75513-1.1031,1.3125-1.4375,0.54784-0.32869,1.2249-0.53123,1.9688-0.53125,1.0265,0.000018,1.9995,0.53062,2.5312,1.375h0.03125c0.0051,0.008-0.005,0.02321,0,0.03125,0.52572,0.84456,0.71874,1.9068,0.71875,3.1875v8.5312h2.4062v-9.6562c-0.000015-0.95546-0.12792-1.7045-0.34375-2.3438a1.0305,1.0305,0,0,1,0,-0.03125c-0.218-0.661-0.505-1.118-0.842-1.469-0.357-0.372-0.809-0.674-1.312-0.844-0.52338-0.18746-1.1259-0.28124-1.8438-0.28125-0.80443,0.000015-1.4868,0.14206-2.0625,0.4375-0.52554,0.26278-0.96905,0.71674-1.375,1.4375a1.0305,1.0305,0,0,1,-0.907,0.53h-0.25a1.0305,1.0305,0,0,1,-1.0312,-1.0938c0.03222-0.47267,0.08842-0.92314,0.125-1.3438,0.02673-0.34755,0.04266-0.73126,0.0625-1.1875,0.01907-0.44831,0.03124-0.89069,0.03125-1.2812v-3.5938h-2.4062z" transform="matrix(1,0,0,1.0135747,2.96875,-0.44075226)" stroke-dashoffset="0" stroke="url(#linearGradient4596-7)" stroke-linecap="butt" stroke-miterlimit="4" stroke-dasharray="none" stroke-width="0.99328101" fill="none"/>
+  <path stroke-linejoin="round" opacity="0.5" style="color:#000000;enable-background:accumulate;" d="m12.5,31c-0.000001-0.27647,0.03714-0.50882,0.11143-0.69706,0.08-0.19412,0.18857-0.35,0.32571-0.46765,0.13714-0.11764,0.29714-0.20294,0.48-0.25588,0.18286-0.05293,0.38-0.07941,0.59143-0.07941,0.2,0.000003,0.38857,0.02647,0.56571,0.07941,0.18285,0.05294,0.34285,0.13824,0.48,0.25588,0.13714,0.11765,0.24571,0.27353,0.32571,0.46765,0.08,0.18824,0.12,0.42059,0.12,0.69706-0.000004,0.26471-0.04001,0.49118-0.12,0.67941-0.08,0.18824-0.18858,0.34412-0.32571,0.46765-0.13715,0.12353-0.29715,0.21176-0.48,0.26471-0.17715,0.05882-0.36572,0.08823-0.56571,0.08823-0.21143,0-0.40857-0.02941-0.59143-0.08823-0.18286-0.05294-0.34286-0.14118-0.48-0.26471-0.137-0.123-0.246-0.279-0.326-0.468-0.074-0.188-0.111-0.414-0.111-0.679" stroke-dashoffset="0" stroke="url(#linearGradient3471)" stroke-linecap="butt" stroke-miterlimit="4" stroke-width="0.99999994" fill="none"/>
+ </g>
+</svg>
diff --git a/core/img/filetypes/text-x-javascript.png b/core/img/filetypes/text-x-javascript.png
new file mode 100644
index 0000000000000000000000000000000000000000..24d09ce978181c4b08b67c879553a75fc3c1e97a
Binary files /dev/null and b/core/img/filetypes/text-x-javascript.png differ
diff --git a/core/img/filetypes/text-x-javascript.svg b/core/img/filetypes/text-x-javascript.svg
new file mode 100644
index 0000000000000000000000000000000000000000..0cc52ce6ba7ccd4cf2c8d1c568f67dd684739845
--- /dev/null
+++ b/core/img/filetypes/text-x-javascript.svg
@@ -0,0 +1,76 @@
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="32" width="32" version="1.1" xmlns:cc="http://creativecommons.org/ns#" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:dc="http://purl.org/dc/elements/1.1/">
+ <defs>
+  <linearGradient id="linearGradient4596" y2="34.607" gradientUnits="userSpaceOnUse" x2="29.465" gradientTransform="translate(4.1160985,-1.6069009)" y1="17.607" x1="29.465">
+   <stop stop-color="#FFF" offset="0"/>
+   <stop stop-color="#FFF" stop-opacity="0.23529412" offset="0.17647"/>
+   <stop stop-color="#FFF" stop-opacity="0.15686275" offset="0.82353"/>
+   <stop stop-color="#FFF" stop-opacity="0.39215687" offset="1"/>
+  </linearGradient>
+  <linearGradient id="linearGradient4467-5" y2="41.607" gradientUnits="userSpaceOnUse" x2="13.884" gradientTransform="translate(4.1160985,-1.6069009)" y1="12.607" x1="13.884">
+   <stop stop-color="#FFF" offset="0"/>
+   <stop stop-color="#FFF" stop-opacity="0.23529412" offset="0.036262"/>
+   <stop stop-color="#FFF" stop-opacity="0.15686275" offset="0.82759"/>
+   <stop stop-color="#FFF" stop-opacity="0.39215687" offset="1"/>
+  </linearGradient>
+  <linearGradient id="linearGradient3797" y2="0.4976" gradientUnits="userSpaceOnUse" x2="23.749" y1="44.759" x1="23.749">
+   <stop stop-color="#a3a3a3" offset="0"/>
+   <stop stop-color="#bababa" offset="1"/>
+  </linearGradient>
+  <linearGradient id="linearGradient3988" y2="43" gradientUnits="userSpaceOnUse" x2="24" gradientTransform="matrix(0.89189189,0,0,1.1351351,2.5945999,-4.7432314)" y1="5.5641" x1="24">
+   <stop stop-color="#FFF" offset="0"/>
+   <stop stop-color="#FFF" stop-opacity="0.23529412" offset="0.036262"/>
+   <stop stop-color="#FFF" stop-opacity="0.15686275" offset="0.95056"/>
+   <stop stop-color="#FFF" stop-opacity="0.39215687" offset="1"/>
+  </linearGradient>
+  <linearGradient id="linearGradient3322" y2="47.013" gradientUnits="userSpaceOnUse" x2="25.132" gradientTransform="matrix(1,0,0,0.9561695,-9.9999999e-8,-1.9149218)" y1="0.98521" x1="25.132">
+   <stop stop-color="#f4f4f4" offset="0"/>
+   <stop stop-color="#dbdbdb" offset="1"/>
+  </linearGradient>
+  <linearGradient id="linearGradient3324" y2="2.9062" gradientUnits="userSpaceOnUse" x2="-51.786" gradientTransform="matrix(0.8074968,0,0,0.8948322,59.410232,-2.9805531)" y1="50.786" x1="-51.786">
+   <stop stop-color="#a0a0a0" offset="0"/>
+   <stop stop-color="#bebebe" offset="1"/>
+  </linearGradient>
+  <radialGradient id="radialGradient3327" xlink:href="#linearGradient5060" gradientUnits="userSpaceOnUse" cy="486.65" cx="605.71" gradientTransform="matrix(0.02303995,0,0,0.01470022,26.360882,37.040176)" r="117.14"/>
+  <linearGradient id="linearGradient5060">
+   <stop stop-color="#000" offset="0"/>
+   <stop stop-color="#000" stop-opacity="0" offset="1"/>
+  </linearGradient>
+  <radialGradient id="radialGradient3330" xlink:href="#linearGradient5060" gradientUnits="userSpaceOnUse" cy="486.65" cx="605.71" gradientTransform="matrix(-0.02303994,0,0,0.01470022,21.62311,37.040176)" r="117.14"/>
+  <linearGradient id="linearGradient4704" y2="609.51" gradientUnits="userSpaceOnUse" x2="302.86" gradientTransform="matrix(0.06732488,0,0,0.01470022,-0.3411391,37.040146)" y1="366.65" x1="302.86">
+   <stop stop-color="#000" stop-opacity="0" offset="0"/>
+   <stop stop-color="#000" offset="0.5"/>
+   <stop stop-color="#000" stop-opacity="0" offset="1"/>
+  </linearGradient>
+  <radialGradient id="radialGradient3815" fx="8.5513" gradientUnits="userSpaceOnUse" cy="10.244" cx="9.0816" gradientTransform="matrix(0,7.0760926,-7.4527115,0,100.32061,-66.261922)" r="12.672">
+   <stop stop-color="#ffcd7d" offset="0"/>
+   <stop stop-color="#fc8f36" offset="0.26238"/>
+   <stop stop-color="#e23a0e" offset="0.70495"/>
+   <stop stop-color="#ac441f" offset="1"/>
+  </radialGradient>
+  <linearGradient id="linearGradient3817" y2="4.9451" gradientUnits="userSpaceOnUse" x2="25" gradientTransform="translate(2.123909,-1.9451008)" y1="49.945" x1="25">
+   <stop stop-color="#ba3d12" offset="0"/>
+   <stop stop-color="#db6737" offset="1"/>
+  </linearGradient>
+ </defs>
+ <metadata>
+  <rdf:RDF>
+   <cc:Work rdf:about="">
+    <dc:format>image/svg+xml</dc:format>
+    <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
+    <dc:title/>
+   </cc:Work>
+  </rdf:RDF>
+ </metadata>
+ <g transform="scale(0.66666667,0.66666667)">
+  <rect opacity="0.3" fill-rule="nonzero" height="3.5701" width="32.508" y="42.43" x="7.7378" fill="url(#linearGradient4704)"/>
+  <path opacity="0.3" d="m7.7378,42.43v3.5699c-1.1865,0.0067-2.8684-0.79982-2.8684-1.7852,0-0.98533,1.324-1.7847,2.8684-1.7847z" fill-rule="nonzero" fill="url(#radialGradient3330)"/>
+  <path opacity="0.3" d="m40.246,42.43v3.5699c1.1865,0.0067,2.8684-0.79982,2.8684-1.7852,0-0.98533-1.324-1.7847-2.8684-1.7847z" fill-rule="nonzero" fill="url(#radialGradient3327)"/>
+  <path stroke-linejoin="round" d="M6.5,0.4972c8.02,0,35,0.0028,35,0.0028l0.000042,44.003h-35v-44.006z" stroke-dashoffset="0" stroke="url(#linearGradient3324)" stroke-linecap="butt" stroke-miterlimit="4" stroke-dasharray="none" stroke-width="0.99992186" fill="url(#linearGradient3322)"/>
+  <path stroke-linejoin="round" d="m40.5,43.5-33,0,0-42,33,0z" stroke-dashoffset="0" stroke="url(#linearGradient3988)" stroke-linecap="round" stroke-miterlimit="4" stroke-dasharray="none" stroke-width="1" fill="none"/>
+  <path d="m11,21,0,1,2.3438,0,0-1h-2.344zm0,4,0,1,2.75,0,0-1-2.75,0zm0,2,0,1,2.9375,0,0-1h-5.282zm0,2,0,1,2.5312,0,0-1h-4.875zm0,2.1562,0,0.96875,2.2188,0,0-0.96875-2.2188,0zm0.406-10.156v1h2.25v-1h-2.25zm-2.75,2,0,1,1,0,0-1-1,0zm3.1562,2,0,1,1.8438,0,0-1-1.8438,0zm0.125,2,0,1,2.7188,0,0-1-2.7188,0zm-0.34375,2,0,1,2.0625,0,0-1-2.0625,0zm-0.375,2.1562,0,0.96875,2.125,0,0-0.96875-2.125,0zm-2.562,2.844v1h4.2812v-1h-4.281zm0,2,0,1,3.6875,0,0-1h-3.688zm3.9688,0,0,1,1.7812,0,0-1-1.7812,0zm-0.625,2,0,1,3.3438,0,0-1-3.3438,0zm-3.344,0h3.0367v1h-3.037v-1zm3.4062-22,0,1,5.5938,0,0-1-5.5938,0zm0.03125,2,0,1,5.0938,0,0-1-5.0938,0zm1.1875,16,0,1,4.5938,0,0-1-4.5938,0zm4.9375,0,0,1,1.8125,0,0-1-1.8125,0zm2.1562,0,0,1,4.3125,0,0-1-4.3125,0zm4.6562,0,0,1,2.9688,0,0-1-2.9688,0zm3.2812,0,0,1,1.1562,0,0-1-1.1562,0zm1.5,0,0,1,0.6875,0,0-1-0.6875,0zm1,0,0,1,1.8438,0,0-1-1.8438,0zm-16.031,2,0,1,0.8125,0,0-1-0.8125,0zm1.0312,0,0,1,1.625,0,0-1-1.625,0zm1.875,0,0,1,1.625,0,0-1-1.625,0zm2.125,0,0,1,2.5938,0,0-1-2.5938,0zm2.9062,0,0,1,3.375,0,0-1-3.375,0zm3.8438,0,0,1,2.2812,0,0-1-2.2812,0zm2.5625,0,0,1h0.532v-1h-0.531zm-20.468-20v1h3.0625v-1h-3.062zm0,2,0,1,3.0938,0,0-1h-3.094zm0-11,0,1,2.375,0,0-1-2.375,0zm2.6875,0,0,1,2.25,0,0-1-2.25,0zm2.5625,0,0,1,1.9688,0,0-1-1.9688,0zm2.2812,0,0,1,0.875,0,0-1-0.875,0zm1.1875,0,0,1,1.9375,0,0-1-1.9375,0zm2.2812,0,0,1,5,0,0-1-5,0zm-11,2l0.001,1h3.7812v-1h-3.7812zm4.1562,0,0,1,1.8125,0,0-1-1.8125,0zm2.1562,0,0,1,0.84375,0,0-1-0.84375,0zm1.2188,0,0,1,1.625,0,0-1-1.625,0zm2,0,0,1,1.625,0,0-1-1.625,0zm1.9688,0,0,1,2.6562,0,0-1-2.6562,0zm3.0312,0,0,1,3.4688,0,0-1-3.4688,0zm-14.53,2v1h4.1875v-1h-4.188zm4.5,0,0,1,4.5,0,0-1-4.5,0zm-4.5,2,0,1,2.3125,0,0-1h-2.312zm2.625,0,0,1,2.1562,0,0-1-2.1562,0zm2.4688,0,0,1,1.9062,0,0-1-1.9062,0zm3.8125,5,0,1,1.9062,0,0-1-1.9062,0zm2.2188,0,0,1,1.9062,0,0-1-1.9062,0zm2.2188,0,0,1,2.75,0,0-1-2.75,0zm3.0938,0,0,1,0.5625,0,0-1-0.5625,0zm-7.438,7v1h2.3438v-1h-2.344zm2.6562,0,0,1,2.1875,0,0-1-2.1875,0zm2.5,0,0,1h1.844v-1h-1.844zm-5.156,2v1h1.875v-1h-1.875zm2.1875,0,0,1,4.8125,0,0-1-4.8125,0zm5.125,0,0,1,3.6875,0,0-1-3.6875,0zm-7.313,2v1h2.4375v-1h-2.438zm2.7812,0,0,1,4.2812,0,0-1-4.2812,0zm4.5938,0,0,1,2.9375,0,0-1-2.9375,0zm-7.375,2.125v0.96875h1.875v-0.96875h-1.875zm2.1875,0,0,0.96875,1.9062,0,0-0.96875-1.9062,0zm2.2188,0,0,0.96875,2.7188,0,0-0.96875-2.7188,0zm3.0312,0,0,0.96875,0.5625,0,0-0.96875-0.5625,0zm0.875,0,0,0.96875,3.5312,0,0-0.96875-3.5312,0zm-8.375,6.875,0,1,2.4375,0,0-1-2.4375,0zm2.75,0,0,1,2.25,0,0-1-2.25,0zm2.5938,0,0,1,1.9375,0,0-1-1.9375,0zm2.25,0,0,1,3.0938,0,0-1-3.0938,0zm3.4375,0,0,1,5.0312,0,0-1-5.0312,0z" fill="url(#linearGradient3797)"/>
+  <path stroke-linejoin="round" style="color:#000000;" d="m37.105,28.194c-0.000013,0.91667-0.16668,1.7188-0.5,2.4062-0.33335,0.6875-0.8073,1.2604-1.4219,1.7188-0.61459,0.45833-1.3594,0.80208-2.2344,1.0312-0.87501,0.22917-1.8542,0.34375-2.9375,0.34375-0.57292,0-1.1042-0.02083-1.5938-0.0625-0.48959-0.03125-0.95313-0.08854-1.3906-0.17188-0.4375-0.08333-0.85938-0.1875-1.2656-0.3125-0.40625-0.125-0.81771-0.28125-1.2344-0.46875v-3.9375c0.4375,0.21876,0.89583,0.41667,1.375,0.59375,0.48958,0.17709,0.97395,0.33334,1.4531,0.46875,0.47916,0.125,0.9427,0.22396,1.3906,0.29688,0.45833,0.07292,0.8802,0.10938,1.2656,0.10938,0.42708,0.000004,0.79166-0.03646,1.0938-0.10938,0.30208-0.08333,0.54687-0.1927,0.73438-0.32812,0.19791-0.14583,0.33853-0.3125,0.42188-0.5,0.09374-0.19791,0.14062-0.40624,0.14062-0.625-0.000008-0.21874-0.03647-0.41145-0.10938-0.57812-0.06251-0.17708-0.21355-0.35937-0.45312-0.54688-0.23959-0.19791-0.59376-0.41666-1.0625-0.65625-0.45834-0.24999-1.0781-0.55208-1.8594-0.90625-0.76042-0.34374-1.4219-0.68228-1.9844-1.0156-0.55209-0.34374-1.0104-0.72395-1.375-1.1406-0.35417-0.41666-0.61979-0.89061-0.79688-1.4219-0.17708-0.54166-0.26563-1.1823-0.26562-1.9219-0.000001-0.81249,0.15625-1.5208,0.46875-2.125,0.3125-0.61457,0.75521-1.125,1.3281-1.5312,0.57291-0.40623,1.2604-0.70832,2.0625-0.90625,0.8125-0.20832,1.7135-0.31248,2.7031-0.3125,1.0417,0.000018,2.0312,0.11981,2.9688,0.35938,0.93749,0.2396,1.901,0.59898,2.8906,1.0781l-1.4375,3.375c-0.794-0.376-1.549-0.683-2.268-0.923-0.71876-0.23957-1.4375-0.35936-2.1562-0.35938-0.64584,0.000015-1.1146,0.1146-1.4062,0.34375-0.28126,0.22918-0.42188,0.54168-0.42188,0.9375-0.000005,0.20835,0.03645,0.39585,0.10938,0.5625,0.07291,0.15626,0.21874,0.32293,0.4375,0.5,0.21874,0.16668,0.52603,0.35418,0.92188,0.5625,0.39582,0.19793,0.91145,0.44272,1.5469,0.73438,0.73957,0.32293,1.4062,0.64584,2,0.96875,0.59374,0.31251,1.1042,0.67188,1.5312,1.0781,0.42707,0.40626,0.7552,0.88022,0.98438,1.4219,0.22915,0.54167,0.34374,1.1979,0.34375,1.9688m-24.526,11.906c-0.67708-0.000006-1.2708-0.03646-1.7812-0.10938-0.511-0.063-0.9428-0.141-1.297-0.235v-4.0312c0.38542,0.08333,0.79167,0.15625,1.2188,0.21875,0.41667,0.0625,0.875,0.09375,1.375,0.09375,0.47917-0.000002,0.92188-0.05209,1.3281-0.15625,0.41666-0.10417,0.77604-0.28646,1.0781-0.54688,0.3125-0.25,0.55208-0.58854,0.71875-1.0156,0.17708-0.42708,0.26562-0.96354,0.26562-1.6094v-22.172h5.0906v22.016c0,1.3125-0.19272,2.4427-0.57812,3.3906-0.37501,0.94791-0.90626,1.7292-1.5938,2.3438-0.67709,0.625-1.4896,1.0833-2.4375,1.375-0.948,0.29-1.995,0.436-3.141,0.436z" fill-rule="nonzero" stroke-dashoffset="0" stroke="url(#linearGradient3817)" stroke-linecap="butt" stroke-miterlimit="4" stroke-width="1" fill="url(#radialGradient3815)"/>
+  <path opacity="0.5" stroke-linejoin="round" style="enable-background:accumulate;color:#000000;" d="m16.531,11.562,0,21.156c-0.000003,0.74521-0.14604,1.4057-0.375,1.9688h0.03125c-0.0053,0.01356-0.02582,0.01774-0.03125,0.03125-0.21291,0.52977-0.51641,1.033-0.96875,1.4062-0.01075,0.0093-0.02039,0.02213-0.03125,0.03125-0.42364,0.35547-0.94402,0.58756-1.4688,0.71875-0.5068,0.12994-1.0399,0.1875-1.5938,0.1875-0.54293,0-1.0548-0.02228-1.5312-0.09375-0.01053-0.0015-0.02074,0.0016-0.03125,0v1.9375c0.14199,0.02453,0.25,0.04337,0.40625,0.0625a1.0305,1.0305,0,0,1,0.03125,0c0.4327,0.06181,0.93779,0.09374,1.5938,0.09375h0.25c1.0584-0.000006,2.0104-0.14984,2.8438-0.40625,0.8161-0.25111,1.5028-0.60837,2.0625-1.125a1.0305,1.0305,0,0,1,0,-0.03125c0.56066-0.5012,0.98871-1.119,1.3125-1.9375,0.32074-0.78887,0.5-1.7802,0.5-3v-21h-3z" stroke-dashoffset="0" stroke="url(#linearGradient4467-5)" stroke-linecap="butt" stroke-miterlimit="4" stroke-width="1" fill="none"/>
+  <path opacity="0.5" stroke-linejoin="round" style="enable-background:accumulate;color:#000000;" d="m31.062,16.625c-0.91729,0.000017-1.7568,0.09872-2.4688,0.28125-0.6983,0.17232-1.2665,0.42933-1.7188,0.75-0.43783,0.31048-0.75495,0.67432-1,1.1562-0.22591,0.43677-0.34375,0.97587-0.34375,1.6562-0.000001,0.67187,0.0572,1.1952,0.1875,1.5938,0.13076,0.39228,0.3626,0.74863,0.625,1.0625,0.27891,0.31876,0.63321,0.6313,1.125,0.9375,0.54028,0.32018,1.1571,0.64423,1.875,0.96875,0.78022,0.35371,1.4056,0.66564,1.9062,0.9375,0.0091,0.0047,0.02219-0.0047,0.03125,0,0.48031,0.2467,0.86296,0.48708,1.1875,0.75,0.01,0.0081,0.02142,0.02313,0.03125,0.03125,0.29407,0.23569,0.56733,0.5282,0.71875,0.90625,0.0064,0.0161-0.006,0.04609,0,0.0625,0.0023,0.0064,0.02897-0.0065,0.03125,0,0.11318,0.2766,0.18749,0.5805,0.1875,0.9375-0.000015,0.40344-0.11735,0.74498-0.25,1.0312-0.0031,0.0069,0.0032,0.02432,0,0.03125h-0.03125c-0.14902,0.31791-0.36691,0.67002-0.6875,0.90625a1.0305,1.0305,0,0,1,-0.03125,0c-0.37162,0.26839-0.71579,0.37311-1.0625,0.46875a1.0305,1.0305,0,0,1,-0.03125,0c-0.376,0.092-0.832,0.157-1.343,0.157-0.47826,0.000005-0.9298-0.0492-1.4062-0.125-0.45579-0.07419-0.96671-0.17338-1.5-0.3125a1.0305,1.0305,0,0,1,-0.03125,0c-0.50955-0.144-0.9949-0.3173-1.5-0.5v1.6562c0.16564,0.0631,0.33735,0.13746,0.5,0.1875,0.3613,0.11117,0.74977,0.23508,1.1562,0.3125,0.37252,0.07096,0.77865,0.09491,1.25,0.125a1.0305,1.0305,0,0,1,0.03125,0c0.45573,0.03879,0.95205,0.0625,1.5,0.0625,1.0107,0,1.9133-0.10974,2.6875-0.3125,0.77223-0.20225,1.389-0.48131,1.875-0.84375,0.4815-0.35909,0.82413-0.78767,1.0938-1.3438,0.25489-0.52574,0.40624-1.177,0.40625-1.9688-0.000011-0.66872-0.08918-1.1823-0.25-1.5625-0.17948-0.42419-0.42147-0.74998-0.75-1.0625-0.35949-0.34194-0.77277-0.66986-1.2812-0.9375a1.0305,1.0305,0,0,1,-0.03125,0c-0.56267-0.306-1.1894-0.62451-1.9062-0.9375a1.0305,1.0305,0,0,1,-0.03125,0c-0.62352-0.28619-1.1526-0.52942-1.5938-0.75-0.43674-0.22984-0.78885-0.44773-1.0625-0.65625a1.0305,1.0305,0,0,1,-0.03125,0c-0.29046-0.23511-0.54194-0.49605-0.71875-0.875a1.0305,1.0305,0,0,1,0,-0.03125c-0.11448-0.26163-0.21876-0.58868-0.21875-0.96875-0.000008-0.667,0.32053-1.3491,0.8125-1.75a1.0305,1.0305,0,0,1,0.03125,0c0.58219-0.45741,1.2635-0.56248,2.0312-0.5625,0.81828,0.000017,1.6395,0.12985,2.4688,0.40625,0.46119,0.15374,0.94101,0.36068,1.4062,0.5625l0.625-1.4375c-0.604-0.25-1.22-0.541-1.783-0.684-0.838-0.215-1.746-0.313-2.719-0.313z" stroke-dashoffset="0" stroke="url(#linearGradient4596)" stroke-linecap="butt" stroke-miterlimit="4" stroke-width="1" fill="none"/>
+ </g>
+</svg>
diff --git a/core/img/filetypes/text-x-php.png b/core/img/filetypes/text-x-php.png
deleted file mode 100644
index 7868a25945cd5e5cb7daaca9591927511ca65c0f..0000000000000000000000000000000000000000
Binary files a/core/img/filetypes/text-x-php.png and /dev/null differ
diff --git a/core/img/filetypes/text-x-python.png b/core/img/filetypes/text-x-python.png
new file mode 100644
index 0000000000000000000000000000000000000000..57148f4b90d401b26b324d3eaf530f11032b4726
Binary files /dev/null and b/core/img/filetypes/text-x-python.png differ
diff --git a/core/img/filetypes/text-x-python.svg b/core/img/filetypes/text-x-python.svg
new file mode 100644
index 0000000000000000000000000000000000000000..00755e6d0c26cdb96ac77cbc40dcab1d5b4e96b7
--- /dev/null
+++ b/core/img/filetypes/text-x-python.svg
@@ -0,0 +1,87 @@
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="32.002" width="32" version="1.1" xmlns:cc="http://creativecommons.org/ns#" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:dc="http://purl.org/dc/elements/1.1/">
+ <defs>
+  <linearGradient id="linearGradient4326" y2="41.607" gradientUnits="userSpaceOnUse" x2="49.884" gradientTransform="translate(-15.883902,-1.6069009)" y1="20.607" x1="49.884">
+   <stop stop-color="#FFF" offset="0"/>
+   <stop stop-color="#FFF" stop-opacity="0.23529412" offset="0.036262"/>
+   <stop stop-color="#FFF" stop-opacity="0.15686275" offset="0.66667"/>
+   <stop stop-color="#FFF" stop-opacity="0.39215687" offset="1"/>
+  </linearGradient>
+  <linearGradient id="linearGradient4352" y2="14.148" gradientUnits="userSpaceOnUse" x2="33.715" gradientTransform="translate(-15.883902,-1.6069009)" y1="26.955" x1="33.715">
+   <stop stop-color="#FFF" offset="0"/>
+   <stop stop-color="#FFF" stop-opacity="0.23529412" offset="0.38322"/>
+   <stop stop-color="#FFF" stop-opacity="0.15686275" offset="0.95056"/>
+   <stop stop-color="#FFF" stop-opacity="0.39215687" offset="1"/>
+  </linearGradient>
+  <linearGradient id="linearGradient4338" y2="35.642" gradientUnits="userSpaceOnUse" x2="29.465" gradientTransform="translate(-15.883902,-1.6069009)" y1="13.12" x1="29.465">
+   <stop stop-color="#FFF" offset="0"/>
+   <stop stop-color="#FFF" stop-opacity="0.23529412" offset="0.2789"/>
+   <stop stop-color="#FFF" stop-opacity="0.15686275" offset="0.95056"/>
+   <stop stop-color="#FFF" stop-opacity="0.39215687" offset="1"/>
+  </linearGradient>
+  <radialGradient id="radialGradient3352" xlink:href="#linearGradient3846-5" gradientUnits="userSpaceOnUse" cy="23.403" cx="9.966" gradientTransform="matrix(0,3.4561718,-4.1186673,0,121.20805,-33.840698)" r="13.931"/>
+  <linearGradient id="linearGradient3846-5">
+   <stop stop-color="#fff3cb" offset="0"/>
+   <stop stop-color="#fdde76" offset="0.26238"/>
+   <stop stop-color="#f9c440" offset="0.66094"/>
+   <stop stop-color="#e48b20" offset="1"/>
+  </linearGradient>
+  <linearGradient id="linearGradient3354" y2="8.4049" xlink:href="#linearGradient3856-6" gradientUnits="userSpaceOnUse" x2="21.483" gradientTransform="matrix(1.6508808,0,0,1.6568311,-9.7968269,-13.801098)" y1="35.376" x1="21.483"/>
+  <linearGradient id="linearGradient3856-6">
+   <stop stop-color="#b67926" offset="0"/>
+   <stop stop-color="#eab41a" offset="1"/>
+  </linearGradient>
+  <linearGradient id="linearGradient3797" y2="0.4976" gradientUnits="userSpaceOnUse" x2="23.749" y1="44.759" x1="23.749">
+   <stop stop-color="#a3a3a3" offset="0"/>
+   <stop stop-color="#bababa" offset="1"/>
+  </linearGradient>
+  <linearGradient id="linearGradient3988" y2="43" gradientUnits="userSpaceOnUse" x2="24" gradientTransform="matrix(0.89189189,0,0,1.1351351,2.5945999,-4.7432314)" y1="5.5641" x1="24">
+   <stop stop-color="#FFF" offset="0"/>
+   <stop stop-color="#FFF" stop-opacity="0.23529412" offset="0.036262"/>
+   <stop stop-color="#FFF" stop-opacity="0.15686275" offset="0.95056"/>
+   <stop stop-color="#FFF" stop-opacity="0.39215687" offset="1"/>
+  </linearGradient>
+  <linearGradient id="linearGradient3322" y2="47.013" gradientUnits="userSpaceOnUse" x2="25.132" gradientTransform="matrix(1,0,0,0.9561695,-9.9999999e-8,-1.9149218)" y1="0.98521" x1="25.132">
+   <stop stop-color="#f4f4f4" offset="0"/>
+   <stop stop-color="#dbdbdb" offset="1"/>
+  </linearGradient>
+  <linearGradient id="linearGradient3324" y2="2.9062" gradientUnits="userSpaceOnUse" x2="-51.786" gradientTransform="matrix(0.8074968,0,0,0.8948322,59.410232,-2.9805531)" y1="50.786" x1="-51.786">
+   <stop stop-color="#a0a0a0" offset="0"/>
+   <stop stop-color="#bebebe" offset="1"/>
+  </linearGradient>
+  <radialGradient id="radialGradient3327" xlink:href="#linearGradient5060" gradientUnits="userSpaceOnUse" cy="486.65" cx="605.71" gradientTransform="matrix(0.02303995,0,0,0.01470022,26.360882,37.040176)" r="117.14"/>
+  <linearGradient id="linearGradient5060">
+   <stop stop-color="#000" offset="0"/>
+   <stop stop-color="#000" stop-opacity="0" offset="1"/>
+  </linearGradient>
+  <radialGradient id="radialGradient3330" xlink:href="#linearGradient5060" gradientUnits="userSpaceOnUse" cy="486.65" cx="605.71" gradientTransform="matrix(-0.02303994,0,0,0.01470022,21.62311,37.040176)" r="117.14"/>
+  <linearGradient id="linearGradient4474" y2="609.51" gradientUnits="userSpaceOnUse" x2="302.86" gradientTransform="matrix(0.06732488,0,0,0.01470022,-0.3411391,37.040146)" y1="366.65" x1="302.86">
+   <stop stop-color="#000" stop-opacity="0" offset="0"/>
+   <stop stop-color="#000" offset="0.5"/>
+   <stop stop-color="#000" stop-opacity="0" offset="1"/>
+  </linearGradient>
+ </defs>
+ <metadata>
+  <rdf:RDF>
+   <cc:Work rdf:about="">
+    <dc:format>image/svg+xml</dc:format>
+    <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
+    <dc:title/>
+   </cc:Work>
+  </rdf:RDF>
+ </metadata>
+ <g transform="matrix(0.66666667,0,0,0.66666667,0,0.00184133)">
+  <rect opacity="0.3" fill-rule="nonzero" height="3.5701" width="32.508" y="42.43" x="7.7378" fill="url(#linearGradient4474)"/>
+  <path opacity="0.3" d="m7.7378,42.43v3.5699c-1.1865,0.0067-2.8684-0.79982-2.8684-1.7852,0-0.98533,1.324-1.7847,2.8684-1.7847z" fill-rule="nonzero" fill="url(#radialGradient3330)"/>
+  <path opacity="0.3" d="m40.246,42.43v3.5699c1.1865,0.0067,2.8684-0.79982,2.8684-1.7852,0-0.98533-1.324-1.7847-2.8684-1.7847z" fill-rule="nonzero" fill="url(#radialGradient3327)"/>
+  <path stroke-linejoin="round" d="M6.5,0.4972c8.02,0,35,0.0028,35,0.0028l0.000042,44.003h-35v-44.006z" stroke-dashoffset="0" stroke="url(#linearGradient3324)" stroke-linecap="butt" stroke-miterlimit="4" stroke-dasharray="none" stroke-width="0.99992186" fill="url(#linearGradient3322)"/>
+  <path stroke-linejoin="round" d="m40.5,43.5-33,0,0-42,33,0z" stroke-dashoffset="0" stroke="url(#linearGradient3988)" stroke-linecap="round" stroke-miterlimit="4" stroke-dasharray="none" stroke-width="1" fill="none"/>
+  <path d="m11,21,0,1,2.3438,0,0-1h-2.344zm0,4,0,1,2.75,0,0-1-2.75,0zm0,2,0,1,2.9375,0,0-1h-5.282zm0,2,0,1,2.5312,0,0-1h-4.875zm0,2.1562,0,0.96875,2.2188,0,0-0.96875-2.2188,0zm0.406-10.156v1h2.25v-1h-2.25zm-2.75,2,0,1,1,0,0-1-1,0zm3.1562,2,0,1,1.8438,0,0-1-1.8438,0zm0.125,2,0,1,2.7188,0,0-1-2.7188,0zm-0.34375,2,0,1,2.0625,0,0-1-2.0625,0zm-0.375,2.1562,0,0.96875,2.125,0,0-0.96875-2.125,0zm-2.562,2.844v1h4.2812v-1h-4.281zm0,2,0,1,3.6875,0,0-1h-3.688zm3.9688,0,0,1,1.7812,0,0-1-1.7812,0zm-0.625,2,0,1,3.3438,0,0-1-3.3438,0zm-3.344,0h3.0367v1h-3.037v-1zm3.4062-22,0,1,5.5938,0,0-1-5.5938,0zm0.03125,2,0,1,5.0938,0,0-1-5.0938,0zm1.1875,16,0,1,4.5938,0,0-1-4.5938,0zm4.9375,0,0,1,1.8125,0,0-1-1.8125,0zm2.1562,0,0,1,4.3125,0,0-1-4.3125,0zm4.6562,0,0,1,2.9688,0,0-1-2.9688,0zm3.2812,0,0,1,1.1562,0,0-1-1.1562,0zm1.5,0,0,1,0.6875,0,0-1-0.6875,0zm1,0,0,1,1.8438,0,0-1-1.8438,0zm-16.031,2,0,1,0.8125,0,0-1-0.8125,0zm1.0312,0,0,1,1.625,0,0-1-1.625,0zm1.875,0,0,1,1.625,0,0-1-1.625,0zm2.125,0,0,1,2.5938,0,0-1-2.5938,0zm2.9062,0,0,1,3.375,0,0-1-3.375,0zm3.8438,0,0,1,2.2812,0,0-1-2.2812,0zm2.5625,0,0,1h0.532v-1h-0.531zm-20.468-20v1h3.0625v-1h-3.062zm0,2,0,1,3.0938,0,0-1h-3.094zm0-11,0,1,2.375,0,0-1-2.375,0zm2.6875,0,0,1,2.25,0,0-1-2.25,0zm2.5625,0,0,1,1.9688,0,0-1-1.9688,0zm2.2812,0,0,1,0.875,0,0-1-0.875,0zm1.1875,0,0,1,1.9375,0,0-1-1.9375,0zm2.2812,0,0,1,5,0,0-1-5,0zm-11,2l0.001,1h3.7812v-1h-3.7812zm4.1562,0,0,1,1.8125,0,0-1-1.8125,0zm2.1562,0,0,1,0.84375,0,0-1-0.84375,0zm1.2188,0,0,1,1.625,0,0-1-1.625,0zm2,0,0,1,1.625,0,0-1-1.625,0zm1.9688,0,0,1,2.6562,0,0-1-2.6562,0zm3.0312,0,0,1,3.4688,0,0-1-3.4688,0zm-14.53,2v1h4.1875v-1h-4.188zm4.5,0,0,1,4.5,0,0-1-4.5,0zm-4.5,2,0,1,2.3125,0,0-1h-2.312zm2.625,0,0,1,2.1562,0,0-1-2.1562,0zm2.4688,0,0,1,1.9062,0,0-1-1.9062,0zm3.8125,5,0,1,1.9062,0,0-1-1.9062,0zm2.2188,0,0,1,1.9062,0,0-1-1.9062,0zm2.2188,0,0,1,2.75,0,0-1-2.75,0zm3.0938,0,0,1,0.5625,0,0-1-0.5625,0zm-7.438,7v1h2.3438v-1h-2.344zm2.6562,0,0,1,2.1875,0,0-1-2.1875,0zm2.5,0,0,1h1.844v-1h-1.844zm-5.156,2v1h1.875v-1h-1.875zm2.1875,0,0,1,4.8125,0,0-1-4.8125,0zm5.125,0,0,1,3.6875,0,0-1-3.6875,0zm-7.313,2v1h2.4375v-1h-2.438zm2.7812,0,0,1,4.2812,0,0-1-4.2812,0zm4.5938,0,0,1,2.9375,0,0-1-2.9375,0zm-7.375,2.125v0.96875h1.875v-0.96875h-1.875zm2.1875,0,0,0.96875,1.9062,0,0-0.96875-1.9062,0zm2.2188,0,0,0.96875,2.7188,0,0-0.96875-2.7188,0zm3.0312,0,0,0.96875,0.5625,0,0-0.96875-0.5625,0zm0.875,0,0,0.96875,3.5312,0,0-0.96875-3.5312,0zm-8.375,6.875,0,1,2.4375,0,0-1-2.4375,0zm2.75,0,0,1,2.25,0,0-1-2.25,0zm2.5938,0,0,1,1.9375,0,0-1-1.9375,0zm2.25,0,0,1,3.0938,0,0-1-3.0938,0zm3.4375,0,0,1,5.0312,0,0-1-5.0312,0z" fill="url(#linearGradient3797)"/>
+  <g stroke-linejoin="round" style="color:#000000;letter-spacing:0px;word-spacing:0px;enable-background:accumulate;" font-weight="bold" font-family="Droid Sans" fill-rule="nonzero" line-height="125%" stroke-dashoffset="0" font-size="32px" font-style="normal" stroke="url(#linearGradient3354)" stroke-linecap="butt" stroke-miterlimit="4" font-stretch="normal" font-variant="normal" stroke-width="0.9922713" fill="url(#radialGradient3352)">
+   <path d="m25.746,18.293,4.5664,0,2.4609,8.5996,0.60156,2.2695c0.03645-0.2552,0.07747-0.51497,0.12305-0.7793,0.04556-0.26432,0.09569-0.52408,0.15039-0.7793,0.06379-0.26432,0.1276-0.5013,0.19141-0.71094l2.4062-8.5996h4.5938l-6.043,17.24c-0.56511,1.6133-1.3353,2.8118-2.3105,3.5957-0.97527,0.78385-2.1966,1.1758-3.6641,1.1758-0.47396-0.000006-0.88412-0.02735-1.2305-0.08203-0.34636-0.04558-0.64258-0.09571-0.88867-0.15039v-3.3086c0.1914,0.04557,0.43294,0.08658,0.72461,0.12305,0.29166,0.03646,0.597,0.05468,0.91602,0.05469,0.4375-0.000003,0.81119-0.05925,1.1211-0.17773,0.30989-0.11849,0.57421-0.28711,0.79297-0.50586,0.22786-0.20964,0.41927-0.46484,0.57422-0.76562,0.16406-0.30078,0.30533-0.63802,0.42383-1.0117l0.25977-0.76562-5.7695-15.422m-11.406,3.1914,0.95312,0c1.3646,0.000012,2.3906-0.27082,3.0781-0.8125,0.6979-0.54165,1.0469-1.4219,1.0469-2.6406-0.000013-1.1354-0.31251-1.9739-0.9375-2.5156-0.6146-0.54165-1.5833-0.81248-2.9062-0.8125h-1.2344v6.7812m9.9844-3.625c-0.000018,1-0.15106,1.9583-0.45312,2.875-0.3021,0.91668-0.8021,1.724-1.5,2.4219-0.68752,0.69793-1.599,1.2552-2.7344,1.6719-1.125,0.41668-2.5208,0.62501-4.1875,0.625h-1.1094v8.125h-4.8438v-22.844h6.3438c1.4687,0.000023,2.7344,0.16669,3.7969,0.5,1.0729,0.32294,1.9531,0.79169,2.6406,1.4062,0.6979,0.60419,1.2135,1.349,1.5469,2.2344,0.33332,0.87502,0.49998,1.8698,0.5,2.9844" stroke="url(#linearGradient3354)" fill="url(#radialGradient3352)"/>
+  </g>
+  <path stroke-linejoin="round" opacity="0.8" style="color:#000000;enable-background:accumulate;" d="m10.469,11.719,0,20.875,2.9062,0,0-7.1562a0.97158,0.97158,0,0,1,0.96875,-0.96875h1.0938c1.5857,0.000008,2.8653-0.20009,3.8438-0.5625,1.0403-0.38177,1.8488-0.8716,2.4062-1.4375,0.60221-0.60221,0.9956-1.2593,1.25-2.0312,0.26608-0.80746,0.40623-1.6502,0.40625-2.5625-0.000016-1.0177-0.1544-1.913-0.4375-2.6562-0.28511-0.75726-0.68346-1.3533-1.25-1.8438a0.97158,0.97158,0,0,1,-0.031,-0.03c-0.5457-0.48779-1.2973-0.86009-2.2812-1.1562-0.94313-0.29586-2.1047-0.46873-3.5-0.46875h-5.375z" stroke-dashoffset="0" stroke="url(#linearGradient4338)" stroke-linecap="butt" stroke-miterlimit="4" stroke-width="1" fill="none"/>
+  <path stroke-linejoin="round" opacity="0.8" style="color:#000000;enable-background:accumulate;" d="m14.188,13.719a0.97158,0.97158,0,0,1,0.15625,0h1.2188c1.444,0.000021,2.6588,0.30588,3.5312,1.0625,0.0069,0.006,0.02437-0.0061,0.03125,0l-0.03125,0.03125c0.8717,0.76818,1.2812,1.915,1.2812,3.2188-0.000015,1.3862-0.43158,2.6369-1.4062,3.4062h-0.03125c-0.93629,0.7268-2.1746,1.0313-3.6562,1.0312h-0.9375a0.97158,0.97158,0,0,1,-0.969,-0.969v-6.8125a0.97158,0.97158,0,0,1,0.8125,-0.96875z" stroke-dashoffset="0" stroke="url(#linearGradient4352)" stroke-linecap="butt" stroke-miterlimit="4" stroke-width="1" fill="none"/>
+  <path stroke-linejoin="round" opacity="0.8" style="color:#000000;enable-background:accumulate;" d="m27.156,19.25,5.2812,14.125c0.08288,0.21909,0.08288,0.46841,0,0.6875l-0.25,0.6875-0.03125,0.0625c-0.11452,0.35874-0.24034,0.75454-0.4375,1.125-0.0067,0.01252-0.02443,0.01874-0.03125,0.03125-0.21274,0.39778-0.48826,0.72429-0.75,0.96875-0.01011,0.01011-0.02099,0.02128-0.03125,0.03125-0.30722,0.29848-0.68482,0.53114-1.0938,0.6875-0.43825,0.16756-0.9291,0.25-1.4688,0.25-0.23646-0.000002-0.44385-0.01211-0.65625-0.03125v1.375c0.01198,0.0016,0.01908-0.0016,0.03125,0,0.01042-0.000168,0.02083-0.000168,0.03125,0,0.30338,0.0479,0.64191,0.09374,1.0625,0.09375,1.2893-0.000006,2.3062-0.33575,3.0938-0.96875,0.79412-0.63827,1.4766-1.6621,2-3.1562l5.594-15.969h-2.5l-2.2188,7.9062c0.000168,0.01042,0.000168,0.02083,0,0.03125-0.05961,0.19584-0.12825,0.37949-0.1875,0.625-0.05465,0.25498-0.08383,0.47993-0.125,0.71875-0.04289,0.24875-0.09138,0.48621-0.125,0.71875-0.0011,0.0099,0.001,0.02129,0,0.03125l-1.0312,1.5625c-0.488-0.552-0.84-1.577-1.188-2.313-0.058-0.485-0.153-0.926-0.281-1.343l-2.282-7.938z" stroke-dashoffset="0" stroke="url(#linearGradient4326)" stroke-linecap="butt" stroke-miterlimit="4" stroke-width="1" fill="none"/>
+ </g>
+</svg>
diff --git a/core/img/filetypes/text.png b/core/img/filetypes/text.png
index 813f712f726c935f9adf8d2f2dd0d7683791ef11..6b069c82c119a5bc115cd657b9752215b8cd1044 100644
Binary files a/core/img/filetypes/text.png and b/core/img/filetypes/text.png differ
diff --git a/core/img/filetypes/text.svg b/core/img/filetypes/text.svg
new file mode 100644
index 0000000000000000000000000000000000000000..69a1bcd98c3305fec018e5565d917db2e0ff3669
--- /dev/null
+++ b/core/img/filetypes/text.svg
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="32px" width="32px" version="1.1" xmlns:cc="http://creativecommons.org/ns#" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:dc="http://purl.org/dc/elements/1.1/">
+ <defs>
+  <linearGradient id="e" y2="3.3639" gradientUnits="userSpaceOnUse" x2="22.004" gradientTransform="matrix(.66858 0 0 .67037 -.67962 -2.3083)" y1="47.813" x1="22.004">
+   <stop stop-color="#aaa" offset="0"/>
+   <stop stop-color="#c8c8c8" offset="1"/>
+  </linearGradient>
+  <linearGradient id="g" y2="43" gradientUnits="userSpaceOnUse" x2="24" gradientTransform="matrix(.56757 0 0 .72973 2.3784 -2.5135)" y1="5.5641" x1="24">
+   <stop stop-color="#fff" offset="0"/>
+   <stop stop-color="#fff" stop-opacity=".23529" offset=".036262"/>
+   <stop stop-color="#fff" stop-opacity=".15686" offset=".95056"/>
+   <stop stop-color="#fff" stop-opacity=".39216" offset="1"/>
+  </linearGradient>
+  <linearGradient id="f" y2="47.013" gradientUnits="userSpaceOnUse" x2="25.132" gradientTransform="matrix(.65714 0 0 .63012 .22856 -1.0896)" y1=".98521" x1="25.132">
+   <stop stop-color="#f4f4f4" offset="0"/>
+   <stop stop-color="#dbdbdb" offset="1"/>
+  </linearGradient>
+  <radialGradient id="c" xlink:href="#a" gradientUnits="userSpaceOnUse" cy="486.65" cx="605.71" gradientTransform="matrix(.015663 0 0 .0082353 17.61 25.981)" r="117.14"/>
+  <linearGradient id="a">
+   <stop offset="0"/>
+   <stop stop-opacity="0" offset="1"/>
+  </linearGradient>
+  <radialGradient id="b" xlink:href="#a" gradientUnits="userSpaceOnUse" cy="486.65" cx="605.71" gradientTransform="matrix(-.015663 0 0 .0082353 14.39 25.981)" r="117.14"/>
+  <linearGradient id="d" y2="609.51" gradientUnits="userSpaceOnUse" y1="366.65" gradientTransform="matrix(.045769 0 0 .0082353 -.54232 25.981)" x2="302.86" x1="302.86">
+   <stop stop-opacity="0" offset="0"/>
+   <stop offset=".5"/>
+   <stop stop-opacity="0" offset="1"/>
+  </linearGradient>
+ </defs>
+ <g>
+  <g>
+   <rect opacity=".15" height="2" width="22.1" y="29" x="4.95" fill="url(#d)"/>
+   <path opacity=".15" d="m4.95 29v1.9999c-0.80662 0.0038-1.95-0.44807-1.95-1.0001 0-0.552 0.90012-0.99982 1.95-0.99982z" fill="url(#b)"/>
+   <path opacity=".15" d="m27.05 29v1.9999c0.80661 0.0038 1.95-0.44807 1.95-1.0001 0-0.552-0.90012-0.99982-1.95-0.99982z" fill="url(#c)"/>
+  </g>
+  <path d="m4.5 0.49996c5.2705 0 23 0.00185 23 0.00185l0.000028 28.998h-23v-29z" fill="url(#f)"/>
+ </g>
+ <g fill="none">
+  <path stroke-linejoin="round" d="m26.5 28.5h-21v-27h21z" stroke="url(#g)" stroke-linecap="round"/>
+  <path opacity=".3" stroke-linejoin="round" d="m4.5 0.49996c5.2705 0 23 0.00185 23 0.00185l0.000028 28.998h-23v-29z" stroke="#000" stroke-width=".99992"/>
+  <path d="m8 5.5677h1.567zm1.7968 0h1.4625zm1.6924 0h1.2954zm1.5043 0h0.56412zm0.79394 0h1.2536zm1.5043 0h3.3011zm3.5101 0h2.5281zm2.737 0h0.77305zm-13.539 1.9218h2.0684zm2.2774 0h3.3847zm3.5936 0h1.6506zm1.8595 0h1.5461zm1.755 0h1.3163zm1.5252 0 2.0684 0.020955zm2.2565 0.020955h3.3638zm-13.266 1.9895h2.8624zm3.0922 0h3.0922zm3.3011 0h1.2327zm1.4416 0h2.9042zm3.0922 0h1.9849zm2.2147 0h0.79394zm1.0029 0h0.43876zm0.66858 0h1.2327zm-14.813 2h1.0656zm1.3998 0h3.9488zm-1.3998 3h2.6325zm2.8415 0h2.8206zm3.0295 0h1.0864zm1.2954 0h2.6534zm2.8624 0h3.3429zm3.5727 0h1.2327zm-13.602 2h2.8624zm3.0922 0h3.0922zm3.3011 0h1.2327zm1.4416 0h2.9042zm3.0922 0h1.9849zm2.2147 0h0.79394zm1.0029 0h0.43876zm0.66858 0h1.2327zm-14.813 2h2.4445zm2.7161 0h1.17zm1.379 0h0.58501zm0.81484 0h1.0656zm1.2954 0h1.0864zm1.2954 0h1.7341zm1.964 0h2.2565zm2.4654 0h1.5043zm1.7132 0h0.37608zm-13.643 2.9895h2.0684zm2.2774 0h3.3847zm3.5936 0h1.6506zm1.8595 0h1.5461zm1.755 0h1.3163zm1.5252 0 2.0684 0.02095zm2.2565 0.02095h3.3638zm-13.266 1.989h2.5908zm2.8206 0h0.81484zm1.0238 0h1.8595zm2.0684 0h2.737zm2.9668 0h1.8595zm2.0475 0h0.39697zm0.6059 0h2.3609zm2.6117 0h1.2327zm-14.145 2h2.5908zm2.8206 0h1.17zm1.379 0h1.8386zm2.0475 0h1.9849zm2.2147 0h0.79394zm1.0029 0h0.43876zm0.66858 0h1.2327z" stroke="url(#e)" stroke-width="1px"/>
+ </g>
+</svg>
diff --git a/core/img/filetypes/video.png b/core/img/filetypes/video.png
index b0ce7bb198a3b268bd634d2b26e9b710f3797d37..045754df26fa90c64237a817fe5a151b1aa18ab7 100644
Binary files a/core/img/filetypes/video.png and b/core/img/filetypes/video.png differ
diff --git a/core/img/filetypes/video.svg b/core/img/filetypes/video.svg
new file mode 100644
index 0000000000000000000000000000000000000000..67691369ac9e5e4f49303395da82eb4e900cf2f7
--- /dev/null
+++ b/core/img/filetypes/video.svg
@@ -0,0 +1,85 @@
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="32" width="32" version="1.1" xmlns:cc="http://creativecommons.org/ns#" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:dc="http://purl.org/dc/elements/1.1/">
+ <defs>
+  <radialGradient id="radialGradient4384" xlink:href="#linearGradient5747" gradientUnits="userSpaceOnUse" cy="43.5" cx="4.993" gradientTransform="matrix(1.6030273,0,0,0.59999988,541.99052,860.76219)" r="2.5"/>
+  <linearGradient id="linearGradient5747">
+   <stop stop-color="#000" offset="0"/>
+   <stop stop-color="#000" stop-opacity="0" offset="1"/>
+  </linearGradient>
+  <radialGradient id="radialGradient4386" xlink:href="#linearGradient5747" gradientUnits="userSpaceOnUse" cy="43.5" cx="4.993" gradientTransform="matrix(1.6030273,0,0,0.59999988,-535.0095,-912.96218)" r="2.5"/>
+  <linearGradient id="linearGradient4388" y2="39.999" xlink:href="#linearGradient5747" spreadMethod="reflect" gradientUnits="userSpaceOnUse" x2="25.058" gradientTransform="matrix(0.82142859,0,0,0.42857134,518.78572,868.21933)" y1="43.544" x1="25.058"/>
+  <radialGradient id="radialGradient4390" gradientUnits="userSpaceOnUse" cy="8.4498" cx="7.4957" gradientTransform="matrix(-0.00959868,1.5579153,-1.486926,-0.02419163,551.13616,849.77731)" r="20">
+   <stop stop-color="#f8b17e" offset="0"/>
+   <stop stop-color="#e35d4f" offset="0.26238"/>
+   <stop stop-color="#c6262e" offset="0.66094"/>
+   <stop stop-color="#690b54" offset="1"/>
+  </radialGradient>
+  <linearGradient id="linearGradient4392" y2="860.36" xlink:href="#linearGradient3173" gradientUnits="userSpaceOnUse" x2="547" y1="887.36" x1="547"/>
+  <linearGradient id="linearGradient3173" y2="3.899" gradientUnits="userSpaceOnUse" x2="24" gradientTransform="matrix(2.641026,0,0,2.641026,0.6153903,-60.384616)" y1="44" x1="24">
+   <stop stop-color="#791235" offset="0"/>
+   <stop stop-color="#bf1d09" offset="1"/>
+  </linearGradient>
+  <linearGradient id="linearGradient4394" y2="43" xlink:href="#linearGradient3128" gradientUnits="userSpaceOnUse" x2="24" gradientTransform="matrix(0.37837838,0,0,0.64864865,529.41891,858.29461)" y1="5" x1="24"/>
+  <linearGradient id="linearGradient3128" y2="43" gradientUnits="userSpaceOnUse" x2="24" gradientTransform="matrix(2.7297298,0,0,2.7297298,-1.5135111,-62.513486)" y1="5.3301" x1="24">
+   <stop stop-color="#FFF" offset="0"/>
+   <stop stop-color="#FFF" stop-opacity="0.23529412" offset="0.029825"/>
+   <stop stop-color="#FFF" stop-opacity="0.15686275" offset="0.96141"/>
+   <stop stop-color="#FFF" stop-opacity="0.39215687" offset="1"/>
+  </linearGradient>
+  <linearGradient id="linearGradient4396" y2="43" xlink:href="#linearGradient3128" gradientUnits="userSpaceOnUse" x2="24" gradientTransform="matrix(0.10810808,0,0,0.64864865,524.90556,858.29461)" y1="5" x1="24"/>
+  <linearGradient id="linearGradient4398" y2="812.36" xlink:href="#linearGradient5761" gradientUnits="userSpaceOnUse" x2="532" gradientTransform="matrix(0.79999998,0,0,0.79999998,-1306.0622,-122.38971)" y1="812.36" x1="526"/>
+  <linearGradient id="linearGradient5761">
+   <stop stop-color="#FFF" offset="0"/>
+   <stop stop-color="#FFF" stop-opacity="0" offset="1"/>
+  </linearGradient>
+  <linearGradient id="linearGradient4400" y2="812.36" xlink:href="#linearGradient5761" gradientUnits="userSpaceOnUse" x2="532" gradientTransform="matrix(0.79999998,0,0,0.79999998,-1300.0622,-122.38971)" y1="812.36" x1="526"/>
+  <linearGradient id="linearGradient4402" y2="812.36" xlink:href="#linearGradient5761" gradientUnits="userSpaceOnUse" x2="532" gradientTransform="matrix(0.79999998,0,0,0.79999998,-1294.0622,-122.38971)" y1="812.36" x1="526"/>
+  <linearGradient id="linearGradient4404" y2="812.36" xlink:href="#linearGradient5761" gradientUnits="userSpaceOnUse" x2="532" gradientTransform="matrix(0.79999998,0,0,0.79999998,-1288.0622,-122.38971)" y1="812.36" x1="526"/>
+  <linearGradient id="linearGradient4406" y2="43" xlink:href="#linearGradient3128" gradientUnits="userSpaceOnUse" x2="24" gradientTransform="matrix(-0.10810808,0,0,0.64864865,552.09444,858.29461)" y1="5" x1="24"/>
+  <linearGradient id="linearGradient4408" y2="812.36" xlink:href="#linearGradient5761" gradientUnits="userSpaceOnUse" x2="532" gradientTransform="matrix(0.79999998,0,0,0.79999998,-1306.0622,-1199.3897)" y1="812.36" x1="526"/>
+  <linearGradient id="linearGradient4410" y2="812.36" xlink:href="#linearGradient5761" gradientUnits="userSpaceOnUse" x2="532" gradientTransform="matrix(0.79999998,0,0,0.79999998,-1300.0622,-1199.3897)" y1="812.36" x1="526"/>
+  <linearGradient id="linearGradient4412" y2="812.36" xlink:href="#linearGradient5761" gradientUnits="userSpaceOnUse" x2="532" gradientTransform="matrix(0.79999998,0,0,0.79999998,-1294.0622,-1199.3897)" y1="812.36" x1="526"/>
+  <linearGradient id="linearGradient4414" y2="812.36" xlink:href="#linearGradient5761" gradientUnits="userSpaceOnUse" x2="532" gradientTransform="matrix(0.79999998,0,0,0.79999998,-1288.0622,-1199.3897)" y1="812.36" x1="526"/>
+  <linearGradient id="linearGradient4417" y2="448.3" xlink:href="#linearGradient3173" gradientUnits="userSpaceOnUse" x2="598.77" y1="475.7" x1="598.77"/>
+ </defs>
+ <metadata>
+  <rdf:RDF>
+   <cc:Work rdf:about="">
+    <dc:format>image/svg+xml</dc:format>
+    <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
+    <dc:title/>
+   </cc:Work>
+  </rdf:RDF>
+ </metadata>
+ <g transform="translate(0,-1020.3622)">
+  <g transform="translate(-523,163.00004)">
+   <rect opacity="0.4" height="3" width="4" y="885.36" x="550" fill="url(#radialGradient4384)"/>
+   <rect opacity="0.4" transform="scale(-1,-1)" height="3" width="4" y="-888.36" x="-527" fill="url(#radialGradient4386)"/>
+   <rect opacity="0.4" height="3" width="23" y="885.36" x="527" fill="url(#linearGradient4388)"/>
+   <rect stroke-linejoin="round" style="enable-background:accumulate;color:#000000;" stroke-dasharray="none" fill-rule="nonzero" stroke-dashoffset="0" height="26" width="16" stroke="url(#linearGradient4392)" stroke-linecap="round" stroke-miterlimit="4" y="860.86" x="530.5" stroke-width="1" fill="url(#radialGradient4390)"/>
+   <rect opacity="0.5" stroke-linejoin="round" stroke-dasharray="none" stroke-dashoffset="0" height="24" width="14" stroke="url(#linearGradient4394)" stroke-linecap="round" stroke-miterlimit="4" y="861.86" x="531.5" stroke-width="1" fill="none"/>
+   <path stroke-linejoin="miter" style="enable-background:accumulate;color:#000000;" d="m525.5,860.86c-0.554,0-1,0.446-1,1v24c0,0.554,0.446,1,1,1h2,2,1v-1-2-20-2-1h-1-2-2zm1,3,1,0,1,0,0,2-2,0,0-2zm0,6,2,0,0,2-2,0,0-2zm0,6,2,0,0,2-2,0,0-2zm0,6,2,0,0,2-1,0-1,0,0-2z" fill-opacity="0.78431373" fill-rule="nonzero" stroke-dashoffset="0" stroke="#000" stroke-linecap="round" stroke-miterlimit="4" stroke-dasharray="none" stroke-width="0.99999994" fill="#000"/>
+   <path opacity="0.3" stroke-linejoin="miter" d="m525.5,861.86,0,24,1,0,3,0,0-3,0-18,0-3-3,0-1,0z" stroke-dashoffset="0" stroke="url(#linearGradient4396)" stroke-linecap="round" stroke-miterlimit="4" stroke-dasharray="none" stroke-width="1" fill="none"/>
+   <rect opacity="0.12" stroke-linejoin="round" stroke-dasharray="none" transform="matrix(0,-1,1,0,0,0)" stroke-dashoffset="0" rx="1" ry="1" height="4" width="4" stroke="url(#linearGradient4398)" stroke-linecap="butt" stroke-miterlimit="4" y="525.5" x="-884.86" stroke-width="1" fill="none"/>
+   <rect opacity="0.12" stroke-linejoin="round" stroke-dasharray="none" transform="matrix(0,-1,1,0,0,0)" stroke-dashoffset="0" rx="1" ry="1" height="4" width="4" stroke="url(#linearGradient4400)" stroke-linecap="butt" stroke-miterlimit="4" y="525.5" x="-878.86" stroke-width="1" fill="none"/>
+   <rect opacity="0.12" stroke-linejoin="round" stroke-dasharray="none" transform="matrix(0,-1,1,0,0,0)" stroke-dashoffset="0" rx="1" ry="1" height="4" width="4" stroke="url(#linearGradient4402)" stroke-linecap="butt" stroke-miterlimit="4" y="525.5" x="-872.86" stroke-width="1" fill="none"/>
+   <rect opacity="0.12" stroke-linejoin="round" stroke-dasharray="none" transform="matrix(0,-1,1,0,0,0)" stroke-dashoffset="0" rx="1" ry="1" height="4" width="4" stroke="url(#linearGradient4404)" stroke-linecap="butt" stroke-miterlimit="4" y="525.5" x="-866.86" stroke-width="1" fill="none"/>
+   <rect opacity="0.4" fill-rule="evenodd" rx="1" ry="1" height="3" width="3" y="863.36" x="526" fill="#000"/>
+   <rect opacity="0.4" fill-rule="evenodd" rx="1" ry="1" height="3" width="3" y="869.36" x="526" fill="#000"/>
+   <rect opacity="0.4" fill-rule="evenodd" rx="1" ry="1" height="3" width="3" y="875.36" x="526" fill="#000"/>
+   <rect opacity="0.4" fill-rule="evenodd" rx="1" ry="1" height="3" width="3" y="881.36" x="526" fill="#000"/>
+   <path stroke-linejoin="miter" style="enable-background:accumulate;color:#000000;" d="m551.5,860.86c0.554,0,1,0.446,1,1v24c0,0.554-0.446,1-1,1h-2-2-1v-1-2-20-2-1h1,2,2zm-1,3-1,0-1,0,0,2,2,0,0-2zm0,6-2,0,0,2,2,0,0-2zm0,6-2,0,0,2,2,0,0-2zm0,6-2,0,0,2,1,0,1,0,0-2z" fill-opacity="0.78431373" fill-rule="nonzero" stroke-dashoffset="0" stroke="#000" stroke-linecap="round" stroke-miterlimit="4" stroke-dasharray="none" stroke-width="0.99999994" fill="#000"/>
+   <path opacity="0.3" stroke-linejoin="miter" d="m551.5,861.86,0,24-1,0-3,0,0-3,0-18,0-3,3,0,1,0z" stroke-dashoffset="0" stroke="url(#linearGradient4406)" stroke-linecap="round" stroke-miterlimit="4" stroke-dasharray="none" stroke-width="1" fill="none"/>
+   <rect opacity="0.12" stroke-linejoin="round" stroke-dasharray="none" transform="matrix(0,-1,-1,0,0,0)" stroke-dashoffset="0" rx="1" ry="1" height="4" width="4" stroke="url(#linearGradient4408)" stroke-linecap="butt" stroke-miterlimit="4" y="-551.5" x="-884.86" stroke-width="1" fill="none"/>
+   <rect opacity="0.12" stroke-linejoin="round" stroke-dasharray="none" transform="matrix(0,-1,-1,0,0,0)" stroke-dashoffset="0" rx="1" ry="1" height="4" width="4" stroke="url(#linearGradient4410)" stroke-linecap="butt" stroke-miterlimit="4" y="-551.5" x="-878.86" stroke-width="1" fill="none"/>
+   <rect opacity="0.12" stroke-linejoin="round" stroke-dasharray="none" transform="matrix(0,-1,-1,0,0,0)" stroke-dashoffset="0" rx="1" ry="1" height="4" width="4" stroke="url(#linearGradient4412)" stroke-linecap="butt" stroke-miterlimit="4" y="-551.5" x="-872.86" stroke-width="1" fill="none"/>
+   <rect opacity="0.12" stroke-linejoin="round" stroke-dasharray="none" transform="matrix(0,-1,-1,0,0,0)" stroke-dashoffset="0" rx="1" ry="1" height="4" width="4" stroke="url(#linearGradient4414)" stroke-linecap="butt" stroke-miterlimit="4" y="-551.5" x="-866.86" stroke-width="1" fill="none"/>
+   <rect opacity="0.4" transform="scale(-1,1)" fill-rule="evenodd" rx="1" ry="1" height="3" width="3" y="863.36" x="-551" fill="#000"/>
+   <rect opacity="0.4" transform="scale(-1,1)" fill-rule="evenodd" rx="1" ry="1" height="3" width="3" y="869.36" x="-551" fill="#000"/>
+   <rect opacity="0.4" transform="scale(-1,1)" fill-rule="evenodd" rx="1" ry="1" height="3" width="3" y="875.36" x="-551" fill="#000"/>
+   <rect opacity="0.4" transform="scale(-1,1)" fill-rule="evenodd" rx="1" ry="1" height="3" width="3" y="881.36" x="-551" fill="#000"/>
+   <path opacity="0.31999996" stroke-linejoin="round" d="m599.62,474.79,0-25.573l22.14,12.78z" fill-rule="evenodd" transform="matrix(0.45152364,0,0,0.43013404,262.75848,675.64025)" stroke="url(#linearGradient4417)" stroke-miterlimit="4" stroke-dasharray="none" stroke-width="2.26912189" fill="url(#linearGradient4417)"/>
+   <path stroke-linejoin="round" d="m599.62,474.79,0-25.573l22.14,12.78z" fill-rule="evenodd" transform="matrix(0.36121892,0,0,0.35192785,317.90678,710.77151)" stroke="#FFF" stroke-miterlimit="4" stroke-dasharray="none" stroke-width="2.80470967" fill="#fafafa"/>
+  </g>
+ </g>
+</svg>
diff --git a/core/img/filetypes/web.png b/core/img/filetypes/web.png
new file mode 100644
index 0000000000000000000000000000000000000000..c380231264555a13531b8fc6b1ed9d5c1f533a4e
Binary files /dev/null and b/core/img/filetypes/web.png differ
diff --git a/core/img/filetypes/web.svg b/core/img/filetypes/web.svg
new file mode 100644
index 0000000000000000000000000000000000000000..67775a2233b6b2786c383e7e6430e570013d34c6
--- /dev/null
+++ b/core/img/filetypes/web.svg
@@ -0,0 +1,45 @@
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="32" width="32" version="1.1" xmlns:cc="http://creativecommons.org/ns#" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:dc="http://purl.org/dc/elements/1.1/">
+ <metadata>
+  <rdf:RDF>
+   <cc:Work rdf:about="">
+    <dc:format>image/svg+xml</dc:format>
+    <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
+    <dc:title/>
+   </cc:Work>
+  </rdf:RDF>
+ </metadata>
+ <defs>
+  <radialGradient id="radialGradient2418" gradientUnits="userSpaceOnUse" cy="24.149" cx="17.814" gradientTransform="matrix(-2.643979,0,2.93653e-8,2.534421,78.72514,-37.986139)" r="9.125">
+   <stop stop-color="#FFF" offset="0"/>
+   <stop stop-color="#b6b6b6" offset="1"/>
+  </radialGradient>
+  <linearGradient id="linearGradient3036" y2="-1.4615" gradientUnits="userSpaceOnUse" x2="62.2" gradientTransform="matrix(1.4102489,0,0,1.4102168,-71.718053,20.951038)" y1="-12.489" x1="62.2">
+   <stop stop-color="#FFF" offset="0"/>
+   <stop stop-color="#FFF" stop-opacity="0" offset="1"/>
+  </linearGradient>
+  <radialGradient id="radialGradient3040" gradientUnits="userSpaceOnUse" cy="-8.7256" cx="61.24" gradientTransform="matrix(0,2.3489394,-2.3489382,0,-4.4959784,-137.19908)" r="9.7553">
+   <stop stop-color="#51cfee" offset="0"/>
+   <stop stop-color="#49a3d2" offset="0.26238"/>
+   <stop stop-color="#3470b4" offset="0.70495"/>
+   <stop stop-color="#273567" offset="1"/>
+  </radialGradient>
+  <linearGradient id="linearGradient3042" y2="2.6887" gradientUnits="userSpaceOnUse" x2="20" gradientTransform="matrix(0.65334267,0,0,0.65332778,0.05996007,0.58024139)" y1="43" x1="20">
+   <stop stop-color="#254b6d" offset="0"/>
+   <stop stop-color="#415b73" offset="0.5"/>
+   <stop stop-color="#6195b5" offset="1"/>
+  </linearGradient>
+  <radialGradient id="radialGradient3045" gradientUnits="userSpaceOnUse" cy="4.625" cx="62.625" gradientTransform="matrix(1.4431373,0,0,0.58310714,-74.376473,23.107603)" r="10.625">
+   <stop stop-color="#000" offset="0"/>
+   <stop stop-color="#000" stop-opacity="0" offset="1"/>
+  </radialGradient>
+ </defs>
+ <path opacity="0.4" d="m31.333,25.804a15.333,6.1955,0,0,1,-30.667,0,15.333,6.1955,0,1,1,30.667,0z" fill-rule="evenodd" fill="url(#radialGradient3045)"/>
+ <path d="M29,15.999c0,7.18-5.821,13.001-13,13.001-7.1793,0-13-5.821-13-13.001,0-7.179,5.8207-12.999,13-12.999,7.179,0,13,5.8199,13,12.999z" fill-rule="nonzero" stroke="url(#linearGradient3042)" stroke-miterlimit="4" stroke-dasharray="none" stroke-width="0.66666669" fill="url(#radialGradient3040)"/>
+ <path opacity="0.4" d="M16.219,3.4688l-1.563,0.1874-1.75,0.4688c0.148-0.0517,0.316-0.1067,0.469-0.1562l-0.219-0.3438-0.656,0.0938-0.344,0.3124-0.531,0.0938-0.469,0.2188-0.218,0.0937-0.063,0.0937-0.344,0.0626-0.219,0.4374-0.25-0.5312-0.0932,0.2188,0.0312,0.5937-0.4062,0.375-0.25,0.6563h0.5l0.2182-0.4376,0.063-0.1562c0.228-0.1612,0.456-0.3448,0.687-0.5l0.532,0.1875c0.08,0.055,0.169,0.101,0.25,0.1563l-1.532,0.3124,0.5,0.375h0.126c-1.3646,1.3155-3.5724,3.8488-4.1255,8.2808,0.024,0.113,0.4375,0.782,0.4375,0.782l1,0.562,0.9688,0.282,0.4374,0.531,0.6558,0.5,0.376-0.094,0.281,0.156v0.094l-0.375,1-0.282,0.437,0.094,0.188-0.2498,0.812,0.8438,1.532,0.844,0.75,0.406,0.531-0.062,1.125,0.281,0.656-0.281,1.219c-0.005,0.013-0.019,0.032,0,0.094,0.036,0.123,1.5,0.944,1.593,0.875,0.093-0.071,0.188-0.125,0.188-0.125l-0.094-0.281,0.375-0.344,0.156-0.375,0.594-0.219,0.469-1.156-0.125-0.344,0.312-0.469,0.719-0.187,0.375-0.844-0.094-1.062,0.563-0.782,0.093-0.812c-0.771-0.384-1.546-0.793-2.312-1.188l-0.375-0.718-0.687-0.157-0.407-1.031-0.906,0.125-0.813-0.594-0.843,0.75v0.094c-0.256-0.074-0.585-0.079-0.8128-0.219l-0.1562-0.531v-0.594l-0.5938,0.063c0.0471-0.374,0.1089-0.752,0.1563-1.125h-0.3437l-0.3438,0.437-0.3125,0.156-0.4687-0.281-0.0313-0.562,0.0937-0.657,0.6876-0.531h0.5624l0.125-0.312,0.6876,0.156,0.5002,0.656,0.093-1.093,0.907-0.719,0.312-0.813,0.688-0.25,0.343-0.562,0.876-0.1565,0.406-0.625h-1.282l0.813-0.375h0.563l0.718-0.25,0.156,0.6875,0.313-0.5-0.375-0.25,0.094-0.2812-0.282-0.2813-0.312-0.0625,0.062-0.3438-0.218-0.4687-0.156,0.0625,0.468-0.7188c0.759-0.2351,1.44-0.4872,2.156-0.8124l-0.062,0.3124,0.375,0.25,0.625-0.4374-0.312-0.3438-0.438,0.2188-0.125-0.0313c0.031-0.0142,0.063-0.0168,0.094-0.0313l0.625-1.625-1.375-0.5624zm-3.563,0.7812l-0.344,0.3125,0.876,0.5937,0.593-0.1874-0.406,0.2812h-0.063l0.219,0.1562v0.4688l-0.469,0.5,0.126,0.25-0.5,0.875,0.031,0.3125-0.5,0.2187-0.313,0.6876-0.156-0.6563-0.875-0.3437-0.156-0.5,1.187-0.6876,0.438-0.4062c0.019,0.0129,0.043,0.0183,0.062,0.0312l0.5-0.4687-0.437-0.1875v-0.0312l-0.063-0.0313-0.062,0.0313-0.032-0.0313,0.063-0.0313-0.094-0.0312-0.219-0.4688-1-0.125-0.031-0.0937,0.438,0.0625,0.25-0.25,0.531-0.0938c0.128-0.0622,0.277-0.1055,0.406-0.1562zm-0.281,1.1562l0.031,0.0313,0.906-0.1875-0.124-0.0938-0.813,0.25zm11.687,0l-0.25,0.1563v0.3437l-0.937,0.5938,0.187,0.875,0.532-0.375,0.344,0.375,0.374,0.2188,0.25-0.6563-0.124-0.375,0.124-0.2813,0.282-0.25c-0.251-0.2223-0.515-0.4216-0.782-0.625zm-12.437,0.25l-0.063,0.1876s-0.398,0.0687-0.5,0.0937c-0.019,0.018-0.042,0.0438-0.062,0.0625v-0.1562l0.625-0.1876zm13.5,0.625l-0.031,0.0626v0.5c0.162-0.0442,0.335-0.0728,0.5-0.0938-0.154-0.159-0.308-0.3175-0.469-0.4688zm-3.687,0.0626v0.3437l0.218,0.25v0.5313l-0.125,0.7187,0.594-0.125,0.406-0.4063-0.375-0.375c-0.124-0.3308-0.251-0.6201-0.406-0.9374h-0.312zm4.218,0.4687l-0.5,0.375-0.062,0.25-0.719,0.625-0.719-0.1875v-0.4375l-0.344,0.2187,0.157,0.4063h-0.531l-0.313,0.5-0.344,0.4063-0.656,0.125,0.375,0.375,0.094,0.375h-0.469l-0.625,0.3442v1h0.281l0.281,0.281,0.594-0.281,0.219-0.594,0.469-0.282,0.094-0.218,0.718-0.1878,0.406,0.4378,0.407,0.25-0.25,0.468,0.406-0.093,0.187-0.5-0.5-0.5628h0.219l0.5,0.4058,0.063,0.532,0.437,0.5,0.125-0.719,0.219-0.125c0.239,0.249,0.423,0.563,0.625,0.844l0.75,0.031,0.406,0.281-0.187,0.282-0.438,0.406h-0.625l-0.812-0.282-0.438,0.063-0.312,0.344-0.906-0.907-0.626-0.187-0.937,0.125-0.813,0.219c-0.462,0.524-0.937,1.049-1.374,1.593l-0.5,1.282,0.25,0.281-0.469,0.625,0.5,1.156c0.412,0.467,0.838,0.94,1.25,1.406l0.593-0.531,0.25,0.313,0.657-0.406,0.219,0.25h0.656l0.375,0.406-0.219,0.781,0.469,0.531-0.031,0.875,0.343,0.657-0.25,0.562c-0.024,0.404-0.062,0.815-0.062,1.219,0.198,0.547,0.406,1.073,0.593,1.625l0.126,0.875v0.469h0.218c0.885-0.838,1.651-1.794,2.282-2.844,0.482-0.804,0.881-1.661,1.187-2.563v-0.656l0.437-0.937c0.179-0.869,0.282-1.768,0.282-2.688,0-3.561-1.408-6.7926-3.688-9.1875zm-4.718,0.25l-0.344,0.125,0.094,0.6563,0.468-0.25-0.218-0.5313zm6.593,5.9375l0.531,0.625,0.657,1.406,0.406,0.438-0.187,0.469,0.343,0.437c-0.165,0.011-0.33,0.031-0.5,0.031-0.308-0.649-0.546-1.32-0.781-2l-0.406-0.437-0.219-0.813,0.156-0.156z" fill-rule="nonzero" fill="#000"/>
+ <path opacity="0.4" d="m28.333,15.999c0,6.812-5.5222,12.334-12.333,12.334-6.8111,0-12.333-5.5221-12.333-12.334-0.0003-6.811,5.5216-12.332,12.333-12.332,6.8107,0,12.333,5.5215,12.333,12.333z" stroke="url(#linearGradient3036)" stroke-miterlimit="4" stroke-dasharray="none" stroke-width="0.66666704" fill="none"/>
+ <g transform="matrix(0.66660406,-0.00913426,0.00913426,0.66660406,-0.1924644,0.35723586)" stroke-dashoffset="0" stroke-linecap="butt" stroke-miterlimit="4" stroke-dasharray="none" stroke-width="1">
+  <path stroke-linejoin="round" d="m30.5,20.937,17,16.5-7.75,0.25s3.25,6.75,3.25,6.75c1,3-3.5,4.125-4.25,1.875,0,0-3-6.75-3-6.75l-5.5,5.875,0.25-24.5z" fill-rule="evenodd" stroke="#666" fill="url(#radialGradient2418)"/>
+  <path opacity="0.4" stroke-linejoin="miter" d="m31.657,23.379,13.476,13.186-6.9219,0.27746s3.8721,7.7566,3.8721,7.7566c0.40273,1.6501-2.0283,2.4126-2.5071,1.1529,0,0-3.6831-7.845-3.6831-7.845l-4.4247,4.7083,0.18907-19.236z" stroke="#FFF" fill="none"/>
+ </g>
+</svg>
diff --git a/core/img/filetypes/x-.png b/core/img/filetypes/x-.png
deleted file mode 100644
index 8443c23eb944cf8ef49c9d13cd496502f46f1885..0000000000000000000000000000000000000000
Binary files a/core/img/filetypes/x-.png and /dev/null differ
diff --git a/core/img/filetypes/x-office-document.png b/core/img/filetypes/x-office-document.png
new file mode 100644
index 0000000000000000000000000000000000000000..fcd28e9a292f84e04b7ae031755b3b9823aabf64
Binary files /dev/null and b/core/img/filetypes/x-office-document.png differ
diff --git a/core/img/filetypes/x-office-document.svg b/core/img/filetypes/x-office-document.svg
new file mode 100644
index 0000000000000000000000000000000000000000..fc51a3a1b70291f286f4aae9413b85afecd81049
--- /dev/null
+++ b/core/img/filetypes/x-office-document.svg
@@ -0,0 +1,60 @@
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="32px" width="32px" version="1.1" xmlns:cc="http://creativecommons.org/ns#" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:dc="http://purl.org/dc/elements/1.1/">
+ <defs>
+  <linearGradient id="linearGradient3128" y2="43" gradientUnits="userSpaceOnUse" x2="24" gradientTransform="matrix(0.66891894,0,0,0.72972973,1.8209495,-2.513506)" y1="5.5641" x1="24">
+   <stop stop-color="#FFF" offset="0"/>
+   <stop stop-color="#FFF" stop-opacity="0.23529412" offset="0.036262"/>
+   <stop stop-color="#FFF" stop-opacity="0.15686275" offset="0.95056"/>
+   <stop stop-color="#FFF" stop-opacity="0.39215687" offset="1"/>
+  </linearGradient>
+  <radialGradient id="radialGradient3134" fx="7.2758" gradientUnits="userSpaceOnUse" cy="9.9571" cx="7.8061" gradientTransform="matrix(-1.1778817e-7,4.3521887,-5.895642,-1.3064099e-7,75.941947,-39.43508)" r="12.672">
+   <stop stop-color="#90dbec" offset="0"/>
+   <stop stop-color="#55c1ec" offset="0.26238"/>
+   <stop stop-color="#3689e6" offset="0.70495"/>
+   <stop stop-color="#2b63a0" offset="1"/>
+  </radialGradient>
+  <linearGradient id="linearGradient3071" y2="6.0421" gradientUnits="userSpaceOnUse" y1="36.042" gradientTransform="translate(-2.9820961,-6.0420673)" x2="21.982" x1="21.982">
+   <stop stop-color="#AAA" offset="0"/>
+   <stop stop-color="#c8c8c8" offset="1"/>
+  </linearGradient>
+  <linearGradient id="linearGradient3119" y2="43" gradientUnits="userSpaceOnUse" x2="24" gradientTransform="matrix(0.56756757,0,0,0.72972971,2.378382,-2.5135063)" y1="5.5641" x1="24">
+   <stop stop-color="#FFF" offset="0"/>
+   <stop stop-color="#FFF" stop-opacity="0.23529412" offset="0.036262"/>
+   <stop stop-color="#FFF" stop-opacity="0.15686275" offset="0.95056"/>
+   <stop stop-color="#FFF" stop-opacity="0.39215687" offset="1"/>
+  </linearGradient>
+  <linearGradient id="linearGradient3122" y2="47.013" gradientUnits="userSpaceOnUse" x2="25.132" gradientTransform="matrix(0.65714319,0,0,0.63012397,0.228556,-1.0896478)" y1="0.98521" x1="25.132">
+   <stop stop-color="#f4f4f4" offset="0"/>
+   <stop stop-color="#dbdbdb" offset="1"/>
+  </linearGradient>
+  <radialGradient id="radialGradient3045" xlink:href="#linearGradient5060" gradientUnits="userSpaceOnUse" cy="486.65" cx="605.71" gradientTransform="matrix(0.01566318,0,0,0.00823529,17.610433,25.980565)" r="117.14"/>
+  <linearGradient id="linearGradient5060">
+   <stop stop-color="#000" offset="0"/>
+   <stop stop-color="#000" stop-opacity="0" offset="1"/>
+  </linearGradient>
+  <radialGradient id="radialGradient3048" xlink:href="#linearGradient5060" gradientUnits="userSpaceOnUse" cy="486.65" cx="605.71" gradientTransform="matrix(-0.01566318,0,0,0.00823529,14.389566,25.980565)" r="117.14"/>
+  <linearGradient id="linearGradient3936" y2="609.51" gradientUnits="userSpaceOnUse" y1="366.65" gradientTransform="matrix(0.04576928,0,0,0.00823529,-0.5423243,25.980548)" x2="302.86" x1="302.86">
+   <stop stop-color="#000" stop-opacity="0" offset="0"/>
+   <stop stop-color="#000" offset="0.5"/>
+   <stop stop-color="#000" stop-opacity="0" offset="1"/>
+  </linearGradient>
+ </defs>
+ <metadata>
+  <rdf:RDF>
+   <cc:Work rdf:about="">
+    <dc:format>image/svg+xml</dc:format>
+    <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
+    <dc:title/>
+   </cc:Work>
+  </rdf:RDF>
+ </metadata>
+ <rect opacity="0.15" fill-rule="nonzero" height="2" width="22.1" y="29" x="4.95" fill="url(#linearGradient3936)"/>
+ <path opacity="0.15" d="m4.95,29v1.9999c-0.80662,0.0038-1.95-0.44807-1.95-1.0001,0-0.552,0.90012-0.99982,1.95-0.99982z" fill-rule="nonzero" fill="url(#radialGradient3048)"/>
+ <path opacity="0.15" d="m27.05,29v1.9999c0.80661,0.0038,1.95-0.44807,1.95-1.0001,0-0.552-0.90012-0.99982-1.95-0.99982z" fill-rule="nonzero" fill="url(#radialGradient3045)"/>
+ <path d="m4.5,0.49996c5.2705,0,23,0.00185,23,0.00185l0.000028,28.998h-23v-29z" fill="url(#linearGradient3122)"/>
+ <path stroke-linejoin="round" d="m26.5,28.5-21,0,0-27,21,0z" stroke-dashoffset="0" stroke="url(#linearGradient3119)" stroke-linecap="round" stroke-miterlimit="4" stroke-dasharray="none" stroke-width="0.99999994" fill="none"/>
+ <path stroke-linejoin="miter" d="m11,5.505,1.3436,0zm1.6874,0,2.1875,0zm2.5312,0,1.9375,0zm2.25,0,0.84375,0zm1.1875,0,1.875,0zm2.25,0,3.0938,0zm-9.9061,2,2.6561,0zm3.0624,0,1.75,0zm2.0625,0,0.875,0zm1.2188,0,1.5938,0zm1.9375,0,1.625,0zm1.9375,0,2.5938,0zm-10.219,1.995,3.2811,0zm3.6249,0,4.625,0zm4.9375,0,1.8438,0zm-9.906,2h1.5938zm1.0936,0,5.9062,0zm-1.0936,3.0372,2.0936,0zm2.4061,0,5.0625,0zm5.375,0,2.4688,0zm2.7812,0,2.3125,0zm-10.562,1.963h1.3436zm1.6874,0,2.1562,0zm2.5312,0,1.9375,0zm2.25,0,0.84375,0zm1.1875,0,1.875,0zm2.25,0,3.0938,0zm-9.9061,2.0753,3.2811,0zm3.6249,0,4.625,0zm4.9375,0,1.8438,0zm-8.562,2.925h2.0936zm2.4061,0,5.0625,0zm5.375,0,2.4688,0zm-7.7811,2,2.8749,0zm3.2186,0,1.2188,0zm1.5312,0,2.7812,0zm3.0938,0,4.0938,0zm-7.8436,2,2.8749,0zm3.2186,0,1.75,0zm2.0625,0,2.75,0zm3.0625,0,2.9688,0z" stroke="url(#linearGradient3071)" stroke-linecap="butt" stroke-width="1px" fill="none"/>
+ <path style="enable-background:accumulate;color:#000000;" d="m8.0261,29.5h-3.3605c-0.31067-0.34338-0.074432-1.0251-0.14825-1.5112v-27.322l0.043327-0.11794,0.10492-0.048698h3.3084" fill-rule="nonzero" fill="url(#radialGradient3134)"/>
+ <path opacity="0.5" stroke-linejoin="round" d="m8.5,28.5-3,0,0-27,3,0" stroke-dashoffset="0" stroke="url(#linearGradient3128)" stroke-linecap="butt" stroke-miterlimit="4" stroke-dasharray="none" stroke-width="0.99999994" fill="none"/>
+ <path opacity="0.3" stroke-linejoin="round" d="m4.5,0.49996c5.2705,0,23,0.00185,23,0.00185l0.000028,28.998h-23v-29z" stroke-dashoffset="0" stroke="#000" stroke-linecap="butt" stroke-miterlimit="4" stroke-dasharray="none" stroke-width="0.99992186" fill="none"/>
+</svg>
diff --git a/core/img/filetypes/x-office-presentation.png b/core/img/filetypes/x-office-presentation.png
new file mode 100644
index 0000000000000000000000000000000000000000..7ee552ba7c80dd6f285a4acd5b4a2cba62c140a9
Binary files /dev/null and b/core/img/filetypes/x-office-presentation.png differ
diff --git a/core/img/filetypes/x-office-presentation.svg b/core/img/filetypes/x-office-presentation.svg
new file mode 100644
index 0000000000000000000000000000000000000000..821798d50fdac40fc08e567e0d75260ec62cd1b9
--- /dev/null
+++ b/core/img/filetypes/x-office-presentation.svg
@@ -0,0 +1,109 @@
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="32" width="32" version="1.1" xmlns:cc="http://creativecommons.org/ns#" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:dc="http://purl.org/dc/elements/1.1/">
+ <defs>
+  <linearGradient id="linearGradient5060">
+   <stop stop-color="#000" offset="0"/>
+   <stop stop-color="#000" stop-opacity="0" offset="1"/>
+  </linearGradient>
+  <linearGradient id="linearGradient3012" y2="43" gradientUnits="userSpaceOnUse" x2="24" gradientTransform="matrix(0.72972916,0,0,0.56756756,-1.5145621,3.3783836)" y1="3.5542" x1="24">
+   <stop stop-color="#FFF" offset="0"/>
+   <stop stop-color="#FFF" stop-opacity="0.23529412" offset="0.11257"/>
+   <stop stop-color="#FFF" stop-opacity="0.15686275" offset="0.95056"/>
+   <stop stop-color="#FFF" stop-opacity="0.39215687" offset="1"/>
+  </linearGradient>
+  <linearGradient id="linearGradient3015" y2="47.013" gradientUnits="userSpaceOnUse" x2="25.132" gradientTransform="matrix(0.82857173,0,0,0.49975339,-3.8857226,4.2392369)" y1="0.98521" x1="25.132">
+   <stop stop-color="#f4f4f4" offset="0"/>
+   <stop stop-color="#dbdbdb" offset="1"/>
+  </linearGradient>
+  <linearGradient id="linearGradient3017" y2="2.9062" gradientUnits="userSpaceOnUse" x2="-51.786" gradientTransform="matrix(0.66906899,0,0,0.46769474,45.339917,3.6822722)" y1="50.786" x1="-51.786">
+   <stop stop-color="#a0a0a0" offset="0"/>
+   <stop stop-color="#bebebe" offset="1"/>
+  </linearGradient>
+  <radialGradient id="radialGradient3020" xlink:href="#linearGradient5060" gradientUnits="userSpaceOnUse" cy="486.65" cx="605.71" gradientTransform="matrix(0.01927775,0,0,0.0082353,17.982069,24.980564)" r="117.14"/>
+  <radialGradient id="radialGradient3023" xlink:href="#linearGradient5060" gradientUnits="userSpaceOnUse" cy="486.65" cx="605.71" gradientTransform="matrix(-0.01927775,0,0,0.0082353,14.01793,24.980564)" r="117.14"/>
+  <linearGradient id="linearGradient3026" y2="609.51" gradientUnits="userSpaceOnUse" x2="302.86" gradientTransform="matrix(0.05633135,0,0,0.0082353,-4.3597632,24.980547)" y1="366.65" x1="302.86">
+   <stop stop-color="#000" stop-opacity="0" offset="0"/>
+   <stop stop-color="#000" offset="0.5"/>
+   <stop stop-color="#000" stop-opacity="0" offset="1"/>
+  </linearGradient>
+  <linearGradient id="linearGradient3076" y2="43" gradientUnits="userSpaceOnUse" y1="5.5641" gradientTransform="matrix(0.66891892,0,0,0.56756756,-1.17905,3.378385)" x2="24" x1="24">
+   <stop stop-color="#FFF" offset="0"/>
+   <stop stop-color="#FFF" stop-opacity="0.23529412" offset="0.036262"/>
+   <stop stop-color="#FFF" stop-opacity="0.15686275" offset="0.95056"/>
+   <stop stop-color="#FFF" stop-opacity="0.39215687" offset="1"/>
+  </linearGradient>
+  <radialGradient id="radialGradient3192" gradientUnits="userSpaceOnUse" fx="7.2758" cx="7.8061" cy="9.9571" r="12.672" gradientTransform="matrix(-1.3251168e-7,3.451736,-6.6325968,-1.0361182e-7,81.872186,-26.172651)">
+   <stop stop-color="#f9c590" offset="0"/>
+   <stop stop-color="#f19860" offset="0.39698"/>
+   <stop stop-color="#ce5d36" offset="1"/>
+  </radialGradient>
+  <linearGradient id="linearGradient3194" y2="0.91791" gradientUnits="userSpaceOnUse" y1="47.935" gradientTransform="matrix(0.81962722,0,0,0.52284254,-3.8315518,5.2357996)" x2="25" x1="25">
+   <stop stop-color="#71171c" offset="0"/>
+   <stop stop-color="#ed8137" offset="1"/>
+  </linearGradient>
+  <clipPath id="clipPath3877">
+   <path style="enable-background:accumulate;color:#000000;" fill-rule="nonzero" fill="#FFF" d="m10.751-0.72642,19.105,0.025195,0,10.481-19.105-0.025202z"/>
+  </clipPath>
+  <linearGradient id="linearGradient3514" y2="25.647" gradientUnits="userSpaceOnUse" x2="22.004" gradientTransform="matrix(1.3394176,0,0,-1.9826305,-11.198083,94.86293)" y1="63.218" x1="22.004">
+   <stop stop-color="#AAA" offset="0"/>
+   <stop stop-color="#c8c8c8" offset="1"/>
+  </linearGradient>
+  <linearGradient id="linearGradient3550" y2="37.546" gradientUnits="userSpaceOnUse" x2="25.132" gradientTransform="matrix(1.081295,0,0,0.62485417,-6.1734925,-3.6471464)" y1="15.285" x1="25.132">
+   <stop stop-color="#f4f4f4" offset="0"/>
+   <stop stop-color="#dbdbdb" offset="1"/>
+  </linearGradient>
+  <linearGradient id="linearGradient3552" y2="17.555" gradientUnits="userSpaceOnUse" x2="-51.786" gradientTransform="matrix(0.87314224,0,0,0.58477041,58.066492,-4.3435334)" y1="41.798" x1="-51.786">
+   <stop stop-color="#AAA" offset="0"/>
+   <stop stop-color="#c8c8c8" offset="1"/>
+  </linearGradient>
+  <linearGradient id="linearGradient3554" y2="35.721" gradientUnits="userSpaceOnUse" x2="24" gradientTransform="matrix(1.0820661,0,0,0.61449222,-5.6480107,-2.535845)" y1="14.203" x1="24">
+   <stop stop-color="#FFF" offset="0"/>
+   <stop stop-color="#FFF" stop-opacity="0" offset="1"/>
+  </linearGradient>
+  <linearGradient id="linearGradient3556" y2="37.546" gradientUnits="userSpaceOnUse" x2="25.132" gradientTransform="matrix(1,0,0,0.9561695,-0.49905668,-2.9300489)" y1="15.285" x1="25.132">
+   <stop stop-color="#f4f4f4" offset="0"/>
+   <stop stop-color="#dbdbdb" offset="1"/>
+  </linearGradient>
+  <linearGradient id="linearGradient3558" y2="17.555" gradientUnits="userSpaceOnUse" x2="-51.786" gradientTransform="matrix(0.8074968,0,0,0.8948322,58.911175,-3.9956799)" y1="41.798" x1="-51.786">
+   <stop stop-color="#AAA" offset="0"/>
+   <stop stop-color="#c8c8c8" offset="1"/>
+  </linearGradient>
+  <linearGradient id="linearGradient3560" y2="35.721" gradientUnits="userSpaceOnUse" x2="24" gradientTransform="matrix(1.0351164,0,0,0.9866216,-0.70291674,-2.1699512)" y1="14.203" x1="24">
+   <stop stop-color="#FFF" offset="0"/>
+   <stop stop-color="#FFF" stop-opacity="0" offset="1"/>
+  </linearGradient>
+ </defs>
+ <metadata>
+  <rdf:RDF>
+   <cc:Work rdf:about="">
+    <dc:format>image/svg+xml</dc:format>
+    <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
+    <dc:title/>
+   </cc:Work>
+  </rdf:RDF>
+ </metadata>
+ <rect opacity="0.15" fill-rule="nonzero" height="2" width="27.2" y="28" x="2.4" fill="url(#linearGradient3026)"/>
+ <path opacity="0.15" d="m2.4,28v1.9999c-0.9928,0.004-2.4-0.448-2.4-1s1.1078-1,2.4-1z" fill-rule="nonzero" fill="url(#radialGradient3023)"/>
+ <path opacity="0.15" d="m29.6,28v1.9999c0.99276,0.0038,2.4-0.44808,2.4-1.0001,0-0.552-1.1078-0.99982-2.4-0.99982z" fill-rule="nonzero" fill="url(#radialGradient3020)"/>
+ <g stroke-linejoin="round" opacity="0.5" clip-path="url(#clipPath3877)" stroke-dashoffset="0" transform="matrix(1.6122259,0,0,1.1260917,-16.324081,-7.0128768)" stroke-linecap="butt" stroke-miterlimit="4">
+  <path style="enable-background:accumulate;color:#000000;" d="m13.531,7.5891,13.037,0,0,24.901-13.037,0z" fill-rule="nonzero" stroke="url(#linearGradient3558)" stroke-width="0.74210644" fill="url(#linearGradient3556)"/>
+  <path opacity="0.6" style="enable-background:accumulate;color:#000000;" d="m14.31,9.4115,11.413,0,0,22.194-11.413,0z" stroke="url(#linearGradient3560)" stroke-width="0.74210638" fill="none"/>
+ </g>
+ <g stroke-linejoin="round" stroke-dashoffset="0" transform="translate(0,1)" stroke-linecap="butt" stroke-miterlimit="4" stroke-width="0.9999218">
+  <path opacity="0.75" style="enable-background:accumulate;color:#000000;" d="m3.5,2.5,25,0.037621,0,16.962-24.859,0z" fill-rule="nonzero" stroke="url(#linearGradient3552)" fill="url(#linearGradient3550)"/>
+  <path opacity="0.45" style="enable-background:accumulate;color:#000000;" d="m4.5,3.5,23,0.016517-0.11298,14.984-22.701,0z" stroke="url(#linearGradient3554)" fill="none"/>
+ </g>
+ <path stroke-linejoin="round" d="m1.5,5.5c6.6454,0,29,0.00149,29,0.00149l0.000036,22.999h-29v-23z" stroke-dashoffset="0" stroke="url(#linearGradient3017)" stroke-linecap="butt" stroke-miterlimit="4" stroke-dasharray="none" stroke-width="0.9999218" fill="url(#linearGradient3015)"/>
+ <path stroke-linejoin="miter" d="m29.5,27.5-27,0,0-21h27z" stroke-dashoffset="0" stroke="url(#linearGradient3012)" stroke-linecap="round" stroke-miterlimit="4" stroke-dasharray="none" stroke-width="0.99999994" fill="none"/>
+ <path stroke-linejoin="round" style="enable-background:accumulate;color:#000000;" d="m6,28.5h-4.3138c-0.3495-0.27233-0.083736-0.81302-0.16678-1.1986v-21.669l0.048743-0.093529,0.11803-0.038626h4.2551" fill-rule="nonzero" stroke-dashoffset="0" stroke="url(#linearGradient3194)" stroke-linecap="butt" stroke-miterlimit="4" stroke-dasharray="none" stroke-width="1" fill="url(#radialGradient3192)"/>
+ <path opacity="0.5" stroke-linejoin="round" d="m5.5,27.5-3,0,0-21,3,0" stroke-dashoffset="0" stroke="url(#linearGradient3076)" stroke-linecap="round" stroke-miterlimit="4" stroke-dasharray="none" stroke-width="0.99999994" fill="none"/>
+ <path stroke-linejoin="miter" d="m11,8.5,4,0" stroke="#AAA" stroke-linecap="butt" stroke-width="1px" fill="none"/>
+ <path stroke-linejoin="miter" d="m16,8.5,2,0" stroke="#AAA" stroke-linecap="butt" stroke-width="1px" fill="none"/>
+ <path stroke-linejoin="miter" d="m19,8.5,1,0" stroke="#AAA" stroke-linecap="butt" stroke-width="1px" fill="none"/>
+ <path stroke-linejoin="miter" d="m21,8.5,2,0" stroke="#AAA" stroke-linecap="butt" stroke-width="1px" fill="none"/>
+ <g transform="matrix(1.1415362,0,0,1.1415362,-13.519352,-19.587007)" fill-rule="nonzero">
+  <path opacity="0.4" style="enable-background:accumulate;color:#000000;" d="m34.75,25.813a3.8795,3.8795,0,1,1,-2.0522,-3.4222l-1.8273,3.4222z" transform="matrix(1.57008,0,0,1.57008,-16.477866,-6.8527053)" fill="#FFF"/>
+  <path opacity="0.15" style="enable-background:accumulate;color:#000000;" d="m34.75,25.813a3.8795,3.8795,0,1,1,-2.0522,-3.4222l-1.8273,3.4222z" transform="matrix(1.57008,0,0,1.57008,-16.477866,-7.6014805)" fill="#000"/>
+ </g>
+ <path style="baseline-shift:baseline;block-progression:tb;color:#000000;direction:ltr;text-indent:0;text-align:start;enable-background:accumulate;text-transform:none;" fill="url(#linearGradient3514)" d="m7.1562,25,0-1,2.2188,0,0,1zm2.6562,0,0-1,6.3438,0,0,1zm-2.6562-4,0-1,2.9688,0,0,1zm3.7188,0,0-1,2.3438,0,0,1zm2.9375,0,0-1,1.1875,0,0,1zm-6.6562-4,0-1,3.2812,0,0,1zm3.875,0,0-1,1.6562,0,0,1zm2.2188,0,0-1,1.75,0,0,1zm-6.0938-4,0-1,3.2812,0,0,1zm3.9062,0,0-1,2.3438,0,0,1z"/>
+</svg>
diff --git a/core/img/filetypes/x-office-spreadsheet.png b/core/img/filetypes/x-office-spreadsheet.png
new file mode 100644
index 0000000000000000000000000000000000000000..dfdc74a8bf660ebd02baa99b0cf40d48478dd032
Binary files /dev/null and b/core/img/filetypes/x-office-spreadsheet.png differ
diff --git a/core/img/filetypes/x-office-spreadsheet.svg b/core/img/filetypes/x-office-spreadsheet.svg
new file mode 100644
index 0000000000000000000000000000000000000000..af40bb252a2035c8cbe08aae5c9297e02087fa0b
--- /dev/null
+++ b/core/img/filetypes/x-office-spreadsheet.svg
@@ -0,0 +1,64 @@
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="32px" width="32px" version="1.1" xmlns:cc="http://creativecommons.org/ns#" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:dc="http://purl.org/dc/elements/1.1/">
+ <defs>
+  <linearGradient id="linearGradient3119" y2="43" gradientUnits="userSpaceOnUse" x2="24" gradientTransform="matrix(0.56756757,0,0,0.72972971,2.378382,-2.5135063)" y1="5.5641" x1="24">
+   <stop stop-color="#FFF" offset="0"/>
+   <stop stop-color="#FFF" stop-opacity="0.23529412" offset="0.036262"/>
+   <stop stop-color="#FFF" stop-opacity="0.15686275" offset="0.95056"/>
+   <stop stop-color="#FFF" stop-opacity="0.39215687" offset="1"/>
+  </linearGradient>
+  <linearGradient id="linearGradient3122" y2="47.013" gradientUnits="userSpaceOnUse" x2="25.132" gradientTransform="matrix(0.65714319,0,0,0.63012397,0.228556,-1.0896478)" y1="0.98521" x1="25.132">
+   <stop stop-color="#f4f4f4" offset="0"/>
+   <stop stop-color="#dbdbdb" offset="1"/>
+  </linearGradient>
+  <linearGradient id="linearGradient3124" y2="2.9062" gradientUnits="userSpaceOnUse" x2="-51.786" gradientTransform="matrix(0.53064102,0,0,0.58970216,39.269585,-1.7919079)" y1="50.786" x1="-51.786">
+   <stop stop-color="#a0a0a0" offset="0"/>
+   <stop stop-color="#bebebe" offset="1"/>
+  </linearGradient>
+  <radialGradient id="radialGradient3045" xlink:href="#linearGradient5060" gradientUnits="userSpaceOnUse" cy="486.65" cx="605.71" gradientTransform="matrix(0.01566318,0,0,0.00823529,17.610433,25.980565)" r="117.14"/>
+  <linearGradient id="linearGradient5060">
+   <stop stop-color="#000" offset="0"/>
+   <stop stop-color="#000" stop-opacity="0" offset="1"/>
+  </linearGradient>
+  <radialGradient id="radialGradient3048" xlink:href="#linearGradient5060" gradientUnits="userSpaceOnUse" cy="486.65" cx="605.71" gradientTransform="matrix(-0.01566318,0,0,0.00823529,14.389566,25.980565)" r="117.14"/>
+  <linearGradient id="linearGradient3180" y2="609.51" gradientUnits="userSpaceOnUse" y1="366.65" gradientTransform="matrix(0.04576928,0,0,0.00823529,-0.5423243,25.980548)" x2="302.86" x1="302.86">
+   <stop stop-color="#000" stop-opacity="0" offset="0"/>
+   <stop stop-color="#000" offset="0.5"/>
+   <stop stop-color="#000" stop-opacity="0" offset="1"/>
+  </linearGradient>
+  <linearGradient id="linearGradient3522">
+   <stop stop-color="#a3c0d0" offset="0"/>
+   <stop stop-color="#5a8caa" offset="1"/>
+  </linearGradient>
+  <linearGradient id="linearGradient3160" y2="46.562" xlink:href="#linearGradient3522" gradientUnits="userSpaceOnUse" x2="19.515" gradientTransform="matrix(0.66297508,0,0,0.5353155,-0.83152673,1.3896027)" y1="12.443" x1="19.515"/>
+  <linearGradient id="linearGradient3163" y2="46.562" xlink:href="#linearGradient3522" gradientUnits="userSpaceOnUse" x2="19.515" gradientTransform="matrix(0.5348003,0,0,0.65679881,2.2155346,-0.57397791)" y1="12.443" x1="19.515"/>
+ </defs>
+ <metadata>
+  <rdf:RDF>
+   <cc:Work rdf:about="">
+    <dc:format>image/svg+xml</dc:format>
+    <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
+    <dc:title/>
+   </cc:Work>
+  </rdf:RDF>
+ </metadata>
+ <rect opacity="0.15" fill-rule="nonzero" height="2" width="22.1" y="29" x="4.95" fill="url(#linearGradient3180)"/>
+ <path opacity="0.15" d="m4.95,29v1.9999c-0.80662,0.0038-1.95-0.44807-1.95-1.0001,0-0.552,0.90012-0.99982,1.95-0.99982z" fill-rule="nonzero" fill="url(#radialGradient3048)"/>
+ <path opacity="0.15" d="m27.05,29v1.9999c0.80661,0.0038,1.95-0.44807,1.95-1.0001,0-0.552-0.90012-0.99982-1.95-0.99982z" fill-rule="nonzero" fill="url(#radialGradient3045)"/>
+ <path stroke-linejoin="round" d="m4.5,0.49996c5.2705,0,23,0.00185,23,0.00185l0.000028,28.998h-23v-29z" stroke-dashoffset="0" stroke="url(#linearGradient3124)" stroke-linecap="butt" stroke-miterlimit="4" stroke-dasharray="none" stroke-width="0.99992186" fill="url(#linearGradient3122)"/>
+ <path stroke-linejoin="round" d="m26.5,28.5-21,0,0-27,21,0z" stroke-dashoffset="0" stroke="url(#linearGradient3119)" stroke-linecap="round" stroke-miterlimit="4" stroke-dasharray="none" stroke-width="0.99999994" fill="none"/>
+ <path d="m8.5605,7.7356,3.0828,0,0,17.645-3.0828,0,0-17.645z" fill="url(#linearGradient3163)"/>
+ <path d="m11,6,12.036,0,0,2-12.036,0,0-2z" fill="url(#linearGradient3160)"/>
+ <rect height="2.0746" width="3.0786" y="5.9254" x="8.0005" fill="#c0d4df"/>
+ <path stroke-linejoin="miter" d="m15.5,5.5,0,20" stroke-opacity="0.3241762" stroke="#2c465d" stroke-linecap="butt" stroke-miterlimit="4" stroke-dasharray="none" stroke-width="0.99999994" fill="none"/>
+ <path stroke-linejoin="miter" d="m23.333,8.5-14.667,0" stroke="#6c6c6c" stroke-linecap="butt" stroke-miterlimit="4" stroke-dasharray="none" stroke-width="1" fill="none"/>
+ <path stroke-linejoin="miter" d="m23.334,10.5-14.667,0" stroke-opacity="0.3241762" stroke="#2c465d" stroke-linecap="butt" stroke-miterlimit="4" stroke-dasharray="none" stroke-width="0.99999994" fill="none"/>
+ <path stroke-linejoin="miter" d="m23.5,13.5-15,0" stroke-opacity="0.3241762" stroke="#2c465d" stroke-linecap="butt" stroke-miterlimit="4" stroke-dasharray="none" stroke-width="0.99999994" fill="none"/>
+ <path stroke-linejoin="miter" d="m23.5,16.5-15,0" stroke-opacity="0.3241762" stroke="#2c465d" stroke-linecap="butt" stroke-miterlimit="4" stroke-dasharray="none" stroke-width="0.99999994" fill="none"/>
+ <path stroke-linejoin="miter" d="m23.5,19.5-15,0" stroke-opacity="0.3241762" stroke="#2c465d" stroke-linecap="butt" stroke-miterlimit="4" stroke-dasharray="none" stroke-width="0.99999994" fill="none"/>
+ <path opacity="0.2" stroke-linejoin="round" d="M8.5005,6.5093,22.447,6.4907" fill-rule="evenodd" stroke="#FFF" stroke-linecap="square" stroke-miterlimit="4" stroke-dasharray="none" stroke-width="1" fill="#FFF"/>
+ <path stroke-linejoin="miter" d="m11.5,5.5,0,20" stroke="#6c6c6c" stroke-linecap="butt" stroke-miterlimit="4" stroke-dasharray="none" stroke-width="0.99999994" fill="none"/>
+ <rect stroke-linejoin="miter" stroke-dasharray="none" stroke-dashoffset="0" height="19.998" width="14.998" stroke="#6c6c6c" stroke-linecap="square" stroke-miterlimit="4" y="5.5011" x="8.5011" stroke-width="1.0022" fill="none"/>
+ <path stroke-linejoin="miter" d="m23.5,22.5-15,0" stroke-opacity="0.3241762" stroke="#2c465d" stroke-linecap="butt" stroke-miterlimit="4" stroke-dasharray="none" stroke-width="0.99999994" fill="none"/>
+ <path stroke-linejoin="miter" d="m19.5,5.5,0,20" stroke-opacity="0.3241762" stroke="#2c465d" stroke-linecap="butt" stroke-miterlimit="4" stroke-dasharray="none" stroke-width="0.99999994" fill="none"/>
+</svg>
diff --git a/core/routes.php b/core/routes.php
index dd8222d4378e5d3c1c0538624801e437f39df530..f0f8ce571e22834d915081bef33aca5b41a8a58b 100644
--- a/core/routes.php
+++ b/core/routes.php
@@ -42,7 +42,8 @@ $this->create('js_config', '/core/js/config.js')
 // Routing
 $this->create('core_ajax_routes', '/core/routes.json')
 	->action('OC_Router', 'JSRoutes');
-
+$this->create('core_ajax_preview', '/core/preview.png')
+	->actionInclude('core/ajax/preview.php');
 OC::$CLASSPATH['OC_Core_LostPassword_Controller'] = 'core/lostpassword/controller.php';
 $this->create('core_lostpassword_index', '/lostpassword/')
 	->get()
diff --git a/db_structure.xml b/db_structure.xml
index f926ab44cd4064d466e033a336c9b31d96e7d71d..24742c242ee3e724debbc5f0d884f20d90e1536c 100644
--- a/db_structure.xml
+++ b/db_structure.xml
@@ -383,7 +383,7 @@
 				<name>user</name>
 				<type>text</type>
 				<default></default>
-				<notnull>true</notnull>
+				<notnull>false</notnull>
 				<length>64</length>
 			</field>
 
@@ -397,8 +397,6 @@
 
 			<index>
 				<name>id_user_index</name>
-				<unique>true</unique>
-				<primary>true</primary>
 				<field>
 					<name>fileid</name>
 					<sorting>ascending</sorting>
diff --git a/lib/base.php b/lib/base.php
index ef95909a311c3e5a10247f1f2abe05d66308f8fc..b5c12a683ffde21e39359ac313015630b8a7a09d 100644
--- a/lib/base.php
+++ b/lib/base.php
@@ -492,6 +492,7 @@ class OC {
 
 		self::registerCacheHooks();
 		self::registerFilesystemHooks();
+		self::registerPreviewHooks();
 		self::registerShareHooks();
 		self::registerLogRotate();
 
@@ -579,6 +580,14 @@ class OC {
 		OC_Hook::connect('OC_Filesystem', 'rename', 'OC_Filesystem', 'isBlacklisted');
 	}
 
+	/**
+	 * register hooks for previews
+	 */
+	public static function registerPreviewHooks() {
+		OC_Hook::connect('OC_Filesystem', 'post_write', 'OC\Preview', 'post_write');
+		OC_Hook::connect('OC_Filesystem', 'delete', 'OC\Preview', 'post_delete');
+	}
+
 	/**
 	 * register hooks for sharing
 	 */
diff --git a/lib/helper.php b/lib/helper.php
index cfb29028ee3e68ef78db2a5276a7260c939f1bd5..5fb8fed3459570aa43ce5688d72d90d86f671e3c 100644
--- a/lib/helper.php
+++ b/lib/helper.php
@@ -185,7 +185,38 @@ class OC_Helper {
 	 * Returns the path to the image of this file type.
 	 */
 	public static function mimetypeIcon($mimetype) {
-		$alias = array('application/xml' => 'code/xml');
+		$alias = array(
+			'application/xml' => 'code/xml',
+			'application/msword' => 'x-office/document',
+			'application/vnd.openxmlformats-officedocument.wordprocessingml.document' => 'x-office/document',
+			'application/vnd.openxmlformats-officedocument.wordprocessingml.template' => 'x-office/document',
+			'application/vnd.ms-word.document.macroEnabled.12' => 'x-office/document',
+			'application/vnd.ms-word.template.macroEnabled.12' => 'x-office/document',
+			'application/vnd.oasis.opendocument.text' => 'x-office/document',
+			'application/vnd.oasis.opendocument.text-template' => 'x-office/document',
+			'application/vnd.oasis.opendocument.text-web' => 'x-office/document',
+			'application/vnd.oasis.opendocument.text-master' => 'x-office/document',
+			'application/vnd.ms-powerpoint' => 'x-office/presentation',
+			'application/vnd.openxmlformats-officedocument.presentationml.presentation' => 'x-office/presentation',
+			'application/vnd.openxmlformats-officedocument.presentationml.template' => 'x-office/presentation',
+			'application/vnd.openxmlformats-officedocument.presentationml.slideshow' => 'x-office/presentation',
+			'application/vnd.ms-powerpoint.addin.macroEnabled.12' => 'x-office/presentation',
+			'application/vnd.ms-powerpoint.presentation.macroEnabled.12' => 'x-office/presentation',
+			'application/vnd.ms-powerpoint.template.macroEnabled.12' => 'x-office/presentation',
+			'application/vnd.ms-powerpoint.slideshow.macroEnabled.12' => 'x-office/presentation',
+			'application/vnd.oasis.opendocument.presentation' => 'x-office/presentation',
+			'application/vnd.oasis.opendocument.presentation-template' => 'x-office/presentation',
+			'application/vnd.ms-excel' => 'x-office/spreadsheet',
+			'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' => 'x-office/spreadsheet',
+			'application/vnd.openxmlformats-officedocument.spreadsheetml.template' => 'x-office/spreadsheet',
+			'application/vnd.ms-excel.sheet.macroEnabled.12' => 'x-office/spreadsheet',
+			'application/vnd.ms-excel.template.macroEnabled.12' => 'x-office/spreadsheet',
+			'application/vnd.ms-excel.addin.macroEnabled.12' => 'x-office/spreadsheet',
+			'application/vnd.ms-excel.sheet.binary.macroEnabled.12' => 'x-office/spreadsheet',
+			'application/vnd.oasis.opendocument.spreadsheet' => 'x-office/spreadsheet',
+			'application/vnd.oasis.opendocument.spreadsheet-template' => 'x-office/spreadsheet',
+		);
+
 		if (isset($alias[$mimetype])) {
 			$mimetype = $alias[$mimetype];
 		}
@@ -219,6 +250,21 @@ class OC_Helper {
 		}
 	}
 
+	/**
+	 * @brief get path to preview of file
+	 * @param string $path path
+	 * @return string the url
+	 *
+	 * Returns the path to the preview of the file.
+	 */
+	public static function previewIcon($path) {
+		return self::linkToRoute( 'core_ajax_preview', array('x' => 36, 'y' => 36, 'file' => urlencode($path) ));
+	}
+
+	public static function publicPreviewIcon( $path, $token ) {
+		return self::linkToRoute( 'core_ajax_public_preview', array('x' => 36, 'y' => 36, 'file' => urlencode($path), 't' => $token));
+	}
+
 	/**
 	 * @brief Make a human file size
 	 * @param int $bytes file size in bytes
diff --git a/lib/image.php b/lib/image.php
index 4bc38e20e56898f751d9463e13072653dd9aa767..840b744ad723f8f4036f955e279b3f2e04f15f22 100644
--- a/lib/image.php
+++ b/lib/image.php
@@ -496,6 +496,11 @@ class OC_Image {
 			return false;
 		}
 		$this->resource = @imagecreatefromstring($str);
+		if(is_resource($this->resource)) {
+			imagealphablending($this->resource, false);
+			imagesavealpha($this->resource, true);
+		}
+
 		if(!$this->resource) {
 			OC_Log::write('core', 'OC_Image->loadFromData, couldn\'t load', OC_Log::DEBUG);
 			return false;
diff --git a/lib/preview.php b/lib/preview.php
new file mode 100755
index 0000000000000000000000000000000000000000..b40ba191fbae27eb1b36444bc29eea543038568d
--- /dev/null
+++ b/lib/preview.php
@@ -0,0 +1,627 @@
+<?php
+/**
+ * Copyright (c) 2013 Frank Karlitschek frank@owncloud.org
+ * Copyright (c) 2013 Georg Ehrke georg@ownCloud.com
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ *
+ * Thumbnails:
+ * structure of filename:
+ * /data/user/thumbnails/pathhash/x-y.png
+ * 
+ */
+namespace OC;
+
+require_once 'preview/image.php';
+require_once 'preview/movies.php';
+require_once 'preview/mp3.php';
+require_once 'preview/pdf.php';
+require_once 'preview/svg.php';
+require_once 'preview/txt.php';
+require_once 'preview/unknown.php';
+require_once 'preview/office.php';
+
+class Preview {
+	//the thumbnail folder
+	const THUMBNAILS_FOLDER = 'thumbnails';
+
+	//config
+	private $maxScaleFactor;
+	private $configMaxX;
+	private $configMaxY;
+
+	//fileview object
+	private $fileView = null;
+	private $userView = null;
+
+	//vars
+	private $file;
+	private $maxX;
+	private $maxY;
+	private $scalingup;
+
+	//preview images object
+	private $preview;
+
+	//preview providers
+	static private $providers = array();
+	static private $registeredProviders = array();
+
+	/**
+	 * @brief check if thumbnail or bigger version of thumbnail of file is cached
+	 * @param string $user userid - if no user is given, OC_User::getUser will be used
+	 * @param string $root path of root
+	 * @param string $file The path to the file where you want a thumbnail from
+	 * @param int $maxX The maximum X size of the thumbnail. It can be smaller depending on the shape of the image
+	 * @param int $maxY The maximum Y size of the thumbnail. It can be smaller depending on the shape of the image
+	 * @param bool $scalingUp Disable/Enable upscaling of previews
+	 * @return mixed (bool / string) 
+	 *					false if thumbnail does not exist
+	 *					path to thumbnail if thumbnail exists
+	*/
+	public function __construct($user='', $root='/', $file='', $maxX=1, $maxY=1, $scalingUp=true) {
+		//set config
+		$this->configMaxX = \OC_Config::getValue('preview_max_x', null);
+		$this->configMaxY = \OC_Config::getValue('preview_max_y', null);
+		$this->maxScaleFactor = \OC_Config::getValue('preview_max_scale_factor', 2);
+
+		//save parameters
+		$this->setFile($file);
+		$this->setMaxX($maxX);
+		$this->setMaxY($maxY);
+		$this->setScalingUp($scalingUp);
+
+		//init fileviews
+		if($user === ''){
+			$user = \OC_User::getUser();
+		}
+		$this->fileView = new \OC\Files\View('/' . $user . '/' . $root);
+		$this->userView = new \OC\Files\View('/' . $user);
+		
+		$this->preview = null;
+
+		//check if there are preview backends
+		if(empty(self::$providers)) {
+			self::initProviders();
+		}
+
+		if(empty(self::$providers)) {
+			\OC_Log::write('core', 'No preview providers exist', \OC_Log::ERROR);
+			throw new \Exception('No preview providers');
+		}
+	}
+
+	/**
+	 * @brief returns the path of the file you want a thumbnail from
+	 * @return string
+	*/
+	public function	getFile() {
+		return $this->file;
+	}
+
+	/**
+	 * @brief returns the max width of the preview
+	 * @return integer
+	*/
+	public function getMaxX() {
+		return $this->maxX;
+	}
+
+	/**
+	 * @brief returns the max height of the preview
+	 * @return integer
+	*/
+	public function getMaxY() {
+		return $this->maxY;
+	}
+
+	/**
+	 * @brief returns whether or not scalingup is enabled
+	 * @return bool
+	*/
+	public function getScalingUp() {
+		return $this->scalingup;
+	}
+
+	/**
+	 * @brief returns the name of the thumbnailfolder
+	 * @return string
+	*/
+	public function getThumbnailsFolder() {
+		return self::THUMBNAILS_FOLDER;
+	}
+
+	/**
+	 * @brief returns the max scale factor
+	 * @return integer
+	*/
+	public function getMaxScaleFactor() {
+		return $this->maxScaleFactor;
+	}
+
+	/**
+	 * @brief returns the max width set in ownCloud's config
+	 * @return integer
+	*/
+	public function getConfigMaxX() {
+		return $this->configMaxX;
+	}
+
+	/**
+	 * @brief returns the max height set in ownCloud's config
+	 * @return integer
+	*/
+	public function getConfigMaxY() {
+		return $this->configMaxY;
+	}
+
+	/**
+	 * @brief set the path of the file you want a thumbnail from
+	 * @param string $file
+	 * @return $this
+	*/
+	public function setFile($file) {
+		$this->file = $file;
+		return $this;
+	}
+
+	/**
+	 * @brief set the the max width of the preview
+	 * @param int $maxX
+	 * @return $this
+	*/
+	public function setMaxX($maxX=1) {
+		if($maxX <= 0) {
+			throw new \Exception('Cannot set width of 0 or smaller!');
+		}
+		$configMaxX = $this->getConfigMaxX();
+		if(!is_null($configMaxX)) {
+			if($maxX > $configMaxX) {
+				\OC_Log::write('core', 'maxX reduced from ' . $maxX . ' to ' . $configMaxX, \OC_Log::DEBUG);
+				$maxX = $configMaxX;
+			}
+		}
+		$this->maxX = $maxX;
+		return $this;
+	}
+
+	/**
+	 * @brief set the the max height of the preview
+	 * @param int $maxY
+	 * @return $this
+	*/
+	public function setMaxY($maxY=1) {
+		if($maxY <= 0) {
+			throw new \Exception('Cannot set height of 0 or smaller!');
+		}
+		$configMaxY = $this->getConfigMaxY();
+		if(!is_null($configMaxY)) {
+			if($maxY > $configMaxY) {
+				\OC_Log::write('core', 'maxX reduced from ' . $maxY . ' to ' . $configMaxY, \OC_Log::DEBUG);
+				$maxY = $configMaxY;
+			}
+		}
+		$this->maxY = $maxY;
+		return $this;
+	}
+
+	/**
+	 * @brief set whether or not scalingup is enabled
+	 * @param bool $scalingUp
+	 * @return $this
+	*/
+	public function setScalingup($scalingUp) {
+		if($this->getMaxScaleFactor() === 1) {
+			$scalingUp = false;
+		}
+		$this->scalingup = $scalingUp;
+		return $this;
+	}
+
+	/**
+	 * @brief check if all parameters are valid
+	 * @return bool
+	*/
+	public function isFileValid() {
+		$file = $this->getFile();
+		if($file === '') {
+			\OC_Log::write('core', 'No filename passed', \OC_Log::DEBUG);
+			return false;
+		}
+
+		if(!$this->fileView->file_exists($file)) {
+			\OC_Log::write('core', 'File:"' . $file . '" not found', \OC_Log::DEBUG);
+			return false;
+		}
+
+		return true;
+	}
+
+	/**
+	 * @brief deletes previews of a file with specific x and y
+	 * @return bool
+	*/
+	public function deletePreview() {
+		$file = $this->getFile();
+
+		$fileInfo = $this->fileView->getFileInfo($file);
+		$fileId = $fileInfo['fileid'];
+
+		$previewPath = $this->getThumbnailsFolder() . '/' . $fileId . '/' . $this->getMaxX() . '-' . $this->getMaxY() . '.png';
+		$this->userView->unlink($previewPath);
+		return !$this->userView->file_exists($previewPath);
+	}
+
+	/**
+	 * @brief deletes all previews of a file
+	 * @return bool
+	*/
+	public function deleteAllPreviews() {
+		$file = $this->getFile();
+
+		$fileInfo = $this->fileView->getFileInfo($file);
+		$fileId = $fileInfo['fileid'];
+		
+		$previewPath = $this->getThumbnailsFolder() . '/' . $fileId . '/';
+		$this->userView->deleteAll($previewPath);
+		$this->userView->rmdir($previewPath);
+		return !$this->userView->is_dir($previewPath);
+	}
+
+	/**
+	 * @brief check if thumbnail or bigger version of thumbnail of file is cached
+	 * @return mixed (bool / string) 
+	 *				false if thumbnail does not exist
+	 *				path to thumbnail if thumbnail exists
+	*/
+	private function isCached() {
+		$file = $this->getFile();
+		$maxX = $this->getMaxX();
+		$maxY = $this->getMaxY();
+		$scalingUp = $this->getScalingUp();
+		$maxScaleFactor = $this->getMaxScaleFactor();
+
+		$fileInfo = $this->fileView->getFileInfo($file);
+		$fileId = $fileInfo['fileid'];
+
+		if(is_null($fileId)) {
+			return false;
+		}
+
+		$previewPath = $this->getThumbnailsFolder() . '/' . $fileId . '/';
+		if(!$this->userView->is_dir($previewPath)) {
+			return false;
+		}
+
+		//does a preview with the wanted height and width already exist?
+		if($this->userView->file_exists($previewPath . $maxX . '-' . $maxY . '.png')) {
+			return $previewPath . $maxX . '-' . $maxY . '.png';
+		}
+
+		$wantedAspectRatio = (float) ($maxX / $maxY);
+
+		//array for usable cached thumbnails
+		$possibleThumbnails = array();
+
+		$allThumbnails = $this->userView->getDirectoryContent($previewPath);
+		foreach($allThumbnails as $thumbnail) {
+			$name = rtrim($thumbnail['name'], '.png');
+			$size = explode('-', $name);
+			$x = (int) $size[0];
+			$y = (int) $size[1];
+
+			$aspectRatio = (float) ($x / $y);
+			if($aspectRatio !== $wantedAspectRatio) {
+				continue;
+			}
+
+			if($x < $maxX || $y < $maxY) {
+				if($scalingUp) {
+					$scalefactor = $maxX / $x;
+					if($scalefactor > $maxScaleFactor) {
+						continue;
+					}
+				}else{
+					continue;
+				}
+			}
+			$possibleThumbnails[$x] = $thumbnail['path'];
+		}
+
+		if(count($possibleThumbnails) === 0) {
+			return false;
+		}
+
+		if(count($possibleThumbnails) === 1) {
+			return current($possibleThumbnails);
+		}
+
+		ksort($possibleThumbnails);
+
+		if(key(reset($possibleThumbnails)) > $maxX) {
+			return current(reset($possibleThumbnails));
+		}
+
+		if(key(end($possibleThumbnails)) < $maxX) {
+			return current(end($possibleThumbnails));
+		}
+
+		foreach($possibleThumbnails as $width => $path) {
+			if($width < $maxX) {
+				continue;
+			}else{
+				return $path;
+			}
+		}
+	}
+
+	/**
+	 * @brief return a preview of a file
+	 * @return \OC_Image
+	*/
+	public function getPreview() {
+		if(!is_null($this->preview) && $this->preview->valid()){
+			return $this->preview;
+		}
+
+		$this->preview = null;
+		$file = $this->getFile();
+		$maxX = $this->getMaxX();
+		$maxY = $this->getMaxY();
+		$scalingUp = $this->getScalingUp();
+
+		$fileInfo = $this->fileView->getFileInfo($file);
+		$fileId = $fileInfo['fileid'];
+
+		$cached = $this->isCached();
+
+		if($cached) {
+			$image = new \OC_Image($this->userView->file_get_contents($cached, 'r'));
+			$this->preview = $image->valid() ? $image : null;
+			$this->resizeAndCrop();
+		}
+
+		if(is_null($this->preview)) {
+			$mimetype = $this->fileView->getMimeType($file);
+			$preview = null;
+
+			foreach(self::$providers as $supportedMimetype => $provider) {
+				if(!preg_match($supportedMimetype, $mimetype)) {
+					continue;
+				}
+
+				\OC_Log::write('core', 'Generating preview for "' . $file . '" with "' . get_class($provider) . '"', \OC_Log::DEBUG);
+
+				$preview = $provider->getThumbnail($file, $maxX, $maxY, $scalingUp, $this->fileView);
+
+				if(!($preview instanceof \OC_Image)) {
+					continue;
+				}
+
+				$this->preview = $preview;
+				$this->resizeAndCrop();
+
+				$previewPath = $this->getThumbnailsFolder() . '/' . $fileId . '/';
+				$cachePath = $previewPath . $maxX . '-' . $maxY . '.png';
+
+				if($this->userView->is_dir($this->getThumbnailsFolder() . '/') === false) {
+					$this->userView->mkdir($this->getThumbnailsFolder() . '/');
+				}
+
+				if($this->userView->is_dir($previewPath) === false) {
+					$this->userView->mkdir($previewPath);
+				}
+
+				$this->userView->file_put_contents($cachePath, $preview->data());
+
+				break;
+			}
+		}
+
+		if(is_null($this->preview)) {
+			$this->preview = new \OC_Image();
+		}
+
+		return $this->preview;
+	}
+
+	/**
+	 * @brief show preview
+	 * @return void
+	*/
+	public function showPreview() {
+		\OCP\Response::enableCaching(3600 * 24); // 24 hours
+		if(is_null($this->preview)) {
+			$this->getPreview();
+		}
+		$this->preview->show();
+		return;
+	}
+
+	/**
+	 * @brief show preview
+	 * @return void
+	*/
+	public function show() {
+		$this->showPreview();
+		return;
+	}
+
+	/**
+	 * @brief resize, crop and fix orientation
+	 * @return void
+	*/
+	private function resizeAndCrop() {
+		$image = $this->preview;
+		$x = $this->getMaxX();
+		$y = $this->getMaxY();
+		$scalingUp = $this->getScalingUp();
+		$maxscalefactor = $this->getMaxScaleFactor();
+
+		if(!($image instanceof \OC_Image)) {
+			\OC_Log::write('core', '$this->preview is not an instance of OC_Image', \OC_Log::DEBUG);
+			return;
+		}
+
+		$image->fixOrientation();
+
+		$realx = (int) $image->width();
+		$realy = (int) $image->height();
+
+		if($x === $realx && $y === $realy) {
+			$this->preview = $image;
+			return;
+		}
+
+		$factorX = $x / $realx;
+		$factorY = $y / $realy;
+
+		if($factorX >= $factorY) {
+			$factor = $factorX;
+		}else{
+			$factor = $factorY;
+		}
+
+		if($scalingUp === false) {
+			if($factor > 1) {
+				$factor = 1;
+			}
+		}
+
+		if(!is_null($maxscalefactor)) {
+			if($factor > $maxscalefactor) {
+				\OC_Log::write('core', 'scalefactor reduced from ' . $factor . ' to ' . $maxscalefactor, \OC_Log::DEBUG);
+				$factor = $maxscalefactor;
+			}
+		}
+
+		$newXsize = (int) ($realx * $factor);
+		$newYsize = (int) ($realy * $factor);
+
+		$image->preciseResize($newXsize, $newYsize);
+
+		if($newXsize === $x && $newYsize === $y) {
+			$this->preview = $image;
+			return;
+		}
+
+		if($newXsize >= $x && $newYsize >= $y) {
+			$cropX = floor(abs($x - $newXsize) * 0.5);
+			//don't crop previews on the Y axis, this sucks if it's a document.
+			//$cropY = floor(abs($y - $newYsize) * 0.5);
+			$cropY = 0;
+
+			$image->crop($cropX, $cropY, $x, $y);
+			
+			$this->preview = $image;
+			return;
+		}
+
+		if($newXsize < $x || $newYsize < $y) {
+			if($newXsize > $x) {
+				$cropX = floor(($newXsize - $x) * 0.5);
+				$image->crop($cropX, 0, $x, $newYsize);
+			}
+
+			if($newYsize > $y) {
+				$cropY = floor(($newYsize - $y) * 0.5);
+				$image->crop(0, $cropY, $newXsize, $y);
+			}
+
+			$newXsize = (int) $image->width();
+			$newYsize = (int) $image->height();
+
+			//create transparent background layer
+			$backgroundlayer = imagecreatetruecolor($x, $y);
+			$white = imagecolorallocate($backgroundlayer, 255, 255, 255);
+			imagefill($backgroundlayer, 0, 0, $white);
+
+			$image = $image->resource();
+
+			$mergeX = floor(abs($x - $newXsize) * 0.5);
+			$mergeY = floor(abs($y - $newYsize) * 0.5);
+
+			imagecopy($backgroundlayer, $image, $mergeX, $mergeY, 0, 0, $newXsize, $newYsize);
+
+			//$black = imagecolorallocate(0,0,0);
+			//imagecolortransparent($transparentlayer, $black);
+
+			$image = new \OC_Image($backgroundlayer);
+
+			$this->preview = $image;
+			return;
+		}
+	}
+
+	/**
+	 * @brief register a new preview provider to be used
+	 * @param string $provider class name of a Preview_Provider
+	 * @param array $options
+	 * @return void
+	 */
+	public static function registerProvider($class, $options=array()) {
+		self::$registeredProviders[]=array('class'=>$class, 'options'=>$options);
+	}
+
+	/**
+	 * @brief create instances of all the registered preview providers
+	 * @return void
+	 */
+	private static function initProviders() {
+		if(!\OC_Config::getValue('enable_previews', true)) {
+			$provider = new Preview\Unknown(array());
+			self::$providers = array($provider->getMimeType() => $provider);
+			return;
+		}
+
+		if(count(self::$providers)>0) {
+			return;
+		}
+
+		foreach(self::$registeredProviders as $provider) {
+			$class=$provider['class'];
+			$options=$provider['options'];
+
+			$object = new $class($options);
+
+			self::$providers[$object->getMimeType()] = $object;
+		}
+
+		$keys = array_map('strlen', array_keys(self::$providers));
+		array_multisort($keys, SORT_DESC, self::$providers);
+	}
+
+	public static function post_write($args) {
+		self::post_delete($args);
+	}
+	
+	public static function post_delete($args) {
+		$path = $args['path'];
+		if(substr($path, 0, 1) === '/') {
+			$path = substr($path, 1);
+		}
+		$preview = new Preview(\OC_User::getUser(), 'files/', $path);
+		$preview->deleteAllPreviews();
+	}
+
+	public static function isMimeSupported($mimetype) {
+		if(!\OC_Config::getValue('enable_previews', true)) {
+			return false;
+		}
+
+		//check if there are preview backends
+		if(empty(self::$providers)) {
+			self::initProviders();
+		}
+
+		//remove last element because it has the mimetype *
+		$providers = array_slice(self::$providers, 0, -1);
+		foreach($providers as $supportedMimetype => $provider) {
+			if(preg_match($supportedMimetype, $mimetype)) {
+				return true;
+			}
+		}
+		return false;
+	}
+}
\ No newline at end of file
diff --git a/lib/preview/image.php b/lib/preview/image.php
new file mode 100644
index 0000000000000000000000000000000000000000..9aec967282d5768c29941ec4367da06a73c825a0
--- /dev/null
+++ b/lib/preview/image.php
@@ -0,0 +1,36 @@
+<?php
+/**
+ * Copyright (c) 2013 Frank Karlitschek frank@owncloud.org
+ * Copyright (c) 2013 Georg Ehrke georg@ownCloud.com
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+namespace OC\Preview;
+
+class Image extends Provider {
+
+	public function getMimeType() {
+		return '/image\/.*/';
+	}
+
+	public function getThumbnail($path, $maxX, $maxY, $scalingup, $fileview) {
+		//get fileinfo
+		$fileInfo = $fileview->getFileInfo($path);
+		if(!$fileInfo) {
+			return false;
+		}
+
+		//check if file is encrypted
+		if($fileInfo['encrypted'] === true) {
+			$image = new \OC_Image(stream_get_contents($fileview->fopen($path, 'r')));
+		}else{
+			$image = new \OC_Image();
+			$image->loadFromFile($fileview->getLocalFile($path));
+		}
+
+		return $image->valid() ? $image : false;
+	}
+}
+
+\OC\Preview::registerProvider('OC\Preview\Image');
\ No newline at end of file
diff --git a/lib/preview/movies.php b/lib/preview/movies.php
new file mode 100644
index 0000000000000000000000000000000000000000..e2a1b8edddc9664c90c27eb078a94ecdb0048837
--- /dev/null
+++ b/lib/preview/movies.php
@@ -0,0 +1,47 @@
+<?php
+/**
+ * Copyright (c) 2013 Frank Karlitschek frank@owncloud.org
+ * Copyright (c) 2013 Georg Ehrke georg@ownCloud.com
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+namespace OC\Preview;
+
+$isShellExecEnabled = !in_array('shell_exec', explode(', ', ini_get('disable_functions')));
+$whichFFMPEG = shell_exec('which ffmpeg');
+$isFFMPEGAvailable = !empty($whichFFMPEG);
+
+if($isShellExecEnabled && $isFFMPEGAvailable) {
+
+	class Movie extends Provider {
+
+		public function getMimeType() {
+			return '/video\/.*/';
+		}
+
+		public function getThumbnail($path, $maxX, $maxY, $scalingup, $fileview) {
+			$absPath = \OC_Helper::tmpFile();
+			$tmpPath = \OC_Helper::tmpFile();
+
+			$handle = $fileview->fopen($path, 'rb');
+
+			$firstmb = stream_get_contents($handle, 1048576); //1024 * 1024 = 1048576
+			file_put_contents($absPath, $firstmb);
+
+			//$cmd = 'ffmpeg -y  -i ' . escapeshellarg($absPath) . ' -f mjpeg -vframes 1 -ss 1 -s ' . escapeshellarg($maxX) . 'x' . escapeshellarg($maxY) . ' ' . $tmpPath;
+			$cmd = 'ffmpeg -an -y  -i ' . escapeshellarg($absPath) . ' -f mjpeg -vframes 1 -ss 1 ' . escapeshellarg($tmpPath);
+			
+			shell_exec($cmd);
+
+			$image = new \OC_Image($tmpPath);
+
+			unlink($absPath);
+			unlink($tmpPath);
+
+			return $image->valid() ? $image : false;
+		}
+	}
+
+	\OC\Preview::registerProvider('OC\Preview\Movie');
+}
\ No newline at end of file
diff --git a/lib/preview/mp3.php b/lib/preview/mp3.php
new file mode 100644
index 0000000000000000000000000000000000000000..1eed566315c7bb187f25cb35b1b69b0695760efe
--- /dev/null
+++ b/lib/preview/mp3.php
@@ -0,0 +1,48 @@
+<?php
+/**
+ * Copyright (c) 2013 Georg Ehrke georg@ownCloud.com
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+namespace OC\Preview;
+
+class MP3 extends Provider {
+
+	public function getMimeType() {
+		return '/audio\/mpeg/';
+	}
+
+	public function getThumbnail($path, $maxX, $maxY, $scalingup, $fileview) {
+		require_once('getid3/getid3.php');
+
+		$getID3 = new \getID3();
+
+		$tmpPath = $fileview->toTmpFile($path);
+
+		$tags = $getID3->analyze($tmpPath);
+		\getid3_lib::CopyTagsToComments($tags);
+		if(isset($tags['id3v2']['APIC'][0]['data'])) {
+			$picture = @$tags['id3v2']['APIC'][0]['data'];
+			unlink($tmpPath);
+			$image = new \OC_Image($picture);
+			return $image->valid() ? $image : $this->getNoCoverThumbnail();
+		}
+
+		return $this->getNoCoverThumbnail();
+	}
+
+	private function getNoCoverThumbnail() {
+		$icon = \OC::$SERVERROOT . '/core/img/filetypes/audio.png';
+
+		if(!file_exists($icon)) {
+			return false;
+		}
+
+		$image = new \OC_Image($icon);
+		return $image->valid() ? $image : false;
+	}
+
+}
+
+\OC\Preview::registerProvider('OC\Preview\MP3');
\ No newline at end of file
diff --git a/lib/preview/office-cl.php b/lib/preview/office-cl.php
new file mode 100644
index 0000000000000000000000000000000000000000..112909d652352c9d806a0fd98adeee4e8b806d93
--- /dev/null
+++ b/lib/preview/office-cl.php
@@ -0,0 +1,134 @@
+<?php
+/**
+ * Copyright (c) 2013 Georg Ehrke georg@ownCloud.com
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+namespace OC\Preview;
+
+//we need imagick to convert
+class Office extends Provider {
+
+	private $cmd;
+
+	public function getMimeType() {
+		return null;
+	}
+
+	public function getThumbnail($path, $maxX, $maxY, $scalingup, $fileview) {
+		$this->initCmd();
+		if(is_null($this->cmd)) {
+			return false;
+		}
+
+		$absPath = $fileview->toTmpFile($path);
+
+		$tmpDir = get_temp_dir();
+
+		$defaultParameters = ' --headless --nologo --nofirststartwizard --invisible --norestore -convert-to pdf -outdir ';
+		$clParameters = \OCP\Config::getSystemValue('preview_office_cl_parameters', $defaultParameters);
+
+		$exec = $this->cmd . $clParameters . escapeshellarg($tmpDir) . ' ' . escapeshellarg($absPath);
+		$export = 'export HOME=/' . $tmpDir;
+
+		shell_exec($export . "\n" . $exec);
+
+		//create imagick object from pdf
+		try{
+			$pdf = new \imagick($absPath . '.pdf' . '[0]');
+			$pdf->setImageFormat('jpg');
+		} catch (\Exception $e) {
+			unlink($absPath);
+			unlink($absPath . '.pdf');
+			\OC_Log::write('core', $e->getmessage(), \OC_Log::ERROR);
+			return false;
+		}
+
+		$image = new \OC_Image($pdf);
+
+		unlink($absPath);
+		unlink($absPath . '.pdf');
+
+		return $image->valid() ? $image : false;
+	}
+
+	private function initCmd() {
+		$cmd = '';
+
+		if(is_string(\OC_Config::getValue('preview_libreoffice_path', null))) {
+			$cmd = \OC_Config::getValue('preview_libreoffice_path', null);
+		}
+
+		$whichLibreOffice = shell_exec('which libreoffice');
+		if($cmd === '' && !empty($whichLibreOffice)) {
+			$cmd = 'libreoffice';
+		}
+
+		$whichOpenOffice = shell_exec('which openoffice');
+		if($cmd === '' && !empty($whichOpenOffice)) {
+			$cmd = 'openoffice';
+		}
+
+		if($cmd === '') {
+			$cmd = null;
+		}
+
+		$this->cmd = $cmd;
+	}
+}
+
+//.doc, .dot
+class MSOfficeDoc extends Office {
+
+	public function getMimeType() {
+		return '/application\/msword/';
+	}
+
+}
+
+\OC\Preview::registerProvider('OC\Preview\MSOfficeDoc');
+
+//.docm, .dotm, .xls(m), .xlt(m), .xla(m), .ppt(m), .pot(m), .pps(m), .ppa(m)
+class MSOffice2003 extends Office {
+
+	public function getMimeType() {
+		return '/application\/vnd.ms-.*/';
+	}
+
+}
+
+\OC\Preview::registerProvider('OC\Preview\MSOffice2003');
+
+//.docx, .dotx, .xlsx, .xltx, .pptx, .potx, .ppsx
+class MSOffice2007 extends Office {
+
+	public function getMimeType() {
+		return '/application\/vnd.openxmlformats-officedocument.*/';
+	}
+
+}
+
+\OC\Preview::registerProvider('OC\Preview\MSOffice2007');
+
+//.odt, .ott, .oth, .odm, .odg, .otg, .odp, .otp, .ods, .ots, .odc, .odf, .odb, .odi, .oxt
+class OpenDocument extends Office {
+
+	public function getMimeType() {
+		return '/application\/vnd.oasis.opendocument.*/';
+	}
+
+}
+
+\OC\Preview::registerProvider('OC\Preview\OpenDocument');
+
+//.sxw, .stw, .sxc, .stc, .sxd, .std, .sxi, .sti, .sxg, .sxm
+class StarOffice extends Office {
+
+	public function getMimeType() {
+		return '/application\/vnd.sun.xml.*/';
+	}
+
+}
+
+\OC\Preview::registerProvider('OC\Preview\StarOffice');
\ No newline at end of file
diff --git a/lib/preview/office-fallback.php b/lib/preview/office-fallback.php
new file mode 100644
index 0000000000000000000000000000000000000000..e69ab0ab8cbe95b3e663ed40de633d2c0a29738c
--- /dev/null
+++ b/lib/preview/office-fallback.php
@@ -0,0 +1,142 @@
+<?php
+/**
+ * Copyright (c) 2013 Georg Ehrke georg@ownCloud.com
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+namespace OC\Preview;
+
+/* //There is no (good) php-only solution for converting 2003 word documents to pdfs / pngs ...
+class DOC extends Provider {
+
+	public function getMimeType() {
+		return '/application\/msword/';
+	}
+
+	public function getThumbnail($path, $maxX, $maxY, $scalingup, $fileview) {
+		require_once('');
+	}
+
+}
+
+\OC\Preview::registerProvider('OC\Preview\DOC');
+*/
+
+class DOCX extends Provider {
+
+	public function getMimeType() {
+		return '/application\/vnd.openxmlformats-officedocument.wordprocessingml.document/';
+	}
+
+	public function getThumbnail($path, $maxX, $maxY, $scalingup, $fileview) {
+		require_once('phpdocx/classes/TransformDoc.inc');
+
+		$tmpDoc = $fileview->toTmpFile($path);
+
+		$transformdoc = new \TransformDoc();
+		$transformdoc->setStrFile($tmpDoc);
+		$transformdoc->generatePDF($tmpDoc);
+
+		$pdf = new \imagick($tmpDoc . '[0]');
+		$pdf->setImageFormat('jpg');
+
+		unlink($tmpDoc);
+
+		$image = new \OC_Image($pdf);
+
+		return $image->valid() ? $image : false;
+	}
+
+}
+
+\OC\Preview::registerProvider('OC\Preview\DOCX');
+
+class MSOfficeExcel extends Provider {
+
+	public function getMimeType() {
+		return null;
+	}
+
+	public function getThumbnail($path, $maxX, $maxY, $scalingup, $fileview) {
+		require_once('PHPExcel/Classes/PHPExcel.php');
+		require_once('PHPExcel/Classes/PHPExcel/IOFactory.php');
+
+		$absPath = $fileview->toTmpFile($path);
+		$tmpPath = \OC_Helper::tmpFile();
+
+		$rendererName = \PHPExcel_Settings::PDF_RENDERER_DOMPDF;
+		$rendererLibraryPath = \OC::$THIRDPARTYROOT . '/3rdparty/dompdf';
+
+		\PHPExcel_Settings::setPdfRenderer($rendererName, $rendererLibraryPath);
+
+		$phpexcel = new \PHPExcel($absPath);
+		$excel = \PHPExcel_IOFactory::createWriter($phpexcel, 'PDF');
+		$excel->save($tmpPath);
+
+		$pdf = new \imagick($tmpPath . '[0]');
+		$pdf->setImageFormat('jpg');
+
+		unlink($absPath);
+		unlink($tmpPath);
+
+		$image = new \OC_Image($pdf);
+
+		return $image->valid() ? $image : false;
+	}
+
+}
+
+class XLS extends MSOfficeExcel {
+
+	public function getMimeType() {
+		return '/application\/vnd.ms-excel/';
+	}
+
+}
+
+\OC\Preview::registerProvider('OC\Preview\XLS');
+
+class XLSX extends MSOfficeExcel {
+
+	public function getMimeType() {
+		return '/application\/vnd.openxmlformats-officedocument.spreadsheetml.sheet/';
+	}
+
+}
+
+\OC\Preview::registerProvider('OC\Preview\XLSX');
+
+/* //There is no (good) php-only solution for converting powerpoint documents to pdfs / pngs ...
+class MSOfficePowerPoint extends Provider {
+
+	public function getMimeType() {
+		return null;
+	}
+
+	public function getThumbnail($path, $maxX, $maxY, $scalingup, $fileview) {
+		return false;
+	}
+
+}
+
+class PPT extends MSOfficePowerPoint {
+
+	public function getMimeType() {
+		return '/application\/vnd.ms-powerpoint/';
+	}
+
+}
+
+\OC\Preview::registerProvider('OC\Preview\PPT');
+
+class PPTX extends MSOfficePowerPoint {
+
+	public function getMimeType() {
+		return '/application\/vnd.openxmlformats-officedocument.presentationml.presentation/';
+	}
+
+}
+
+\OC\Preview::registerProvider('OC\Preview\PPTX');
+*/
\ No newline at end of file
diff --git a/lib/preview/office.php b/lib/preview/office.php
new file mode 100644
index 0000000000000000000000000000000000000000..5287bbd6ac1c61ec47f580e88cf05718595124b5
--- /dev/null
+++ b/lib/preview/office.php
@@ -0,0 +1,22 @@
+<?php
+/**
+ * Copyright (c) 2013 Georg Ehrke georg@ownCloud.com
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+//both, libreoffice backend and php fallback, need imagick
+if (extension_loaded('imagick')) {
+	$isShellExecEnabled = !in_array('shell_exec', explode(', ', ini_get('disable_functions')));
+	$whichLibreOffice = shell_exec('which libreoffice');
+	$isLibreOfficeAvailable = !empty($whichLibreOffice);
+	$whichOpenOffice = shell_exec('which libreoffice');
+	$isOpenOfficeAvailable = !empty($whichOpenOffice);
+	//let's see if there is libreoffice or openoffice on this machine
+	if($isShellExecEnabled && ($isLibreOfficeAvailable || $isOpenOfficeAvailable || is_string(\OC_Config::getValue('preview_libreoffice_path', null)))) {
+		require_once('office-cl.php');
+	}else{
+		//in case there isn't, use our fallback
+		require_once('office-fallback.php');
+	}
+}
\ No newline at end of file
diff --git a/lib/preview/pdf.php b/lib/preview/pdf.php
new file mode 100644
index 0000000000000000000000000000000000000000..cc974b68818662a8ebe9e0c15c14760af9bc26fd
--- /dev/null
+++ b/lib/preview/pdf.php
@@ -0,0 +1,40 @@
+<?php
+/**
+ * Copyright (c) 2013 Georg Ehrke georg@ownCloud.com
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+namespace OC\Preview;
+
+if (extension_loaded('imagick')) {
+
+	class PDF extends Provider {
+
+		public function getMimeType() {
+			return '/application\/pdf/';
+		}
+
+		public function getThumbnail($path, $maxX, $maxY, $scalingup, $fileview) {	
+			$tmpPath = $fileview->toTmpFile($path);
+
+			//create imagick object from pdf
+			try{
+				$pdf = new \imagick($tmpPath . '[0]');
+				$pdf->setImageFormat('jpg');
+			} catch (\Exception $e) {
+				\OC_Log::write('core', $e->getmessage(), \OC_Log::ERROR);
+				return false;
+			}
+
+			unlink($tmpPath);
+
+			//new image object
+			$image = new \OC_Image($pdf);
+			//check if image object is valid
+			return $image->valid() ? $image : false;
+		}
+	}
+
+	\OC\Preview::registerProvider('OC\Preview\PDF');
+}
diff --git a/lib/preview/provider.php b/lib/preview/provider.php
new file mode 100644
index 0000000000000000000000000000000000000000..e4a730bafc8b3de7f08de41d7e98a5466e33fa4f
--- /dev/null
+++ b/lib/preview/provider.php
@@ -0,0 +1,19 @@
+<?php
+namespace OC\Preview;
+
+abstract class Provider {
+	private $options;
+
+	public function __construct($options) {
+		$this->options=$options;
+	}
+
+	abstract public function getMimeType();
+
+	/**
+	 * search for $query
+	 * @param string $query
+	 * @return
+	 */
+	abstract public function getThumbnail($path, $maxX, $maxY, $scalingup, $fileview);
+}
diff --git a/lib/preview/svg.php b/lib/preview/svg.php
new file mode 100644
index 0000000000000000000000000000000000000000..b49e51720fa140f304d7ddd71c38e371de2cc30c
--- /dev/null
+++ b/lib/preview/svg.php
@@ -0,0 +1,46 @@
+<?php
+/**
+ * Copyright (c) 2013 Georg Ehrke georg@ownCloud.com
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+namespace OC\Preview;
+
+if (extension_loaded('imagick')) {
+
+	class SVG extends Provider {
+
+		public function getMimeType() {
+			return '/image\/svg\+xml/';
+		}
+
+		public function getThumbnail($path,$maxX,$maxY,$scalingup,$fileview) {
+			try{
+				$svg = new \Imagick();
+				$svg->setBackgroundColor(new \ImagickPixel('transparent'));
+
+				$content = stream_get_contents($fileview->fopen($path, 'r'));
+				if(substr($content, 0, 5) !== '<?xml') {
+					$content = '<?xml version="1.0" encoding="UTF-8" standalone="no"?>' . $content;
+				}
+
+				$svg->readImageBlob($content);
+				$svg->setImageFormat('png32');
+			} catch (\Exception $e) {
+				\OC_Log::write('core', $e->getmessage(), \OC_Log::ERROR);
+				return false;
+			}
+
+
+			//new image object
+			$image = new \OC_Image();
+			$image->loadFromData($svg);
+			//check if image object is valid
+			return $image->valid() ? $image : false;
+		}
+	}
+
+	\OC\Preview::registerProvider('OC\Preview\SVG');
+
+}
\ No newline at end of file
diff --git a/lib/preview/txt.php b/lib/preview/txt.php
new file mode 100644
index 0000000000000000000000000000000000000000..a487330691e05ce895920b55b11abed1e228068e
--- /dev/null
+++ b/lib/preview/txt.php
@@ -0,0 +1,73 @@
+<?php
+/**
+ * Copyright (c) 2013 Georg Ehrke georg@ownCloud.com
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+namespace OC\Preview;
+
+class TXT extends Provider {
+
+	public function getMimeType() {
+		return '/text\/.*/';
+	}
+
+	public function getThumbnail($path, $maxX, $maxY, $scalingup, $fileview) {
+		$content = $fileview->fopen($path, 'r');
+		$content = stream_get_contents($content);
+
+		//don't create previews of empty text files
+		if(trim($content) === '') {
+			return false;
+		}
+
+		$lines = preg_split("/\r\n|\n|\r/", $content);
+
+		$fontSize = 5; //5px
+		$lineSize = ceil($fontSize * 1.25);
+
+		$image = imagecreate($maxX, $maxY);
+		imagecolorallocate($image, 255, 255, 255);
+		$textColor = imagecolorallocate($image, 0, 0, 0);
+
+		foreach($lines as $index => $line) {
+			$index = $index + 1;
+
+			$x = (int) 1;
+			$y = (int) ($index * $lineSize) - $fontSize;
+
+			imagestring($image, 1, $x, $y, $line, $textColor);
+
+			if(($index * $lineSize) >= $maxY) {
+				break;
+			}
+		}
+
+		$image = new \OC_Image($image);
+
+		return $image->valid() ? $image : false;
+	}
+}
+
+\OC\Preview::registerProvider('OC\Preview\TXT');
+
+class PHP extends TXT {
+
+	public function getMimeType() {
+		return '/application\/x-php/';
+	}
+
+}
+
+\OC\Preview::registerProvider('OC\Preview\PHP');
+
+class JavaScript extends TXT {
+
+	public function getMimeType() {
+		return '/application\/javascript/';
+	}
+
+}
+
+\OC\Preview::registerProvider('OC\Preview\JavaScript');
\ No newline at end of file
diff --git a/lib/preview/unknown.php b/lib/preview/unknown.php
new file mode 100644
index 0000000000000000000000000000000000000000..9e6cd68d401bae46ac24c38af26b8e9de56d0ee8
--- /dev/null
+++ b/lib/preview/unknown.php
@@ -0,0 +1,27 @@
+<?php
+/**
+ * Copyright (c) 2013 Frank Karlitschek frank@owncloud.org
+ * Copyright (c) 2013 Georg Ehrke georg@ownCloud.com
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+namespace OC\Preview;
+
+class Unknown extends Provider {
+
+	public function getMimeType() {
+		return '/.*/';
+	}
+
+	public function getThumbnail($path, $maxX, $maxY, $scalingup, $fileview) {
+		$mimetype = $fileview->getMimeType($path);
+
+		$path = \OC_Helper::mimetypeIcon($mimetype);
+		$path = \OC::$SERVERROOT . substr($path, strlen(\OC::$WEBROOT));
+
+		return new \OC_Image($path);
+	}
+}
+
+\OC\Preview::registerProvider('OC\Preview\Unknown');
\ No newline at end of file
diff --git a/lib/public/preview.php b/lib/public/preview.php
new file mode 100644
index 0000000000000000000000000000000000000000..e488eade4da248a254f17109c247c4b02e8a008f
--- /dev/null
+++ b/lib/public/preview.php
@@ -0,0 +1,34 @@
+<?php
+/**
+ * Copyright (c) 2013 Frank Karlitschek frank@owncloud.org
+ * Copyright (c) 2013 Georg Ehrke georg@ownCloud.com
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+namespace OCP;
+
+/**
+ * This class provides functions to render and show thumbnails and previews of files
+ */
+class Preview {
+
+	/**
+	 * @brief return a preview of a file
+	 * @param $file The path to the file where you want a thumbnail from
+	 * @param $maxX The maximum X size of the thumbnail. It can be smaller depending on the shape of the image
+	 * @param $maxY The maximum Y size of the thumbnail. It can be smaller depending on the shape of the image
+	 * @param $scaleup Scale smaller images up to the thumbnail size or not. Might look ugly
+	 * @return image
+	 */
+	public static function show($file,$maxX=100,$maxY=75,$scaleup=false) {
+		return(\OC_Preview::show($file,$maxX,$maxY,$scaleup));
+	}
+
+
+
+	public static function isMimeSupported($mimetype='*') {
+		return \OC\Preview::isMimeSupported($mimetype);
+	}
+
+}
diff --git a/lib/public/template.php b/lib/public/template.php
index ab1089c332d659088c0ad69067a03af90fb3959c..3b1a4ed4906763fae906314ec3fcc436c86e4771 100644
--- a/lib/public/template.php
+++ b/lib/public/template.php
@@ -54,6 +54,25 @@ function mimetype_icon( $mimetype ) {
 	return(\mimetype_icon( $mimetype ));
 }
 
+/**
+ * @brief make preview_icon available as a simple function
+ * Returns the path to the preview of the image.
+ * @param $path path of file
+ * @returns link to the preview
+ */
+function preview_icon( $path ) {
+	return(\preview_icon( $path ));
+}
+
+/**
+ * @brief make publicpreview_icon available as a simple function
+ * Returns the path to the preview of the image.
+ * @param $path path of file
+ * @returns link to the preview
+ */
+function publicPreview_icon ( $path, $token ) {
+	return(\publicPreview_icon( $path, $token ));
+}
 
 /**
  * @brief make OC_Helper::humanFileSize available as a simple function
diff --git a/lib/template/functions.php b/lib/template/functions.php
index 717e197c1cb1b73466b31041e58d9d0fbb65fc40..501f8081bff9969d2d3b4b4317c03176d92d0395 100644
--- a/lib/template/functions.php
+++ b/lib/template/functions.php
@@ -58,6 +58,22 @@ function mimetype_icon( $mimetype ) {
 	return OC_Helper::mimetypeIcon( $mimetype );
 }
 
+/**
+ * @brief make preview_icon available as a simple function
+ * Returns the path to the preview of the image.
+ * @param $path path of file
+ * @returns link to the preview
+ *
+ * For further information have a look at OC_Helper::previewIcon
+ */
+function preview_icon( $path ) {
+	return OC_Helper::previewIcon( $path );
+}
+
+function publicPreview_icon ( $path, $token ) {
+	return OC_Helper::publicPreviewIcon( $path, $token );
+}
+
 /**
  * @brief make OC_Helper::humanFileSize available as a simple function
  * @param int $bytes size in bytes
diff --git a/lib/util.php b/lib/util.php
index e03667b079442e25678d84300df0c38b23cd0dc2..6195178701b57c92e8c8f867550ff614168533e4 100755
--- a/lib/util.php
+++ b/lib/util.php
@@ -98,7 +98,7 @@ class OC_Util {
 	public static function getVersion() {
 		// hint: We only can count up. Reset minor/patchlevel when
 		// updating major/minor version number.
-		return array(5, 80, 05);
+		return array(5, 80, 07);
 	}
 
 	/**
diff --git a/tests/lib/preview.php b/tests/lib/preview.php
new file mode 100644
index 0000000000000000000000000000000000000000..bebdc12b5004baf61bcb644f6a1936ebe621e226
--- /dev/null
+++ b/tests/lib/preview.php
@@ -0,0 +1,108 @@
+<?php
+/**
+ * Copyright (c) 2013 Georg Ehrke <georg@ownCloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace Test;
+
+class Preview extends \PHPUnit_Framework_TestCase {
+
+	public function testIsPreviewDeleted() {
+		$user = $this->initFS();
+
+		$rootView = new \OC\Files\View('');
+		$rootView->mkdir('/'.$user);
+		$rootView->mkdir('/'.$user.'/files');
+
+		$samplefile = '/'.$user.'/files/test.txt';
+
+		$rootView->file_put_contents($samplefile, 'dummy file data');
+		
+		$x = 50;
+		$y = 50;
+
+		$preview = new \OC\Preview($user, 'files/', 'test.txt', $x, $y);
+		$preview->getPreview();
+
+		$fileinfo = $rootView->getFileInfo($samplefile);
+		$fileid = $fileinfo['fileid'];
+
+		$thumbcachefile = '/' . $user . '/' . \OC\Preview::THUMBNAILS_FOLDER . '/' . $fileid . '/' . $x . '-' . $y . '.png';
+		
+		$this->assertEquals($rootView->file_exists($thumbcachefile), true);
+
+		$preview->deletePreview();
+
+		$this->assertEquals($rootView->file_exists($thumbcachefile), false);
+	}
+
+	public function testAreAllPreviewsDeleted() {
+		$user = $this->initFS();
+
+		$rootView = new \OC\Files\View('');
+		$rootView->mkdir('/'.$user);
+		$rootView->mkdir('/'.$user.'/files');
+
+		$samplefile = '/'.$user.'/files/test.txt';
+
+		$rootView->file_put_contents($samplefile, 'dummy file data');
+		
+		$x = 50;
+		$y = 50;
+
+		$preview = new \OC\Preview($user, 'files/', 'test.txt', $x, $y);
+		$preview->getPreview();
+
+		$fileinfo = $rootView->getFileInfo($samplefile);
+		$fileid = $fileinfo['fileid'];
+		
+		$thumbcachefolder = '/' . $user . '/' . \OC\Preview::THUMBNAILS_FOLDER . '/' . $fileid . '/';
+		
+		$this->assertEquals($rootView->is_dir($thumbcachefolder), true);
+
+		$preview->deleteAllPreviews();
+
+		$this->assertEquals($rootView->is_dir($thumbcachefolder), false);
+	}
+
+	public function testIsMaxSizeWorking() {
+		$user = $this->initFS();
+
+		$maxX = 250;
+		$maxY = 250;
+
+		\OC_Config::setValue('preview_max_x', $maxX);
+		\OC_Config::setValue('preview_max_y', $maxY);
+
+		$rootView = new \OC\Files\View('');
+		$rootView->mkdir('/'.$user);
+		$rootView->mkdir('/'.$user.'/files');
+
+		$samplefile = '/'.$user.'/files/test.txt';
+
+		$rootView->file_put_contents($samplefile, 'dummy file data');
+
+		$preview = new \OC\Preview($user, 'files/', 'test.txt', 1000, 1000);
+		$image = $preview->getPreview();
+
+		$this->assertEquals($image->width(), $maxX);
+		$this->assertEquals($image->height(), $maxY);
+	}
+
+	private function initFS() {
+		if(\OC\Files\Filesystem::getView()){
+			$user = \OC_User::getUser();
+		}else{
+			$user=uniqid();
+			\OC_User::setUserId($user);
+			\OC\Files\Filesystem::init($user, '/'.$user.'/files');
+		}
+
+		\OC\Files\Filesystem::mount('OC\Files\Storage\Temporary', array(), '/');
+		
+		return $user;
+	}
+}
\ No newline at end of file