diff --git a/core/js/js.js b/core/js/js.js
index 1dfcb576c2ab8bcdb3076072e099fe0ba751ddc2..ba456b54c6db5a160c86b6b87b95be990645f47d 100644
--- a/core/js/js.js
+++ b/core/js/js.js
@@ -385,13 +385,23 @@ var OC={
 			return '';
 		}
 		var path = '';
-		var lastArg = arguments[arguments.length - 1];
-		var leadingSlash = arguments[0].charAt(0) === '/';
+		// convert to array
+		var args = Array.prototype.slice.call(arguments);
+		// discard empty arguments
+		args = _.filter(args, function(arg) {
+			return arg.length > 0;
+		});
+		if (args.length < 1) {
+			return '';
+		}
+
+		var lastArg = args[args.length - 1];
+		var leadingSlash = args[0].charAt(0) === '/';
 		var trailingSlash = lastArg.charAt(lastArg.length - 1) === '/';
 		var sections = [];
 		var i;
-		for (i = 0; i < arguments.length; i++) {
-			sections = sections.concat(arguments[i].split('/'));
+		for (i = 0; i < args.length; i++) {
+			sections = sections.concat(args[i].split('/'));
 		}
 		var first = !leadingSlash;
 		for (i = 0; i < sections.length; i++) {
diff --git a/core/js/tests/specs/coreSpec.js b/core/js/tests/specs/coreSpec.js
index 7a09f362ee5b78cec3ebe82ec63be69417040ee6..3ebe55305f7f32c2f0fc83e7305ea2ab4f616737 100644
--- a/core/js/tests/specs/coreSpec.js
+++ b/core/js/tests/specs/coreSpec.js
@@ -147,11 +147,15 @@ describe('Core base tests', function() {
 		});
 		it('keeps leading slashes', function() {
 			expect(OC.joinPaths('/abc')).toEqual('/abc');
+			expect(OC.joinPaths('/abc', '')).toEqual('/abc');
+			expect(OC.joinPaths('', '/abc')).toEqual('/abc');
 			expect(OC.joinPaths('/abc', 'def')).toEqual('/abc/def');
 			expect(OC.joinPaths('/abc', 'def', 'ghi')).toEqual('/abc/def/ghi');
 		});
 		it('keeps trailing slashes', function() {
+			expect(OC.joinPaths('', 'abc/')).toEqual('abc/');
 			expect(OC.joinPaths('abc/')).toEqual('abc/');
+			expect(OC.joinPaths('abc/', '')).toEqual('abc/');
 			expect(OC.joinPaths('abc', 'def/')).toEqual('abc/def/');
 			expect(OC.joinPaths('abc', 'def', 'ghi/')).toEqual('abc/def/ghi/');
 		});