diff --git a/apps/files/js/filelist.js b/apps/files/js/filelist.js
index 522ff627529fb447cf2a62734efe8636aa7c9d09..7c49c540d85615739251d900dde20bdf00402b96 100644
--- a/apps/files/js/filelist.js
+++ b/apps/files/js/filelist.js
@@ -674,6 +674,12 @@
 			if (extension) {
 				nameSpan.append($('<span></span>').addClass('extension').text(extension));
 			}
+			if (fileData.extraData) {
+				if (fileData.extraData.charAt(0) === '/') {
+					fileData.extraData = fileData.extraData.substr(1);
+				}
+				nameSpan.addClass('extra-data').attr('title', fileData.extraData);
+			}
 			// dirs can show the number of uploaded files
 			if (type === 'dir') {
 				linkElem.append($('<span></span>').attr({
diff --git a/apps/files/lib/helper.php b/apps/files/lib/helper.php
index 50b4e8338a85bd2ccce023e1803a9da1ddf1e70f..a0c0aa4952eca4bd0817be146b6cd7c92e6393ac 100644
--- a/apps/files/lib/helper.php
+++ b/apps/files/lib/helper.php
@@ -138,6 +138,9 @@ class Helper
 			}
 			$entry['mountType'] = $mountType;
 		}
+		if (isset($i['extraData'])) {
+			$entry['extraData'] = $i['extraData'];
+		}
 		return $entry;
 	}
 
diff --git a/apps/files_sharing/js/sharedfilelist.js b/apps/files_sharing/js/sharedfilelist.js
index d29285dc1de7a21fdd8b4febdd14cfc4598eb90c..b99611f9bf048c31fc7d4af06dc4af51bea57439 100644
--- a/apps/files_sharing/js/sharedfilelist.js
+++ b/apps/files_sharing/js/sharedfilelist.js
@@ -181,6 +181,9 @@
 						file.name = OC.basename(share.file_target);
 						file.path = OC.dirname(share.file_target);
 						file.permissions = share.permissions;
+						if (file.path) {
+							file.extraData = share.file_target;
+						}
 					}
 					else {
 						if (share.share_type !== OC.Share.SHARE_TYPE_LINK) {
@@ -189,6 +192,9 @@
 						file.name = OC.basename(share.path);
 						file.path = OC.dirname(share.path);
 						file.permissions = OC.PERMISSION_ALL;
+						if (file.path) {
+							file.extraData = share.path;
+						}
 					}
 					return file;
 				})
diff --git a/apps/files_trashbin/lib/helper.php b/apps/files_trashbin/lib/helper.php
index d0ca5fb153039a84816feb73fad208f11bde8ab3..c2b81e3dbc8b2cc7a2b3a358d01603c1fcb9d644 100644
--- a/apps/files_trashbin/lib/helper.php
+++ b/apps/files_trashbin/lib/helper.php
@@ -35,6 +35,7 @@ class Helper
 		$absoluteDir = $view->getAbsolutePath($dir);
 
 		if (is_resource($dirContent)) {
+			$originalLocations = \OCA\Files_Trashbin\Trashbin::getLocations($user);
 			while (($entryName = readdir($dirContent)) !== false) {
 				if (!\OC\Files\Filesystem::isIgnoredDir($entryName)) {
 					$id = $entryName;
@@ -47,6 +48,13 @@ class Helper
 						$parts = explode('/', ltrim($dir, '/'));
 						$timestamp = substr(pathinfo($parts[0], PATHINFO_EXTENSION), 1);
 					}
+					$originalPath = '';
+					if (isset($originalLocations[$id][$timestamp])) {
+						$originalPath = $originalLocations[$id][$timestamp];
+						if (substr($originalPath, -1) === '/') {
+							$originalPath = substr($originalPath, 0, -1);
+						}
+					}
 					$i = array(
 						'name' => $id,
 						'mtime' => $timestamp,
@@ -54,6 +62,9 @@ class Helper
 						'type' => $view->is_dir($dir . '/' . $entryName) ? 'dir' : 'file',
 						'directory' => ($dir === '/') ? '' : $dir,
 					);
+					if ($originalPath) {
+						$i['extraData'] = $originalPath.'/'.$id;
+					}
 					$result[] = new FileInfo($absoluteDir . '/' . $i['name'], $storage, $internalPath . '/' . $i['name'], $i);
 				}
 			}
