diff --git a/apps/files/js/filelist.js b/apps/files/js/filelist.js
index 5fc444e6121b096dae1476c6bbaec3e9fe7f21ef..417c4b9fe99e07302edbbe0919991de7449a0f00 100644
--- a/apps/files/js/filelist.js
+++ b/apps/files/js/filelist.js
@@ -1131,6 +1131,14 @@
 				return false;
 			}
 
+			// Did share service die or something else fail?
+			if (result.status === 500) {
+				// Go home
+				this.changeDirectory('/');
+				OC.Notification.show(t('files', 'This directory is unavailable, please check the logs or contact the administrator'));
+				return false;
+			}
+
 			if (result.status === 404) {
 				// go back home
 				this.changeDirectory('/');
diff --git a/apps/files/tests/js/filelistSpec.js b/apps/files/tests/js/filelistSpec.js
index 6bcef8b6f4f8a48fdfb61f707cc0afa3ffa9cc81..b12ac2f251723b9be466079520944ba74dd6f3d4 100644
--- a/apps/files/tests/js/filelistSpec.js
+++ b/apps/files/tests/js/filelistSpec.js
@@ -1290,6 +1290,17 @@ describe('OCA.Files.FileList tests', function() {
 			fakeServer.respond();
 			expect(fileList.getCurrentDirectory()).toEqual('/');
 		});
+		it('switches to root dir when current directory is unavailable', function() {
+			fakeServer.respondWith(/\/index\.php\/apps\/files\/ajax\/list.php\?dir=%2funexist/, [
+				500, {
+					"Content-Type": "application/json"
+				},
+				''
+			]);
+			fileList.changeDirectory('/unexist');
+			fakeServer.respond();
+			expect(fileList.getCurrentDirectory()).toEqual('/');
+		});
 		it('shows mask before loading file list then hides it at the end', function() {
 			var showMaskStub = sinon.stub(fileList, 'showMask');
 			var hideMaskStub = sinon.stub(fileList, 'hideMask');