diff --git a/lib/private/files/cache/watcher.php b/lib/private/files/cache/watcher.php
index 251ecbe7071335cc3cf3165d9315dec986021540..48aa6f853ce8db9ae9052ef65859ebc1e4cf059c 100644
--- a/lib/private/files/cache/watcher.php
+++ b/lib/private/files/cache/watcher.php
@@ -12,6 +12,14 @@ namespace OC\Files\Cache;
  * check the storage backends for updates and change the cache accordingly
  */
 class Watcher {
+	const CHECK_NEVER = 0; // never check the underlying filesystem for updates
+	const CHECK_ONCE = 1; // check the underlying filesystem for updates once every request for each file
+	const CHECK_ALWAYS = 2; // always check the underlying filesystem for updates
+
+	protected $watchPolicy = self::CHECK_ONCE;
+
+	protected $checkedPaths = array();
+
 	/**
 	 * @var \OC\Files\Storage\Storage $storage
 	 */
@@ -23,7 +31,7 @@ class Watcher {
 	protected $cache;
 
 	/**
-	 * @var Scanner $scanner;
+	 * @var Scanner $scanner ;
 	 */
 	protected $scanner;
 
@@ -36,6 +44,13 @@ class Watcher {
 		$this->scanner = $storage->getScanner();
 	}
 
+	/**
+	 * @param int $policy either \OC\Files\Cache\Watcher::UPDATE_NEVER, \OC\Files\Cache\Watcher::UPDATE_ONCE, \OC\Files\Cache\Watcher::UPDATE_ALWAYS
+	 */
+	public function setPolicy($policy) {
+		$this->watchPolicy = $policy;
+	}
+
 	/**
 	 * check $path for updates
 	 *
@@ -43,20 +58,25 @@ class Watcher {
 	 * @return boolean | array true if path was updated, otherwise the cached data is returned
 	 */
 	public function checkUpdate($path) {
-		$cachedEntry = $this->cache->get($path);
-		if ($this->storage->hasUpdated($path, $cachedEntry['storage_mtime'])) {
-			if ($this->storage->is_dir($path)) {
-				$this->scanner->scan($path, Scanner::SCAN_SHALLOW);
-			} else {
-				$this->scanner->scanFile($path);
-			}
-			if ($cachedEntry['mimetype'] === 'httpd/unix-directory') {
-				$this->cleanFolder($path);
+		if ($this->watchPolicy === self::CHECK_ALWAYS or ($this->watchPolicy === self::CHECK_ONCE and array_search($path, $this->checkedPaths) === false)) {
+			$cachedEntry = $this->cache->get($path);
+			$this->checkedPaths[] = $path;
+			if ($this->storage->hasUpdated($path, $cachedEntry['storage_mtime'])) {
+				if ($this->storage->is_dir($path)) {
+					$this->scanner->scan($path, Scanner::SCAN_SHALLOW);
+				} else {
+					$this->scanner->scanFile($path);
+				}
+				if ($cachedEntry['mimetype'] === 'httpd/unix-directory') {
+					$this->cleanFolder($path);
+				}
+				$this->cache->correctFolderSize($path);
+				return true;
 			}
-			$this->cache->correctFolderSize($path);
-			return true;
+			return $cachedEntry;
+		} else {
+			return false;
 		}
-		return $cachedEntry;
 	}
 
 	/**
diff --git a/tests/lib/files/view.php b/tests/lib/files/view.php
index 72a2f854cb2d22e639f3fc8d0fc12f49aba5f07a..371d1ed1798af34c723f391bde011777e8d10734 100644
--- a/tests/lib/files/view.php
+++ b/tests/lib/files/view.php
@@ -7,6 +7,8 @@
 
 namespace Test\Files;
 
+use OC\Files\Cache\Watcher;
+
 class TemporaryNoTouch extends \OC\Files\Storage\Temporary {
 	public function touch($path, $mtime = null) {
 		return false;
@@ -249,6 +251,7 @@ class View extends \PHPUnit_Framework_TestCase {
 	function testWatcher() {
 		$storage1 = $this->getTestStorage();
 		\OC\Files\Filesystem::mount($storage1, array(), '/');
+		$storage1->getWatcher()->setPolicy(Watcher::CHECK_ALWAYS);
 
 		$rootView = new \OC\Files\View('');