diff --git a/apps/files_trashbin/lib/trashbin.php b/apps/files_trashbin/lib/trashbin.php
index 69eef09d1e90006b691f1abae0e4fdeda6d7d9b2..12bf6a781140fef9c3df954fcb78b88ed6175c9b 100644
--- a/apps/files_trashbin/lib/trashbin.php
+++ b/apps/files_trashbin/lib/trashbin.php
@@ -41,6 +41,46 @@ class Trashbin {
 		return array($uid, $filename);
 	}
 
+	/**
+	 * get original location of files for user
+	 *
+	 * @param string $user
+	 * @return array (filename => array (timestamp => original location))
+	 */
+	public static function getLocations($user) {
+		$query = \OC_DB::prepare('SELECT `id`, `timestamp`, `location`'
+			. ' FROM `*PREFIX*files_trash` WHERE `user`=?');
+		$result = $query->execute(array($user));
+		$array = array();
+		while ($row = $result->fetchRow()) {
+			if (isset($array[$row['id']])) {
+				$array[$row['id']][$row['timestamp']] = $row['location'];
+			} else {
+				$array[$row['id']] = array($row['timestamp'] => $row['location']);
+			}
+		}
+		return $array;
+	}
+
+	/**
+	 * get original location of file
+	 *
+	 * @param string $user
+	 * @param string $filename
+	 * @param string $timestamp
+	 * @return string original location
+	 */
+	public static function getLocation($user, $filename, $timestamp) {
+		$query = \OC_DB::prepare('SELECT `location` FROM `*PREFIX*files_trash`'
+			. ' WHERE `user`=? AND `id`=? AND `timestamp`=?');
+		$result = $query->execute(array($user, $filename, $timestamp))->fetchAll();
+		if (isset($result[0]['location'])) {
+			return $result[0]['location'];
+		} else {
+			return false;
+		}
+	}
+
 	private static function setUpTrash($user) {
 		$view = new \OC\Files\View('/' . $user);
 		if (!$view->is_dir('files_trashbin')) {
@@ -318,13 +358,10 @@ class Trashbin {
 
 		$location = '';
 		if ($timestamp) {
-			$query = \OC_DB::prepare('SELECT `location` FROM `*PREFIX*files_trash`'
-				. ' WHERE `user`=? AND `id`=? AND `timestamp`=?');
-			$result = $query->execute(array($user, $filename, $timestamp))->fetchAll();
-			if (count($result) !== 1) {
+			$location = self::getLocation($user, $filename, $timestamp);
+			if ($location === false) {
 				\OC_Log::write('files_trashbin', 'trash bin database inconsistent!', \OC_Log::ERROR);
 			} else {
-				$location = $result[0]['location'];
 				// if location no longer exists, restore file in the root directory
 				if ($location !== '/' &&
 					(!$view->is_dir('files' . $location) ||
diff --git a/core/css/styles.css b/core/css/styles.css
index ac381da480748ddc557b54d903c49d3e56fa3d43..7058a2bf7c2d32655581c3508bd4e6807d31d967 100644
--- a/core/css/styles.css
+++ b/core/css/styles.css
@@ -813,6 +813,16 @@ span.ui-icon {float: left; margin: 3px 7px 30px 0;}
 	height: 16px;
 }
 
+/* ---- TOOLTIPS ---- */
+.extra-data {
+	padding-right: 5px !important;
+}
+.tipsy-inner {
+	max-width: 400px !important;
+	overflow: hidden;
+	text-overflow: ellipsis;
+}
+
 /* ---- TAGS ---- */
 #tagsdialog .content {
 	width: 100%; height: 280px;
diff --git a/core/js/js.js b/core/js/js.js
index 89682e3013f4fa7ebcee40df3957c13586899cfc..f35a3a1e2bee6d28ef6950bddee1008d5d3d75ce 100644
--- a/core/js/js.js
+++ b/core/js/js.js
@@ -1097,6 +1097,7 @@ function initCore() {
 	$('td .modified').tipsy({gravity:'s', fade:true, live:true});
 	$('td.lastLogin').tipsy({gravity:'s', fade:true, html:true});
 	$('input').tipsy({gravity:'w', fade:true});
+	$('.extra-data').tipsy({gravity:'w', fade:true, live:true});
 
 	// toggle for menus
 	$(document).on('mouseup.closemenus', function(event) {