diff --git a/lib/private/files/node/root.php b/lib/private/files/node/root.php
index 7ffb3674a8fc145d77f1e70d7aa6ad3c2f89ddf1..4df926748deafeeba75db5d7233d2752ac4cf768 100644
--- a/lib/private/files/node/root.php
+++ b/lib/private/files/node/root.php
@@ -323,4 +323,33 @@ class Root extends Folder implements IRootFolder {
 	public function getName() {
 		return '';
 	}
+
+	/**
+	 * Returns a view to user's files folder
+	 *
+	 * @param String $userId user ID
+	 * @return \OCP\Files\Folder
+	 */
+	public function getUserFolder($userId) {
+		\OC\Files\Filesystem::initMountPoints($userId);
+		$dir = '/' . $userId;
+		$folder = null;
+
+		if (!$this->nodeExists($dir)) {
+			$folder = $this->newFolder($dir);
+		} else {
+			$folder = $this->get($dir);
+		}
+
+		$dir = '/files';
+		if (!$folder->nodeExists($dir)) {
+			$folder = $folder->newFolder($dir);
+			\OC_Util::copySkeleton($userId, $folder);
+		} else {
+			$folder = $folder->get($dir);
+		}
+
+		return $folder;
+
+	}
 }
diff --git a/lib/private/server.php b/lib/private/server.php
index af137ce36aa849f7eeb6031e21a7e949abf9135d..84141fe28c196337045a8ead95c1053d325d84d3 100644
--- a/lib/private/server.php
+++ b/lib/private/server.php
@@ -535,29 +535,9 @@ class Server extends SimpleContainer implements IServerContainer {
 				return null;
 			}
 			$userId = $user->getUID();
-		} else {
-			$user = $this->getUserManager()->get($userId);
 		}
-		\OC\Files\Filesystem::initMountPoints($userId);
-		$dir = '/' . $userId;
 		$root = $this->getRootFolder();
-		$folder = null;
-
-		if (!$root->nodeExists($dir)) {
-			$folder = $root->newFolder($dir);
-		} else {
-			$folder = $root->get($dir);
-		}
-
-		$dir = '/files';
-		if (!$folder->nodeExists($dir)) {
-			$folder = $folder->newFolder($dir);
-			\OC_Util::copySkeleton($user, $folder);
-		} else {
-			$folder = $folder->get($dir);
-		}
-
-		return $folder;
+		return $root->getUserFolder($userId);
 	}
 
 	/**
diff --git a/lib/private/util.php b/lib/private/util.php
index 9c78ad3ad1c1cfe88b1d9551cfa0d31a713040f9..ab2d4a221d7d196934c876b4bb2886ba5786dd74 100644
--- a/lib/private/util.php
+++ b/lib/private/util.php
@@ -267,17 +267,17 @@ class OC_Util {
 	/**
 	 * copies the skeleton to the users /files
 	 *
-	 * @param \OC\User\User $user
+	 * @param String $userId
 	 * @param \OCP\Files\Folder $userDirectory
 	 */
-	public static function copySkeleton(\OC\User\User $user, \OCP\Files\Folder $userDirectory) {
+	public static function copySkeleton($userId, \OCP\Files\Folder $userDirectory) {
 
 		$skeletonDirectory = \OCP\Config::getSystemValue('skeletondirectory', \OC::$SERVERROOT . '/core/skeleton');
 
 		if (!empty($skeletonDirectory)) {
 			\OCP\Util::writeLog(
 				'files_skeleton',
-				'copying skeleton for '.$user->getUID().' from '.$skeletonDirectory.' to '.$userDirectory->getFullPath('/'),
+				'copying skeleton for '.$userId.' from '.$skeletonDirectory.' to '.$userDirectory->getFullPath('/'),
 				\OCP\Util::DEBUG
 			);
 			self::copyr($skeletonDirectory, $userDirectory);
diff --git a/lib/public/files/irootfolder.php b/lib/public/files/irootfolder.php
index 19192cd9cc91e823f80ddfa7741b2edd953230ae..97dc5a31e74ff40e093dc63f0aa7a1b12a37d9ed 100644
--- a/lib/public/files/irootfolder.php
+++ b/lib/public/files/irootfolder.php
@@ -33,5 +33,13 @@ use OC\Hooks\Emitter;
  */
 interface IRootFolder extends Folder, Emitter {
 
+	/**
+	 * Returns a view to user's files folder
+	 *
+	 * @param String $userId user ID
+	 * @return \OCP\Files\Folder
+	 * @since 8.2.0
+	 */
+	public function getUserFolder($userId);
 }
 
diff --git a/lib/public/iservercontainer.php b/lib/public/iservercontainer.php
index ef6c60449519780130a28be93bbca54a9e4affb6..95ee853d84c39f8225cc56cdd5b1cb87133af219 100644
--- a/lib/public/iservercontainer.php
+++ b/lib/public/iservercontainer.php
@@ -99,6 +99,7 @@ interface IServerContainer {
 	 * @param string $userId user ID
 	 * @return \OCP\Files\Folder
 	 * @since 6.0.0 - parameter $userId was added in 8.0.0
+	 * @see getUserFolder in \OCP\Files\IRootFolder
 	 */
 	public function getUserFolder($userId = null);