diff --git a/apps/files_encryption/lib/cryptstream.php b/apps/files_encryption/lib/cryptstream.php
index 901e8cccbfb6364544cfd0aab930d6265f7fbe8b..9949c1896a8d3313d49b4c8f932a17bc0028cf00 100644
--- a/apps/files_encryption/lib/cryptstream.php
+++ b/apps/files_encryption/lib/cryptstream.php
@@ -115,8 +115,9 @@ class OC_CryptStream{
 			$data=substr($block,0,$currentPos%8192).$data;
 			fseek($this->source,-($currentPos%8192),SEEK_CUR);
 		}
-		while(strlen($data)>0){
-			if(strlen($data)<8192){
+		$currentPos=ftell($this->source);
+		while($remainingLength=strlen($data)>0){
+			if($remainingLength<8192){
 				$this->writeCache=$data;
 				$data='';
 			}else{
@@ -125,8 +126,7 @@ class OC_CryptStream{
 				$data=substr($data,8192);
 			}
 		}
-		$currentPos=ftell($this->source);
-		$this->size=max($this->size,$currentPos);
+		$this->size=max($this->size,$currentPos+$length);
 		return $length;
 	}
 
diff --git a/lib/filecache.php b/lib/filecache.php
index 1d22bb34dfc247e97e5cf8d4febc37aae6b82c67..da9baa020a2c5e28b9cb72452c8d1ea70e4262ed 100644
--- a/lib/filecache.php
+++ b/lib/filecache.php
@@ -91,14 +91,14 @@ class OC_FileCache{
 			$data=array_merge(OC_FileCache::$savedData[$path],$data);
 			unset(OC_FileCache::$savedData[$path]);
 		}
-		if(!isset($data['size']) or !isset($data['mtime'])){//save incomplete data for the next time we write it
-			self::$savedData[$path]=$data;
-			return;
-		}
 		if($id!=-1){
 			self::update($id,$data);
 			return;
 		}
+		if(!isset($data['size']) or !isset($data['mtime'])){//save incomplete data for the next time we write it
+			self::$savedData[$path]=$data;
+			return;
+		}
 		if(!isset($data['encrypted'])){
 			$data['encrypted']=false;
 		}