diff --git a/.jshintrc b/.jshintrc
index 0b055afde3d78bc03ca67136ec21b3ef79bc3bef..19ce0606297c384b1ee9999fe0db9d68e60badfd 100644
--- a/.jshintrc
+++ b/.jshintrc
@@ -28,7 +28,10 @@
 		"_": true,
 		"OC": true,
 		"OCA": true,
+		"OCP": true,
 		"t": true,
-		"n": true
+		"n": true,
+		"escapeHTML": true,
+		"Promise": true
 	}
 }
diff --git a/core/js/js.js b/core/js/js.js
index c02ef5c7920369a04a64e576397c930804d96351..1f84b40a35add49b0d8a66f4aed360cdefcd8a9b 100644
--- a/core/js/js.js
+++ b/core/js/js.js
@@ -1512,7 +1512,7 @@ function initCore() {
 
 	var resizeMenu = function() {
 		var appList = $('#appmenu li');
-		var headerWidth = $('.header-left').width() - $('#nextcloud').width()
+		var headerWidth = $('.header-left').width() - $('#nextcloud').width();
 		var usePercentualAppMenuLimit = 0.33;
 		var minAppsDesktop = 8;
 		var availableWidth = headerWidth - $(appList).width();
diff --git a/core/js/tests/specs/coreSpec.js b/core/js/tests/specs/coreSpec.js
index dd13cba8e2b3a3570449d554ef32ab13b1698891..9848fb46ffcac6683c1037d6ea22d0065e12ec42 100644
--- a/core/js/tests/specs/coreSpec.js
+++ b/core/js/tests/specs/coreSpec.js
@@ -256,10 +256,10 @@ describe('Core base tests', function() {
 	describe('filePath', function() {
 		beforeEach(function() {
 			OC.webroot = 'http://localhost';
-			OC.appswebroots['files'] = OC.webroot + '/apps3/files';
+			OC.appswebroots.files = OC.webroot + '/apps3/files';
 		});
 		afterEach(function() {
-			delete OC.appswebroots['files'];
+			delete OC.appswebroots.files;
 		});
 
 		it('Uses a direct link for css and images,' , function() {
diff --git a/core/js/tests/specs/files/clientSpec.js b/core/js/tests/specs/files/clientSpec.js
index f75998029a9cd659012119fe4e804f3f0504b5e7..d66c209bca5c1855d6fd302efe3ed6fb0fa8d846 100644
--- a/core/js/tests/specs/files/clientSpec.js
+++ b/core/js/tests/specs/files/clientSpec.js
@@ -448,7 +448,7 @@ describe('OC.Files.Client tests', function() {
 				expect(info.id).toEqual(11);
 
 				// file entry
-				var info = response[1];
+				info = response[1];
 				expect(info instanceof OC.Files.FileInfo).toEqual(true);
 				expect(info.id).toEqual(51);
 
diff --git a/core/js/tests/specs/jquery.avatarSpec.js b/core/js/tests/specs/jquery.avatarSpec.js
index d7305736690b7d11ac8293b5bd2078628ef1d813..b9351d2a8a0184e58dc411f038120695f7db115f 100644
--- a/core/js/tests/specs/jquery.avatarSpec.js
+++ b/core/js/tests/specs/jquery.avatarSpec.js
@@ -11,7 +11,7 @@
 describe('jquery.avatar tests', function() {
 	
 	var $div;
-	var devicePixelRatio
+	var devicePixelRatio;
 
 	beforeEach(function() {
 		$('#testArea').append($('<div id="avatardiv">'));
@@ -24,7 +24,7 @@ describe('jquery.avatar tests', function() {
 	afterEach(function() {
 		$div.remove();
 
-		window.devicePixelRatio = devicePixelRatio
+		window.devicePixelRatio = devicePixelRatio;
 	});
 
 	describe('size', function() {
diff --git a/core/js/tests/specs/mimeTypeSpec.js b/core/js/tests/specs/mimeTypeSpec.js
index 182941de1a90704dc666c74503795553b3a4476e..8ad0300a0a7c12a6560ebcc365296b671dcac223 100644
--- a/core/js/tests/specs/mimeTypeSpec.js
+++ b/core/js/tests/specs/mimeTypeSpec.js
@@ -26,17 +26,17 @@ describe('MimeType tests', function() {
 	beforeEach(function() {
 		_files = OC.MimeTypeList.files;
 		_aliases = OC.MimeTypeList.aliases;
-		_theme = OC.MimeTypeList.themes['abc'];
+		_theme = OC.MimeTypeList.themes.abc;
 
 		OC.MimeTypeList.files = ['folder', 'folder-shared', 'folder-external', 'foo-bar', 'foo', 'file'];
 		OC.MimeTypeList.aliases = {'app/foobar': 'foo/bar'};
-		OC.MimeTypeList.themes['abc'] = ['folder'];
+		OC.MimeTypeList.themes.abc = ['folder'];
 	});
 
 	afterEach(function() {
 		OC.MimeTypeList.files = _files;
 		OC.MimeTypeList.aliases = _aliases;
-		OC.MimeTypeList.themes['abc'] = _theme;
+		OC.MimeTypeList.themes.abc = _theme;
 	});
 
 	describe('_getFile', function() {
@@ -109,9 +109,9 @@ describe('MimeType tests', function() {
 
 				var res = OC.MimeType.getIconUrl('dir');
 				expect(Object.keys(OC.MimeType._mimeTypeIcons).length).toEqual(1);
-				expect(OC.MimeType._mimeTypeIcons['dir']).toEqual(res);
+				expect(OC.MimeType._mimeTypeIcons.dir).toEqual(res);
 
-				var res = OC.MimeType.getIconUrl('dir-shared');
+				res = OC.MimeType.getIconUrl('dir-shared');
 				expect(Object.keys(OC.MimeType._mimeTypeIcons).length).toEqual(2);
 				expect(OC.MimeType._mimeTypeIcons['dir-shared']).toEqual(res);
 			});
diff --git a/core/js/tests/specs/sharedialoglinkshareview.js b/core/js/tests/specs/sharedialoglinkshareview.js
index 811919b56035b85d6dd2ebedf08b6a10eb0d2b39..12f5e762cee7f798f1e6022ce0726eef4446bd99 100644
--- a/core/js/tests/specs/sharedialoglinkshareview.js
+++ b/core/js/tests/specs/sharedialoglinkshareview.js
@@ -48,7 +48,6 @@ describe('OC.Share.ShareDialogLinkShareView', function () {
 		configModel = new OC.Share.ShareConfigModel({
 			enforcePasswordForPublicLink: false,
 			isResharingAllowed: true,
-			enforcePasswordForPublicLink: false,
 			isDefaultExpireDateEnabled: false,
 			isDefaultExpireDateEnforced: false,
 			defaultExpireDate: 7
diff --git a/core/js/tests/specs/sharedialogshareelistview.js b/core/js/tests/specs/sharedialogshareelistview.js
index bcc596a1386ee6bbfc54679ca91e126515954bc5..d256abcbffe17cc00d958b90bfe72c1400bc0f24 100644
--- a/core/js/tests/specs/sharedialogshareelistview.js
+++ b/core/js/tests/specs/sharedialogshareelistview.js
@@ -59,7 +59,6 @@ describe('OC.Share.ShareDialogShareeListView', function () {
 		configModel = new OC.Share.ShareConfigModel({
 			enforcePasswordForPublicLink: false,
 			isResharingAllowed: true,
-			enforcePasswordForPublicLink: false,
 			isDefaultExpireDateEnabled: false,
 			isDefaultExpireDateEnforced: false,
 			defaultExpireDate: 7
diff --git a/core/js/tests/specs/sharedialogviewSpec.js b/core/js/tests/specs/sharedialogviewSpec.js
index 95349bc4875df45430be661faf953f6401832581..c6d5793623cfea41793aa16a9b300767d3efe678 100644
--- a/core/js/tests/specs/sharedialogviewSpec.js
+++ b/core/js/tests/specs/sharedialogviewSpec.js
@@ -67,7 +67,6 @@ describe('OC.Share.ShareDialogView', function() {
 		configModel = new OC.Share.ShareConfigModel({
 			enforcePasswordForPublicLink: false,
 			isResharingAllowed: true,
-			enforcePasswordForPublicLink: false,
 			isDefaultExpireDateEnabled: false,
 			isDefaultExpireDateEnforced: false,
 			defaultExpireDate: 7