diff --git a/apps/files_sharing/lib/SharedStorage.php b/apps/files_sharing/lib/SharedStorage.php
index 43896679a31dd1ee2137daf317f4808cd62ecc28..7625c0bba447af8b2368f54817402a7dbe96390b 100644
--- a/apps/files_sharing/lib/SharedStorage.php
+++ b/apps/files_sharing/lib/SharedStorage.php
@@ -33,7 +33,6 @@
 namespace OCA\Files_Sharing;
 
 use OC\Files\Cache\FailedCache;
-use OC\Files\Cache\LazyWatcher;
 use OC\Files\Cache\NullWatcher;
 use OC\Files\Filesystem;
 use OC\Files\Storage\FailedStorage;
@@ -127,11 +126,12 @@ class SharedStorage extends \OC\Files\Storage\Wrapper\Jail implements ISharedSto
 		$this->initialized = true;
 		try {
 			Filesystem::initMountPoints($this->superShare->getShareOwner());
-			$sourcePath = $this->ownerView->getPath($this->superShare->getNodeId());
+			$storageId = $this->superShare->getNodeCacheEntry() ? $this->superShare->getNodeCacheEntry()->getStorageId() : null;
+			$sourcePath = $this->ownerView->getPath($this->superShare->getNodeId(), $storageId);
 			[$this->nonMaskedStorage, $this->rootPath] = $this->ownerView->resolvePath($sourcePath);
 			$this->storage = new PermissionsMask([
 				'storage' => $this->nonMaskedStorage,
-				'mask' => $this->superShare->getPermissions()
+				'mask' => $this->superShare->getPermissions(),
 			]);
 		} catch (NotFoundException $e) {
 			// original file not accessible or deleted, set FailedStorage
@@ -379,7 +379,7 @@ class SharedStorage extends \OC\Files\Storage\Wrapper\Jail implements ISharedSto
 		if (!$storage) {
 			$storage = $this;
 		}
-		$sourceRoot  = $this->getSourceRootInfo();
+		$sourceRoot = $this->getSourceRootInfo();
 		if ($this->storage instanceof FailedStorage) {
 			return new FailedCache();
 		}
@@ -467,7 +467,7 @@ class SharedStorage extends \OC\Files\Storage\Wrapper\Jail implements ISharedSto
 		// shares do not participate in availability logic
 		return [
 			'available' => true,
-			'last_checked' => 0
+			'last_checked' => 0,
 		];
 	}
 
