diff --git a/apps/files/js/file-upload.js b/apps/files/js/file-upload.js
index 4f93403baf5fc40c190a5c74578b563792669ba2..47d1188b511adf72f0eb768fa9ac67f4b2cd6dd3 100644
--- a/apps/files/js/file-upload.js
+++ b/apps/files/js/file-upload.js
@@ -124,43 +124,12 @@ function supportAjaxUploadWithProgress() {
 
 //TODO clean uploads when all progress has completed
 OC.Upload = {
-	/**
-	 * map to lookup the selections for a given directory.
-	 * @type Array
-	 */
-	_selections: {},
-	_selectionCount: 0,
-	/*
-	 * queue which progress tracker to use for the next upload
-	 * @type Array
-	 */
-	_queue: [],
-	queueUpload:function(data) {
-		// add to queue
-		this._queue.push(data); //remember what to upload next
-		if ( ! this.isProcessing() ) {
-			this.startUpload();
-		}
-	},
-	getSelection:function(originalFiles) {
-		if (!originalFiles.selectionKey) {
-			originalFiles.selectionKey = 'selection-' + this._selectionCount++;
-			this._selections[originalFiles.selectionKey] = {
-				selectionKey:originalFiles.selectionKey,
-				files:{},
-				totalBytes:0,
-				loadedBytes:0,
-				currentFile:0,
-				uploads:{},
-				checked:false
-			};
-		}
-		return this._selections[originalFiles.selectionKey];
-	},
+	_uploads: [],
 	cancelUpload:function(dir, filename) {
 		var self = this;
 		var deleted = false;
-		jQuery.each(this._selections, function(i, selection) {
+		//FIXME _selections
+		jQuery.each(this._uploads, function(i, jqXHR) {
 			if (selection.dir === dir && selection.uploads[filename]) {
 				deleted = self.deleteSelectionUpload(selection, filename);
 				return false; // end searching through selections
@@ -168,69 +137,34 @@ OC.Upload = {
 		});
 		return deleted;
 	},
+	deleteUpload:function(data) {
+		delete data.jqXHR;
+	},
 	cancelUploads:function() {
 		console.log('canceling uploads');
-		var self = this;
-		jQuery.each(this._selections,function(i, selection){
-			self.deleteSelection(selection.selectionKey);
+		jQuery.each(this._uploads,function(i, jqXHR){
+			jqXHR.abort();
 		});
-		this._queue = [];
-		this._isProcessing = false;
-	},
-	_isProcessing:false,
-	isProcessing:function(){
-		return this._isProcessing;
+		this._uploads = [];
+		
 	},
-	startUpload:function(){
-		if (this._queue.length > 0) {
-			this._isProcessing = true;
-			this.nextUpload();
-			return true;
-		} else {
-			return false;
+	rememberUpload:function(jqXHR){
+		if (jqXHR) {
+			this._uploads.push(jqXHR);
 		}
 	},
-	nextUpload:function(){
-		if (this._queue.length > 0) {
-			var data = this._queue.pop();
-			var selection = this.getSelection(data.originalFiles);
-			selection.uploads[data.files[0]] = data.submit();
-			
-		} else {
-			//queue is empty, we are done
-			this._isProcessing = false;
-			OC.Upload.cancelUploads();
-		}
-	},
-	progressBytes: function() {
-		var total = 0;
-		var loaded = 0;
-		jQuery.each(this._selections, function (i, selection) {
-			total += selection.totalBytes;
-			loaded += selection.loadedBytes;
-		});
-		return (loaded/total)*100;
-	},
-	loadedBytes: function() {
-		var loaded = 0;
-		jQuery.each(this._selections, function (i, selection) {
-			loaded += selection.loadedBytes;
-		});
-		return loaded;
-	},
-	totalBytes: function() {
-		var total = 0;
-		jQuery.each(this._selections, function (i, selection) {
-			total += selection.totalBytes;
+	isProcessing:function(){
+		var count = 0;
+		
+		jQuery.each(this._uploads,function(i, data){
+			if (data.state() === 'pending') {
+				count++;
+			}
 		});
-		return total;
+		return count > 0;
 	},
 	onCancel:function(data) {
-		//TODO cancel all uploads of this selection
-		
-		var selection = this.getSelection(data.originalFiles);
-		OC.Upload.deleteSelection(selection.selectionKey);
-		//FIXME hide progressbar
+		this.cancelUploads();
 	},
 	onContinue:function(conflicts) {
 		var self = this;
@@ -253,19 +187,16 @@ OC.Upload = {
 		});
 	},
 	onSkip:function(data){
-		OC.Upload.logStatus('skip', null, data);
-		//var selection = this.getSelection(data.originalFiles);
-		//selection.loadedBytes += data.loaded;
-		//this.nextUpload();
-		//TODO trigger skip? what about progress?
+		this.logStatus('skip', null, data);
+		this.deleteUpload(data);
 	},
 	onReplace:function(data){
-		OC.Upload.logStatus('replace', null, data);
+		this.logStatus('replace', null, data);
 		data.data.append('resolution', 'replace');
 		data.submit();
 	},
 	onAutorename:function(data){
-		OC.Upload.logStatus('autorename', null, data);
+		this.logStatus('autorename', null, data);
 		data.data.append('resolution', 'autorename');
 		data.submit();
 	},
@@ -415,6 +346,9 @@ $(document).ready(function() {
 		start: function(e) {
 			OC.Upload.logStatus('start', e, null);
 		},
+		submit: function (e, data) {
+			OC.Upload.rememberUpload(data);
+		},
 		fail: function(e, data) {
 			OC.Upload.logStatus('fail', e, data);
 			if (typeof data.textStatus !== 'undefined' && data.textStatus !== 'success' ) {
@@ -432,6 +366,7 @@ $(document).ready(function() {
 			}
 			//var selection = OC.Upload.getSelection(data.originalFiles);
 			//OC.Upload.deleteSelectionUpload(selection, data.files[0].name);
+			OC.Upload.deleteUpload(data);
 		},
 		/**
 		 * called for every successful upload
@@ -449,8 +384,9 @@ $(document).ready(function() {
 				response = data.result[0].body.innerText;
 			}
 			var result=$.parseJSON(response);
-			//var selection = OC.Upload.getSelection(data.originalFiles);
 
+			delete data.jqXHR;
+				
 			if(typeof result[0] === 'undefined') {
 				data.textStatus = 'servererror';
 				data.errorThrown = t('files', 'Could not get result from server.');
@@ -463,7 +399,7 @@ $(document).ready(function() {
 				var fu = $(this).data('blueimp-fileupload') || $(this).data('fileupload');
 				OC.dialogs.fileexists(data, original, replacement, OC.Upload, fu);
 			} else if (result[0].status !== 'success') {
-				delete data.jqXHR;
+				//delete data.jqXHR;
 				data.textStatus = 'servererror';
 				data.errorThrown = t('files', result.data.message);
 				var fu = $(this).data('blueimp-fileupload') || $(this).data('fileupload');
diff --git a/apps/files/js/filelist.js b/apps/files/js/filelist.js
index 1bb9672f961a763e07dc6172bae06167b9297d3e..a96f555ac0b91ffa8353c95c277b2267f6714813 100644
--- a/apps/files/js/filelist.js
+++ b/apps/files/js/filelist.js
@@ -522,6 +522,9 @@ $(document).ready(function(){
 		var dropTarget = $(e.originalEvent.target).closest('tr');
 		if(dropTarget && dropTarget.data('type') === 'dir') { // drag&drop upload to folder
 			
+			// remember as context
+			data.context = dropTarget;
+			
 			var dir = dropTarget.data('file');
 			
 			// update folder in form
@@ -546,19 +549,15 @@ $(document).ready(function(){
 		OC.Upload.logStatus('filelist handle fileuploadadd', e, data);
 
 		// lookup selection for dir
-		var selection = OC.Upload.getSelection(data.originalFiles);
+		//var selection = OC.Upload.getSelection(data.originalFiles);
 			
 		if(FileList.deleteFiles && FileList.deleteFiles.indexOf(data.files[0].name)!==-1){//finish delete if we are uploading a deleted file
 			FileList.finishDelete(null, true); //delete file before continuing
 		}
 		
 		// add ui visualization to existing folder
-		if(selection.dropTarget && selection.dropTarget.data('type') === 'dir') {
+		if(data.context && data.context.data('type') === 'dir') {
 			// add to existing folder
-			var dirName = selection.dropTarget.data('file');
-
-			// set dir context
-			data.context = $('tr').filterAttr('data-type', 'dir').filterAttr('data-file', dirName);
 
 			// update upload counter ui
 			var uploadtext = data.context.find('.uploadtext');
@@ -578,6 +577,10 @@ $(document).ready(function(){
 		}
 		
 	});
+	file_upload_start.on('fileuploadsend', function(e, data) {
+		OC.Upload.logStatus('filelist handle fileuploadsend', e, data);
+		return true;
+	});
 	file_upload_start.on('fileuploadstart', function(e, data) {
 		OC.Upload.logStatus('filelist handle fileuploadstart', e, data);
 	});
@@ -608,7 +611,7 @@ $(document).ready(function(){
 					var img = OC.imagePath('core', 'filetypes/folder.png');
 					data.context.find('td.filename').attr('style','background-image:url('+img+')');
 					uploadtext.text(translatedText);
-					uploadtext.show();
+					uploadtext.hide();
 				} else {
 					uploadtext.text(translatedText);
 				}
@@ -648,6 +651,7 @@ $(document).ready(function(){
 		}
 		
 		//if user pressed cancel hide upload chrome
+		/*
 		if (! OC.Upload.isProcessing()) {
 			//cleanup uploading to a dir
 			var uploadtext = $('tr .uploadtext');
@@ -656,6 +660,7 @@ $(document).ready(function(){
 			uploadtext.fadeOut();
 			uploadtext.attr('currentUploads', 0);
 		}
+		*/
 	});
 	
 	file_upload_start.on('fileuploadalways', function(e, data) {
@@ -677,7 +682,7 @@ $(document).ready(function(){
 		OC.Upload.logStatus('filelist handle fileuploadstop', e, data);
 		
 		//if user pressed cancel hide upload chrome
-		if (! OC.Upload.isProcessing()) {
+		if (data.errorThrown === 'abort') {
 			//cleanup uploading to a dir
 			var uploadtext = $('tr .uploadtext');
 			var img = OC.imagePath('core', 'filetypes/folder.png');
diff --git a/core/js/oc-dialogs.js b/core/js/oc-dialogs.js
index fd77f5998b5ab2f74c4163326061f2d4637dea91..bc46079835072dad470d1160580ef5dc27f401f8 100644
--- a/core/js/oc-dialogs.js
+++ b/core/js/oc-dialogs.js
@@ -262,10 +262,10 @@ var OCdialogs = {
 				//TODO show skip action for files with same size and mtime in bottom row
 				
 		};
-		var selection = controller.getSelection(data.originalFiles);
-		if (selection.defaultAction) {
-			controller[selection.defaultAction](data);
-		} else {
+		//var selection = controller.getSelection(data.originalFiles);
+		//if (selection.defaultAction) {
+		//	controller[selection.defaultAction](data);
+		//} else {
 			var dialog_name = 'oc-dialog-fileexists-content';
 			var dialog_id = '#' + dialog_name;
 			if (this._fileexistsshown) {
@@ -306,6 +306,7 @@ var OCdialogs = {
 								if ( typeof controller.onCancel !== 'undefined') {
 									controller.onCancel(data);
 								}
+								$(dialog_id).ocdialog('close');
 								$(dialog_id).ocdialog('destroy').remove();
 							}
 						},
@@ -382,7 +383,7 @@ var OCdialogs = {
 					alert(t('core', 'Error loading file exists template'));
 				});
 			}
-		}
+		//}
 	},
 	_getFilePickerTemplate: function() {
 		var defer = $.Deferred();