--- a/core/modules/system/lib/Drupal/system/Plugin/views/field/BulkForm.php
+++ b/core/modules/system/lib/Drupal/system/Plugin/views/field/BulkForm.php
@@ -86,6 +86,8 @@
     $options['selected_actions'] = array(
       'default' => array(),
     );
+    $options['batch_limit'] = array('default' => 0);
+    $options['batch_chunks'] = array('default' => 3);
     return $options;
   }
 
@@ -115,6 +117,21 @@
       '#options' => $this->getBulkOptions(FALSE),
       '#default_value' => $this->options['selected_actions'],
     );
+    $form['batch_limit'] = array(
+      '#type' => 'number',
+      '#title' => $this->t('Batch limit'),
+      '#default_value' => $this->options['batch_limit'],
+      '#description' => $this->t("When the number of selected items reach or exceeds this number a batch will be used to perform selected action. Set to 0 to never use batch processing."),
+      '#min' => 0
+    );
+    $form['batch_chunk'] = array(
+      '#type' => 'number',
+      '#title' => $this->t('Batch chunks'),
+      '#default_value' => $this->options['batch_chunks'],
+      '#description' => $this->t("When batch is used to perform selected action the selected items can be split into small chunks so provided number of items will be processed during one batch iteration to speed up the process."),
+      '#min' => 1,
+      '#max' => 10 // Loading 10 entities per iteration should be sufficient limitation
+    );
 
     parent::buildOptionsForm($form, $form_state);
   }
@@ -259,22 +276,74 @@
       }
 
       $action = $this->actions[$form_state['values']['action']];
+
+      // See if batch processing is enabled and if so count selected items
+      // to see if desired limit was reached.
+      if (!empty($this->options['batch_limit']) && count($entities) >= $this->options['batch_limit']) {
+        // Create batch
+        $this->createBatch($entities, $action);
+      } else{
+        // Otherwise proceed as usual
-      $action->execute($entities);
+        $action->execute($entities);
 
-      $operation_definition = $action->getPluginDefinition();
-      if (!empty($operation_definition['confirm_form_path'])) {
-        $form_state['redirect'] = $operation_definition['confirm_form_path'];
-      }
+        $operation_definition = $action->getPluginDefinition();
+        if (!empty($operation_definition['confirm_form_path'])) {
+          $form_state['redirect'] = $operation_definition['confirm_form_path'];
+        }
 
-      $count = count(array_filter($form_state['values'][$this->options['id']]));
-      $action = $this->actions[$form_state['values']['action']];
-      if ($count) {
-        drupal_set_message($this->translationManager()->formatPlural($count, '%action was applied to @count item.', '%action was applied to @count items.', array(
-          '%action' => $action->label(),
-        )));
-      }
+        $count = count(array_filter($form_state['values'][$this->options['id']]));
+        $action = $this->actions[$form_state['values']['action']];
+        if ($count) {
+          drupal_set_message($this->translationManager()->formatPlural($count, '%action was applied to @count item.', '%action was applied to @count items.', array(
+            '%action' => $action->label(),
+          )));
+        }
+      }
+    }
+  }
 
+  /**
+   * Creates and triggers the batch operation.
+   *
+   * @param array $entities
+   *   Array of entity objects to apply action to.
+   * @param \Drupal\system\Entity\Action $action
+   *   The action object to be applied on provided entities.
+   */
+  public function createBatch(array $entities, $action) {
+    if ($this->options['batch_chunks'] > 1) {
+      $entities = array_chunk($entities, $this->options['batch_chunks']);
+    } else {
+      $entities = array_map(function($item) { return array($item);}, $entities);
     }
+
+    $definition = array(
+      'operations' => array(),
+      'file' => drupal_get_path('module', 'system') . '/lib/Drupal/system/Plugin/views/field/BulkForm.php'
+    );
+
+    foreach ($entities AS $entry) {
+      $definition['operations'][] = array(
+        '\Drupal\system\Plugin\views\field\BulkForm::processBatchTask',
+        array($entry, $action) // wouldn't be better to provide just entity type and id?
+      );
+    }
+
+    batch_set($definition);
+  }
+
+  /**
+   * Processes the batch task.
+   *
+   * @param array $entities
+   *   An array of entities to perform action upon.
+   * @param \Drupal\system\Entity\Action $action
+   *   The action object to be applied on provided entities.
+   * @param array $context
+   *   The batch context array, passed by reference.
+   */
+  public static function processBatchTask(array $entities, $action, &$context) {
+    $action->execute($entities);
   }
 
   /**
