diff --git a/apps/files_sharing/lib/SharedStorage.php b/apps/files_sharing/lib/SharedStorage.php
index 888cbfda143ce8d7771ea2b854163a655b593f01..ddbc9b8a8984f0d9fa43fc4304cd6034398bf1ad 100644
--- a/apps/files_sharing/lib/SharedStorage.php
+++ b/apps/files_sharing/lib/SharedStorage.php
@@ -31,16 +31,16 @@
 
 namespace OCA\Files_Sharing;
 
-use OC\Files\Filesystem;
 use OC\Files\Cache\FailedCache;
+use OC\Files\Filesystem;
 use OC\Files\Storage\Wrapper\PermissionsMask;
-use OCA\Files_Sharing\ISharedStorage;
 use OC\Files\Storage\FailedStorage;
 use OCP\Constants;
 use OCP\Files\Cache\ICacheEntry;
 use OCP\Files\NotFoundException;
 use OCP\Files\Storage\IStorage;
 use OCP\Lock\ILockingProvider;
+use OC\User\NoUserException;
 
 /**
  * Convert target path to source path and pass the function call to the correct storage provider
@@ -99,6 +99,7 @@ class SharedStorage extends \OC\Files\Storage\Wrapper\Jail implements ISharedSto
 	private function getSourceRootInfo() {
 		if (is_null($this->sourceRootInfo)) {
 			if (is_null($this->superShare->getNodeCacheEntry())) {
+				$this->init();
 				$this->sourceRootInfo = $this->nonMaskedStorage->getCache()->get($this->rootPath);
 			} else {
 				$this->sourceRootInfo = $this->superShare->getNodeCacheEntry();
@@ -121,13 +122,25 @@ class SharedStorage extends \OC\Files\Storage\Wrapper\Jail implements ISharedSto
 				'mask' => $this->superShare->getPermissions()
 			]);
 		} catch (NotFoundException $e) {
+			// original file not accessible or deleted, set FailedStorage
+			$this->storage = new FailedStorage(['exception' => $e]);
+			$this->cache = new FailedCache();
+			$this->rootPath = '';
+		} catch (NoUserException $e) {
+			// sharer user deleted, set FailedStorage
 			$this->storage = new FailedStorage(['exception' => $e]);
+			$this->cache = new FailedCache();
 			$this->rootPath = '';
 		} catch (\Exception $e) {
 			$this->storage = new FailedStorage(['exception' => $e]);
+			$this->cache = new FailedCache();
 			$this->rootPath = '';
 			$this->logger->logException($e);
 		}
+
+		if (!$this->nonMaskedStorage) {
+			$this->nonMaskedStorage = $this->storage;
+		}
 	}
 
 	/**
@@ -344,6 +357,9 @@ class SharedStorage extends \OC\Files\Storage\Wrapper\Jail implements ISharedSto
 		if (!$storage) {
 			$storage = $this;
 		}
+		if ($this->storage instanceof FailedStorage) {
+			return new FailedCache();
+		}
 		$this->cache = new \OCA\Files_Sharing\Cache($storage, $this->getSourceRootInfo(), $this->superShare);
 		return $this->cache;
 	}
diff --git a/apps/files_sharing/tests/SharedStorageTest.php b/apps/files_sharing/tests/SharedStorageTest.php
index eaa138b0f70eaf5b4de7c06beb92863eac4bd4bd..7d007cb64140977995527036ac68acf3348887bc 100644
--- a/apps/files_sharing/tests/SharedStorageTest.php
+++ b/apps/files_sharing/tests/SharedStorageTest.php
@@ -28,6 +28,11 @@
 
 namespace OCA\Files_Sharing\Tests;
 
+use OCA\Files_Sharing\SharedStorage;
+use OCP\Share\IShare;
+use OC\Files\View;
+use OCP\Files\NotFoundException;
+
 /**
  * Class SharedStorageTest
  *
@@ -559,4 +564,37 @@ class SharedStorageTest extends TestCase {
 		$this->shareManager->deleteShare($share);
 
 	}
+
+	public function testInitWithNonExistingUser() {
+		$share = $this->createMock(IShare::class);
+		$share->method('getShareOwner')->willReturn('unexist');
+		$ownerView = $this->createMock(View::class);
+		$storage = new SharedStorage([
+			'ownerView' => $ownerView,
+			'superShare' => $share,
+			'groupedShares' => [$share],
+			'user' => 'user1',
+		]);
+
+		// trigger init
+		$this->assertInstanceOf(\OC\Files\Storage\FailedStorage::class, $storage->getSourceStorage());
+		$this->assertInstanceOf(\OC\Files\Cache\FailedCache::class, $storage->getCache());
+	}
+
+	public function testInitWithNotFoundSource() {
+		$share = $this->createMock(IShare::class);
+		$share->method('getShareOwner')->willReturn(self::TEST_FILES_SHARING_API_USER1);
+		$ownerView = $this->createMock(View::class);
+		$ownerView->method('getPath')->will($this->throwException(new NotFoundException()));
+		$storage = new SharedStorage([
+			'ownerView' => $ownerView,
+			'superShare' => $share,
+			'groupedShares' => [$share],
+			'user' => 'user1',
+		]);
+
+		// trigger init
+		$this->assertInstanceOf(\OC\Files\Storage\FailedStorage::class, $storage->getSourceStorage());
+		$this->assertInstanceOf(\OC\Files\Cache\FailedCache::class, $storage->getCache());
+	}
 }