diff --git a/queue_ui.module b/queue_ui.module
index e1f8014..19739b9 100644
--- a/queue_ui.module
+++ b/queue_ui.module
@@ -239,6 +239,7 @@ function queue_ui_queue_info() {
         'operations' => array(array('queue_ui_batch_test', array())),
         'finished' => 'queue_ui_batch_finished',
         'title' => t('Processing test queue'),
+        'callback' => 'queue_ui_batch_simple_test',
       ),
       'cron' => array(
         'callback' =>'queue_ui_test_process',
@@ -279,6 +280,11 @@ function queue_ui_batch_test($queue, &$context) {
   }
 }
 
+function queue_ui_batch_simple_test($item, &$context) {
+  // Perform processing operation here if this were REAL.
+  $context['message'] = t('Processing !value', array('!value' => '[value_goes_here]'));
+}
+
 function queue_ui_batch_finished($success, $results, $operations) {
   if ($success) {
     $message = 'success';
@@ -288,3 +294,66 @@ 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']['max'] = $queue->numberOfItems();
+  }
+
+  $end = time() + (isset($cron_queue_info['time']) ? $cron_queue_info['time'] : 15);
+  while (time() < $end && ($item = $queue->claimItem())) {
+    $function($item->data);
+    $queue->deleteItem($item);
+
+    $context['sandbox']['progress']++;
+  }
+
+  // If the last attempt to get an item produced an empty result, then no more
+  // claimable items remain in the queue and we can tell Batch API we are done.
+  // Otherwise, items may remain in the queue and we should tell Batch API to
+  // call us again.
+  if (empty($item)) {
+    $context['finished'] = 1;
+  }
+  else {
+    // We can't use numberOfItems() to know how many items we must process,
+    // because that does not take claims on items into account.
+    $context['finished'] = 0;
+  }
+}
+
+/**
+ * Batch process callback functions.
+ *
+ * @param string $callback
+ *   Function callback to process.
+ * @param array $queue
+ *   Queue loaded from DrupalQueue::get()
+ * @param array $context
+ *   Batch processing context passed by reference. For handling $context array
+ *   as part of core batch API.
+ */
+function queue_ui_batch_process_operation($callback, $queue, &$context) {
+  // @todo: Set seconds as variable in info hook
+  $item = $queue->claimItem();
+
+  // No items left to process so finish the batch.
+  if (empty($item)) {
+    $context['finished'] = 1;
+    return FALSE;
+  }
+  if (!function_exists($callback)) {
+    drupal_set_message(t('Callback for batch process !callback not found.', array('!callback' => $callback)), 'error');
+    return FALSE;
+  }
+  $callback($item, $context);
+  $queue->deleteItem($item);
+}
+
diff --git a/queue_ui.pages.inc b/queue_ui.pages.inc
index 947d33b..e50ca3b 100644
--- a/queue_ui.pages.inc
+++ b/queue_ui.pages.inc
@@ -174,12 +174,24 @@ function queue_ui_overview_submit($form, &$form_state, $queues) {
           // Add queue as argument to operations by resetting the operations array.
           $operations = array();
           $queue = DrupalQueue::get($name);
+
+          // If user wants full batch control pass via standard operations.
           foreach ($batch['operations'] as $operation) {
             // First element is the batch process callback, second is the argument.
             $operations[] = array($operation[0], array_merge(array($queue), $operation[1]));
           }
+
+          // If user just wants a callback then pass to callback function.
+          if (isset($batch['callback'])) {
+            $max = $queue->numberOfItems();
+            for ($i = 0; $i < $max; $i++) {
+              $operations[] = array('queue_ui_batch_process_operation', array($batch['callback'], $queue));
+            }
+            unset($batch['callback']);
+          }
           $batch['operations'] = $operations;
-          // Set.
+
+          // Set the batch.
           batch_set($batch);
         }
       }
@@ -255,4 +267,4 @@ function _queue_ui_array_keys_contain($input, $search_value, $strict = FALSE) {
   }
 
   return $tmpkeys;
-}
\ No newline at end of file
+}
