diff --git a/lib/connector/sabre/node.php b/lib/connector/sabre/node.php
index ebc9e539625b0817ea3566937d8cb1001c9db9d0..d0ab0c24988f038290385c75ee057607590e4c1f 100644
--- a/lib/connector/sabre/node.php
+++ b/lib/connector/sabre/node.php
@@ -210,27 +210,13 @@ abstract class OC_Connector_Sabre_Node implements Sabre_DAV_INode, Sabre_DAV_IPr
 		return $props;
 	}
 
-	/**
-	 * Creates a ETag for this path.
-	 * @param string $path Path of the file
-	 * @return string|null Returns null if the ETag can not effectively be determined
-	 */
-	static protected function createETag($path) {
-		if(self::$ETagFunction) {
-			$hash = call_user_func(self::$ETagFunction, $path);
-			return $hash;
-		}else{
-			return uniqid('', true);
-		}
-	}
-
 	/**
 	 * Returns the ETag surrounded by double-quotes for this path.
 	 * @param string $path Path of the file
 	 * @return string|null Returns null if the ETag can not effectively be determined
 	 */
 	static public function getETagPropertyForPath($path) {
-		$tag = self::createETag($path);
+		$tag = \OC\Files\Filesystem::getETag($path);
 		if (empty($tag)) {
 			return null;
 		}
diff --git a/lib/files/filesystem.php b/lib/files/filesystem.php
index 76a188e4120806cef1ec2d9c360af637ee8905ec..ed2814211f4097658eb92762e472cc5e5f942c61 100644
--- a/lib/files/filesystem.php
+++ b/lib/files/filesystem.php
@@ -654,6 +654,16 @@ class Filesystem {
 	public static function getDirectoryContent($directory, $mimetype_filter = '') {
 		return self::$defaultInstance->getDirectoryContent($directory, $mimetype_filter);
 	}
+
+	/**
+	 * get the ETag for a file or folder
+	 *
+	 * @param string $path
+	 * @return string
+	 */
+	static public function getETag($path){
+		return self::$defaultInstance->getETag($path);
+	}
 }
 
 \OC_Hook::connect('OC_Filesystem', 'post_write', 'OC_Filesystem', 'removeETagHook');
diff --git a/lib/files/storage/common.php b/lib/files/storage/common.php
index e22264d0da9de2c18601d75e4d7fb1fa615b3809..f471752d1ff10312a0123c26324993fd2ab29f47 100644
--- a/lib/files/storage/common.php
+++ b/lib/files/storage/common.php
@@ -267,4 +267,20 @@ abstract class Common implements \OC\Files\Storage\Storage {
 	public function getOwner($path) {
 		return \OC_User::getUser();
 	}
+
+	/**
+	 * get the ETag for a file or folder
+	 *
+	 * @param string $path
+	 * @return string
+	 */
+	public function getETag($path){
+		$ETagFunction = \OC_Connector_Sabre_Node::$ETagFunction;
+		if($ETagFunction) {
+			$hash = call_user_func($ETagFunction, $path);
+			return $hash;
+		}else{
+			return uniqid('', true);
+		}
+	}
 }
diff --git a/lib/files/storage/storage.php b/lib/files/storage/storage.php
index 1f5c9356294f8b0c7ec6c52c6d2e9191f807381c..bb1ba16984d0d812c90ad8b7ee84cbb728072d0d 100644
--- a/lib/files/storage/storage.php
+++ b/lib/files/storage/storage.php
@@ -63,4 +63,12 @@ interface Storage{
 	public function getScanner();
 
 	public function getOwner($path);
+
+	/**
+	 * get the ETag for a file or folder
+	 *
+	 * @param string $path
+	 * @return string
+	 */
+	public function getETag($path);
 }
diff --git a/lib/files/view.php b/lib/files/view.php
index e3f9b762f7a1b97dff60df076bcf4abd0d6d50f6..a54c3ee35643ca1efdbd47de66bdc88201189869 100644
--- a/lib/files/view.php
+++ b/lib/files/view.php
@@ -866,4 +866,19 @@ class View {
 
 		return $files;
 	}
+
+	/**
+	 * get the ETag for a file or folder
+	 *
+	 * @param string $path
+	 * @return string
+	 */
+	public function getETag($path){
+		/**
+		 * @var Storage\Storage $storage
+		 * @var string $internalPath
+		 */
+		list($storage, $internalPath) = $this->resolvePath($path);
+		return $storage->getETag($internalPath);
+	}
 }