diff --git a/apps/files_sharing/lib/cache.php b/apps/files_sharing/lib/cache.php
index 7e44847e404c37455ec2e15c7c3a3a6b0e0d22ed..3d9fbcf4de9aaaa5de69748f20a131e0220ba9f7 100644
--- a/apps/files_sharing/lib/cache.php
+++ b/apps/files_sharing/lib/cache.php
@@ -411,7 +411,7 @@ class Shared_Cache extends Cache {
 	}
 
 	/**
-	 * get the path of a file on this storage by it's id
+	 * get the path of a file on this storage relative to the mount point by it's id
 	 *
 	 * @param int $id
 	 * @param string $pathEnd (optional) used internally for recursive calls
@@ -419,8 +419,9 @@ class Shared_Cache extends Cache {
 	 */
 	public function getPathById($id, $pathEnd = '') {
 		// direct shares are easy
-		if ($path = $this->getShareById($id)) {
-			return $path . $pathEnd;
+		$path = $this->getShareById($id);
+		if (is_string($path)) {
+			return ltrim($pathEnd, '/');
 		} else {
 			// if the item is a direct share we try and get the path of the parent and append the name of the item to it
 			list($parent, $name) = $this->getParentInfo($id);
diff --git a/apps/files_sharing/lib/sharedstorage.php b/apps/files_sharing/lib/sharedstorage.php
index 25e6c0abd28cc1f546fdfca9645c7763576aed15..eedd279bf2b91578dc606836aad78f99307bd61f 100644
--- a/apps/files_sharing/lib/sharedstorage.php
+++ b/apps/files_sharing/lib/sharedstorage.php
@@ -347,6 +347,7 @@ class Shared extends \OC\Files\Storage\Common {
 			$mountManager->addMount($mount);
 			$mountManager->removeMount($sourcePath . '/');
 			$this->setUniqueName();
+			$this->setMountPoint($relTargetPath);
 
 		} else {
 			\OCP\Util::writeLog('file sharing',
@@ -500,6 +501,10 @@ class Shared extends \OC\Files\Storage\Common {
 		return $this->share['share_type'];
 	}
 
+	private function setMountPoint($path) {
+		$this->share['file_target'] = $path;
+	}
+
 	/**
 	 * @brief does the group share already has a user specific unique name
 	 * @return bool
diff --git a/apps/files_sharing/tests/api.php b/apps/files_sharing/tests/api.php
index 6354d1099bb85034fe2362348d5e10fbb5ad98f6..5975eb95882d4a1686445b2e68f6d5aca0384f27 100644
--- a/apps/files_sharing/tests/api.php
+++ b/apps/files_sharing/tests/api.php
@@ -866,6 +866,66 @@ class Test_Files_Sharing_Api extends Test_Files_Sharing_Base {
 
 		$this->assertTrue($result3->succeeded());
 
+		// cleanup
+		\Test_Files_Sharing_Api::loginHelper(\Test_Files_Sharing_Api::TEST_FILES_SHARING_API_USER1);
+
+		$result = \OCP\Share::unshare('folder', $fileInfo1['fileid'], \OCP\Share::SHARE_TYPE_USER,
+				\Test_Files_Sharing_Api::TEST_FILES_SHARING_API_USER2);
+
+		$this->assertTrue($result);
+
+
+
+	}
+
+	/**
+	 * @brief share a folder which contains a share mount point, should be forbidden
+	 */
+	public function testShareFolderWithAMountPoint() {
+		// user 1 shares a folder with user2
+		\Test_Files_Sharing_Api::loginHelper(\Test_Files_Sharing_Api::TEST_FILES_SHARING_API_USER1);
+
+		$fileInfo = $this->view->getFileInfo($this->folder);
+
+		$result = \OCP\Share::shareItem('folder', $fileInfo['fileid'], \OCP\Share::SHARE_TYPE_USER,
+				\Test_Files_Sharing_Api::TEST_FILES_SHARING_API_USER2, 31);
+
+		$this->assertTrue($result);
+
+		// user2 shares a file from the folder as link
+		\Test_Files_Sharing_Api::loginHelper(\Test_Files_Sharing_Api::TEST_FILES_SHARING_API_USER2);
+
+		$view = new \OC\Files\View('/' . \Test_Files_Sharing_Api::TEST_FILES_SHARING_API_USER2 . '/files');
+		$view->mkdir("localDir");
+
+		// move mount point to the folder "localDir"
+		$result = $view->rename($this->folder, 'localDir/'.$this->folder);
+		$this->assertTrue($result !== false);
+
+		// try to share "localDir"
+		$fileInfo2 = $view->getFileInfo('localDir');
+
+		$this->assertTrue($fileInfo2 instanceof \OC\Files\FileInfo);
+
+		try {
+			$result2 = \OCP\Share::shareItem('folder', $fileInfo2['fileid'], \OCP\Share::SHARE_TYPE_USER,
+					\Test_Files_Sharing_Api::TEST_FILES_SHARING_API_USER3, 31);
+		} catch (\Exception $e) {
+			$result2 = false;
+		}
+
+		$this->assertFalse($result2);
+
+		//cleanup
+
+		$result = $view->rename('localDir/' . $this->folder, $this->folder);
+		$this->assertTrue($result !== false);
+		$view->unlink('localDir');
+
+		\Test_Files_Sharing_Api::loginHelper(\Test_Files_Sharing_Api::TEST_FILES_SHARING_API_USER1);
+
+		\OCP\Share::unshare('folder', $fileInfo['fileid'], \OCP\Share::SHARE_TYPE_USER,
+				\Test_Files_Sharing_Api::TEST_FILES_SHARING_API_USER2);
 	}
 
 }
diff --git a/apps/files_sharing/tests/cache.php b/apps/files_sharing/tests/cache.php
index 7a52f403d8e08631a17dcc7190448a58bcff92a2..b8ebeab3c39d19dfcfa2bbc67cabcd636e33190f 100644
--- a/apps/files_sharing/tests/cache.php
+++ b/apps/files_sharing/tests/cache.php
@@ -255,7 +255,7 @@ class Test_Files_Sharing_Cache extends Test_Files_Sharing_Base {
 		 */
 
 		$sharedCache = $sharedStorage->getCache();
-		$this->assertEquals('test.txt', $sharedCache->getPathById($info->getId()));
+		$this->assertEquals('', $sharedCache->getPathById($info->getId()));
 	}
 
 	public function testGetPathByIdShareSubFolder() {
@@ -276,7 +276,7 @@ class Test_Files_Sharing_Cache extends Test_Files_Sharing_Base {
 		 */
 
 		$sharedCache = $sharedStorage->getCache();
-		$this->assertEquals('foo', $sharedCache->getPathById($folderInfo->getId()));
-		$this->assertEquals('foo/bar/test.txt', $sharedCache->getPathById($fileInfo->getId()));
+		$this->assertEquals('', $sharedCache->getPathById($folderInfo->getId()));
+		$this->assertEquals('bar/test.txt', $sharedCache->getPathById($fileInfo->getId()));
 	}
 }
diff --git a/lib/private/files/view.php b/lib/private/files/view.php
index 3f73632be13ced4876f08a73145913f875c69dab..a61d58aaf2406c640a20a65c69c93a9258cf441d 100644
--- a/lib/private/files/view.php
+++ b/lib/private/files/view.php
@@ -1168,7 +1168,8 @@ class View {
 			 * @var \OC\Files\Mount\Mount $mount
 			 */
 			$cache = $mount->getStorage()->getCache();
-			if ($internalPath = $cache->getPathById($id)) {
+			$internalPath = $cache->getPathById($id);
+			if (is_string($internalPath)) {
 				$fullPath = $mount->getMountPoint() . $internalPath;
 				if (!is_null($path = $this->getRelativePath($fullPath))) {
 					return $path;
diff --git a/lib/private/share/share.php b/lib/private/share/share.php
index 756a4d173e48bfc87b473a0871d56eceee1d7529..c07dd04b29f6d343eb9104668b5814090462958d 100644
--- a/lib/private/share/share.php
+++ b/lib/private/share/share.php
@@ -489,6 +489,7 @@ class Share extends \OC\Share\Constants {
 			$itemSourceName = $itemSource;
 		}
 
+
 		// verify that the file exists before we try to share it
 		if ($itemType === 'file' or $itemType === 'folder') {
 			$path = \OC\Files\Filesystem::getPath($itemSource);
@@ -499,6 +500,21 @@ class Share extends \OC\Share\Constants {
 			}
 		}
 
+		//verify that we don't share a folder which already contains a share mount point
+		if ($itemType === 'folder') {
+			$path = '/' . $uidOwner . '/files' . \OC\Files\Filesystem::getPath($itemSource) . '/';
+			$mountManager = \OC\Files\Filesystem::getMountManager();
+			$mounts = $mountManager->getAll();
+			foreach ($mounts as $mountPoint => $mount) {
+				if ($mount->getStorage() instanceof \OC\Files\Storage\Shared && strpos($mountPoint, $path) === 0) {
+					$message = 'Sharing "' . $itemSourceName . '" failed, because it contains files shared with you!';
+					\OC_Log::write('OCP\Share', $message, \OC_Log::ERROR);
+					throw new \Exception($message);
+				}
+
+			}
+		}
+
 		// Verify share type and sharing conditions are met
 		if ($shareType === self::SHARE_TYPE_USER) {
 			if ($shareWith == $uidOwner) {