diff --git a/core/includes/entity.api.php b/core/includes/entity.api.php
index e6b2a0b..88a8015 100644
--- a/core/includes/entity.api.php
+++ b/core/includes/entity.api.php
@@ -469,9 +469,8 @@ function hook_entity_display_alter(\Drupal\entity\Plugin\Core\Entity\EntityDispl
  *
  * @see \Drupal\Core\Entity\EntityFormController::prepareEntity()
  */
-function hook_entity_prepare_form(\Drupal\Core\Entity\EntityFormControllerInterface $controller, array &$form_state) {
-  if ($controller->getOperation() == 'edit') {
-    $entity = $controller->getEntity();
+function hook_entity_prepare_form(\Drupal\Core\Entity\EntityInterface $entity, $form_display, $operation, array &$form_state) {
+  if ($operation == 'edit') {
     $entity->label->value = 'Altered label';
     $form_state['mymodule']['label_altered'] = TRUE;
   }
diff --git a/core/lib/Drupal/Core/Entity/EntityFormController.php b/core/lib/Drupal/Core/Entity/EntityFormController.php
index 1ba2656..c5de34a 100644
--- a/core/lib/Drupal/Core/Entity/EntityFormController.php
+++ b/core/lib/Drupal/Core/Entity/EntityFormController.php
@@ -498,6 +498,8 @@ protected function prepareInvokeAll($hook, array &$form_state) {
     foreach ($implementations as $module) {
       $function = $module . '_' . $hook;
       if (function_exists($function)) {
+        // Ensure we pass an updated translation object and form display at
+        // each invocation, since they depend on form state which is alterable.
         $args = array($this->getEntity(), $this->getFormDisplay($form_state), $this->operation, &$form_state);
         call_user_func_array($function, $args);
       }
