diff --git a/apps/files_sharing/admin.php b/apps/files_sharing/admin.php
index 8d668c8329f0305a0524906ffbdc664234d949fb..0bb45731b2b2890679500523ba03ce7416e9b230 100644
--- a/apps/files_sharing/admin.php
+++ b/apps/files_sharing/admin.php
@@ -24,7 +24,7 @@ require_once('../../lib/base.php');
 require_once( 'lib_share.php' );
 require( 'template.php' );
 
-if( !OC_USER::isLoggedIn() || !OC_GROUP::inGroup( $_SESSION['user_id'], 'admin' )){
+if (!OC_USER::isLoggedIn()){
 	header( "Location: ".OC_HELPER::linkTo( "index.php" ));
 	exit();
 }
diff --git a/apps/files_sharing/lib_share.php b/apps/files_sharing/lib_share.php
index c53059b2ec85cbb5c34c89badc328b9e11b6605c..6a3b36b420fee5ed9a9e78782a9e9f04b2b28025 100644
--- a/apps/files_sharing/lib_share.php
+++ b/apps/files_sharing/lib_share.php
@@ -72,10 +72,20 @@ class OC_SHARE {
 	public static function unshare($item, $uid_shared_with) {
 		$query = OC_DB::prepare("DELETE FROM *PREFIX*sharing WHERE item = ? AND uid_shared_with = ? AND uid_owner = ?");
 		foreach ($uid_shared_with as $uid) {
-			$query->execute(array($item, $uid, $_SESSION['user_id']))->fetchAll();
+			$query->execute(array($item, $uid, $_SESSION['user_id']));
 		}
 	}
 	
+	/**
+	 * Get the source location of the target item
+	 * @return source path
+	 */
+	public static function getSource($target) {
+		$query = OC_DB::prepare("SELECT source FROM *PREFIX*sharing WHERE target = ? AND uid_shared_with = ?");
+		$result = $query->execute(array($target, $_SESSION['user_id']))->fetchAll();
+		return $result[0]['source'];
+	}
+	
 	/**
 	 * Get all items the user is sharing
 	 * @return array
diff --git a/apps/files_sharing/sharedstorage.php b/apps/files_sharing/sharedstorage.php
index 25824f2779d012814467c4e299c2dad7bd114d64..cd797e9d0adb445d0368adb121a1269836c9a986 100644
--- a/apps/files_sharing/sharedstorage.php
+++ b/apps/files_sharing/sharedstorage.php
@@ -20,8 +20,273 @@
  *
  */
 
-class OC_FILESTORAGE_SHARE {
+require_once( 'lib_share.php' );
+
+OC_FILESYSTEM::registerStorageType('shared','OC_FILESTORAGE_SHARED',array('datadir'=>'string'));
+
+/**
+ * Convert target path to source path and pass the function call to the correct storage provider
+ */
+class OC_FILESTORAGE_SHARED {
+	
+	// TODO uh... I don't know what to do here
+	public function __construct($parameters) {
+		
+	}
+	
+	// TODO OC_SHARE::getPermissions()
+	public function mkdir($path) {
+		$source = OC_SHARE::getSource($path);
+		if ($source) {
+			$storage = OC_FILESYSTEM::getStorage($source);
+			return $storage->mkdir(OC_FILESYSTEM::getInternalPath($source));
+		}
+	}
+	
+	// TODO OC_SHARE::getPermissions()
+	public function rmdir($path) {
+		$source = OC_SHARE::getSource($path);
+		if ($source) {
+			$storage = OC_FILESYSTEM::getStorage($source);
+			return $storage->is_file(OC_FILESYSTEM::getInternalPath($source));
+		}
+	}
+	
+	public function opendir($path) {
+		//$source = OC_SHARE::getSource($path);
+		//if ($source) {
+			//$storage = OC_FILESYSTEM::getStorage($source);
+			//return $storage->opendir(OC_FILESYSTEM::getInternalPath($source));
+		//}
+		global $FAKEDIRS;
+		$FAKEDIRS['shared'] = array(0 => 'test.txt');
+		return opendir('fakedir://shared');
+	}
+	
+	public function is_dir($path) {
+		$source = OC_SHARE::getSource($path);
+		if ($source) {
+			$storage = OC_FILESYSTEM::getStorage($source);
+			return $storage->is_dir(OC_FILESYSTEM::getInternalPath($source));
+		}
+	}
+	
+	public function is_file($path) {
+		$source = OC_SHARE::getSource($path);
+		if ($source) {
+			$storage = OC_FILESYSTEM::getStorage($source);
+			return $storage->is_file(OC_FILESYSTEM::getInternalPath($source));
+		}
+	}
+	public function stat($path) {
+		$source = OC_SHARE::getSource($path);
+		if ($source) {
+			$storage = OC_FILESYSTEM::getStorage($source);
+			return $storage->stat(OC_FILESYSTEM::getInternalPath($source));
+		}
+	}
+	
+	public function filetype($path) {
+		$source = OC_SHARE::getSource($path);
+		if ($source) {
+			$storage = OC_FILESYSTEM::getStorage($source);
+			return $storage->filetype(OC_FILESYSTEM::getInternalPath($source));
+		}
+	}
+	
+	public function filesize($path) {
+		$source = OC_SHARE::getSource($path);
+		if ($source) {
+			$storage = OC_FILESYSTEM::getStorage($source);
+			return $storage->filesize(OC_FILESYSTEM::getInternalPath($source));
+		}
+	}
+	
+	// TODO OC_SHARE::getPermissions()
+	public function is_readable($path) {
+		$source = OC_SHARE::getSource($path);
+		if ($source) {
+			$storage = OC_FILESYSTEM::getStorage($source);
+			return $storage->is_readable(OC_FILESYSTEM::getInternalPath($source));
+		}
+	}
+	
+	// TODO OC_SHARE::getPermissions()
+	public function is_writeable($path) {
+		$source = OC_SHARE::getSource($path);
+		if ($source) {
+			$storage = OC_FILESYSTEM::getStorage($source);
+			return $storage->is_writeable(OC_FILESYSTEM::getInternalPath($source));
+		}
+	}
+	
+	public function file_exists($path) {
+		$source = OC_SHARE::getSource($path);
+		if ($source) {
+			$storage = OC_FILESYSTEM::getStorage($source);
+			return $storage->file_exists(OC_FILESYSTEM::getInternalPath($source));
+		}
+	}
+	
+	public function readfile($path) {
+		$source = OC_SHARE::getSource($path);
+		if ($source) {
+			$storage = OC_FILESYSTEM::getStorage($source);
+			return $storage->readfile(OC_FILESYSTEM::getInternalPath($source));
+		}	
+	}
+	
+	public function filectime($path) {
+		$source = OC_SHARE::getSource($path);
+		if ($source) {
+			$storage = OC_FILESYSTEM::getStorage($source);
+			return $storage->filectime(OC_FILESYSTEM::getInternalPath($source));
+		}
+	}
+	
+	public function filemtime($path) {
+		$source = OC_SHARE::getSource($path);
+		if ($source) {
+			$storage = OC_FILESYSTEM::getStorage($source);
+			return $storage->filemtime(OC_FILESYSTEM::getInternalPath($source));
+		}
+	}
+	
+	public function fileatime($path) {
+		$source = OC_SHARE::getSource($path);
+		if ($source) {
+			$storage = OC_FILESYSTEM::getStorage($source);
+			return $storage->fileatime(OC_FILESYSTEM::getInternalPath($source));
+		}
+	}
+	
+	public function file_get_contents($path) {
+		$source = OC_SHARE::getSource($path);
+		if ($source) {
+			$storage = OC_FILESYSTEM::getStorage($source);
+			return $storage->file_get_contents(OC_FILESYSTEM::getInternalPath($source));
+		}
+	}
+	
+	// TODO OC_SHARE::getPermissions()
+	public function file_put_contents($path, $data) {
+		$source = OC_SHARE::getSource($path);
+		if ($source) {
+			$storage = OC_FILESYSTEM::getStorage($source);
+			return $storage->file_put_contents(OC_FILESYSTEM::getInternalPath($source), $data);
+		}
+	}
+	
+	public function unlink($path) {
+		$source = OC_SHARE::getSource($path);
+		if ($source) {
+			$storage = OC_FILESYSTEM::getStorage($source);
+			return $storage->unlink(OC_FILESYSTEM::getInternalPath($source));
+		}		
+	}
+	
+	// TODO OC_SHARE::getPermissions()
+	// TODO Update shared item location
+	public function rename($path1, $path2) {
+		$source = OC_SHARE::getSource($path1);
+		if ($source) {
+			$storage = OC_FILESYSTEM::getStorage($source);
+			return $storage->rename(OC_FILESYSTEM::getInternalPath($source), $path2);
+		}
+	}
+	
+	public function copy($path1, $path2) {
+		$source = OC_SHARE::getSource($path1);
+		if ($source) {
+			$storage = OC_FILESYSTEM::getStorage($source);
+			return $storage->copy(OC_FILESYSTEM::getInternalPath($source), $path2);
+		}
+	}
+	
+	public function fopen($path, $mode) {
+		$source = OC_SHARE::getSource($path);
+		if ($source) {
+			$storage = OC_FILESYSTEM::getStorage($source);
+			return $storage->fopen(OC_FILESYSTEM::getInternalPath($source), $mode);
+		}
+	}
+	
+	public function toTmpFile($path) {
+		$source = OC_SHARE::getSource($path);
+		if ($source) {
+			$storage = OC_FILESYSTEM::getStorage($source);
+			return $storage->toTmpFile(OC_FILESYSTEM::getInternalPath($source));
+		}
+	}
+	
+	public function fromTmpFile($tmpPath, $path) {
+		$source = OC_SHARE::getSource($tmpPath);
+		if ($source) {
+			$storage = OC_FILESYSTEM::getStorage($source);
+			return $storage->fromTmpFile(OC_FILESYSTEM::getInternalPath($source), $path);
+		}
+	}
+	
+	public function fromUploadedFile($tmpPath, $path) {
+		$source = OC_SHARE::getSource($tmpPath);
+		if ($source) {
+			$storage = OC_FILESYSTEM::getStorage($source);
+			return $storage->fromUploadedFile(OC_FILESYSTEM::getInternalPath($source), $path);
+		}
+	}
+	
+	public function getMimeType($path) {
+		$source = OC_SHARE::getSource($path);
+		if ($source) {
+			$storage = OC_FILESYSTEM::getStorage($source);
+			return $storage->getMimeType(OC_FILESYSTEM::getInternalPath($source));
+		}
+	}
+	
+	public function delTree($path) {
+		$source = OC_SHARE::getSource($path);
+		if ($source) {
+			$storage = OC_FILESYSTEM::getStorage($source);
+			return $storage->delTree(OC_FILESYSTEM::getInternalPath($source));
+		}
+	}
+	
+	public function find($path) {
+		$source = OC_SHARE::getSource($path);
+		if ($source) {
+			$storage = OC_FILESYSTEM::getStorage($source);
+			return $storage->find(OC_FILESYSTEM::getInternalPath($source));
+		}
+	}
+	
+	public function getTree($path) {
+		$source = OC_SHARE::getSource($path);
+		if ($source) {
+			$storage = OC_FILESYSTEM::getStorage($source);
+			return $storage->getTree(OC_FILESYSTEM::getInternalPath($source));
+		}
+	}
+	
+	public function hash($type, $path, $raw) {
+		$source = OC_SHARE::getSource($path);
+		if ($source) {
+			$storage = OC_FILESYSTEM::getStorage($source);
+			return $storage->hash($type, OC_FILESYSTEM::getInternalPath($source), $raw);
+		}
+	}
+	
+	public function free_space($path) {
+		$source = OC_SHARE::getSource($path);
+		if ($source) {
+			$storage = OC_FILESYSTEM::getStorage($source);
+			return $storage->free_space(OC_FILESYSTEM::getInternalPath($source));
+		}
+	}
 	
+	// TODO query all shared files?
+	public function search($query) { 
+		
+	}
 	
 }
 
diff --git a/apps/files_sharing/templates/admin.php b/apps/files_sharing/templates/admin.php
index 764aee00b49d96a2be783757876be35f086c78f4..827b64143c5a059d91206b9d7a73810639d3d9c8 100644
--- a/apps/files_sharing/templates/admin.php
+++ b/apps/files_sharing/templates/admin.php
@@ -2,25 +2,26 @@
 <table id='itemlist'>
 	<thead>
 		<tr>
-			<td class='item'>Item</td>
-			<td class='uid_shared_with'>Shared With</td>
-			<td class='link'>Link</td>
+			<th>Item</th>
+			<th>Shared With</th>
+			<th>Permissions</th>
 		</tr>
 	</thead>
 	<tbody>
 		<?php foreach($_['shared_items'] as $item):?>
 			<tr class='link' id='<?php echo $item['id'];?>'>
-				<td class='item'><?php echo $link['item'];?></td>
+				<td class='item'><?php echo $item['item'];?></td>
 				<td class='uid_shared_with'><?php echo $item['uid_shared_with'];?></td>
-				<td class='link'><a href='get.php?token=<?php echo $link['token'];?>'><?php echo $_['baseUrl'];?>?token=<?php echo $link['token'];?></a></td>
+				<td class='permissions'><?php echo $item['permissions'];?></td>
 				<td><button class='delete fancybutton' data-token='<?php echo $link['token'];?>'>Delete</button></td>
 			</tr>
 		<?php endforeach;?>
 		<tr id='newlink_row'>
 			<form action='#' id='newlink'>
 				<input type='hidden' id='expire_time'/>
-				<td class='path'><input placeholder='Path' id='path'/></td>
-				<td class='expire'><input placeholder='Expires' id='expire'/></td>
+				<td class='path'><input placeholder='Item' id='path'/></td>
+				<td class='expire'><input placeholder='Share With' id='expire'/></td>
+				<td class='permissions'><input placeholder='Permissions' id='expire'/></td>
 				<td><input type='submit' value='Share'/></td>
 			</form>
 		</tr>
diff --git a/lib/base.php b/lib/base.php
index c18ecd570db1bc4f7c0fac1d3606072a13a44c8b..199653e25e092b6a15cdc0332c6ddee6bc677314 100644
--- a/lib/base.php
+++ b/lib/base.php
@@ -80,6 +80,7 @@ require_once('appconfig.php');
 require_once('files.php');
 require_once('filesystem.php');
 require_once('filestorage.php');
+require_once('apps/files_sharing/sharedstorage.php');
 require_once('log.php');
 require_once('user.php');
 require_once('group.php');
@@ -157,6 +158,9 @@ class OC_UTIL {
 // 			}
 			OC_FILESYSTEM::mount($rootStorage,'/');
 
+			$sharedStorage = OC_FILESYSTEM::createStorage('shared',array('datadir'=>$CONFIG_DATADIRECTORY));
+			OC_FILESYSTEM::mount($sharedStorage,'MTGap/files/Test/');
+			
 			$CONFIG_DATADIRECTORY = "$CONFIG_DATADIRECTORY_ROOT/$user/$root";
 			if( !is_dir( $CONFIG_DATADIRECTORY )){
 				mkdir( $CONFIG_DATADIRECTORY, 0755, true );
diff --git a/lib/filesystem.php b/lib/filesystem.php
index 2b5c3a56b6e3e90574649e8286fef6e484fad4f5..897efaa140e0d44779031d0fe6ecbab76af6bf74 100644
--- a/lib/filesystem.php
+++ b/lib/filesystem.php
@@ -155,7 +155,7 @@ class OC_FILESYSTEM{
 	* @param string path
 	* @return OC_FILESTORAGE
 	*/
-	static private function getStorage($path){
+	static public function getStorage($path){
 		$mountpoint=self::getMountPoint($path);
 		if($mountpoint){
 			return self::$storages[$mountpoint];