diff --git a/lib/files/cache/permissions.php b/lib/files/cache/permissions.php
index dd7233abc70fdeca195a0b3ab7b8a142fcc68568..d0968337f02cd62f02d175f3c4265ca58531e811 100644
--- a/lib/files/cache/permissions.php
+++ b/lib/files/cache/permissions.php
@@ -9,6 +9,22 @@
 namespace OC\Files\Cache;
 
 class Permissions {
+	/**
+	 * @var string $storageId
+	 */
+	private $storageId;
+
+	/**
+	 * @param \OC\Files\Storage\Storage|string $storage
+	 */
+	public function __construct($storage){
+		if($storage instanceof \OC\Files\Storage\Storage){
+			$this->storageId = $storage->getId();
+		}else{
+			$this->storageId = $storage;
+		}
+	}
+
 	/**
 	 * get the permissions for a single file
 	 *
@@ -16,7 +32,7 @@ class Permissions {
 	 * @param string $user
 	 * @return int (-1 if file no permissions set)
 	 */
-	static public function get($fileId, $user) {
+	public function get($fileId, $user) {
 		$query = \OC_DB::prepare('SELECT `permissions` FROM `*PREFIX*permissions` WHERE `user` = ? AND `fileid` = ?');
 		$result = $query->execute(array($user, $fileId));
 		if ($row = $result->fetchRow()) {
@@ -33,7 +49,7 @@ class Permissions {
 	 * @param string $user
 	 * @param int $permissions
 	 */
-	static public function set($fileId, $user, $permissions) {
+	public function set($fileId, $user, $permissions) {
 		if (self::get($fileId, $user) !== -1) {
 			$query = \OC_DB::prepare('UPDATE `*PREFIX*permissions` SET `permissions` = ? WHERE `user` = ? AND `fileid` = ?');
 		} else {
@@ -49,7 +65,7 @@ class Permissions {
 	 * @param string $user
 	 * @return int[]
 	 */
-	static public function getMultiple($fileIds, $user) {
+	public function getMultiple($fileIds, $user) {
 		if (count($fileIds) === 0) {
 			return array();
 		}
@@ -72,17 +88,15 @@ class Permissions {
 	 * @param int $fileId
 	 * @param string $user
 	 */
-	static public function remove($fileId, $user) {
+	public function remove($fileId, $user) {
 		$query = \OC_DB::prepare('DELETE FROM `*PREFIX*permissions` WHERE `fileid` = ? AND `user` = ?');
 		$query->execute(array($fileId, $user));
 	}
 
-	static public function removeMultiple($fileIds, $user) {
-		$params = $fileIds;
-		$params[] = $user;
-		$inPart = implode(', ', array_fill(0, count($fileIds), '?'));
-
-		$query = \OC_DB::prepare('DELETE FROM `*PREFIX*permissions` WHERE `fileid` IN (' . $inPart . ') AND `user` = ?');
-		$query->execute($params);
+	public function removeMultiple($fileIds, $user) {
+		$query = \OC_DB::prepare('DELETE FROM `*PREFIX*permissions` WHERE `fileid` = ? AND `user` = ?');
+		foreach($fileIds as $fileId){
+			$query->execute(array($fileId, $user));
+		}
 	}
 }
diff --git a/lib/files/storage/common.php b/lib/files/storage/common.php
index f471752d1ff10312a0123c26324993fd2ab29f47..cf6fe64a4f23bf129014c8d8e21e2d126723d30b 100644
--- a/lib/files/storage/common.php
+++ b/lib/files/storage/common.php
@@ -57,19 +57,19 @@ abstract class Common implements \OC\Files\Storage\Storage {
 	public function getPermissions($path){
 		$permissions = 0;
 		if($this->isCreatable($path)){
-			$permissions |= \OCP\Share::PERMISSION_CREATE;
+			$permissions |= \OCP\PERMISSION_CREATE;
 		}
 		if($this->isReadable($path)){
-			$permissions |= \OCP\Share::PERMISSION_READ;
+			$permissions |= \OCP\PERMISSION_READ;
 		}
 		if($this->isUpdatable($path)){
-			$permissions |= \OCP\Share::PERMISSION_UPDATE;
+			$permissions |= \OCP\PERMISSION_UPDATE;
 		}
 		if($this->isDeletable($path)){
-			$permissions |= \OCP\Share::PERMISSION_DELETE;
+			$permissions |= \OCP\PERMISSION_DELETE;
 		}
 		if($this->isSharable($path)){
-			$permissions |= \OCP\Share::PERMISSION_SHARE;
+			$permissions |= \OCP\PERMISSION_SHARE;
 		}
 		return $permissions;
 	}
@@ -259,6 +259,10 @@ abstract class Common implements \OC\Files\Storage\Storage {
 		return new \OC\Files\Cache\Scanner($this);
 	}
 
+	public function getPermissionsCache(){
+		return new \OC\Files\Cache\Permissions($this);
+	}
+
 	/**
 	 * get the owner of a path
 	 * @param string $path The path to get the owner
diff --git a/lib/files/storage/storage.php b/lib/files/storage/storage.php
index bb1ba16984d0d812c90ad8b7ee84cbb728072d0d..73dcb8fe36bbde873447f824ea5ebb616afb47e5 100644
--- a/lib/files/storage/storage.php
+++ b/lib/files/storage/storage.php
@@ -64,6 +64,11 @@ interface Storage{
 
 	public function getOwner($path);
 
+	/**
+	 * @return \OC\Files\Cache\Permissions
+	 */
+	public function getPermissionsCache();
+
 	/**
 	 * get the ETag for a file or folder
 	 *
diff --git a/lib/files/view.php b/lib/files/view.php
index a54c3ee35643ca1efdbd47de66bdc88201189869..e516a4fed6a1a8c023d96176c783d2bffa87e681 100644
--- a/lib/files/view.php
+++ b/lib/files/view.php
@@ -701,7 +701,8 @@ class View {
 			}
 		}
 
-		$data['permissions'] = Cache\Permissions::get($data['fileid'], \OC_User::getUser());
+		$permissionsCache = $storage->getPermissionsCache();
+		$data['permissions'] = $permissionsCache->get($data['fileid'], \OC_User::getUser());
 
 		return $data;
 	}
@@ -759,8 +760,9 @@ class View {
 			$files[$i]['type'] = $file['mimetype'] === 'httpd/unix-directory' ? 'dir' : 'file';
 			$ids[] = $file['fileid'];
 		}
+		$permissionsCache = $storage->getPermissionsCache();
 
-		$permissions = Cache\Permissions::getMultiple($ids, \OC_User::getUser());
+		$permissions = $permissionsCache->getMultiple($ids, \OC_User::getUser());
 		foreach ($files as $i => $file) {
 			$files[$i]['permissions'] = $permissions[$file['fileid']];
 		}
diff --git a/tests/lib/files/cache/permissions.php b/tests/lib/files/cache/permissions.php
index 4d47929a3ee205675af378971976cacba837ee79..56dbbc4518ef3627d6f8b5964939822e794d92d2 100644
--- a/tests/lib/files/cache/permissions.php
+++ b/tests/lib/files/cache/permissions.php
@@ -9,39 +9,48 @@
 namespace Test\Files\Cache;
 
 class Permissions extends \PHPUnit_Framework_TestCase {
+	/***
+	 * @var \OC\Files\Cache\Permissions $permissionsCache
+	 */
+	private $permissionsCache;
+
+	function setUp(){
+		$this->permissionsCache=new \OC\Files\Cache\Permissions('dummy');
+	}
+
 	function testSimple() {
 		$ids = range(1, 10);
 		$user = uniqid();
 
-		$this->assertEquals(-1, \OC\Files\Cache\Permissions::get(1, $user));
-		\OC\Files\Cache\Permissions::set(1, $user, 1);
-		$this->assertEquals(1, \OC\Files\Cache\Permissions::get(1, $user));
-		$this->assertEquals(-1, \OC\Files\Cache\Permissions::get(2, $user));
-		$this->assertEquals(-1, \OC\Files\Cache\Permissions::get(1, $user . '2'));
+		$this->assertEquals(-1, $this->permissionsCache->get(1, $user));
+		$this->permissionsCache->set(1, $user, 1);
+		$this->assertEquals(1, $this->permissionsCache->get(1, $user));
+		$this->assertEquals(-1, $this->permissionsCache->get(2, $user));
+		$this->assertEquals(-1, $this->permissionsCache->get(1, $user . '2'));
 
-		\OC\Files\Cache\Permissions::set(1, $user, 2);
-		$this->assertEquals(2, \OC\Files\Cache\Permissions::get(1, $user));
+		$this->permissionsCache->set(1, $user, 2);
+		$this->assertEquals(2, $this->permissionsCache->get(1, $user));
 
-		\OC\Files\Cache\Permissions::set(2, $user, 1);
-		$this->assertEquals(1, \OC\Files\Cache\Permissions::get(2, $user));
+		$this->permissionsCache->set(2, $user, 1);
+		$this->assertEquals(1, $this->permissionsCache->get(2, $user));
 
-		\OC\Files\Cache\Permissions::remove(1, $user);
-		$this->assertEquals(-1, \OC\Files\Cache\Permissions::get(1, $user));
-		\OC\Files\Cache\Permissions::remove(1, $user . '2');
-		$this->assertEquals(1, \OC\Files\Cache\Permissions::get(2, $user));
+		$this->permissionsCache->remove(1, $user);
+		$this->assertEquals(-1, $this->permissionsCache->get(1, $user));
+		$this->permissionsCache->remove(1, $user . '2');
+		$this->assertEquals(1, $this->permissionsCache->get(2, $user));
 
 		$expected = array();
 		foreach ($ids as $id) {
-			\OC\Files\Cache\Permissions::set($id, $user, 10 + $id);
+			$this->permissionsCache->set($id, $user, 10 + $id);
 			$expected[$id] = 10 + $id;
 		}
-		$this->assertEquals($expected, \OC\Files\Cache\Permissions::getMultiple($ids, $user));
+		$this->assertEquals($expected, $this->permissionsCache->getMultiple($ids, $user));
 
-		\OC\Files\Cache\Permissions::removeMultiple(array(10, 9), $user);
+		$this->permissionsCache->removeMultiple(array(10, 9), $user);
 		unset($expected[9]);
 		unset($expected[10]);
-		$this->assertEquals($expected, \OC\Files\Cache\Permissions::getMultiple($ids, $user));
+		$this->assertEquals($expected, $this->permissionsCache->getMultiple($ids, $user));
 
-		\OC\Files\Cache\Permissions::removeMultiple($ids, $user);
+		$this->permissionsCache->removeMultiple($ids, $user);
 	}
 }
diff --git a/tests/lib/files/cache/scanner.php b/tests/lib/files/cache/scanner.php
index f784a82dada11e5f636eab2661b194b5b6dd5a0b..c53da92727c1766858518ccd4cdbcf3d67a68208 100644
--- a/tests/lib/files/cache/scanner.php
+++ b/tests/lib/files/cache/scanner.php
@@ -112,7 +112,8 @@ class Scanner extends \UnitTestCase {
 
 	function tearDown() {
 		$ids = $this->cache->getAll();
-		\OC\Files\Cache\Permissions::removeMultiple($ids, \OC_User::getUser());
+		$permissionsCache = $this->storage->getPermissionsCache();
+		$permissionsCache->removeMultiple($ids, \OC_User::getUser());
 		$this->cache->clear();
 	}
 }
diff --git a/tests/lib/files/cache/watcher.php b/tests/lib/files/cache/watcher.php
index a7076d9b0b511e46a0253fba57825709bb3ff572..0125dd843b97b34510f57f473d7c4c33b3b32328 100644
--- a/tests/lib/files/cache/watcher.php
+++ b/tests/lib/files/cache/watcher.php
@@ -23,7 +23,8 @@ class Watcher extends \PHPUnit_Framework_TestCase {
 		foreach ($this->storages as $storage) {
 			$cache = $storage->getCache();
 			$ids = $cache->getAll();
-			\OC\Files\Cache\Permissions::removeMultiple($ids, \OC_User::getUser());
+			$permissionsCache = $storage->getPermissionsCache();
+			$permissionsCache->removeMultiple($ids, \OC_User::getUser());
 			$cache->clear();
 		}
 	}
diff --git a/tests/lib/files/view.php b/tests/lib/files/view.php
index fa562cb15cd134a65c6e3e81507ad2baa9bbb53b..a173094b1cc091cb86b3ec481b4c851beafab6bc 100644
--- a/tests/lib/files/view.php
+++ b/tests/lib/files/view.php
@@ -21,7 +21,8 @@ class View extends \PHPUnit_Framework_TestCase {
 		foreach ($this->storages as $storage) {
 			$cache = $storage->getCache();
 			$ids = $cache->getAll();
-			\OC\Files\Cache\Permissions::removeMultiple($ids, \OC_User::getUser());
+			$permissionsCache = $storage->getPermissionsCache();
+			$permissionsCache->removeMultiple($ids, \OC_User::getUser());
 			$cache->clear();
 		}
 	}