diff --git a/src/Service/ViewsBulkOperationsActionProcessor.php b/src/Service/ViewsBulkOperationsActionProcessor.php
index 6711ef0..7aad20e 100644
--- a/src/Service/ViewsBulkOperationsActionProcessor.php
+++ b/src/Service/ViewsBulkOperationsActionProcessor.php
@@ -93,7 +93,7 @@ class ViewsBulkOperationsActionProcessor {
    *
    * @var array
    */
-  protected $queue;
+  protected $queue = [];
 
   /**
    * Constructor.
@@ -126,6 +126,14 @@ class ViewsBulkOperationsActionProcessor {
    *   The current view object or NULL.
    */
   public function initialize(array $view_data, $view = NULL) {
+
+    // It may happen that the service was already initialized
+    // in this request (e.g. multiple Batch API operation calls).
+    // Clear the processing queue in such a case.
+    if ($this->initialized) {
+      $this->queue = [];
+    }
+
     if (!isset($view_data['configuration'])) {
       $view_data['configuration'] = [];
     }
@@ -181,7 +189,6 @@ class ViewsBulkOperationsActionProcessor {
    *   Batch API context.
    */
   public function populateQueue(array $list, array &$context = []) {
-    $this->queue = [];
 
     // Determine batch size and offset.
     if (!empty($context)) {
@@ -350,9 +357,9 @@ class ViewsBulkOperationsActionProcessor {
         $batch_results = $this->process();
       }
 
-      $results = [];
+      $results = ['operations' => []];
       foreach ($batch_results as $result) {
-        $results[] = (string) $result;
+        $results['operations'][] = (string) $result;
       }
       ViewsBulkOperationsBatch::finished(TRUE, $results, []);
     }
@@ -400,4 +407,14 @@ class ViewsBulkOperationsActionProcessor {
     $this->view->result = array_values($this->view->result);
   }
 
+  /**
+   * Get the current entity queue.
+   *
+   * @return array
+   *   Array of entities from the current queue.
+   */
+  public function getQueue() {
+    return $this->queue;
+  }
+
 }
diff --git a/src/ViewsBulkOperationsBatch.php b/src/ViewsBulkOperationsBatch.php
index 0324941..6797090 100644
--- a/src/ViewsBulkOperationsBatch.php
+++ b/src/ViewsBulkOperationsBatch.php
@@ -22,13 +22,73 @@ class ViewsBulkOperationsBatch {
   }
 
   /**
+   * Gets the list of entities to process.
+   *
+   * Used in "all results" batch operation.
+   *
+   * @param array $data
+   *   Processed view data.
+   * @param mixed $context
+   *   Batch context.
+   */
+  public static function getList(array $data, &$context) {
+    // Initialize batch.
+    if (empty($context['sandbox'])) {
+      $context['sandbox']['processed'] = 0;
+      $context['results']['list'] = [];
+    }
+
+    $actionProcessor = \Drupal::service('views_bulk_operations.processor');
+    $actionProcessor->initialize($data);
+
+    // Populate queue.
+    $count = $actionProcessor->populateQueue([], $context);
+    if ($count) {
+      foreach ($actionProcessor->getQueue() as $index => $entity) {
+        $item = [
+          $index,
+          $entity->language()->getId(),
+          $entity->getEntityTypeId(),
+          $entity->id(),
+        ];
+        $context['results']['list'][] = $item;
+      }
+
+      $context['finished'] = 0;
+      // There may be cases where we don't know the total number of
+      // results (e.g. mini pager with a search_api view)
+      if ($context['sandbox']['total']) {
+        $context['finished'] = $context['sandbox']['processed'] / $context['sandbox']['total'];
+        $context['message'] = static::t('Prepared @count of @total entities for processing.', [
+          '@count' => $context['sandbox']['processed'],
+          '@total' => $context['sandbox']['total'],
+        ]);
+      }
+      else {
+        $context['message'] = static::t('Prepared @count entities for processing.', [
+          '@count' => $context['sandbox']['processed'],
+        ]);
+      }
+    }
+
+  }
+
+  /**
    * Batch operation callback.
    */
-  public static function operation($list, $data, &$context) {
+  public static function operation($data, &$context) {
     // Initialize batch.
     if (empty($context['sandbox'])) {
       $context['sandbox']['processed'] = 0;
-      $context['results'] = [];
+      $context['results']['operations'] = [];
+    }
+
+    // Get list of entities to process.
+    if (isset($context['results']['list'])) {
+      $list = $context['results']['list'];
+    }
+    else {
+      $list = $data['list'];
     }
 
     // Get entities to process.
@@ -43,7 +103,7 @@ class ViewsBulkOperationsBatch {
         // Convert translatable markup to strings in order to allow
         // correct operation of array_count_values function.
         foreach ($batch_results as $result) {
-          $context['results'][] = (string) $result;
+          $context['results']['operations'][] = (string) $result;
         }
       }
       $context['sandbox']['processed'] += $count;
@@ -71,7 +131,7 @@ class ViewsBulkOperationsBatch {
    */
   public static function finished($success, $results, $operations) {
     if ($success) {
-      $operations = array_count_values($results);
+      $operations = array_count_values($results['operations']);
       $details = [];
       foreach ($operations as $op => $count) {
         $details[] = $op . ' (' . $count . ')';
@@ -91,21 +151,27 @@ class ViewsBulkOperationsBatch {
    * Batch builder function.
    */
   public static function getBatch($view_data) {
-    $results = $view_data['list'];
+    $current_class = get_called_class();
 
-    return [
+    $batch = [
       'title' => static::t('Performing @operation on selected entities.', ['@operation' => $view_data['action_label']]),
-      'operations' => [
-        [
-          ['\Drupal\views_bulk_operations\ViewsBulkOperationsBatch', 'operation'],
-          [
-            $results,
-            $view_data,
-          ],
-        ],
-      ],
-      'finished' => ['\Drupal\views_bulk_operations\ViewsBulkOperationsBatch', 'finished'],
+      'operations' => [],
+      'finished' => [$current_class, 'finished'],
     ];
+
+    if (empty($view_data['list'])) {
+      $batch['operations'][] = [
+        [$current_class, 'getList'],
+        [$view_data],
+      ];
+    }
+
+    $batch['operations'][] = [
+      [$current_class, 'operation'],
+      [$view_data],
+    ];
+
+    return $batch;
   }
 
 }
diff --git a/tests/src/Functional/ViewsBulkOperationsBulkFormTest.php b/tests/src/Functional/ViewsBulkOperationsBulkFormTest.php
index c874416..347c095 100644
--- a/tests/src/Functional/ViewsBulkOperationsBulkFormTest.php
+++ b/tests/src/Functional/ViewsBulkOperationsBulkFormTest.php
@@ -232,6 +232,21 @@ class ViewsBulkOperationsBulkFormTest extends BrowserTestBase {
       ));
     }
 
+    // Test the select all functionality with batching and entity
+    // property changes affecting view query results.
+    $edit = [
+      'action' => 'views_bulk_operations_advanced_test_action',
+      'select_all' => 1,
+    ];
+    $this->drupalPostForm(NULL, $edit, t('Apply to selected items'));
+    $this->drupalPostForm(NULL, ['test_config' => 'unpublish'], t('Apply'));
+    $this->drupalPostForm(NULL, [], t('Execute action'));
+    // Again, take offset into account (-1).
+    $assertSession->pageTextContains(
+      sprintf('Action processing results: Test (%d).', (count($this->testNodes) - 1)),
+      sprintf('Action has been executed on all %d nodes.', (count($this->testNodes) - 1))
+    );
+    $this->assertTrue(empty($this->cssSelect('table.views-table tr')), t("The view doesn't show any results."));
   }
 
 }
diff --git a/tests/src/Unit/ViewsBulkOperationsBatchTest.php b/tests/src/Unit/ViewsBulkOperationsBatchTest.php
index 544c28a..8dbb02f 100644
--- a/tests/src/Unit/ViewsBulkOperationsBatchTest.php
+++ b/tests/src/Unit/ViewsBulkOperationsBatchTest.php
@@ -75,7 +75,6 @@ class ViewsBulkOperationsBatchTest extends UnitTestCase {
     $this->assertArrayHasKey('title', $batch);
     $this->assertArrayHasKey('operations', $batch);
     $this->assertArrayHasKey('finished', $batch);
-    $this->assertEquals($batch['operations'][0][0], ['\Drupal\views_bulk_operations\ViewsBulkOperationsBatch', 'operation']);
   }
 
   /**
@@ -131,7 +130,7 @@ class ViewsBulkOperationsBatchTest extends UnitTestCase {
       'view_id' => 'test_view',
       'display_id' => 'test_display',
       'batch_size' => $batch_size,
-
+      'list' => [],
     ];
     $context = [
       'sandbox' => [
@@ -140,9 +139,9 @@ class ViewsBulkOperationsBatchTest extends UnitTestCase {
       ],
     ];
 
-    TestViewsBulkOperationsBatch::operation([], $data, $context);
+    TestViewsBulkOperationsBatch::operation($data, $context);
 
-    $this->assertEquals(count($context['results']), $batch_size);
+    $this->assertEquals(count($context['results']['operations']), $batch_size);
     $this->assertEquals($context['finished'], ($batch_size / $entities_count));
   }
 
@@ -152,10 +151,12 @@ class ViewsBulkOperationsBatchTest extends UnitTestCase {
    * @covers ::finished
    */
   public function testFinished() {
-    TestViewsBulkOperationsBatch::finished(TRUE, ['Some operation', 'Some operation'], []);
+    $results = ['operations' => ['Some operation', 'Some operation']];
+    TestViewsBulkOperationsBatch::finished(TRUE, $results, []);
     $this->assertEquals(TestViewsBulkOperationsBatch::message(), 'Action processing results: Some operation (2).');
 
-    TestViewsBulkOperationsBatch::finished(TRUE, ['Some operation1', 'Some operation2'], []);
+    $results = ['operations' => ['Some operation1', 'Some operation2']];
+    TestViewsBulkOperationsBatch::finished(TRUE, $results, []);
     $this->assertEquals(TestViewsBulkOperationsBatch::message(), 'Action processing results: Some operation1 (1), Some operation2 (1).');
   }
 
diff --git a/tests/views_bulk_operations_test/config/install/views.view.views_bulk_operations_test_advanced.yml b/tests/views_bulk_operations_test/config/install/views.view.views_bulk_operations_test_advanced.yml
index 88a1b38..1617ddd 100644
--- a/tests/views_bulk_operations_test/config/install/views.view.views_bulk_operations_test_advanced.yml
+++ b/tests/views_bulk_operations_test/config/install/views.view.views_bulk_operations_test_advanced.yml
@@ -177,7 +177,45 @@ display:
               label_override: ''
               test_preconfig: 'Test setting'
           plugin_id: views_bulk_operations_bulk_form
-      filters: {  }
+      filters:
+        status:
+          id: status
+          table: node_field_data
+          field: status
+          relationship: none
+          group_type: group
+          admin_label: ''
+          operator: '='
+          value: '1'
+          group: 1
+          exposed: false
+          expose:
+            operator_id: ''
+            label: ''
+            description: ''
+            use_operator: false
+            operator: ''
+            identifier: ''
+            required: false
+            remember: false
+            multiple: false
+            remember_roles:
+              authenticated: authenticated
+          is_grouped: false
+          group_info:
+            label: ''
+            description: ''
+            identifier: ''
+            optional: true
+            widget: select
+            multiple: false
+            remember: false
+            default_group: All
+            default_group_multiple: {  }
+            group_items: {  }
+          entity_type: node
+          entity_field: status
+          plugin_id: boolean
       sorts: {  }
       title: 'Views Bulk Operations Test'
       header: {  }
diff --git a/tests/views_bulk_operations_test/src/Plugin/Action/ViewsBulkOperationsAdvancedTestAction.php b/tests/views_bulk_operations_test/src/Plugin/Action/ViewsBulkOperationsAdvancedTestAction.php
index ff8fe36..8c80cf8 100644
--- a/tests/views_bulk_operations_test/src/Plugin/Action/ViewsBulkOperationsAdvancedTestAction.php
+++ b/tests/views_bulk_operations_test/src/Plugin/Action/ViewsBulkOperationsAdvancedTestAction.php
@@ -45,6 +45,13 @@ class ViewsBulkOperationsAdvancedTestAction extends ViewsBulkOperationsActionBas
       $this->configuration['test_config'],
       $entity->label()
     ));
+
+    // Unpublish entity.
+    if ($this->configuration['test_config'] === 'unpublish') {
+      $entity->status = NODE_NOT_PUBLISHED;
+      $entity->save();
+    }
+
     return 'Test';
   }
 
