diff --git a/lib/files/cache/scanner.php b/lib/files/cache/scanner.php
index 061778cd8521c42adb41ce959eb504b0270c51a7..e7fbd856d5a425675e82730ec3e820d044d87567 100644
--- a/lib/files/cache/scanner.php
+++ b/lib/files/cache/scanner.php
@@ -119,7 +119,7 @@ class Scanner {
 			$reuse = ($recursive === self::SCAN_SHALLOW) ? self::REUSE_ETAG | self::REUSE_SIZE : 0;
 		}
 		$this->scanFile($path, $reuse);
-		return $this->scanChildren($path, $recursive);
+		return $this->scanChildren($path, $recursive, $reuse);
 	}
 
 	/**
@@ -165,9 +165,7 @@ class Scanner {
 					$size += $childSize;
 				}
 			}
-			if ($size !== -1) {
-				$this->cache->put($path, array('size' => $size));
-			}
+			$this->cache->put($path, array('size' => $size));
 		}
 		return $size;
 	}
diff --git a/tests/lib/files/cache/scanner.php b/tests/lib/files/cache/scanner.php
index 3885c99e6d325121c260547c39ea1cfa02995531..3dacefa2b801dab56f6a34b8d26ddfb4f5312218 100644
--- a/tests/lib/files/cache/scanner.php
+++ b/tests/lib/files/cache/scanner.php
@@ -104,7 +104,7 @@ class Scanner extends \PHPUnit_Framework_TestCase {
 		$this->assertNotEquals($cachedDataFolder['size'], -1);
 	}
 
-	function testBackgroundScan(){
+	function testBackgroundScan() {
 		$this->fillTestFolders();
 		$this->storage->mkdir('folder2');
 		$this->storage->file_put_contents('folder2/bar.txt', 'foobar');
@@ -126,6 +126,24 @@ class Scanner extends \PHPUnit_Framework_TestCase {
 		$this->assertFalse($this->cache->getIncomplete());
 	}
 
+	public function testReuseExisting() {
+		$this->fillTestFolders();
+
+		$this->scanner->scan('');
+		$oldData = $this->cache->get('');
+		$this->storage->unlink('folder/bar.txt');
+		$this->scanner->scan('', \OC\Files\Cache\Scanner::SCAN_SHALLOW, \OC\Files\Cache\Scanner::REUSE_SIZE);
+		$newData = $this->cache->get('');
+		$this->assertNotEquals($oldData['etag'], $newData['etag']);
+		$this->assertEquals($oldData['size'], $newData['size']);
+
+		$oldData = $newData;
+		$this->scanner->scan('', \OC\Files\Cache\Scanner::SCAN_SHALLOW, \OC\Files\Cache\Scanner::REUSE_ETAG);
+		$newData = $this->cache->get('');
+		$this->assertEquals($oldData['etag'], $newData['etag']);
+		$this->assertEquals(-1, $newData['size']);
+	}
+
 	function setUp() {
 		$this->storage = new \OC\Files\Storage\Temporary(array());
 		$this->scanner = new \OC\Files\Cache\Scanner($this->storage);