diff --git a/apps/encryption/lib/crypto/encryption.php b/apps/encryption/lib/crypto/encryption.php
index f036ea42cb93ecc300d0d3aacd281a3262589cc6..beb922afe7256face88e5adc8a2f32922a01af39 100644
--- a/apps/encryption/lib/crypto/encryption.php
+++ b/apps/encryption/lib/crypto/encryption.php
@@ -122,11 +122,7 @@ class Encryption implements IEncryptionModule {
 			}
 
 			$encryptedKeyfiles = $this->crypt->multiKeyEncrypt($this->fileKey, $publicKeys);
-
-			$this->keymanager->setFileKey($path, $encryptedKeyfiles['data']);
-			foreach ($encryptedKeyfiles['keys'] as $uid => $keyFile) {
-				$this->keymanager->setShareKey($path, $uid, $keyFile);
-			}
+			$this->keymanager->setAllFileKeys($path, $encryptedKeyfiles);
 		}
 		return $result;
 	}
@@ -218,11 +214,22 @@ class Encryption implements IEncryptionModule {
 	 * update encrypted file, e.g. give additional users access to the file
 	 *
 	 * @param string $path path to the file which should be updated
+	 * @param string $uid of the user who performs the operation
 	 * @param array $accessList who has access to the file contains the key 'users' and 'public'
 	 * @return boolean
 	 */
-	public function update($path, $accessList) {
-		// TODO: Implement update() method.
+	public function update($path, $uid, $accessList) {
+		$fileKey = $this->keymanager->getFileKey($path, $uid);
+		foreach ($accessList['users'] as $user) {
+			$publicKeys[$user] = $this->keymanager->getPublicKey($user);
+		}
+		$encryptedFileKey = $this->crypt->multiKeyEncrypt($fileKey, $publicKeys);
+
+		$this->keymanager->deleteAllFileKeys($path);
+
+		$this->keymanager->setAllFileKeys($path, $encryptedFileKey);
+
+		return true;
 	}
 
 	/**
diff --git a/apps/encryption/lib/keymanager.php b/apps/encryption/lib/keymanager.php
index e03852c1f6bbdaf30cccfc18f673a18c51f034ca..fe7fe08d277fc3a52cb6929b254908c55e325d92 100644
--- a/apps/encryption/lib/keymanager.php
+++ b/apps/encryption/lib/keymanager.php
@@ -183,6 +183,19 @@ class KeyManager {
 		return $this->keyStorage->setFileKey($path, $this->fileKeyId, $key);
 	}
 
+	/**
+	 * set all file keys (the file key and the corresponding share keys)
+	 *
+	 * @param string $path
+	 * @param array $keys
+	 */
+	public function setAllFileKeys($path, $keys) {
+		$this->setFileKey($path, $keys['data']);
+		foreach ($keys['keys'] as $uid => $keyFile) {
+			$this->setShareKey($path, $uid, $keyFile);
+		}
+	}
+
 	/**
 	 * write share key to the key storage
 	 *
@@ -405,6 +418,10 @@ class KeyManager {
 		return $this->keyStorage->deleteUserKey($uid, $this->privateKeyId);
 	}
 
+	public function deleteAllFileKeys($path) {
+		return $this->keyStorage->deleteAllFileKeys($path);
+	}
+
 	/**
 	 * @param array $userIds
 	 * @return array