diff --git a/lib/private/Files/Filesystem.php b/lib/private/Files/Filesystem.php
index 08621d160be67b2a295c33d6e8b3565d50432481..3d3345a5c80fa0e1df43cb43dd30d37445129501 100644
--- a/lib/private/Files/Filesystem.php
+++ b/lib/private/Files/Filesystem.php
@@ -781,7 +781,7 @@ class Filesystem {
 		 */
 		$path = (string)$path;
 
-		$cacheKey = json_encode([$path, $stripTrailingSlash, $isAbsolutePath]);
+		$cacheKey = json_encode([$path, $stripTrailingSlash, $isAbsolutePath, $keepUnicode]);
 
 		if (isset(self::$normalizedPathCache[$cacheKey])) {
 			return self::$normalizedPathCache[$cacheKey];
diff --git a/tests/lib/Files/FilesystemTest.php b/tests/lib/Files/FilesystemTest.php
index a4a4345d2f93935c9ccac222e72ca913a829e3d8..76e3f4716335c54c27f27abd600f6f51d8847ac8 100644
--- a/tests/lib/Files/FilesystemTest.php
+++ b/tests/lib/Files/FilesystemTest.php
@@ -92,6 +92,7 @@ class FilesystemTest extends \Test\TestCase {
 		}
 
 		$this->logout();
+		$this->invokePrivate('\OC\Files\Filesystem', 'normalizedPathCache', [null]);
 		parent::tearDown();
 	}
 
@@ -190,6 +191,32 @@ class FilesystemTest extends \Test\TestCase {
 		$this->assertEquals($expected, \OC\Files\Filesystem::normalizePath($path, $stripTrailingSlash));
 	}
 
+	public function normalizePathKeepUnicodeData() {
+		$nfdName = 'ümlaut';
+		$nfcName = 'ümlaut';
+		return [
+			['/' . $nfcName, $nfcName, true],
+			['/' . $nfcName, $nfcName, false],
+			['/' . $nfdName, $nfdName, true],
+			['/' . $nfcName, $nfdName, false],
+		];
+	}
+
+	/**
+	 * @dataProvider normalizePathKeepUnicodeData
+	 */
+	public function testNormalizePathKeepUnicode($expected, $path, $keepUnicode = false) {
+		$this->assertEquals($expected, \OC\Files\Filesystem::normalizePath($path, true, false, $keepUnicode));
+	}
+
+	public function testNormalizePathKeepUnicodeCache() {
+		$nfdName = 'ümlaut';
+		$nfcName = 'ümlaut';
+		// call in succession due to cache
+		$this->assertEquals('/' . $nfcName, \OC\Files\Filesystem::normalizePath($nfdName, true, false, false));
+		$this->assertEquals('/' . $nfdName, \OC\Files\Filesystem::normalizePath($nfdName, true, false, true));
+	}
+
 	public function isValidPathData() {
 		return array(
 			array('/', true),
diff --git a/tests/lib/TestCase.php b/tests/lib/TestCase.php
index 7ed121d3556cbaa9afcabfd4bd42e8e10e605183..a1f65f8ac822fa339b0541229b77a763537358b0 100644
--- a/tests/lib/TestCase.php
+++ b/tests/lib/TestCase.php
@@ -166,7 +166,12 @@ abstract class TestCase extends \PHPUnit_Framework_TestCase {
 	 * @return mixed
 	 */
 	protected static function invokePrivate($object, $methodName, array $parameters = array()) {
-		$reflection = new \ReflectionClass(get_class($object));
+		if (is_string($object)) {
+			$className = $object;
+		} else {
+			$className = get_class($object);
+		}
+		$reflection = new \ReflectionClass($className);
 
 		if ($reflection->hasMethod($methodName)) {
 			$method = $reflection->getMethod($methodName);