diff --git a/includes/media_browser_plus.admin.inc b/includes/media_browser_plus.admin.inc
index c4b3569..f5c07c4 100644
--- a/includes//media_browser_plus.admin.inc
+++ b/includes/media_browser_plus.admin.inc
@@ -4,52 +4,23 @@
  * This file contains the admin functions for the Media browser plus module.
  */
 
-
 /**
- * @todo Document what this function does.
- *
- * @param $files
- * @param $context
+ * Imports files to the media root folder with Queue API.
  */
-function media_browser_plus_folder_media_import($root, $dir, &$context) {
-  $per_page = 50;
-  $media_count = media_browser_plus_load_multiple(array('apply_filter' => FALSE, 'count_only' => TRUE));
-
-  if (empty($context['sandbox'])) {
-    $context['sandbox']['progress'] = 0;
-    $context['sandbox']['max'] = $media_count;
-  }
-  // Look how far we got and where we have to resume.
-  $media_start = $context['sandbox']['progress'];
-  $page = $media_start == 0 ? 0 : bcdiv($media_start, $per_page, 0);
+function media_browser_plus_folder_media_import() {
+  // Get all file IDs.
+  $fids = db_select('file_managed', 'f')
+            ->fields('f', array('fid'))
+            ->execute()
+            ->fetchCol();
 
-  if (!isset($context['results'])) {
-    $context['results'] = array('success' => array(), 'errors' => array());
-  }
-  $order = array(array('property' => array('fid', 'ASC')));
-  $attributes = array('apply_filter' => FALSE, 'paging' => TRUE, 'per_page' => $per_page, 'page' => $page, 'order' => $order);
-  $media_query = media_browser_plus_load_multiple($attributes);
-  // Checking media.
-  foreach ($media_query->results as $media) {
-    if (!isset($media->field_folder[LANGUAGE_NONE])) {
-      $media->field_folder = array(LANGUAGE_NONE => array(array('tid' => $root)));
-      $context['results']['success'] = $media->fid;
-      $destination = $dir . $media->filename;
-      file_move($media, $destination, FILE_EXISTS_RENAME);
+  if (count($fids) > 0) {
+    $import_media_queue = DrupalQueue::get('import_media');
+    // Add the file ids to the import_media queue.
+    foreach ($fids as $fid) {
+      $import_media_queue->createItem($fid);
     }
   }
-  // Increment start.
-  $media_start = $media_start + $per_page;
-  // Make sure start is not above max (for progress).
-  $media_start = $media_start > $media_count ? $media_count : $media_start;
-  // Set sandbox value.
-  $context['sandbox']['max'] = $media_count;
-  $context['sandbox']['progress'] = $media_start;
-  // And other context values.
-  $context['message'] = t('Checking') . '...(' . $context['sandbox']['progress'] . '/' . $context['sandbox']['max'] . ') ';
-  if ($context['sandbox']['progress'] < $context['sandbox']['max']) {
-    $context['finished'] = $context['sandbox']['progress'] / $context['sandbox']['max'];
-  }
 }
 
 /**
diff --git a/media_browser_plus.install b/media_browser_plus.install
index 88c8093..3630527 100644
--- a/media_browser_plus.install
+++ b/media_browser_plus.install
@@ -143,17 +143,9 @@ function media_browser_plus_enable() {
   file_prepare_directory($dir, FILE_CREATE_DIRECTORY);
   $term = media_browser_plus_get_media_root_folder(TRUE);
   if (is_object($term)) {
-    // Load all media and apply tid of folder if none set.
     variable_set('media_folder_import_start', 0);
-    $batch = array(
-      'title' => t('Assigning Media to Root Folder'),
-      'operations' => array(
-        array('media_browser_plus_folder_media_import', array($term->tid, $dir)),
-      ),
-      'finished' => 'media_browser_plus_folder_media_import_finished',
-      'file' => drupal_get_path('module', 'media_browser_plus') . '/includes/media_browser_plus.admin.inc',
-    );
-    batch_set($batch);
+    module_load_include('inc', 'media_browser_plus', 'includes/media_browser_plus.admin');
+    media_browser_plus_folder_media_import();
   }
 }
 
diff --git a/media_browser_plus.module b/media_browser_plus.module
index 6ec09ac..b1e2c4d 100644
--- a/media_browser_plus.module
+++ b/media_browser_plus.module
@@ -13,6 +13,40 @@ require_once  dirname(__FILE__) . '/includes/media_browser_plus.variables.inc';
 
 require_once  dirname(__FILE__) . '/includes/file_entity.admin.inc';
 
+/**
+ * Implements hook_cron_queue_info().
+ */
+function media_browser_plus_cron_queue_info() {
+  $queues['import_media'] = array(
+    'worker callback' => 'media_browser_plus_import_item',
+    'time' => 120,
+  );
+  return $queues;
+}
+
+/**
+ * Imports a media item into the Media root folder.
+ *
+ * Worker callback for the import_media queue. Moves a media item to the media
+ * root folder.
+ *
+ * @param Int $fid
+ *   File ID.
+ */
+function media_browser_plus_import_item($fid) {
+  $dir = variable_get('file_default_scheme', 'public') . '://' . variable_get('media_root_folder') . '/';
+  $term = media_browser_plus_get_media_root_folder(TRUE);
+  if (! is_object($term)) {
+    return;
+  }
+  $media = file_load($fid);
+
+  if (! isset($media->field_folder[LANGUAGE_NONE])) {
+    $media->field_folder = array(LANGUAGE_NONE => array(array('tid' => $term->tid)));
+    $destination = $dir . $media->filename;
+    file_move($media, $destination, FILE_EXISTS_RENAME);
+  }
+}
 
 /**
  * Puts all selected media items into a zip archive and sends it as download.
