diff --git a/apps/files/js/filelist.js b/apps/files/js/filelist.js
index 02de2f2415e75846578b9b65784a5cd7e62800c5..fa26e2bfb7e27b93d43d90cf0f9255b6759fa75c 100644
--- a/apps/files/js/filelist.js
+++ b/apps/files/js/filelist.js
@@ -684,40 +684,32 @@ $(document).ready(function(){
 	file_upload_start.on('fileuploaddrop', function(e, data) {
 		OC.Upload.log('filelist handle fileuploaddrop', e, data);
 
-		var dropTarget = $(e.originalEvent.target).closest('tr');
-		if(dropTarget && dropTarget.data('type') === 'dir') { // drag&drop upload to folder
+		var dropTarget = $(e.originalEvent.target).closest('tr, .crumb');
+		if(dropTarget && (dropTarget.data('type') === 'dir' || dropTarget.hasClass('crumb'))) { // drag&drop upload to folder
 
 			// remember as context
 			data.context = dropTarget;
 
 			var dir = dropTarget.data('file');
+			// if from file list, need to prepend parent dir
+			if (dir){
+				var parentDir = $('#dir').val() || '/';
+				if (parentDir[parentDir.length - 1] != '/'){
+					parentDir += '/';
+				}
+				dir = parentDir + dir;
+			}
+			else{
+				// read full path from crumb
+				dir = dropTarget.data('dir') || '/';
+			}
 
 			// update folder in form
 			data.formData = function(form) {
-				var formArray = form.serializeArray();
-				// array index 0 contains the max files size
-				// array index 1 contains the request token
-				// array index 2 contains the directory
-				if (formArray.length){
-					var parentDir = formArray[2]['value'];
-					if (parentDir === '/') {
-						formArray[2]['value'] += dir;
-					} else {
-						formArray[2]['value'] += '/' + dir;
-					}
-				}
-				else{
-					var parentDir = $('#dir').val() || '';
-					if (parentDir[parentDir.length - 1] != '/'){
-						parentDir += '/';
-					}
-					return [
-						{name: 'dir', value: parentDir + dir},
-						{name: 'requesttoken', value: oc_requesttoken}
-					];
-				}
-
-				return formArray;
+				return [
+					{name: 'dir', value: dir},
+					{name: 'requesttoken', value: oc_requesttoken}
+				];
 			};
 		} 
 
@@ -795,6 +787,10 @@ $(document).ready(function(){
 				data.context.find('td.filesize').text(humanFileSize(size));
 
 			} else {
+				// only append new file if dragged onto current dir's crumb (last)
+				if (data.context && data.context.hasClass('crumb') && !data.context.hasClass('last')){
+					return;
+				}
 
 				// add as stand-alone row to filelist
 				var size=t('files', 'Pending');