diff --git a/src/QueueUIBatch.php b/src/QueueUIBatch.php
index 97a12c65bc6efe53ac280d012c74c66e83dd4a2c..a2e43d0cfd13cd56b01481627f0143bb0c0f4f5b 100644
--- a/src/QueueUIBatch.php
+++ b/src/QueueUIBatch.php
@@ -42,12 +42,19 @@ class QueueUIBatch {
     $queue_worker = $queue_manager->createInstance($queue_name);
     $queue = $queue_factory->get($queue_name);
 
+    $num_of_items = $queue->numberOfItems();
+    if (!array_key_exists('num_of_total_items', $context['sandbox'])
+      || $context['sandbox']['num_of_total_items'] < $num_of_items
+    ) {
+      $context['sandbox']['num_of_total_items'] = $num_of_items;
+    }
+
     $context['finished'] = 0;
     $context['results']['queue_name'] = $info['title'];
 
     $title = t('Processing queue %name: %count items remaining', [
       '%name' => $info['title'],
-      '%count' => $queue->numberOfItems(),
+      '%count' => $num_of_items,
     ]);
 
     try {
@@ -61,8 +68,11 @@ class QueueUIBatch {
         $queue_worker->processItem($item->data);
         $queue->deleteItem($item);
 
+        $num_of_items = $queue->numberOfItems();
+
         // Update context
         $context['results']['processed'][] = $item->item_id;
+        $context['finished'] = ($context['sandbox']['num_of_total_items'] - $num_of_items) / $context['sandbox']['num_of_total_items'];
       }
       else {
         // If we cannot claim an item we must be done processing this queue.
@@ -137,4 +147,4 @@ class QueueUIBatch {
       );
     }
   }
-}
\ No newline at end of file
+}