diff --git a/lib/private/Repair/NC11/MoveAvatarBackgroundJob.php b/lib/private/Repair/NC11/MoveAvatarBackgroundJob.php
new file mode 100644
index 0000000000000000000000000000000000000000..4c16196f6e9ec629225da83c4092dacba7754c99
--- /dev/null
+++ b/lib/private/Repair/NC11/MoveAvatarBackgroundJob.php
@@ -0,0 +1,110 @@
+<?php
+/**
+ * @copyright 2016 Roeland Jago Douma <roeland@famdouma.nl>
+ *
+ * @author Roeland Jago Douma <roeland@famdouma.nl>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+namespace OC\Repair\NC11;
+
+use OC\BackgroundJob\QueuedJob;
+use OCP\Files\File;
+use OCP\Files\Folder;
+use OCP\Files\IAppData;
+use OCP\Files\IRootFolder;
+use OCP\Files\NotFoundException;
+use OCP\ILogger;
+use OCP\IUser;
+use OCP\IUserManager;
+
+class MoveAvatarsBackgroundJob extends QueuedJob {
+
+	/** @var IUserManager */
+	private $userManager;
+
+	/** @var IRootFolder */
+	private $rootFolder;
+
+	/** @var IAppData */
+	private $appData;
+
+	/** @var ILogger */
+	private $logger;
+
+	/**
+	 * MoveAvatars constructor.
+	 *
+	 * @param IUserManager $userManager
+	 * @param IRootFolder $rootFolder
+	 * @param ILogger $logger
+	 */
+	public function __construct(IUserManager $userManager,
+								IRootFolder $rootFolder,
+								ILogger $logger) {
+		$this->userManager = $userManager;
+		$this->rootFolder = $rootFolder;
+		$this->logger = $logger;
+		$this->appData = \OC::$server->getAppDataDir('avatar');
+	}
+
+	public function run($arguments) {
+		$this->logger->info('Started migrating avatars to AppData folder');
+		$this->moveAvatars();
+		$this->logger->info('All avatars migrated to AppData folder');
+	}
+
+	private function moveAvatars() {
+		$counter = 0;
+		$this->userManager->callForAllUsers(function (IUser $user) use ($counter) {
+			if ($user->getLastLogin() !== 0) {
+				$uid = $user->getUID();
+
+				\OC\Files\Filesystem::initMountPoints($uid);
+				/** @var Folder $userFolder */
+				$userFolder = $this->rootFolder->get($uid);
+
+				try {
+					$userData = $this->appData->getFolder($uid);
+				} catch (NotFoundException $e) {
+					$userData = $this->appData->newFolder($uid);
+				}
+
+
+				$regex = '/^avatar\.([0-9]+\.)?(jpg|png)$/';
+				$avatars = $userFolder->getDirectoryListing();
+
+				foreach ($avatars as $avatar) {
+					/** @var File $avatar */
+					if (preg_match($regex, $avatar->getName())) {
+						/*
+						 * This is not the most effective but it is the most abstract way
+						 * to handle this. Avatars should be small anyways.
+						 */
+						$newAvatar = $userData->newFile($avatar->getName());
+						$newAvatar->putContent($avatar->getContent());
+						$avatar->delete();
+					}
+				}
+			}
+			$counter++;
+			if ($counter % 100) {
+				$this->logger->info('{amount} avatars migrated', ['amount' => $counter]);
+			}
+		});
+	}
+}
diff --git a/lib/private/Repair/NC11/MoveAvatars.php b/lib/private/Repair/NC11/MoveAvatars.php
index d0d78cb1fd603fbb7eb08f1cebcd25ca3e39237b..44402b1be4f5ee64c29fd557fbabac89471ea164 100644
--- a/lib/private/Repair/NC11/MoveAvatars.php
+++ b/lib/private/Repair/NC11/MoveAvatars.php
@@ -23,26 +23,14 @@
 namespace OC\Repair\NC11;
 
 use OC\SystemConfig;
-use OCP\Files\File;
-use OCP\Files\Folder;
-use OCP\Files\IAppData;
-use OCP\Files\IRootFolder;
-use OCP\Files\NotFoundException;
-use OCP\IUser;
-use OCP\IUserManager;
+use OCP\BackgroundJob\IJobList;
 use OCP\Migration\IOutput;
 use OCP\Migration\IRepairStep;
 
 class MoveAvatars implements IRepairStep {
 
-	/** @var IUserManager */
-	private $userManager;
-
-	/** @var IRootFolder */
-	private $rootFolder;
-
-	/** @var IAppData */
-	private $appData;
+	/** @var IJobList */
+	private $jobList;
 
 	/** @var SystemConfig */
 	private $systemConfig;
@@ -50,18 +38,12 @@ class MoveAvatars implements IRepairStep {
 	/**
 	 * MoveAvatars constructor.
 	 *
-	 * @param IUserManager $userManager
-	 * @param IRootFolder $rootFolder
-	 * @param IAppData $appData
+	 * @param IJobList $jobList
 	 * @param SystemConfig $systemConfig
 	 */
-	public function __construct(IUserManager $userManager,
-								IRootFolder $rootFolder,
-								IAppData $appData,
+	public function __construct(IJobList $jobList,
 								SystemConfig $systemConfig) {
-		$this->userManager = $userManager;
-		$this->rootFolder = $rootFolder;
-		$this->appData = $appData;
+		$this->jobList = $jobList;
 		$this->systemConfig = $systemConfig;
 	}
 
@@ -69,66 +51,14 @@ class MoveAvatars implements IRepairStep {
 	 * @return string
 	 */
 	public function getName() {
-		return 'Move avatars to AppData folder';
+		return 'Add mover avatar background job';
 	}
 
 	public function run(IOutput $output) {
 		if ($this->systemConfig->getValue('enable_avatars', true) === false) {
 			$output->info('Avatars are disabled');
 		} else {
-			$output->startProgress($this->userCount());
-			$this->moveAvatar($output);
-			$output->finishProgress();
-		}
-	}
-
-	private function moveAvatar(IOutput $output) {
-		$this->userManager->callForAllUsers(function (IUser $user) use ($output) {
-			if ($user->getLastLogin() !== 0) {
-				$uid = $user->getUID();
-
-				\OC\Files\Filesystem::initMountPoints($uid);
-				/** @var Folder $userFolder */
-				$userFolder = $this->rootFolder->get($uid);
-
-				try {
-					$userData = $this->appData->getFolder($uid);
-				} catch (NotFoundException $e) {
-					$userData = $this->appData->newFolder($uid);
-				}
-
-
-				$regex = '/^avatar\.([0-9]+\.)?(jpg|png)$/';
-				$avatars = $userFolder->getDirectoryListing();
-
-				foreach ($avatars as $avatar) {
-					/** @var File $avatar */
-					if (preg_match($regex, $avatar->getName())) {
-						/*
-						 * This is not the most effective but it is the most abstract way
-						 * to handle this. Avatars should be small anyways.
-						 */
-						$newAvatar = $userData->newFile($avatar->getName());
-						$newAvatar->putContent($avatar->getContent());
-						$avatar->delete();
-					}
-				}
-			}
-			$output->advance();
-		});
-	}
-
-	/**
-	 * @return int
-	 */
-	private function userCount() {
-		$backends = $this->userManager->countUsers();
-		$count = 0;
-
-		foreach ($backends as $backend => $amount) {
-			$count += $amount;
+			$this->jobList->add(MoveAvatarsBackgroundJob::class);
 		}
-
-		return $count;
 	}
 }