diff --git a/core/img/filetypes/script.png b/core/img/filetypes/code-script.png
similarity index 100%
rename from core/img/filetypes/script.png
rename to core/img/filetypes/code-script.png
diff --git a/core/img/filetypes/php.png b/core/img/filetypes/text-x-php.png
similarity index 100%
rename from core/img/filetypes/php.png
rename to core/img/filetypes/text-x-php.png
diff --git a/files/ajax/mimeicon.php b/files/ajax/mimeicon.php
new file mode 100644
index 0000000000000000000000000000000000000000..8724016b3a190b25e2010dcd78fbebe05cfdad18
--- /dev/null
+++ b/files/ajax/mimeicon.php
@@ -0,0 +1,8 @@
+<?php
+
+// Init owncloud
+require_once('../../lib/base.php');
+
+print OC_Helper::mimetypeIcon($_GET['mime']);
+
+?>
diff --git a/files/js/filelist.js b/files/js/filelist.js
index 84762bb561d4f2ba4c45a9ac5b54b0e6c1fae7bf..e6da922700d720d209ec8efe051e1eb5f18956b0 100644
--- a/files/js/filelist.js
+++ b/files/js/filelist.js
@@ -101,10 +101,14 @@ FileList={
 		$('.file_upload_filename').removeClass('highlight');
 	},
 	loadingDone:function(name){
-		$('tr[data-file="'+name+'"]').data('loading',false);
-		var mime=$('tr[data-file="'+name+'"]').data('mime');
-		$('tr[data-file="'+name+'"] td.filename').attr('style','background-image:url('+getMimeIcon(mime)+')');
-		$('tr[data-file="'+name+'"] td.filename').draggable(dragOptions);
+		var tr=$('tr[data-file="'+name+'"]');
+		tr.data('loading',false);
+		var mime=tr.data('mime');
+		tr.attr('data-mime',mime);
+		getMimeIcon(mime,function(path){
+			tr.find('td.filename').attr('style','background-image:url('+path+')');
+		});
+		tr.find('td.filename').draggable(dragOptions);
 	},
 	isLoading:function(name){
 		return $('tr[data-file="'+name+'"]').data('loading');
diff --git a/files/js/files.js b/files/js/files.js
index 9342642b4ff536d14632baed76b6219cb96abe4d..079646070d4b0db195ed2e9284b34db1f6a353bf 100644
--- a/files/js/files.js
+++ b/files/js/files.js
@@ -473,11 +473,14 @@ function relative_modified_date(timestamp) {
 	else { return diffyears+' '+t('files','years ago'); }
 }
 
-function getMimeIcon(mime){
-	mime=mime.substr(0,mime.indexOf('/'));
-	var knownMimes=['image','audio'];
-	if(knownMimes.indexOf(mime)==-1){
-		mime='file';
+function getMimeIcon(mime, ready){
+	if(getMimeIcon.cache[mime]){
+		ready(getMimeIcon.cache[mime]);
+	}else{
+		$.get( OC.filePath('files','ajax','mimeicon.php')+'?mime='+mime, function(path){
+			getMimeIcon.cache[mime]=path;
+			ready(getMimeIcon.cache[mime]);
+		});
 	}
-	return OC.imagePath('core','filetypes/'+mime);
 }
+getMimeIcon.cache={};
diff --git a/lib/helper.php b/lib/helper.php
index c2a81ba3306f2df604b368506d7e3d54561ce3b0..5b3e394cafd3821195c5cd3ead775c045978827e 100644
--- a/lib/helper.php
+++ b/lib/helper.php
@@ -96,6 +96,12 @@ class OC_Helper {
 	 * Returns the path to the image of this file type.
 	 */
 	public static function mimetypeIcon( $mimetype ){
+		$alias=array('application/xml'=>'code/xml');
+// 		echo $mimetype;
+		if(isset($alias[$mimetype])){
+			$mimetype=$alias[$mimetype];
+// 			echo $mimetype;
+		}
 		// Replace slash with a minus
 		$mimetype = str_replace( "/", "-", $mimetype );