diff --git a/lib/private/Files/Cache/NullWatcher.php b/lib/private/Files/Cache/NullWatcher.php
index 6ab886f05dcd0f20d800dd63ad4adf45d5ba0e48..57e43444fdc430e82683be98494a6018d662832d 100644
--- a/lib/private/Files/Cache/NullWatcher.php
+++ b/lib/private/Files/Cache/NullWatcher.php
@@ -27,7 +27,6 @@ class NullWatcher extends Watcher {
 	private $policy;
 
 	public function __construct() {
-
 	}
 
 	public function setPolicy($policy) {
@@ -43,7 +42,6 @@ class NullWatcher extends Watcher {
 	}
 
 	public function update($path, $cachedData) {
-
 	}
 
 	public function needsUpdate($path, $cachedData) {
@@ -51,6 +49,5 @@ class NullWatcher extends Watcher {
 	}
 
 	public function cleanFolder($path) {
-
 	}
 }
diff --git a/lib/private/Files/View.php b/lib/private/Files/View.php
index ef8656258d164588a262d0ce72814299f4660c9e..16074a89ca83a0995138f89f2775dc8bc7bb872f 100644
--- a/lib/private/Files/View.php
+++ b/lib/private/Files/View.php
@@ -239,7 +239,7 @@ class View {
 	public function getLocalFile($path) {
 		$parent = substr($path, 0, strrpos($path, '/'));
 		$path = $this->getAbsolutePath($path);
-		list($storage, $internalPath) = Filesystem::resolvePath($path);
+		[$storage, $internalPath] = Filesystem::resolvePath($path);
 		if (Filesystem::isValidPath($parent) and $storage) {
 			return $storage->getLocalFile($internalPath);
 		} else {
@@ -254,7 +254,7 @@ class View {
 	public function getLocalFolder($path) {
 		$parent = substr($path, 0, strrpos($path, '/'));
 		$path = $this->getAbsolutePath($path);
-		list($storage, $internalPath) = Filesystem::resolvePath($path);
+		[$storage, $internalPath] = Filesystem::resolvePath($path);
 		if (Filesystem::isValidPath($parent) and $storage) {
 			return $storage->getLocalFolder($internalPath);
 		} else {
@@ -668,10 +668,10 @@ class View {
 				$this->changeLock($path, ILockingProvider::LOCK_EXCLUSIVE);
 
 				/** @var \OC\Files\Storage\Storage $storage */
-				list($storage, $internalPath) = $this->resolvePath($path);
+				[$storage, $internalPath] = $this->resolvePath($path);
 				$target = $storage->fopen($internalPath, 'w');
 				if ($target) {
-					list(, $result) = \OC_Helper::streamCopy($data, $target);
+					[, $result] = \OC_Helper::streamCopy($data, $target);
 					fclose($target);
 					fclose($data);
 
@@ -1089,7 +1089,7 @@ class View {
 					[Filesystem::signal_param_path => $this->getHookPath($path)]
 				);
 			}
-			list($storage, $internalPath) = Filesystem::resolvePath($absolutePath . $postFix);
+			[$storage, $internalPath] = Filesystem::resolvePath($absolutePath . $postFix);
 			if ($storage) {
 				return $storage->hash($type, $internalPath, $raw);
 			}
@@ -1143,7 +1143,7 @@ class View {
 
 			$run = $this->runHooks($hooks, $path);
 			/** @var \OC\Files\Storage\Storage $storage */
-			list($storage, $internalPath) = Filesystem::resolvePath($absolutePath . $postFix);
+			[$storage, $internalPath] = Filesystem::resolvePath($absolutePath . $postFix);
 			if ($run and $storage) {
 				if (in_array('write', $hooks) || in_array('delete', $hooks)) {
 					try {
@@ -1568,7 +1568,7 @@ class View {
 		 * @var \OC\Files\Storage\Storage $storage
 		 * @var string $internalPath
 		 */
-		list($storage, $internalPath) = Filesystem::resolvePath($path);
+		[$storage, $internalPath] = Filesystem::resolvePath($path);
 		if ($storage) {
 			$cache = $storage->getCache($path);
 
@@ -1705,7 +1705,7 @@ class View {
 		 * @var Storage\Storage $storage
 		 * @var string $internalPath
 		 */
-		list($storage, $internalPath) = $this->resolvePath($path);
+		[$storage, $internalPath] = $this->resolvePath($path);
 		if ($storage) {
 			return $storage->getETag($internalPath);
 		} else {
@@ -1719,10 +1719,11 @@ class View {
 	 * Note that the resulting path is not guarantied to be unique for the id, multiple paths can point to the same file
 	 *
 	 * @param int $id
-	 * @throws NotFoundException
+	 * @param int|null $storageId
 	 * @return string
+	 * @throws NotFoundException
 	 */
-	public function getPath($id) {
+	public function getPath($id, int $storageId = null) {
 		$id = (int)$id;
 		$manager = Filesystem::getMountManager();
 		$mounts = $manager->findIn($this->fakeRoot);
@@ -1737,6 +1738,12 @@ class View {
 			return $a instanceof SharedMount && (!$b instanceof SharedMount) ? 1 : -1;
 		});
 
+		if (!is_null($storageId)) {
+			$mounts = array_filter($mounts, function (IMountPoint $mount) use ($storageId) {
+				return $mount->getNumericStorageId() === $storageId;
+			});
+		}
+
 		foreach ($mounts as $mount) {
 			/**
 			 * @var \OC\Files\Mount\MountPoint $mount
@@ -1844,7 +1851,7 @@ class View {
 	public function verifyPath($path, $fileName) {
 		try {
 			/** @type \OCP\Files\Storage $storage */
-			list($storage, $internalPath) = $this->resolvePath($path);
+			[$storage, $internalPath] = $this->resolvePath($path);
 			$storage->verifyPath($internalPath, $fileName);
 		} catch (ReservedWordException $ex) {
 			$l = \OC::$server->getL10N('lib');