diff --git a/core/modules/system/src/Plugin/views/field/BulkForm.php b/core/modules/system/src/Plugin/views/field/BulkForm.php
index 5587ffa..c9b8a67 100644
--- a/core/modules/system/src/Plugin/views/field/BulkForm.php
+++ b/core/modules/system/src/Plugin/views/field/BulkForm.php
@@ -7,9 +7,14 @@
 
 namespace Drupal\system\Plugin\views\field;
 
+use Drupal\Core\Entity\EntityInterface;
+use Drupal\Core\Entity\EntityManagerInterface;
 use Drupal\Core\Entity\EntityStorageInterface;
+use Drupal\Core\Entity\RevisionableInterface;
 use Drupal\Core\Form\FormStateInterface;
+use Drupal\Core\Language\LanguageInterface;
 use Drupal\Core\Routing\RedirectDestinationTrait;
+use Drupal\Core\TypedData\TranslatableInterface;
 use Drupal\views\Plugin\views\display\DisplayPluginBase;
 use Drupal\views\Plugin\views\field\FieldPluginBase;
 use Drupal\views\Plugin\views\field\UncacheableFieldHandlerTrait;
@@ -29,6 +34,13 @@ class BulkForm extends FieldPluginBase {
   use UncacheableFieldHandlerTrait;
 
   /**
+   * The entity manager.
+   *
+   * @var \Drupal\Core\Entity\EntityManagerInterface
+   */
+  protected $entityManager;
+
+  /**
    * The action storage.
    *
    * @var \Drupal\Core\Entity\EntityStorageInterface
@@ -51,20 +63,21 @@ class BulkForm extends FieldPluginBase {
    *   The plugin ID for the plugin instance.
    * @param mixed $plugin_definition
    *   The plugin implementation definition.
-   * @param \Drupal\Core\Entity\EntityStorageInterface $storage
-   *   The action storage.
+   * @param \Drupal\Core\Entity\EntityManagerInterface $entity_manager
+   *   The entity manager..
    */
-  public function __construct(array $configuration, $plugin_id, $plugin_definition, EntityStorageInterface $storage) {
+  public function __construct(array $configuration, $plugin_id, $plugin_definition, EntityManagerInterface $entity_manager) {
     parent::__construct($configuration, $plugin_id, $plugin_definition);
 
-    $this->actionStorage = $storage;
+    $this->entityManager = $entity_manager;
+    $this->actionStorage = $entity_manager->getStorage('action');
   }
 
   /**
    * {@inheritdoc}
    */
   public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
-    return new static($configuration, $plugin_id, $plugin_definition, $container->get('entity.manager')->getStorage('action'));
+    return new static($configuration, $plugin_id, $plugin_definition, $container->get('entity.manager'));
   }
 
   /**
@@ -175,6 +188,8 @@ public function viewsForm(&$form, FormStateInterface $form_state) {
       // Render checkboxes for all rows.
       $form[$this->options['id']]['#tree'] = TRUE;
       foreach ($this->view->result as $row_index => $row) {
+        $entity = $this->getEntity($row);
+
         $form[$this->options['id']][$row_index] = array(
           '#type' => 'checkbox',
           // We are not able to determine a main "title" for each row, so we can
@@ -182,6 +197,7 @@ public function viewsForm(&$form, FormStateInterface $form_state) {
           '#title' => $this->t('Update this item'),
           '#title_display' => 'invisible',
           '#default_value' => !empty($form_state->getValue($this->options['id'])[$row_index]) ? 1 : NULL,
+          '#return_value' => $this->calculateEntityBulkFormKey($entity),
         );
       }
 
@@ -264,8 +280,9 @@ public function viewsFormSubmit(&$form, FormStateInterface $form_state) {
       $entities = array();
       $action = $this->actions[$form_state->getValue('action')];
       $count = 0;
-      foreach (array_intersect_key($this->view->result, $selected) as $row) {
-        $entity = $this->getEntity($row);
+
+      foreach ($selected as $bulk_form_key) {
+        $entity = $this->loadEntityFormBulkFormKey($bulk_form_key);
 
         // Skip execution if the user did not have access.
         if (!$action->getPlugin()->access($entity, $this->view->getUser())) {
@@ -344,4 +361,47 @@ protected function drupalSetMessage($message = NULL, $type = 'status', $repeat =
     drupal_set_message($message, $type, $repeat);
   }
 
+  /**
+   * @return string
+   */
+  protected function calculateEntityBulkFormKey(EntityInterface $entity) {
+    $key_parts = [$entity->language()->getId(), $entity->id()];
+
+    if ($entity instanceof RevisionableInterface) {
+      $key_parts[] = $entity->getRevisionId();
+    }
+
+    return implode('-', $key_parts);
+  }
+
+  /**
+   * @param string $bulk_form_key
+   */
+  protected function loadEntityFormBulkFormKey($bulk_form_key) {
+    $key_parts = explode('-', $bulk_form_key);
+    $vid = NULL;
+
+    // If there are 3 items, vid will be last.
+    if (count($key_parts) === 3) {
+      $vid = array_pop($key_parts);
+    }
+
+    // The first two items will always be langcode and ID.
+    $id = array_pop($key_parts);
+    $langcode = array_pop($key_parts);
+
+    if ($vid) {
+      $entity = $this->entityManager->getStorage($this->getEntityType())->loadRevision($vid);
+    }
+    else {
+      $entity = $this->entityManager->getStorage($this->getEntityType())->load($id);
+    }
+
+    if ($entity instanceof TranslatableInterface) {
+      $entity = $entity->getTranslation($langcode);
+    }
+
+    return $entity;
+  }
+
 }
