diff --git a/apps/files/js/filelist.js b/apps/files/js/filelist.js
index 9c6d31ee017bfab9589928ac2fecf1e4411662d6..3e311655c9100951c5c7692b365ca0a60a3bf6ef 100644
--- a/apps/files/js/filelist.js
+++ b/apps/files/js/filelist.js
@@ -947,6 +947,13 @@
 			this.hideMask();
 
 			if (!result || result.status === 'error') {
+				// if the error is not related to folder we're trying to load, reload the page to handle logout etc
+				if (result.data.error === 'authentication_error' ||
+					result.data.error === 'token_expired' ||
+					result.data.error === 'application_not_enabled'
+				) {
+					OC.redirect(OC.generateUrl('apps/files'));
+				}
 				OC.Notification.show(result.data.message);
 				return false;
 			}
@@ -970,7 +977,7 @@
 			}
 
 			this.setFiles(result.data.files);
-			return true
+			return true;
 		},
 
 		updateStorageStatistics: function(force) {
@@ -1568,7 +1575,7 @@
 				numMatch=base.match(/\((\d+)\)/);
 				var num=2;
 				if (numMatch && numMatch.length>0) {
-					num=parseInt(numMatch[numMatch.length-1])+1;
+					num=parseInt(numMatch[numMatch.length-1], 10)+1;
 					base=base.split('(');
 					base.pop();
 					base=$.trim(base.join('('));
diff --git a/apps/files/tests/js/filelistSpec.js b/apps/files/tests/js/filelistSpec.js
index 713cd5468d8a913038607f3a075e3357d44a0d76..ae22ae0123e55932be00b99102057cc72a0ab247 100644
--- a/apps/files/tests/js/filelistSpec.js
+++ b/apps/files/tests/js/filelistSpec.js
@@ -1933,4 +1933,30 @@ describe('OCA.Files.FileList tests', function() {
 			});
 		});
 	});
+	describe('Handeling errors', function () {
+		beforeEach(function () {
+			redirectStub = sinon.stub(OC, 'redirect');
+
+			fileList = new OCA.Files.FileList($('#app-content-files'));
+		});
+		afterEach(function () {
+			fileList = undefined;
+
+			redirectStub.restore();
+		});
+		it('reloads the page on authentication errors', function () {
+			fileList.reload();
+			fakeServer.requests[0].respond(
+				200,
+				{ 'Content-Type': 'application/json' },
+				JSON.stringify({
+					status: 'error',
+					data: {
+						'error': 'authentication_error'
+					}
+				})
+			);
+			expect(redirectStub.calledWith(OC.generateUrl('apps/files'))).toEqual(true);
+		});
+	});
 });
diff --git a/lib/private/json.php b/lib/private/json.php
index 4634d7adfea821c4272be70cd737b297869327c6..da38654997f2eabfd13045c4bd304607069f3755 100644
--- a/lib/private/json.php
+++ b/lib/private/json.php
@@ -26,7 +26,7 @@ class OC_JSON{
 	public static function checkAppEnabled($app) {
 		if( !OC_App::isEnabled($app)) {
 			$l = OC_L10N::get('lib');
-			self::error(array( 'data' => array( 'message' => $l->t('Application is not enabled') )));
+			self::error(array( 'data' => array( 'message' => $l->t('Application is not enabled'), 'error' => 'application_not_enabled' )));
 			exit();
 		}
 	}
@@ -37,7 +37,7 @@ class OC_JSON{
 	public static function checkLoggedIn() {
 		if( !OC_User::isLoggedIn()) {
 			$l = OC_L10N::get('lib');
-			self::error(array( 'data' => array( 'message' => $l->t('Authentication error') )));
+			self::error(array( 'data' => array( 'message' => $l->t('Authentication error'), 'error' => 'authentication_error' )));
 			exit();
 		}
 	}
@@ -48,7 +48,7 @@ class OC_JSON{
 	public static function callCheck() {
 		if( !OC_Util::isCallRegistered()) {
 			$l = OC_L10N::get('lib');
-			self::error(array( 'data' => array( 'message' => $l->t('Token expired. Please reload page.') )));
+			self::error(array( 'data' => array( 'message' => $l->t('Token expired. Please reload page.'), 'error' => 'token_expired' )));
 			exit();
 		}
 	}
@@ -59,7 +59,7 @@ class OC_JSON{
 	public static function checkAdminUser() {
 		if( !OC_User::isAdminUser(OC_User::getUser())) {
 			$l = OC_L10N::get('lib');
-			self::error(array( 'data' => array( 'message' => $l->t('Authentication error') )));
+			self::error(array( 'data' => array( 'message' => $l->t('Authentication error'), 'error' => 'authentication_error' )));
 			exit();
 		}
 	}
@@ -71,7 +71,7 @@ class OC_JSON{
 	public static function checkUserExists($user) {
 		if (!OCP\User::userExists($user)) {
 			$l = OC_L10N::get('lib');
-			OCP\JSON::error(array('data' => array('message' => $l->t('Unknown user'))));
+			OCP\JSON::error(array('data' => array('message' => $l->t('Unknown user'), 'error' => 'unknown_user' )));
 			exit;
 		}
 	}
@@ -84,7 +84,7 @@ class OC_JSON{
 	public static function checkSubAdminUser() {
 		if(!OC_SubAdmin::isSubAdmin(OC_User::getUser())) {
 			$l = OC_L10N::get('lib');
-			self::error(array( 'data' => array( 'message' => $l->t('Authentication error') )));
+			self::error(array( 'data' => array( 'message' => $l->t('Authentication error'), 'error' => 'authentication_error' )));
 			exit();
 		}
 	}