diff --git a/lib/private/share/share.php b/lib/private/share/share.php
index ebac04530720023b9ca03cda81875e6635a2218c..3751b035bd4e3577a4e89512e72d31cc9ce0825b 100644
--- a/lib/private/share/share.php
+++ b/lib/private/share/share.php
@@ -91,23 +91,25 @@ class Share extends \OC\Share\Constants {
 
 	/**
 	 * Find which users can access a shared item
-	 * @param $path to the file
-	 * @param $user owner of the file
-	 * @param include owner to the list of users with access to the file
+	 * @param string $path to the file
+	 * @param string $ownerUser owner of the file
+	 * @param bool $includeOwner include owner to the list of users with access to the file
+	 * @param bool $returnUserPaths Return an array with the user => path map
 	 * @return array
 	 * @note $path needs to be relative to user data dir, e.g. 'file.txt'
 	 *       not '/admin/data/file.txt'
 	 */
-	public static function getUsersSharingFile($path, $user, $includeOwner = false) {
+	public static function getUsersSharingFile($path, $ownerUser, $includeOwner = false, $returnUserPaths = false) {
 
-		$shares = array();
+		$shares = $sharePaths = $fileTargets = array();
 		$publicShare = false;
 		$source = -1;
 		$cache = false;
 
-		$view = new \OC\Files\View('/' . $user . '/files');
+		$view = new \OC\Files\View('/' . $ownerUser . '/files');
 		if ($view->file_exists($path)) {
 			$meta = $view->getFileInfo($path);
+			$path = substr($meta->getPath(), strlen('/' . $ownerUser . '/files'));
 		} else {
 			// if the file doesn't exists yet we start with the parent folder
 			$meta = $view->getFileInfo(dirname($path));
@@ -119,10 +121,9 @@ class Share extends \OC\Share\Constants {
 		}
 
 		while ($source !== -1) {
-
 			// Fetch all shares with another user
 			$query = \OC_DB::prepare(
-				'SELECT `share_with`
+				'SELECT `share_with`, `file_source`, `file_target`
 				FROM
 				`*PREFIX*share`
 				WHERE
@@ -136,12 +137,15 @@ class Share extends \OC\Share\Constants {
 			} else {
 				while ($row = $result->fetchRow()) {
 					$shares[] = $row['share_with'];
+					if ($returnUserPaths) {
+						$fileTargets[(int) $row['file_source']][$row['share_with']] = $row;
+					}
 				}
 			}
-			// We also need to take group shares into account
 
+			// We also need to take group shares into account
 			$query = \OC_DB::prepare(
-				'SELECT `share_with`
+				'SELECT `share_with`, `file_source`, `file_target`
 				FROM
 				`*PREFIX*share`
 				WHERE
@@ -156,6 +160,11 @@ class Share extends \OC\Share\Constants {
 				while ($row = $result->fetchRow()) {
 					$usersInGroup = \OC_Group::usersInGroup($row['share_with']);
 					$shares = array_merge($shares, $usersInGroup);
+					if ($returnUserPaths) {
+						foreach ($usersInGroup as $user) {
+							$fileTargets[(int) $row['file_source']][$user] = $row;
+						}
+					}
 				}
 			}
 
@@ -188,9 +197,41 @@ class Share extends \OC\Share\Constants {
 				$source = -1;
 			}
 		}
+
 		// Include owner in list of users, if requested
 		if ($includeOwner) {
-			$shares[] = $user;
+			$shares[] = $ownerUser;
+			if ($returnUserPaths) {
+				$sharePaths[$ownerUser] = $path;
+			}
+		}
+
+		if ($returnUserPaths) {
+			$fileTargetIDs = array_keys($fileTargets);
+			$fileTargetIDs = array_unique($fileTargetIDs);
+
+			if (!empty($fileTargetIDs)) {
+				$query = \OC_DB::prepare(
+					'SELECT `fileid`, `path`
+					FROM `*PREFIX*filecache`
+					WHERE `fileid` IN (' . implode(',', $fileTargetIDs) . ')'
+				);
+				$result = $query->execute();
+
+				if (\OCP\DB::isError($result)) {
+					\OCP\Util::writeLog('OCP\Share', \OC_DB::getErrorMessage($result), \OC_Log::ERROR);
+				} else {
+					while ($row = $result->fetchRow()) {
+						foreach ($fileTargets[$row['fileid']] as $uid => $shareData) {
+							$sharedPath = '/Shared' . $shareData['file_target'];
+							$sharedPath .= substr($path, strlen($row['path']) -5);
+							$sharePaths[$uid] = $sharedPath;
+						}
+					}
+				}
+			}
+
+			return $sharePaths;
 		}
 
 		return array("users" => array_unique($shares), "public" => $publicShare);
diff --git a/lib/public/share.php b/lib/public/share.php
index 564839e86b68306647d9ca6d6e8a81e6a71eaeae..c694314ad088c676146b16109ab179ce18d8e918 100644
--- a/lib/public/share.php
+++ b/lib/public/share.php
@@ -64,14 +64,15 @@ class Share extends \OC\Share\Constants {
 	/**
 	 * Find which users can access a shared item
 	 * @param string $path to the file
-	 * @param string $user owner of the file
+	 * @param string $ownerUser owner of the file
 	 * @param bool $includeOwner include owner to the list of users with access to the file
+	 * @param bool $returnUserPaths Return an array with the user => path map
 	 * @return array
 	 * @note $path needs to be relative to user data dir, e.g. 'file.txt'
 	 *       not '/admin/data/file.txt'
 	 */
-	public static function getUsersSharingFile($path, $user, $includeOwner = false) {
-		return \OC\Share\Share::getUsersSharingFile($path, $user, $includeOwner);
+	public static function getUsersSharingFile($path, $ownerUser, $includeOwner = false, $returnUserPaths = false) {
+		return \OC\Share\Share::getUsersSharingFile($path, $ownerUser, $includeOwner, $returnUserPaths);
 	}
 
 	/**