diff --git a/apps/files_versions/appinfo/app.php b/apps/files_versions/appinfo/app.php
index 9e3e81c580a411591f0e3f0c96d1416534034a73..8e0356ada206ae049a99f77c7c3a9c87c7b2a298 100644
--- a/apps/files_versions/appinfo/app.php
+++ b/apps/files_versions/appinfo/app.php
@@ -11,5 +11,5 @@ OCP\Util::addscript('files_versions', 'versions');
 // Listen to write signals
 OCP\Util::connectHook('OC_Filesystem', 'write', "OCA\Files_Versions\Hooks", "write_hook");
 // Listen to delete and rename signals
-OCP\Util::connectHook('OC_Filesystem', 'post-delete', "OCA\Files_Versions\Hooks", "remove_hook");
+OCP\Util::connectHook('OC_Filesystem', 'post_delete', "OCA\Files_Versions\Hooks", "remove_hook");
 OCP\Util::connectHook('OC_Filesystem', 'rename', "OCA\Files_Versions\Hooks", "rename_hook");
diff --git a/apps/files_versions/lib/hooks.php b/apps/files_versions/lib/hooks.php
index dc02c605c44ce51877a807dd7ffa4572c47550a6..6c87eba423d0ba41b49c842b6442175acb41b9c9 100644
--- a/apps/files_versions/lib/hooks.php
+++ b/apps/files_versions/lib/hooks.php
@@ -20,13 +20,10 @@ class Hooks {
 	public static function write_hook( $params ) {
 
 		if(\OCP\Config::getSystemValue('files_versions', Storage::DEFAULTENABLED)=='true') {
-
-			$versions = new Storage( new \OC\Files\View('') );
-
 			$path = $params[\OC\Files\Filesystem::signal_param_path];
-
-			if($path<>'') $versions->store( $path );
-
+			if($path<>'') {
+				Storage::store($path);
+			}
 		}
 	}
 
@@ -40,12 +37,10 @@ class Hooks {
 	 */
 	public static function remove_hook($params) {
 		if(\OCP\Config::getSystemValue('files_versions', Storage::DEFAULTENABLED)=='true') {
-		
-			$versions = new Storage( new \OC_FilesystemView('') );
-		
 			$path = $params[\OC\Files\Filesystem::signal_param_path];
-		
-			if($path<>'') $versions->delete( $path );
+			if($path<>'') {
+				Storage::delete($path);
+			}
 		
 		}
 	}
@@ -59,13 +54,11 @@ class Hooks {
 	 */
 	public static function rename_hook($params) {
 		if(\OCP\Config::getSystemValue('files_versions', Storage::DEFAULTENABLED)=='true') {
-		
-			$versions = new Storage( new \OC_FilesystemView('') );
-		
 			$oldpath = $params['oldpath'];
 			$newpath = $params['newpath'];
-		
-			if($oldpath<>'' && $newpath<>'') $versions->rename( $oldpath, $newpath );
+			if($oldpath<>'' && $newpath<>'') {
+				Storage::rename( $oldpath, $newpath );
+			}
 		
 		}
 	}
diff --git a/apps/files_versions/lib/versions.php b/apps/files_versions/lib/versions.php
index f23381cb156311af5077e62398dd7dd799c57134..ba9f8ba41cbedf70528f917565f5981318de4cb6 100644
--- a/apps/files_versions/lib/versions.php
+++ b/apps/files_versions/lib/versions.php
@@ -35,37 +35,25 @@ class Storage {
 																	'step' => 604800),
 			);	
 
-	private static function getUidAndFilename($filename)
-	{
-		if (\OCP\App::isEnabled('files_sharing')
-		    && substr($filename, 0, 7) == '/Shared'
-		    && $source = \OCP\Share::getItemSharedWith('file',
-					substr($filename, 7),
-					\OC_Share_Backend_File::FORMAT_SHARED_STORAGE)) {
-			$filename = $source['path'];
-			$pos = strpos($filename, '/files', 1);
-			$uid = substr($filename, 1, $pos - 1);
-			$filename = substr($filename, $pos + 6);
-		} else {
-			$uid = \OCP\User::getUser();
+	private static function getUidAndFilename($filename) {
+		$uid = \OC\Files\Filesystem::getOwner($filename);
+		if ( $uid != \OCP\User::getUser() ) {
+			$info = \OC\Files\Filesystem::getFileInfo($filename);
+			$ownerView = new \OC\Files\View('/'.$uid.'/files');
+			$filename = $ownerView->getPath($info['fileid']);
 		}
 		return array($uid, $filename);
 	}
-
+	
 	/**
 	 * store a new version of a file.
 	 */
-	public function store($filename) {
+	public static function store($filename) {
 		if(\OCP\Config::getSystemValue('files_versions', Storage::DEFAULTENABLED)=='true') {
 			list($uid, $filename) = self::getUidAndFilename($filename);
-			$files_view = new \OC\Files\View('/'.\OCP\User::getUser() .'/files');
-			$users_view = new \OC\Files\View('/'.\OCP\User::getUser());
-
-			//check if source file already exist as version to avoid recursions.
-			// todo does this check work?
-			if ($users_view->file_exists($filename)) {
-				return false;
-			}
+			
+			$files_view = new \OC\Files\View('/'.$uid .'/files');
+			$users_view = new \OC\Files\View('/'.$uid);
 
 			// check if filename is a directory
 			if($files_view->is_dir($filename)) {
@@ -106,10 +94,10 @@ class Storage {
 	 */
 	public static function delete($filename) {
 		list($uid, $filename) = self::getUidAndFilename($filename);
-		$versions_fileview = new \OC_FilesystemView('/'.$uid .'/files_versions');
+		$versions_fileview = new \OC\Files\View('/'.$uid .'/files_versions');
 		
 		$abs_path = \OCP\Config::getSystemValue('datadirectory').$versions_fileview->getAbsolutePath('').$filename.'.v';
-		if( ($versions = self::getVersions($filename)) ) {
+		if( ($versions = self::getVersions($uid, $filename)) ) {
 			if (  ($versionsSize = \OCP\Config::getAppValue('files_versions', 'size')) === null ) {
 				$versionsSize = self::calculateSize($uid);
 			}
@@ -127,16 +115,15 @@ class Storage {
 	public static function rename($oldpath, $newpath) {
 		list($uid, $oldpath) = self::getUidAndFilename($oldpath);
 		list($uidn, $newpath) = self::getUidAndFilename($newpath);
-		$versions_view = new \OC_FilesystemView('/'.$uid .'/files_versions');
-		$files_view = new \OC_FilesystemView('/'.$uid .'/files');
+		$versions_view = new \OC\Files\View('/'.$uid .'/files_versions');
+		$files_view = new \OC\Files\View('/'.$uid .'/files');
 		$abs_newpath = \OCP\Config::getSystemValue('datadirectory').$versions_view->getAbsolutePath('').$newpath;
 		
 		if ( $files_view->is_dir($oldpath) && $versions_view->is_dir($oldpath) ) {
 			$versions_view->rename($oldpath, $newpath);
-		} else 	if ( ($versions = Storage::getVersions($oldpath)) ) {
+		} else 	if ( ($versions = Storage::getVersions($uid, $oldpath)) ) {
 			$info=pathinfo($abs_newpath);
 			if(!file_exists($info['dirname'])) mkdir($info['dirname'], 0750, true);
-			$versions = Storage::getVersions($oldpath);
 			foreach ($versions as $v) {
 				$versions_view->rename($oldpath.'.v'.$v['version'], $newpath.'.v'.$v['version']);
 			}
@@ -177,14 +164,14 @@ class Storage {
 
 	/**
 	 * @brief get a list of all available versions of a file in descending chronological order
+	 * @param $uid user id from the owner of the file
 	 * @param $filename file to find versions of, relative to the user files dir
 	 * @param $count number of versions to return
 	 * @returns array
 	 */
-	public static function getVersions( $filename, $count = 0 ) {
+	public static function getVersions($uid, $filename, $count = 0 ) {
 		if( \OCP\Config::getSystemValue('files_versions', Storage::DEFAULTENABLED)=='true' ) {
-			list($uid, $filename) = self::getUidAndFilename($filename);
-			$versions_fileview = new \OC\Files\View('/' . \OCP\User::getUser() . '/files_versions');
+			$versions_fileview = new \OC\Files\View('/' . $uid . '/files_versions');
 
 			$versionsName = \OCP\Config::getSystemValue('datadirectory').$versions_fileview->getAbsolutePath($filename);
 			$versions = array();
@@ -197,7 +184,7 @@ class Storage {
 
 			sort( $matches );
 
-			$files_view = new \OC_FilesystemView('/'.$uid.'/files');
+			$files_view = new \OC\Files\View('/'.$uid.'/files');
 			$local_file = $files_view->getLocalFile($filename);
 			$local_file_md5 = \md5_file( $local_file );
 
@@ -248,7 +235,7 @@ class Storage {
 	 */
 	private static function calculateSize($uid) {
 		if( \OCP\Config::getSystemValue('files_versions', Storage::DEFAULTENABLED)=='true' ) {
-			$versions_fileview = new \OC_FilesystemView('/'.$uid.'/files_versions');
+			$versions_fileview = new \OC\Files\View('/'.$uid.'/files_versions');
 			$versionsRoot = \OCP\Config::getSystemValue('datadirectory').$versions_fileview->getAbsolutePath('');
 				
 			$iterator = new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($versionsRoot), \RecursiveIteratorIterator::CHILD_FIRST);
@@ -273,7 +260,7 @@ class Storage {
 	 */
 	private static function getAllVersions($uid) {
 		if( \OCP\Config::getSystemValue('files_versions', Storage::DEFAULTENABLED)=='true' ) {
-			$versions_fileview = new \OC_FilesystemView('/'.$uid.'/files_versions');
+			$versions_fileview = new \OC\Files\View('/'.$uid.'/files_versions');
 			$versionsRoot = \OCP\Config::getSystemValue('datadirectory').$versions_fileview->getAbsolutePath('');
 			
 			$iterator = new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($versionsRoot), \RecursiveIteratorIterator::CHILD_FIRST);
@@ -319,7 +306,7 @@ class Storage {
 	private static function expire($filename, $versionsSize = null) {
 		if(\OCP\Config::getSystemValue('files_versions', Storage::DEFAULTENABLED)=='true') {
 			list($uid, $filename) = self::getUidAndFilename($filename);			
-			$versions_fileview = new \OC_FilesystemView('/'.$uid.'/files_versions');
+			$versions_fileview = new \OC\Files\View('/'.$uid.'/files_versions');
 			
 			// get available disk space for user
 			$quota = \OCP\Util::computerFileSize(\OC_Preferences::getValue($uid, 'files', 'quota'));
@@ -338,7 +325,7 @@ class Storage {
 			}
 
 			// calculate available space for version history
-			$files_view = new \OC_FilesystemView('/'.$uid.'/files');
+			$files_view = new \OC\Files\View('/'.$uid.'/files');
 			$rootInfo = $files_view->getFileInfo('/');
 			$free = $quota-$rootInfo['size']; // remaining free space for user
 			if ( $free > 0 ) {
@@ -354,7 +341,7 @@ class Storage {
 				$versions_by_file = $result['by_file'];
 				$all_versions = $result['all'];
 			} else {
-				$all_versions = Storage::getVersions($filename);
+				$all_versions = Storage::getVersions($uid, $filename);
 				$versions_by_file[$filename] = $all_versions;
 			}