diff --git a/lib/filestorage/commontest.php b/lib/filestorage/commontest.php
index 1b01ff856a358c945cc30b122d78108e1daed304..b5126a407b343b020ada149cd572de10a3dcf517 100644
--- a/lib/filestorage/commontest.php
+++ b/lib/filestorage/commontest.php
@@ -51,11 +51,11 @@ class OC_Filestorage_CommonTest extends OC_Filestorage_Common{
 	public function filetype($path){
 		return $this->storage->filetype($path);
 	}
-	public function is_readable($path){
-		return $this->storage->is_readable($path);
+	public function isReadable($path){
+		return $this->storage->isReadable($path);
 	}
-	public function is_writable($path){
-		return $this->storage->is_writable($path);
+	public function isUpdatable($path){
+		return $this->storage->isUpdatable($path);
 	}
 	public function file_exists($path){
 		return $this->storage->file_exists($path);
diff --git a/tests/lib/filestorage.php b/tests/lib/filestorage.php
index 00f37b9f1a2322d96c067ba2b6adc0e049887738..4120df18de6bd8856f9111f78fd6d2a27b9ca7e6 100644
--- a/tests/lib/filestorage.php
+++ b/tests/lib/filestorage.php
@@ -31,13 +31,13 @@ abstract class Test_FileStorage extends UnitTestCase {
 	 */
 	public function testRoot(){
 		$this->assertTrue($this->instance->file_exists('/'),'Root folder does not exist');
-		$this->assertTrue($this->instance->is_readable('/'),'Root folder is not readable');
+		$this->assertTrue($this->instance->isReadable('/'),'Root folder is not readable');
 		$this->assertTrue($this->instance->is_dir('/'),'Root folder is not a directory');
 		$this->assertFalse($this->instance->is_file('/'),'Root folder is a file');
 		$this->assertEqual('dir',$this->instance->filetype('/'));
 		
 		//without this, any further testing would be useless, not an acutal requirement for filestorage though
-		$this->assertTrue($this->instance->is_writable('/'),'Root folder is not writable');
+		$this->assertTrue($this->instance->isUpdatable('/'),'Root folder is not writable');
 	}
 	
 	public function testDirectories(){
@@ -50,8 +50,8 @@ abstract class Test_FileStorage extends UnitTestCase {
 		$this->assertFalse($this->instance->is_file('/folder'));
 		$this->assertEqual('dir',$this->instance->filetype('/folder'));
 		$this->assertEqual(0,$this->instance->filesize('/folder'));
-		$this->assertTrue($this->instance->is_readable('/folder'));
-		$this->assertTrue($this->instance->is_writable('/folder'));
+		$this->assertTrue($this->instance->isReadable('/folder'));
+		$this->assertTrue($this->instance->isUpdatable('/folder'));
 		
 		$dh=$this->instance->opendir('/');
 		$content=array();
@@ -141,7 +141,7 @@ abstract class Test_FileStorage extends UnitTestCase {
 		$textFile=OC::$SERVERROOT.'/tests/data/lorem.txt';
 		$ctimeStart=time();
 		$this->instance->file_put_contents('/lorem.txt',file_get_contents($textFile));
-		$this->assertTrue($this->instance->is_readable('/lorem.txt'));
+		$this->assertTrue($this->instance->isReadable('/lorem.txt'));
 		$ctimeEnd=time();
 		$cTime=$this->instance->filectime('/lorem.txt');
 		$mTime=$this->instance->filemtime('/lorem.txt');
diff --git a/tests/lib/share/backend.php b/tests/lib/share/backend.php
index 4f2fcce235ee41d6365c7acf7905dab5fc40fff0..9fe625a1fa3f8074ffdd58c4aa2ebebfc4dfd2f1 100644
--- a/tests/lib/share/backend.php
+++ b/tests/lib/share/backend.php
@@ -19,48 +19,49 @@
 * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
 */
 
-abstract class Test_Share_Backend extends UnitTestCase {
+class Test_Share_Backend implements OCP\Share_Backend {
 
-	protected $userBackend;
-	protected $user1;
-	protected $user2;
-	protected $groupBackend;
-	protected $group;
-	protected $itemType;
-	protected $item;
+	const FORMAT_SOURCE = 0;
+	const FORMAT_TARGET = 1;
+	const FORMAT_PERMISSIONS = 2;
+	
+	private $testItem = 'test.txt';
 
-	public function setUp() {
-		OC_User::clearBackends();
-		OC_User::useBackend('dummy');
-		$this->user1 = uniqid('user_');
-		$this->user2 = uniqid('user_');
-		OC_User::createUser($this->user1, 'pass1');
-		OC_User::createUser($this->user2, 'pass2');
-		OC_Group::clearBackends();
-		OC_Group::useBackend(new OC_Group_Dummy);
-		$this->group = uniqid('group_');
-		OC_Group::createGroup($this->group);
+	public function isValidSource($itemSource, $uidOwner) {
+		if ($itemSource == $this->testItem) {
+			return true;
+		}
 	}
 
-	public function testShareWithUserNonExistentItem() {
-		$this->assertFalse(OCP\Share::share($this->itemType, uniqid('foobar_'), OCP\Share::SHARETYPE_USER, $this->user2, OCP\Share::PERMISSION_READ));
+	public function generateTarget($itemSource, $shareWith, $exclude = null) {
+		$target = $itemSource;
+		if (isset($exclude)) {
+			$pos = strrpos($target, '.');
+			$name = substr($target, 0, $pos);
+			$ext = substr($target, $pos);
+			$append = '';
+			$i = 1;
+			while (in_array($name.$append.$ext, $exclude)) {
+				$append = $i;
+				$i++;
+			}
+			$target = $name.$append.$ext;
+		}
+		return $target;
 	}
 
-	public function testShareWithUserItem() {
-		$this->assertTrue(OCP\Share::share($this->itemType, $this->item, OCP\Share::SHARETYPE_USER, $this->user2, OCP\Share::PERMISSION_READ));
-	}
-
-	public function testShareWithGroupNonExistentItem() {
-		$this->assertFalse(OCP\Share::share($this->itemType, uniqid('foobar_'), OCP\Share::SHARETYPE_GROUP, $this->group, OCP\Share::PERMISSION_READ));
-	}
-
-	public function testShareWithGroupItem() {
-		$this->assertTrue(OCP\Share::share($this->itemType, $this->item, OCP\Share::SHARETYPE_GROUP, $this->group, OCP\Share::PERMISSION_READ));
-	}
-
-	public function testShareWithUserAlreadySharedWith() {
-		$this->assertTrue(OCP\Share::share($this->itemType, $this->item, OCP\Share::SHARETYPE_USER, $this->user2, OCP\Share::PERMISSION_READ));
-		$this->assertFalse(OCP\Share::share($this->itemType, $this->item, OCP\Share::SHARETYPE_USER, $this->user2, OCP\Share::PERMISSION_READ));
+	public function formatItems($items, $format, $parameters = null) {
+		$testItems = array();
+		foreach ($items as $item) {
+			if ($format == self::FORMAT_SOURCE) {
+				$testItems[] = $item['item_source'];
+			} else if ($format == self::FORMAT_TARGET) {
+				$testItems[] = $item['item_target'];
+			} else if ($format == self::FORMAT_PERMISSIONS) {
+				$testItems[] = $item['permissions'];
+			}
+		}
+		return $testItems;
 	}
 
 }
diff --git a/tests/lib/share/share.php b/tests/lib/share/share.php
index eca2c9bc58aab00a756e07bea684f44d1e2b1f1f..4b73cc183a394fc7d9448b348ddc351db2840398 100644
--- a/tests/lib/share/share.php
+++ b/tests/lib/share/share.php
@@ -19,7 +19,7 @@
 * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
 */
 
-class Test_Share_Base extends UnitTestCase {
+class Test_Share extends UnitTestCase {
 
 	protected $itemType;
 	protected $userBackend;
@@ -35,127 +35,251 @@ class Test_Share_Base extends UnitTestCase {
 		OC_User::useBackend('dummy');
 		$this->user1 = uniqid('user_');
 		$this->user2 = uniqid('user_');
-		OC_User::createUser($this->user1, 'pass1');
-		OC_User::createUser($this->user2, 'pass2');
+		$this->user3 = uniqid('user_');
+		OC_User::createUser($this->user1, 'pass');
+		OC_User::createUser($this->user2, 'pass');
+		OC_User::createUser($this->user3, 'pass');
+		OC_User::setUserId($this->user1);
 		OC_Group::clearBackends();
 		OC_Group::useBackend(new OC_Group_Dummy);
 		$this->group1 = uniqid('group_');
 		$this->group2 = uniqid('group_');
 		OC_Group::createGroup($this->group1);
 		OC_Group::createGroup($this->group2);
+		OC_Group::addToGroup($this->user1, $this->group1);
+		OC_Group::addToGroup($this->user2, $this->group1);
+		OC_Group::addToGroup($this->user3, $this->group1);
+		OCP\Share::registerBackend('test', 'Test_Share_Backend');
 	}
 
-	public function testShareInvalidShareType() {
-		$this->assertFalse(OCP\Share::share('file', 'test.txt', 'foobar', $this->user1, OCP\Share::PERMISSION_READ));
+	public function tearDown() {
+		$query = OC_DB::prepare('DELETE FROM *PREFIX*share WHERE item_type = ?');
+		$query->execute(array('test'));
 	}
 
-	public function testShareInvalidItemType() {
-		$this->assertFalse(OCP\Share::share('foobar', 'test.txt', OCP\Share::SHARETYPE_USER, $this->user1, OCP\Share::PERMISSION_READ));
-	}
-
-	public function testShareWithSelf() {
-		OC_User::setUserId($this->user1);
-		$this->assertFalse(OCP\Share::share('file', 'test.txt', OCP\Share::SHARETYPE_USER, $this->user1, OCP\Share::PERMISSION_READ));
+	public function testShareInvalidShareType() {
+		$this->expectException(new Exception('Share type foobar is not valid for test.txt'));
+		OCP\Share::shareItem('test', 'test.txt', 'foobar', $this->user2, OCP\Share::PERMISSION_READ);
+		
 	}
 
-	public function testShareWithNonExistentUser() {
-		$this->assertFalse(OCP\Share::share('file', 'test.txt', OCP\Share::SHARETYPE_USER, 'foobar', OCP\Share::PERMISSION_READ));
+	public function testInvalidItemType() {
+		$message = 'Sharing backend for foobar not found';
+		try {
+			OCP\Share::shareItem('foobar', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user2, OCP\Share::PERMISSION_READ);
+			$this->fail('Exception was expected: '.$message);
+		} catch (Exception $exception) {
+			$this->assertEqual($exception->getMessage(), $message);
+		}
+		try {
+			OCP\Share::shareItem('foobar', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user2, OCP\Share::PERMISSION_READ);
+			$this->fail('Exception was expected: '.$message);
+		} catch (Exception $exception) {
+			$this->assertEqual($exception->getMessage(), $message);
+		}
+		try {
+			OCP\Share::getItemsSharedWith('foobar');
+			$this->fail('Exception was expected: '.$message);
+		} catch (Exception $exception) {
+			$this->assertEqual($exception->getMessage(), $message);
+		}
+		try {
+			OCP\Share::getItemSharedWith('foobar', 'test.txt');
+			$this->fail('Exception was expected: '.$message);
+		} catch (Exception $exception) {
+			$this->assertEqual($exception->getMessage(), $message);
+		}
+		try {
+			OCP\Share::getItemSharedWithBySource('foobar', 'test.txt');
+			$this->fail('Exception was expected: '.$message);
+		} catch (Exception $exception) {
+			$this->assertEqual($exception->getMessage(), $message);
+		}
+		try {
+			OCP\Share::getItemShared('foobar', 'test.txt');
+			$this->fail('Exception was expected: '.$message);
+		} catch (Exception $exception) {
+			$this->assertEqual($exception->getMessage(), $message);
+		}
+		try {
+			OCP\Share::unshare('foobar', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user2);
+			$this->fail('Exception was expected: '.$message);
+		} catch (Exception $exception) {
+			$this->assertEqual($exception->getMessage(), $message);
+		}
+		try {
+			OCP\Share::setPermissions('foobar', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user2, OCP\Share::PERMISSION_UPDATE);
+			$this->fail('Exception was expected: '.$message);
+		} catch (Exception $exception) {
+			$this->assertEqual($exception->getMessage(), $message);
+		}
 	}
 
-	public function testShareWithUserOwnerNotPartOfGroup() {
+	public function testShareWithUser() {
+		// Invalid shares
+		$message = 'Sharing test.txt failed, because the user '.$this->user1.' is the item owner';
+		try {
+			OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user1, OCP\Share::PERMISSION_READ);
+			$this->fail('Exception was expected: '.$message);
+		} catch (Exception $exception) {
+			$this->assertEqual($exception->getMessage(), $message);
+		}
+		$message = 'Sharing test.txt failed, because the user foobar does not exist';
+		try {
+			OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, 'foobar', OCP\Share::PERMISSION_READ);
+			$this->fail('Exception was expected: '.$message);
+		} catch (Exception $exception) {
+			$this->assertEqual($exception->getMessage(), $message);
+		}
 		
-	}
-
-	public function testShareWithUserAlreadySharedWith() {
+		// Valid share
+		$this->assertTrue(OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user2, OCP\Share::PERMISSION_READ));
+		$this->assertEqual(OCP\Share::getItemShared('test', 'test.txt', Test_Share_Backend::FORMAT_SOURCE), array('test.txt'));
+		OC_User::setUserId($this->user2);
+		$this->assertEqual(OCP\Share::getItemSharedWith('test', 'test.txt', Test_Share_Backend::FORMAT_SOURCE), array('test.txt'));
 		
-	}
-
-	public function testShareWithNonExistentGroup() {
-		$this->assertFalse(OCP\Share::share('file', 'test.txt', OCP\Share::SHARETYPE_GROUP, 'foobar', OCP\Share::PERMISSION_READ));
-	}
-
-	public function testShareWithGroupOwnerNotPartOfGroup() {
-
-	}
-
-
-	public function testShareWithGroupItem() {
-
-	}
-
-	public function testUnshareInvalidShareType() {
-
-	}
-
-	public function testUnshareNonExistentItem() {
-
-	}
-
-	public function testUnshareFromUserItem() {
-
-	}
-
-	public function testUnshareFromGroupItem() {
-
-	}
-
-	
-
-
-	
-		// Test owner not in same group (false)
-
+		// Attempt to share again
+		OC_User::setUserId($this->user1);
+		$message = 'Sharing test.txt failed, because this item is already shared with '.$this->user2;
+		try {
+			OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user2, OCP\Share::PERMISSION_READ);
+			$this->fail('Exception was expected: '.$message);
+		} catch (Exception $exception) {
+			$this->assertEqual($exception->getMessage(), $message);
+		}
 		
-
-		// Test non-existant item type
-
-		// Test valid item
-
-		// Test existing shared item (false)
+		// Invalid item
+		$message = 'Sharing foobar failed, because the sharing backend for test could not find its source';
+		try {
+			OCP\Share::shareItem('test', 'foobar', OCP\Share::SHARE_TYPE_USER, $this->user2, OCP\Share::PERMISSION_READ);
+			$this->fail('Exception was expected: '.$message);
+		} catch (Exception $exception) {
+			$this->assertEqual($exception->getMessage(), $message);
+		}
 		
-		// Test unsharing item
-
-		// Test setting permissions
-
-		// Test setting permissions not as owner (false)
-
-		// Test setting target
-
-		// Test setting target as owner (false)
+		// Attempt reshare without share permission
+		OC_User::setUserId($this->user2);
+		$message = 'Sharing test.txt failed, because resharing is not allowed';
+		try {
+			OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user3, OCP\Share::PERMISSION_READ);
+			$this->fail('Exception was expected: '.$message);
+		} catch (Exception $exception) {
+			$this->assertEqual($exception->getMessage(), $message);
+		}
 		
-		// Spam reshares
-
+		// Owner grants share and update permission 
+		OC_User::setUserId($this->user1);
+		$this->assertTrue(OCP\Share::setPermissions('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user2, OCP\Share::PERMISSION_READ | OCP\Share::PERMISSION_UPDATE | OCP\Share::PERMISSION_SHARE));
 		
-
-		// Test non-existant group
+		// Attempt reshare with escalated permissions
+		OC_User::setUserId($this->user2);
+		$message = 'Sharing test.txt failed, because the permissions exceed permissions granted to '.$this->user2;
+		try {
+			OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user3, OCP\Share::PERMISSION_READ | OCP\Share::PERMISSION_DELETE);
+			$this->fail('Exception was expected: '.$message);
+		} catch (Exception $exception) {
+			$this->assertEqual($exception->getMessage(), $message);
+		}
 		
-
-		// Test owner not part of group
-
-		// Test existing shared item with group
-
-		// Test valid item, valid name for all users
-
-		// Test unsharing item
-
-		// Test item with name conflicts
-
-		// Test unsharing item
-
-		// Test setting permissions
-
-		// Test setting target no name conflicts
-
-		// Test setting target with conflicts
-
-		// Spam reshares
-
+		// Valid reshare
+		$this->assertTrue(OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user3, OCP\Share::PERMISSION_READ | OCP\Share::PERMISSION_UPDATE));
+		$this->assertEqual(OCP\Share::getItemShared('test', 'test.txt', Test_Share_Backend::FORMAT_SOURCE), array('test.txt'));
+		OC_User::setUserId($this->user3);
+		$this->assertEqual(OCP\Share::getItemSharedWith('test', 'test.txt', Test_Share_Backend::FORMAT_SOURCE), array('test.txt'));
+		$this->assertEqual(OCP\Share::getItemSharedWith('test', 'test.txt', Test_Share_Backend::FORMAT_PERMISSIONS), array(OCP\Share::PERMISSION_READ | OCP\Share::PERMISSION_UPDATE));
 		
-
+		// Attempt to escalate permissions
+		OC_User::setUserId($this->user2);
+		$message = 'Setting permissions for test.txt failed, because the permissions exceed permissions granted to '.$this->user2;
+		try {
+			OCP\Share::setPermissions('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user3, OCP\Share::PERMISSION_READ | OCP\Share::PERMISSION_DELETE);
+			$this->fail('Exception was expected: '.$message);
+		} catch (Exception $exception) {
+			$this->assertEqual($exception->getMessage(), $message);
+		}
 		
+		// Remove update permission
+		OC_User::setUserId($this->user1);
+		$this->assertTrue(OCP\Share::setPermissions('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user2, OCP\Share::PERMISSION_READ | OCP\Share::PERMISSION_SHARE));
+		OC_User::setUserId($this->user2);
+		$this->assertEqual(OCP\Share::getItemSharedWith('test', 'test.txt', Test_Share_Backend::FORMAT_PERMISSIONS), array(OCP\Share::PERMISSION_READ | OCP\Share::PERMISSION_SHARE));
+		OC_User::setUserId($this->user3);
+		$this->assertEqual(OCP\Share::getItemSharedWith('test', 'test.txt', Test_Share_Backend::FORMAT_PERMISSIONS), array(OCP\Share::PERMISSION_READ));
+		
+		// Remove share permission
+		OC_User::setUserId($this->user1);
+		$this->assertTrue(OCP\Share::setPermissions('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user2, OCP\Share::PERMISSION_READ));
+		OC_User::setUserId($this->user2);
+		$this->assertEqual(OCP\Share::getItemSharedWith('test', 'test.txt', Test_Share_Backend::FORMAT_PERMISSIONS), array(OCP\Share::PERMISSION_READ));
+		OC_User::setUserId($this->user3);
+		$this->assertFalse(OCP\Share::getItemSharedWith('test', 'test.txt'));
+		
+		// Reshare again, and then have owner unshare
+		OC_User::setUserId($this->user1);
+		$this->assertTrue(OCP\Share::setPermissions('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user2, OCP\Share::PERMISSION_READ | OCP\Share::PERMISSION_SHARE));
+		OC_User::setUserId($this->user2);
+		$this->assertTrue(OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user3, OCP\Share::PERMISSION_READ));
+		OC_User::setUserId($this->user1);
+		$this->assertTrue(OCP\Share::unshare('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user2));
+		OC_User::setUserId($this->user2);
+		$this->assertFalse(OCP\Share::getItemSharedWith('test', 'test.txt'));
+		OC_User::setUserId($this->user3);
+		$this->assertFalse(OCP\Share::getItemSharedWith('test', 'test.txt'));
+		
+		// Attempt target conflict
+		OC_User::setUserId($this->user1);
+		$this->assertTrue(OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user2, OCP\Share::PERMISSION_READ));
+		OC_User::setUserId($this->user3);
+		$this->assertTrue(OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user2, OCP\Share::PERMISSION_READ));
+		OC_User::setUserId($this->user2);
+		$this->assertEqual(OCP\Share::getItemsSharedWith('test', Test_Share_Backend::FORMAT_TARGET), array('test.txt', 'test1.txt'));
+	}
 
-	public function testPrivateLink() {
+	public function testShareWithGroup() {
+		// Invalid shares
+		$message = 'Sharing test.txt failed, because the group foobar does not exist';
+		try {
+			OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_GROUP, 'foobar', OCP\Share::PERMISSION_READ);
+			$this->fail('Exception was expected: '.$message);
+		} catch (Exception $exception) {
+			$this->assertEqual($exception->getMessage(), $message);
+		}
+		$message = 'Sharing test.txt failed, because '.$this->user1.' is not a member of the group '.$this->group2;
+		try {
+			OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_GROUP, $this->group2, OCP\Share::PERMISSION_READ);
+			$this->fail('Exception was expected: '.$message);
+		} catch (Exception $exception) {
+			$this->assertEqual($exception->getMessage(), $message);
+		}
+		
+		// Valid share
+		$this->assertTrue(OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_GROUP, $this->group1, OCP\Share::PERMISSION_READ));
+		$this->assertEqual(OCP\Share::getItemShared('test', 'test.txt', Test_Share_Backend::FORMAT_SOURCE), array('test.txt'));
+		OC_User::setUserId($this->user2);
+		$this->assertEqual(OCP\Share::getItemSharedWith('test', 'test.txt', Test_Share_Backend::FORMAT_SOURCE), array('test.txt'));
+		OC_User::setUserId($this->user3);
+		$this->assertEqual(OCP\Share::getItemSharedWith('test', 'test.txt', Test_Share_Backend::FORMAT_SOURCE), array('test.txt'));
+		
+		// Attempt to share again
+		OC_User::setUserId($this->user1);
+		$message = 'Sharing test.txt failed, because this item is already shared with '.$this->group1;
+		try {
+			OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_GROUP, $this->group1, OCP\Share::PERMISSION_READ);
+			$this->fail('Exception was expected: '.$message);
+		} catch (Exception $exception) {
+			$this->assertEqual($exception->getMessage(), $message);
+		}
+		
+		// Unshare
+		$this->assertTrue(OCP\Share::unshare('test', 'test.txt', OCP\Share::SHARE_TYPE_GROUP, $this->group1));
 		
+		// Attempt user specific target conflict
+		$this->assertTrue(OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user2, OCP\Share::PERMISSION_READ));
+		$this->assertTrue(OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_GROUP, $this->group1, OCP\Share::PERMISSION_READ));
+		OC_User::setUserId($this->user2);
+		$this->assertEqual(OCP\Share::getItemsSharedWith('test', Test_Share_Backend::FORMAT_TARGET), array('test.txt', 'test1.txt'));
+		OC_User::setUserId($this->user3);
+		$this->assertEqual(OCP\Share::getItemsSharedWith('test', Test_Share_Backend::FORMAT_TARGET), array('test.txt'));
 	}
 
 }