diff --git a/uuid.admin.inc b/uuid.admin.inc
index e388d22..3bc8bf0 100644
--- a/uuid.admin.inc
+++ b/uuid.admin.inc
@@ -18,7 +18,7 @@ function uuid_admin_form() {
 
   $form['sync']['submit'] = array(
     '#type' => 'submit',
-    '#value' => t('Create missing UUIDs'),
+    '#value' => t('Queue creating missing UUIDs'),
     '#submit' => array('uuid_admin_sync_submit'),
   );
 
@@ -30,7 +30,7 @@ function uuid_admin_form() {
  */
 function uuid_admin_sync_submit() {
   uuid_sync_all();
-  drupal_set_message(t('Generated missing UUIDs.'));
+  drupal_set_message(t('Queued generating missing UUIDs.'));
 }
 
 /**
diff --git a/uuid.info b/uuid.info
index 320ce4e..c68c9e2 100644
--- a/uuid.info
+++ b/uuid.info
@@ -3,6 +3,7 @@ description = Extends the entity functionality and adds support for universally
 core = 7.x
 package = UUID
 configure = admin/config/system/uuid
+files[] = uuid.queue.inc
 files[] = uuid.test
 dependencies[] = node
 dependencies[] = user
diff --git a/uuid.install b/uuid.install
index f1e0bac..4f5aa1a 100644
--- a/uuid.install
+++ b/uuid.install
@@ -59,6 +59,9 @@ function uuid_schema_alter(array &$schema) {
  * Implements hook_install().
  */
 function uuid_install() {
+  // Set queue class for 'uuid_sync' queue.
+  variable_set('queue_class_uuid_sync', 'UuidSyncQueue');
+
   _uuid_install_uuid_fields();
   module_load_include('inc', 'uuid');
   uuid_sync_all();
@@ -103,6 +106,9 @@ function uuid_uninstall() {
       }
     }
   }
+
+  // Unset queue class for 'uuid_sync' queue.
+  variable_del('queue_class_uuid_sync');
 }
 
 /**
@@ -291,3 +297,10 @@ function uuid_update_7103() {
     }
   }
 }
+
+/**
+ * Sets queue class for 'uuid_sync' queue.
+ */
+function uuid_update_7104() {
+  variable_set('queue_class_uuid_sync', 'UuidSyncQueue');
+}
diff --git a/uuid.module b/uuid.module
index 4bbe97e..1ebeb08 100644
--- a/uuid.module
+++ b/uuid.module
@@ -151,6 +151,22 @@ function uuid_module_implements_alter(&$implementss, $hook) {
 }
 
 /**
+ * Implements hook_cron_queue_info().
+ *
+ * Adds queue for generating uuids on tables.
+ */
+function uuid_cron_queue_info() {
+  $queues = array();
+
+  $queues['uuid_sync'] = array(
+    'worker callback' => array('UuidSyncQueue', 'process'),
+    'time' => 60,
+  );
+
+  return $queues;
+}
+
+/**
  * Implements hook_uuid_sync().
  */
 function uuid_uuid_sync() {
@@ -165,22 +181,15 @@ function uuid_uuid_sync() {
 }
 
 /**
- * Helper function that executes the update on the actual table.
+ * Helper function that queues tables to be updated with uuids.
  */
 function _uuid_sync_table($table, $id_field, $uuid_field) {
-  // Fetch empty records.
-  $result = db_select($table, 't')
-    ->fields('t', array($id_field))
-    ->condition(db_or()->condition($uuid_field, '')->isNull($uuid_field))
-    ->execute();
-
-  // Update empty records.
-  foreach ($result as $record) {
-    db_update($table)
-      ->fields(array($uuid_field => uuid_generate()))
-      ->condition($id_field, $record->{$id_field})
-      ->execute();
-  }
+  $queue = DrupalQueue::get('uuid_sync');
+  $queue->createItem(array(
+    'table' => $table,
+    'id_field' => $id_field,
+    'uuid_field' => $uuid_field,
+  ));
 }
 
 /**
diff --git a/uuid.queue.inc b/uuid.queue.inc
new file mode 100644
index 0000000..1d557fd
--- /dev/null
+++ b/uuid.queue.inc
@@ -0,0 +1,62 @@
+<?php
+
+/**
+ * Class for adding missing uuids to entities.
+ */
+class UuidSyncQueue extends SystemQueue {
+  /**
+   * The number of records to update in each cycle.
+   *
+   * @var int
+   */
+  const LIMIT = 50;
+
+  /**
+   * Overrides SystemQueue::createItem().
+   */
+  public function createItem($item) {
+    // Check required variables.
+    if (empty($item['table']) || empty($item['id_field']) || empty($item['uuid_field'])) {
+      throw new InvalidArgumentException('Creating queue item for uuid_sync failed because invalid data was given: ' . print_r($item, TRUE));
+    }
+
+    parent::createItem($item);
+  }
+
+  /**
+   * Generates missing uuids for table.
+   *
+   * @param array $item
+   *   The item to send to Profit.
+   */
+  public static function process(array $item) {
+    $table = $item['table'];
+    $id_field = $item['id_field'];
+    $uuid_field = $item['uuid_field'];
+
+    // Fetch records that have no uuid yet.
+    $result = db_select($table, 't')
+      ->fields('t', array($id_field))
+      ->condition(db_or()->condition($uuid_field, '')->isNull($uuid_field))
+      ->range(0, self::LIMIT)
+      ->execute();
+
+    // Update records with uuids.
+    $count = 0;
+    foreach ($result as $record) {
+      $count++;
+      db_update($table)
+        ->fields(array($uuid_field => uuid_generate()))
+        ->condition($id_field, $record->{$id_field})
+        ->execute();
+    }
+
+    if ($count >= self::LIMIT) {
+      // If the amount of records that were updated is equal to or more than the
+      // maximum number of records to update per cycle, there may be more
+      // records to update. Put item back on the queue.
+      $queue = DrupalQueue::get('uuid_sync');
+      $queue->createItem($item);
+    }
+  }
+}
diff --git a/uuid.test b/uuid.test
index 6c1481a..4c9d7e4 100644
--- a/uuid.test
+++ b/uuid.test
@@ -691,7 +691,10 @@ class UUIDSyncTestCase extends UUIDTestCase {
     // Login with a user and click the sync button.
     $web_user = $this->drupalCreateUser(array('administer uuid'));
     $this->drupalLogin($web_user);
-    $this->drupalPost('admin/config/system/uuid', array(), t('Create missing UUIDs'));
+    $this->drupalPost('admin/config/system/uuid', array(), t('Queue creating missing UUIDs'));
+
+    // Run cron to process 'uuid_sync' queue.
+    $this->cronRun();
 
     // Test if UUID was generated for nodes.
     $node_test = node_load($node->nid, FALSE, TRUE);
