diff --git a/apps/files_encryption/lib/cryptstream.php b/apps/files_encryption/lib/cryptstream.php
index 21fa38e4b5989699cac69deabac9feaf41d9c89c..07a2e523a4292f080ef895cc2ca3e169595f074f 100644
--- a/apps/files_encryption/lib/cryptstream.php
+++ b/apps/files_encryption/lib/cryptstream.php
@@ -33,6 +33,7 @@ class OC_CryptStream{
 	private $path;
 	private $readBuffer;//for streams that dont support seeking
 	private $meta=array();//header/meta for source stream
+	private $count;
 
 	public function stream_open($path, $mode, $options, &$opened_path){
 		$path=str_replace('crypt://','',$path);
@@ -92,16 +93,6 @@ class OC_CryptStream{
 			$data=substr($block,0,$currentPos%8192).$data;
 		}
 		while(strlen($data)>0){
-			if(strlen($data)<8192){
-				//fetch the current data in that block and append it to the input so we always write entire blocks
-				$oldPos=ftell($this->source);
-				$encryptedBlock=fread($this->source,8192);
-				fseek($this->source,$oldPos);
-				if($encryptedBlock){
-					$block=OC_Crypt::decrypt($encryptedBlock);
-					$data.=substr($block,strlen($data));
-				}
-			}
 			$encrypted=OC_Crypt::encrypt(substr($data,0,8192));
 			fwrite($this->source,$encrypted);
 			$data=substr($data,8192);
@@ -139,7 +130,9 @@ class OC_CryptStream{
 	}
 
 	public function stream_close(){
-		OC_FileCache::put($this->path,array('encrypted'=>true));
+		if($this->meta['mode']!='r' and $this->meta['mode']!='rb'){
+			OC_FileCache::put($this->path,array('encrypted'=>true));
+		}
 		return fclose($this->source);
 	}
 }
\ No newline at end of file
diff --git a/apps/files_encryption/lib/proxy.php b/apps/files_encryption/lib/proxy.php
index e3a106d0d04ac67aef8bbe7619a5e82440fe21ca..d65bcba8bfa1dc80056921b14d46a9ed43a073dd 100644
--- a/apps/files_encryption/lib/proxy.php
+++ b/apps/files_encryption/lib/proxy.php
@@ -27,7 +27,6 @@
 
 class OC_FileProxy_Encryption extends OC_FileProxy{
 	private static $blackList=null; //mimetypes blacklisted from encryption
-	private static $metaData=array(); //metadata cache
 	private static $enableEncryption=null;
 	
 	/**
@@ -60,13 +59,8 @@ class OC_FileProxy_Encryption extends OC_FileProxy{
 	 * @return bool
 	 */
 	private static function isEncrypted($path){
-		if(isset(self::$metaData[$path])){
-			$metadata=self::$metaData[$path];
-		}else{
-			$metadata=OC_FileCache::getCached($path);
-			self::$metaData[$path]=$metadata;
-		}
-		return (bool)$metadata['encrypted'];
+		$metadata=OC_FileCache::getCached($path);
+		return isset($metadata['encrypted']) and (bool)$metadata['encrypted'];
 	}
 	
 	public function preFile_put_contents($path,&$data){
@@ -98,12 +92,7 @@ class OC_FileProxy_Encryption extends OC_FileProxy{
 				//first encrypt the target file so we don't end up with a half encrypted file
 				OC_Log::write('files_encryption','Decrypting '.$path.' before writing',OC_Log::DEBUG);
 				$tmp=fopen('php://temp');
-				while(!feof($result)){
-					$chunk=fread($result,8192);
-					if($chunk){
-						fwrite($tmp,$chunk);
-					}
-				}
+				OC_Helper::streamCopy($result,$tmp);
 				fclose($result);
 				OC_Filesystem::file_put_contents($path,$tmp);
 				fclose($tmp);