diff --git a/apps/files_encryption/lib/helper.php b/apps/files_encryption/lib/helper.php
index 7a2d19eed579c912ba357203fddc166048fb3289..3867a368a9a8c4a0259441099281f09cb30751b5 100755
--- a/apps/files_encryption/lib/helper.php
+++ b/apps/files_encryption/lib/helper.php
@@ -173,4 +173,20 @@ class Helper
 
 		return $return;
 	}
+
+
+	/**
+	 * @brief checks if access is public/anonymous user
+	 * @return bool
+	 */
+	public static function isPublicAccess() {
+		if (\OCP\USER::getUser() === false
+			|| (isset($_GET['service']) && $_GET['service'] == 'files'
+				&& isset($_GET['t']))
+		) {
+			return true;
+		} else {
+			return false;
+		}
+	}
 }
\ No newline at end of file
diff --git a/apps/files_encryption/lib/session.php b/apps/files_encryption/lib/session.php
index 2ddad0a15dacf188fb21575f45fb9cb3010922a4..1551275c63f5d498ff0db2b06b16f17691d04e30 100644
--- a/apps/files_encryption/lib/session.php
+++ b/apps/files_encryption/lib/session.php
@@ -83,17 +83,14 @@ class Session
 
 		}
 
-		if ( \OCP\USER::getUser() === false ||
-			( isset( $_GET['service'] ) && $_GET['service'] == 'files' &&
-				isset( $_GET['t'] ) )
-		) {
+		if (\OCA\Encryption\Helper::isPublicAccess()) {
 			// Disable encryption proxy to prevent recursive calls
 			$proxyStatus = \OC_FileProxy::$enabled;
 			\OC_FileProxy::$enabled = false;
 
 			$encryptedKey = $this->view->file_get_contents( '/owncloud_private_key/' . $publicShareKeyId . '.private.key' );
 			$privateKey = Crypt::symmetricDecryptFileContent( $encryptedKey, '' );
-			$this->setPrivateKey( $privateKey );
+			$this->setPublicSharePrivateKey( $privateKey );
 
 			\OC_FileProxy::$enabled = $proxyStatus;
 		}
@@ -103,6 +100,8 @@ class Session
 	 * @brief Sets user private key to session
 	 * @param string $privateKey
 	 * @return bool
+	 *
+	 * @note this should only be set on login
 	 */
 	public function setPrivateKey( $privateKey ) {
 
@@ -113,27 +112,53 @@ class Session
 	}
 
 	/**
-	 * @brief Gets user private key from session
+	 * @brief Gets user or public share private key from session
 	 * @returns string $privateKey The user's plaintext private key
 	 *
 	 */
 	public function getPrivateKey() {
 
-		if (
-			isset( $_SESSION['privateKey'] )
-			&& !empty( $_SESSION['privateKey'] )
-		) {
+		// return the public share private key if this is a public access
+		if (\OCA\Encryption\Helper::isPublicAccess()) {
+			return $this->getPublicSharePrivateKey();
+		} else {
+			if (isset($_SESSION['privateKey']) && !empty($_SESSION['privateKey'])) {
+				return $_SESSION['privateKey'];
+			} else {
+				return false;
+			}
+		}
+	}
+
+	/**
+	 * @brief Sets public user private key to session
+	 * @param string $privateKey
+	 * @return bool
+	 */
+	public function setPublicSharePrivateKey($privateKey) {
 
-			return $_SESSION['privateKey'];
+		$_SESSION['publicSharePrivateKey'] = $privateKey;
 
-		} else {
+		return true;
 
-			return false;
+	}
+
+	/**
+	 * @brief Gets public share private key from session
+	 * @returns string $privateKey
+	 *
+	 */
+	public function getPublicSharePrivateKey() {
 
+		if (isset($_SESSION['publicSharePrivateKey']) && !empty($_SESSION['publicSharePrivateKey'])) {
+			return $_SESSION['publicSharePrivateKey'];
+		} else {
+			return false;
 		}
 
 	}
 
+
 	/**
 	 * @brief Sets user legacy key to session
 	 * @param $legacyKey
diff --git a/apps/files_encryption/lib/util.php b/apps/files_encryption/lib/util.php
index 4171b7cae5053cc723df65616fd0fd8cd8c99fb4..48485cf2e86eb24b783a669de229040a951fbbba 100644
--- a/apps/files_encryption/lib/util.php
+++ b/apps/files_encryption/lib/util.php
@@ -127,13 +127,11 @@ class Util {
 		$this->recoveryKeyId = \OC_Appconfig::getValue('files_encryption', 'recoveryKeyId');
 
 		// if we are anonymous/public
-		if ($this->userId === false
-			|| (isset($_GET['service']) && $_GET['service'] == 'files' && isset($_GET['t']))
-		) {
+		if (\OCA\Encryption\Helper::isPublicAccess()) {
 			$this->userId = $this->publicShareKeyId;
 
 			// only handle for files_sharing app
-			if ($GLOBALS['app'] === 'files_sharing') {
+			if (isset($GLOBALS['app']) && $GLOBALS['app'] === 'files_sharing') {
 				$this->userDir = '/' . $GLOBALS['fileOwner'];
 				$this->fileFolderName = 'files';
 				$this->userFilesDir = '/' . $GLOBALS['fileOwner'] . '/'