diff --git a/lib/private/files/cache/updater.php b/lib/private/files/cache/updater.php
index c303ff24b1f76c668fb81dd47657bc137cdc48e3..31a4a7c21e7ceaf4291ff0544d755a48f0ad40c2 100644
--- a/lib/private/files/cache/updater.php
+++ b/lib/private/files/cache/updater.php
@@ -30,6 +30,11 @@ class Updater {
 		$this->propagator = new ChangePropagator($view);
 	}
 
+	public function propagate($path, $time = null) {
+		$this->propagator->addChange($path);
+		$this->propagator->propagateChanges($time);
+	}
+
 	/**
 	 * Update the cache for $path
 	 *
diff --git a/lib/private/files/view.php b/lib/private/files/view.php
index 5f5f29ded4f6d60c11d1458f0011a5c119d63ded..e15a3063e94a0e74d776b91a04192896a9f519cd 100644
--- a/lib/private/files/view.php
+++ b/lib/private/files/view.php
@@ -903,6 +903,7 @@ class View {
 				$scanner->scan($internalPath, Cache\Scanner::SCAN_SHALLOW);
 				$data = $cache->get($internalPath);
 			} else if ($watcher->checkUpdate($internalPath, $data)) {
+				$this->updater->propagate($path);
 				$data = $cache->get($internalPath);
 			}
 
@@ -974,6 +975,7 @@ class View {
 				$scanner->scan($internalPath, Cache\Scanner::SCAN_SHALLOW);
 				$data = $cache->get($internalPath);
 			} else if ($watcher->checkUpdate($internalPath, $data)) {
+				$this->updater->propagate($path);
 				$data = $cache->get($internalPath);
 			}
 
diff --git a/tests/lib/files/view.php b/tests/lib/files/view.php
index 5f030f29fa7520f1a0c080e7e32da243c89a05f5..086ac873bfba600cc362c741530e6a7fc55e39dd 100644
--- a/tests/lib/files/view.php
+++ b/tests/lib/files/view.php
@@ -8,6 +8,7 @@
 namespace Test\Files;
 
 use OC\Files\Cache\Watcher;
+use OC\Files\Storage\Temporary;
 
 class TemporaryNoTouch extends \OC\Files\Storage\Temporary {
 	public function touch($path, $mtime = null) {
@@ -652,6 +653,36 @@ class View extends \PHPUnit_Framework_TestCase {
 		$this->assertSame($info['etag'], $info2['etag']);
 	}
 
+	public function testWatcherEtagCrossStorage() {
+		$storage1 = new Temporary(array());
+		$storage2 = new Temporary(array());
+		$scanner1 = $storage1->getScanner();
+		$scanner2 = $storage2->getScanner();
+		$storage1->mkdir('sub');
+		\OC\Files\Filesystem::mount($storage1, array(), '/test/');
+		\OC\Files\Filesystem::mount($storage2, array(), '/test/sub/storage');
+
+		$past = time() - 100;
+		$storage2->file_put_contents('test.txt', 'foobar');
+		$scanner1->scan('');
+		$scanner2->scan('');
+		$view = new \OC\Files\View('');
+
+		$storage2->getWatcher('')->setPolicy(Watcher::CHECK_ALWAYS);
+
+		$oldFileInfo = $view->getFileInfo('/test/sub/storage/test.txt');
+		$oldFolderInfo = $view->getFileInfo('/test');
+
+		$storage2->getCache()->update($oldFileInfo->getId(), array(
+			'storage_mtime' => $past
+		));
+
+		$view->getFileInfo('/test/sub/storage/test.txt');
+		$newFolderInfo = $view->getFileInfo('/test');
+
+		$this->assertNotEquals($newFolderInfo->getEtag(), $oldFolderInfo->getEtag());
+	}
+
 	/**
 	 * @dataProvider absolutePathProvider
 	 */