diff --git a/core/js/js.js b/core/js/js.js
index 9117f08349a2470c891bcb94bf08ea96f9929271..2dac6907d961337545698f29f1ca870b2e79d088 100644
--- a/core/js/js.js
+++ b/core/js/js.js
@@ -55,3 +55,22 @@ OC={
 		$('head').append(style);
 	}
 }
+
+if (!Array.prototype.filter) {
+	Array.prototype.filter = function(fun /*, thisp*/) {
+		var len = this.length >>> 0;
+		if (typeof fun != "function")
+			throw new TypeError();
+		
+		var res = [];
+		var thisp = arguments[1];
+		for (var i = 0; i < len; i++) {
+			if (i in this) {
+				var val = this[i]; // in case fun mutates this
+				if (fun.call(thisp, val, i, this))
+					res.push(val);
+			}
+		}
+		return res;
+	};
+}
\ No newline at end of file
diff --git a/files/js/files.js b/files/js/files.js
index 2f1ba907ba596845951ff77f246ea081e70a9bc5..7842c680300b298e616ff0a85d0c7b70ad3b1c7f 100644
--- a/files/js/files.js
+++ b/files/js/files.js
@@ -4,31 +4,8 @@ $(document).ready(function() {
 	//drag/drop of files
 	$('#fileList tr td.filename').draggable(dragOptions);
 	$('#fileList tr[data-type="dir"] td.filename').droppable(folderDropOptions);
-	$('div.crumb').droppable({
-		drop: function( event, ui ) {
-			var file=ui.draggable.text().trim();
-			var target=$(this).attr('data-dir');
-			var dir=$('#dir').val();
-			while(dir.substr(0,1)=='/'){//remove extra leading /'s
-				dir=dir.substr(1);
-			}
-			dir='/'+dir;
-			if(dir.substr(-1,1)!='/'){
-				dir=dir+'/';
-			}
-			if(target==dir){
-				return;
-			}
-			$.ajax({
-				url: 'ajax/move.php',
-				data: "dir="+dir+"&file="+file+'&target='+target,
-				complete: function(data){boolOperationFinished(data, function(){
-					FileList.remove(file);
-				});}
-			});
-		},
-		tolerance: 'pointer'
-	});
+	$('div.crumb').droppable(crumbDropOptions);
+	$('#plugins>ul>li:first-child').droppable(crumbDropOptions);
 	
 	// Sets the file-action buttons behaviour :
 	$('tr').live('mouseenter',function(event) {
@@ -41,10 +18,10 @@ $(document).ready(function() {
 	// Sets the file link behaviour :
 	$('td.filename a').live('click',function(event) {
 		event.preventDefault();
-		var filename=$(this).parent().parent().attr('data-file');
+		var filename=$(this).parent().parent().data('file');
 		if(!FileList.isLoading(filename)){
-			var mime=$(this).parent().parent().attr('data-mime');
-			var type=$(this).parent().parent().attr('data-type');
+			var mime=$(this).parent().parent().data('mime');
+			var type=$(this).parent().parent().data('type');
 			var action=FileActions.getDefault(mime,type);
 			if(action){
 				action(filename);
@@ -131,7 +108,7 @@ $(document).ready(function() {
 			complete: function(data){
 				boolOperationFinished(data, function(){
 					$('td.filename input:checkbox:checked').parent().parent().each(function(i,element){
-						FileList.remove($(element).attr('data-file'));
+						FileList.remove($(element).data('file'));
 					});
 				});
 			}
@@ -165,7 +142,7 @@ $(document).ready(function() {
 				if(response){
 					for(var i=0;i<response.length;i++){
 						var file=response[i];
-						$('tr[data-file="'+file.name+'"]').attr('data-mime',file.mime);
+						$('tr[data-file="'+file.name+'"]').data('mime',file.mime);
 						if(size=='Pending'){
 							$('tr[data-file='+file.name+'] td.filesize').text(file.size);
 						}
@@ -317,10 +294,36 @@ var folderDropOptions={
 		});
 	}
 }
+var crumbDropOptions={
+	drop: function( event, ui ) {
+		var file=ui.draggable.text().trim();
+		var target=$(this).data('dir');
+		var dir=$('#dir').val();
+		while(dir.substr(0,1)=='/'){//remove extra leading /'s
+				dir=dir.substr(1);
+		}
+		dir='/'+dir;
+		if(dir.substr(-1,1)!='/'){
+			dir=dir+'/';
+		}
+		if(target==dir){
+			return;
+		}
+		$.ajax({
+			url: 'ajax/move.php',
+		 data: "dir="+dir+"&file="+file+'&target='+target,
+		 complete: function(data){boolOperationFinished(data, function(){
+			 FileList.remove(file);
+		 });}
+		});
+	},
+	tolerance: 'pointer'
+}
 
 function procesSelection(){
-	var selectedFiles=$('tr[data-type="file"]>td.filename>input:checkbox:checked').parent().parent();
-	var selectedFolders=$('tr[data-type="dir"]>td.filename>input:checkbox:checked').parent().parent();
+	var selected=getSelectedFiles();
+	var selectedFiles=selected.filter(function(el){return el.type=='file'});
+	var selectedFolders=selected.filter(function(el){return el.type=='dir'});
 	if(selectedFiles.length==0 && selectedFolders.length==0){
 		$('#headerName>span.name').text('Name');
 		$('#headerSize').text('Size (MB)');
@@ -328,12 +331,12 @@ function procesSelection(){
 	}else{
 		$('#selectedActions').show();
 		var totalSize=0;
-		selectedFiles.each(function(){
-			totalSize+=parseInt($(this).attr('data-size'));
-		});
-		selectedFolders.each(function(){
-			totalSize+=parseInt($(this).attr('data-size'));
-		});
+		for(var i=0;i<selectedFiles.length;i++){
+			totalSize+=selectedFiles[i].size;
+		};
+		for(var i=0;i<selectedFolders.length;i++){
+			totalSize+=selectedFolders[i].size;
+		};
 		if(totalSize>0){
 			totalSize = Math.round(totalSize/(1024*102.4))/10;
 			if(totalSize < 0.1) {
@@ -370,22 +373,24 @@ function procesSelection(){
  * @param string property (option) the property of the file requested
  * @return array
  *
- * possible values for property: name, mime
+ * possible values for property: name, mime, size and type
  * if property is set, an array with that property for each file is returnd
  * if it's ommited an array of objects with all properties is returned
  */
 function getSelectedFiles(property){
-	var elements=$('td.selection input:checkbox:checked').parent().parent();
+	var elements=$('td.filename input:checkbox:checked').parent().parent();
 	var files=[];
 	elements.each(function(i,element){
 		var file={
-			name:$(element).attr('data-file'),
-				  mime:$(element).attr('data-mime')
+			name:$(element).data('file'),
+			mime:$(element).data('mime'),
+			type:$(element).data('type'),
+			size:$(element).data('size'),
 		};
 		if(property){
 			files.push(file[property]);
 		}else{
-			files.push();
+			files.push(file);
 		}
 	});
 	return files;