diff --git a/apps/files_encryption/lib/keymanager.php b/apps/files_encryption/lib/keymanager.php
index ddd8f0ad6e26c0b49c5674b407fc0af2b29e7b66..58c1d4b24adf149ded83486160948dd39e189fba 100755
--- a/apps/files_encryption/lib/keymanager.php
+++ b/apps/files_encryption/lib/keymanager.php
@@ -237,10 +237,15 @@ class Keymanager
 		}
 
 		$util = new Util($view, \OCP\User::getUser());
-		list($owner, $filename) = $util->getUidAndFilename($filePath);
-		$filePath_f = ltrim($filename, '/');
 
-		$keyfilePath = '/' . $owner . '/files_encryption/keyfiles/' . $filePath_f . '.key';
+		if ($util->isPublic()) {
+			$keyfilePath = $util->getKeyfilePath() . $filePath . '.key';
+		} else {
+			list($owner, $filename) = $util->getUidAndFilename($filePath);
+			$filePath_f = ltrim($filename, '/');
+
+			$keyfilePath = '/' . $owner . '/files_encryption/keyfiles/' . $filePath_f . '.key';
+		}
 
 		$proxyStatus = \OC_FileProxy::$enabled;
 		\OC_FileProxy::$enabled = false;
@@ -447,9 +452,13 @@ class Keymanager
 		//here we need the currently logged in user, while userId can be a different user
 		$util = new Util($view, \OCP\User::getUser());
 
-		list($owner, $filename) = $util->getUidAndFilename($filePath);
+		if ($util->isPublic()) {
+			$shareKeyPath = $util->getSharekeyPath() . $filePath . '.' . $userId . '.shareKey';
+		} else {
+			list($owner, $filename) = $util->getUidAndFilename($filePath);
+			$shareKeyPath = \OC\Files\Filesystem::normalizePath('/' . $owner . '/files_encryption/share-keys/' . $filename . '.' . $userId . '.shareKey');
+		}
 
-		$shareKeyPath = \OC\Files\Filesystem::normalizePath('/' . $owner . '/files_encryption/share-keys/' . $filename . '.' . $userId . '.shareKey');
 		if ($view->file_exists($shareKeyPath)) {
 
 			$result = $view->file_get_contents($shareKeyPath);
diff --git a/apps/files_encryption/lib/session.php b/apps/files_encryption/lib/session.php
index 8425cedd99f3d6da23452d17f6f440c9b1bde921..86f56e56766f93c62f3eb6e4093b8de9e6fa4fd6 100644
--- a/apps/files_encryption/lib/session.php
+++ b/apps/files_encryption/lib/session.php
@@ -84,7 +84,9 @@ class Session
 
 		}
 
-		if (\OCP\USER::getUser() === false) {
+		if (\OCP\USER::getUser() === false ||
+			(isset($_GET['service']) && $_GET['service'] == 'files' &&
+			isset($_GET['t']))) {
 			// Disable encryption proxy to prevent recursive calls
 			$proxyStatus = \OC_FileProxy::$enabled;
 			\OC_FileProxy::$enabled = false;
diff --git a/apps/files_encryption/lib/util.php b/apps/files_encryption/lib/util.php
index 784d74bd759ca1383c3f3aba81e795bab0536fbf..e327c3403bb17ce80b2c3f71a5bbba44ea0d01e8 100644
--- a/apps/files_encryption/lib/util.php
+++ b/apps/files_encryption/lib/util.php
@@ -129,7 +129,9 @@ class Util
 		$this->recoveryKeyId = \OC_Appconfig::getValue('files_encryption', 'recoveryKeyId');
 
 		// if we are anonymous/public
-		if ($this->userId === false) {
+		if ($this->userId === false ||
+			(isset($_GET['service']) && $_GET['service'] == 'files' &&
+			isset($_GET['t']))) {
 			$this->userId = $this->publicShareKeyId;
 
 			// only handle for files_sharing app
@@ -1491,4 +1493,16 @@ class Util
 
 		$this->recoverAllFiles('/', $privateKey);
 	}
+
+	public function isPublic() {
+		return $this->isPublic;
+	}
+
+	public function getKeyfilePath() {
+		return $this->keyfilesPath;
+	}
+
+	public function getSharekeyPath() {
+		return $this->shareKeysPath;
+	}
 }