diff --git a/queue_ui.module b/queue_ui.module
index e1f8014..795adf3 100644
--- a/queue_ui.module
+++ b/queue_ui.module
@@ -288,3 +288,35 @@ function queue_ui_batch_finished($success, $results, $operations) {
   }
   drupal_set_message($message);
 }
+
+/**
+ * Batch operation callback for cron queues.
+ */
+function queue_ui_cron_queue_batch_process($queue_name, $cron_queue_info, &$context) {
+  $queue = DrupalQueue::get($queue_name);
+  $function = $cron_queue_info['worker callback'];
+
+  if (empty($context['sandbox'])) {
+    $context['sandbox']['progress'] = 0;
+    $context['sandbox']['current'] = 0;
+    $context['sandbox']['max'] = $queue->numberOfItems();
+  }
+
+  for ($i = 0; $i < 20 && $context['sandbox']['current'] < $context['sandbox']['max']; $i++) {
+    $item = $queue->claimItem();
+    if ($item) {
+      $function($item->data);
+
+      $queue->deleteItem($item);
+
+      $context['sandbox']['progress']++;
+      $context['sandbox']['current']++;
+    }
+    else {
+      break;
+    }
+  }
+  if ($context['sandbox']['progress'] != $context['sandbox']['max']) {
+    $context['finished'] = $context['sandbox']['progress'] / $context['sandbox']['max'];
+  }
+}
diff --git a/queue_ui.pages.inc b/queue_ui.pages.inc
index 947d33b..cdea846 100644
--- a/queue_ui.pages.inc
+++ b/queue_ui.pages.inc
@@ -164,12 +164,17 @@ function queue_ui_overview_submit($form, &$form_state, $queues) {
       break;
     case $values['batch']:
       // Process queue(s) with batch.
-      // We can only run batch on queues using our hook_queue_info() that define batch.
+      // We can only run batch on either queues using our hook_queue_info() that
+      // define batch, or queues defined with hook_cron_queue_info().
+      // Get the queues defined with hook_queue_info().
       $defined_queues = queue_ui_defined_queues();
-      $intersect = array_intersect(array_keys($defined_queues), $queues);
-      foreach ($intersect as $name) {
-        // Only if queue_info implementation defined batch can we set it here.
-        if (isset($defined_queues[$name]['batch'])) {
+
+      // Get the cron queues.
+      $cron_queues = module_invoke_all('cron_queue_info');
+      drupal_alter('cron_queue_info', $cron_queues);
+
+      foreach ($queues as $name) {
+        if (isset($defined_queues[$name])) {
           $batch = $defined_queues[$name]['batch'];
           // Add queue as argument to operations by resetting the operations array.
           $operations = array();
@@ -181,6 +186,19 @@ function queue_ui_overview_submit($form, &$form_state, $queues) {
           $batch['operations'] = $operations;
           // Set.
           batch_set($batch);
+
+          continue;
+        }
+
+        if (isset($cron_queues[$name])) {
+          $batch = array(
+            'operations' => array(
+              array('queue_ui_cron_queue_batch_process', array($name, $cron_queues[$name])),
+            ),
+          );
+          batch_set($batch);
+
+          continue;
         }
       }
       break;
