diff --git a/lib/files/cache/scanner.php b/lib/files/cache/scanner.php
index e650a220f56715ea25ecafe5253a13aabc923498..3c83b6528a7d6da7707e97e3c739ca09c3b920d6 100644
--- a/lib/files/cache/scanner.php
+++ b/lib/files/cache/scanner.php
@@ -121,4 +121,14 @@ class Scanner {
 		}
 		return $size;
 	}
+
+	/**
+	 * walk over any folders that are not fully scanned yet and scan them
+	 */
+	public function backgroundScan() {
+		while ($path = $this->cache->getIncomplete()) {
+			$this->scan($path);
+			$this->cache->correctFolderSize($path);
+		}
+	}
 }
diff --git a/tests/lib/files/cache/scanner.php b/tests/lib/files/cache/scanner.php
index c53da92727c1766858518ccd4cdbcf3d67a68208..6d26150d82b58f41c86e5bf4f610328f313a944a 100644
--- a/tests/lib/files/cache/scanner.php
+++ b/tests/lib/files/cache/scanner.php
@@ -104,6 +104,28 @@ class Scanner extends \UnitTestCase {
 		$this->assertNotEqual($cachedDataFolder['size'], -1);
 	}
 
+	function testBackgroundScan(){
+		$this->fillTestFolders();
+		$this->storage->mkdir('folder2');
+		$this->storage->file_put_contents('folder2/bar.txt', 'foobar');
+
+		$this->scanner->scan('', \OC\Files\Cache\Scanner::SCAN_SHALLOW);
+		$this->assertFalse($this->cache->inCache('folder/bar.txt'));
+		$this->assertFalse($this->cache->inCache('folder/2bar.txt'));
+		$cachedData = $this->cache->get('');
+		$this->assertEquals(-1, $cachedData['size']);
+
+		$this->scanner->backgroundScan();
+
+		$this->assertTrue($this->cache->inCache('folder/bar.txt'));
+		$this->assertTrue($this->cache->inCache('folder/bar.txt'));
+
+		$cachedData = $this->cache->get('');
+		$this->assertnotEquals(-1, $cachedData['size']);
+
+		$this->assertFalse($this->cache->getIncomplete());
+	}
+
 	function setUp() {
 		$this->storage = new \OC\Files\Storage\Temporary(array());
 		$this->scanner = new \OC\Files\Cache\Scanner($this->storage);