diff --git a/apps/files/ajax/download.php b/apps/files/ajax/download.php
index b9a4ddaf5e7df297d3ad4c5666e35eec4f344a2b..7c8dcb372e24c5d4517b1ac5459e1c03feb9744a 100644
--- a/apps/files/ajax/download.php
+++ b/apps/files/ajax/download.php
@@ -33,4 +33,10 @@ OCP\User::checkLoggedIn();
 $files = $_GET["files"];
 $dir = $_GET["dir"];
 
-OC_Files::get($dir, $files, $_SERVER['REQUEST_METHOD'] == 'HEAD' ? true : false);
+$files_list = json_decode($files);
+// in case we get only a single file
+if ($files_list === NULL ) {
+	$files_list = array($files);
+}
+
+OC_Files::get($dir, $files_list, $_SERVER['REQUEST_METHOD'] == 'HEAD' ? true : false);
diff --git a/apps/files/js/files.js b/apps/files/js/files.js
index 464f77036857c6ec85982976cf5bfc92a8848f89..a4ef41c280382cdf34925504d416ea0ea39777eb 100644
--- a/apps/files/js/files.js
+++ b/apps/files/js/files.js
@@ -220,14 +220,15 @@ $(document).ready(function() {
 	});
 
 	$('.download').click('click',function(event) {
-		var files=getSelectedFiles('name').join(';');
+		var files=getSelectedFiles('name');
+		var fileslist = JSON.stringify(files);
 		var dir=$('#dir').val()||'/';
 		OC.Notification.show(t('files','Your download is being prepared. This might take some time if the files are big.'));
 		// use special download URL if provided, e.g. for public shared files
 		if ( (downloadURL = document.getElementById("downloadURL")) ) {
 			window.location=downloadURL.value+"&download&files="+files;
 		} else {
-			window.location=OC.filePath('files', 'ajax', 'download.php') + '?'+ $.param({ dir: dir, files: files });
+			window.location=OC.filePath('files', 'ajax', 'download.php') + '?'+ $.param({ dir: dir, files: fileslist });
 		}
 		return false;
 	});
diff --git a/lib/files.php b/lib/files.php
index b594b78c4b768d7225368859535a76eb07b62ddd..447ffb50577b07298fc034ed48471a590ff8d997 100644
--- a/lib/files.php
+++ b/lib/files.php
@@ -49,8 +49,9 @@ class OC_Files {
 			isset($_SERVER['MOD_X_ACCEL_REDIRECT_ENABLED'])) {
 			$xsendfile = true;
 		}
-		if(strpos($files, ';')) {
-			$files=explode(';', $files);
+
+		if (count($files) == 1) {
+			$files = $files[0];
 		}
 
 		if (is_array($files)) {
@@ -77,7 +78,13 @@ class OC_Files {
 				}
 			}
 			$zip->close();
-			$name = basename($dir) . '.zip';
+			$basename = basename($dir);
+			if ($basename) {
+				$name = $basename . '.zip';
+			} else {
+				$name = 'owncloud.zip';
+			}
+			
 			set_time_limit($executionTime);
 		} elseif (\OC\Files\Filesystem::is_dir($dir . '/' . $files)) {
 			self::validateZipDownload($dir, $files);