diff --git a/apps/files_sharing/appinfo/app.php b/apps/files_sharing/appinfo/app.php
index d3e05cc62d8c8fb2f0e3190f1de3a13640dc6338..f8326db45bb13b53fcac2b30bbadafefe3f8e27d 100644
--- a/apps/files_sharing/appinfo/app.php
+++ b/apps/files_sharing/appinfo/app.php
@@ -5,6 +5,7 @@ OC::$CLASSPATH['OC_Share_Backend_Folder'] = 'apps/files_sharing/lib/share/folder
 OC::$CLASSPATH['OC\Files\Storage\Shared'] = "apps/files_sharing/lib/sharedstorage.php";
 OC::$CLASSPATH['OC\Files\Cache\Shared_Cache'] = 'apps/files_sharing/lib/cache.php';
 OC::$CLASSPATH['OC\Files\Cache\Shared_Permissions'] = 'apps/files_sharing/lib/permissions.php';
+OC::$CLASSPATH['OC\Files\Cache\Shared_Updater'] = 'apps/files_sharing/lib/updater.php';
 OC::$CLASSPATH['OC\Files\Cache\Shared_Watcher'] = 'apps/files_sharing/lib/watcher.php';
 OCP\Util::connectHook('OC_Filesystem', 'setup', '\OC\Files\Storage\Shared', 'setup');
 OCP\Share::registerBackend('file', 'OC_Share_Backend_File');
diff --git a/apps/files_sharing/lib/cache.php b/apps/files_sharing/lib/cache.php
index 5309ec789693db5455e86410fc44f08dd123eb6d..851e958f686d082bdc63f1d10956e050ad53a96b 100644
--- a/apps/files_sharing/lib/cache.php
+++ b/apps/files_sharing/lib/cache.php
@@ -125,8 +125,8 @@ class Shared_Cache extends Cache {
 	 * @return int file id
 	 */
 	public function put($file, array $data) {
-		if ($file == '' && isset($data['etag'])) {
-			\OCP\Config::setUserValue(\OCP\User::getUser(), 'files_sharing', 'etag', $data['etag']);
+		if ($file === '' && isset($data['etag'])) {
+			return \OCP\Config::setUserValue(\OCP\User::getUser(), 'files_sharing', 'etag', $data['etag']);
 		} else if ($cache = $this->getSourceCache($file)) {
 			return $cache->put($this->files[$file], $data);
 		}
diff --git a/apps/files_sharing/lib/sharedstorage.php b/apps/files_sharing/lib/sharedstorage.php
index 1e82d04ec230f6d85c0cd1242d1f8e245067ac92..0163f2e00b486c652e81836ed4c130c9271b6f63 100644
--- a/apps/files_sharing/lib/sharedstorage.php
+++ b/apps/files_sharing/lib/sharedstorage.php
@@ -412,6 +412,9 @@ class Shared extends \OC\Files\Storage\Common {
 		if (!\OCP\User::isLoggedIn() || \OCP\User::getUser() != $options['user'] || \OCP\Share::getItemsSharedWith('file')) {
 			$user_dir = $options['user_dir'];
 			\OC\Files\Filesystem::mount('\OC\Files\Storage\Shared', array('sharedFolder' => '/Shared'), $user_dir.'/Shared/');
+			\OC_Hook::connect('OC_Filesystem', 'post_write', '\OC\Files\Cache\Shared_Updater', 'writeHook');
+			\OC_Hook::connect('OC_Filesystem', 'post_delete', '\OC\Files\Cache\Shared_Updater', 'deleteHook');
+			\OC_Hook::connect('OC_Filesystem', 'post_rename', '\OC\Files\Cache\Shared_Updater', 'renameHook');
 		}
 	}
 
diff --git a/apps/files_sharing/lib/updater.php b/apps/files_sharing/lib/updater.php
new file mode 100644
index 0000000000000000000000000000000000000000..af6f921559842aa274858db56649dcbfe5a545f6
--- /dev/null
+++ b/apps/files_sharing/lib/updater.php
@@ -0,0 +1,77 @@
+<?php
+/**
+ * ownCloud
+ *
+ * @author Michael Gapczynski
+ * @copyright 2013 Michael Gapczynski mtgap@owncloud.com
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+namespace OC\Files\Cache;
+
+class Shared_Updater {
+
+	/**
+	* Correct the parent folders' ETags for all users shared the file at $target
+	*
+	* @param string $target
+	*/
+	static public function correctFolders($target) {
+		$uid = \OCP\User::getUser();
+		$uidOwner = \OC\Files\Filesystem::getOwner($target);
+		$info = \OC\Files\Filesystem::getFileInfo($target);
+		// Correct Shared folders of other users shared with
+		$users = \OCP\Share::getUsersItemShared('file', $info['fileid'], $uidOwner, true);
+		if (!empty($users)) {
+			foreach ($users as $user) {
+				// The ETag of the logged in user should already be updated
+				if ($user !== $uid) {
+					$etag = \OC\Files\Filesystem::getETag(''); 
+					\OCP\Config::setUserValue($user, 'files_sharing', 'etag', $etag);
+				}
+			}
+			// Correct folders of shared file owner
+			if ($uidOwner !== $uid && $source = \OC_Share_Backend_File::getSource($target)) {
+				\OC\Files\Filesystem::initMountPoints($source['uid_owner']);
+				$source = '/'.$source['uid_owner'].'/'.$source['path'];
+				$mtime = \OC\Files\Filesystem::filemtime($target);
+				\OC\Files\Cache\Updater::correctFolder($source, $mtime);
+			}
+		}
+	}
+
+	/**
+	 * @param array $params
+	 */
+	static public function writeHook($params) {
+		self::correctFolders($params['path']);
+	}
+
+	/**
+	 * @param array $params
+	 */
+	static public function renameHook($params) {
+		self::correctFolders($params['oldpath']);
+		self::correctFolders($params['newpath']);
+	}
+
+	/**
+	 * @param array $params
+	 */
+	static public function deleteHook($params) {
+		self::correctFolders($params['path']);
+	}
+
+}
\ No newline at end of file
diff --git a/lib/public/share.php b/lib/public/share.php
index c0f35333e83010f72387d675b2a55092b2d95f4d..3d157b1a5f95861df69228260f756ed8464bf5cf 100644
--- a/lib/public/share.php
+++ b/lib/public/share.php
@@ -197,6 +197,29 @@ class Share {
 			$parameters, -1, $includeCollections);
 	}
 
+	/**
+	* Get all users an item is shared with
+	* @param string Item type
+	* @param string Item source
+	* @param string Owner
+	* @param bool Include collections
+	* @return Return array of users
+	*/
+	public static function getUsersItemShared($itemType, $itemSource, $uidOwner, $includeCollections = false) {
+		$users = array();
+		$items = self::getItems($itemType, $itemSource, null, null, $uidOwner, self::FORMAT_NONE, null, -1, $includeCollections);
+		if ($items) {
+			foreach ($items as $item) {
+				if ((int)$item['share_type'] === self::SHARE_TYPE_USER) {
+					$users[] = $item['share_with'];
+				} else if ((int)$item['share_type'] === self::SHARE_TYPE_GROUP) {
+					$users = array_merge($users, \OC_Group::usersInGroup($item['share_with']));
+				}
+			}
+		}
+		return $users;
+	}
+
 	/**
 	* @brief Share an item with a user, group, or via private link
 	* @param string Item type