diff --git a/core/includes/entity.inc b/core/includes/entity.inc
index 37fb310..09f3005 100644
--- a/core/includes/entity.inc
+++ b/core/includes/entity.inc
@@ -414,30 +414,6 @@ function entity_form_controller($entity_type, $operation = 'default') {
 }
 
 /**
- * Returns the form id for the given entity and operation.
- *
- * @param EntityInterface $entity
- *   The entity to be created or edited.
- * @param $operation
- *   (optional) The operation for the form to be processed.
- *
- * @return
- *   A string representing the entity form id.
- */
-function entity_form_id(EntityInterface $entity, $operation = 'default') {
-  $entity_type = $entity->entityType();
-  $bundle = $entity->bundle();
-  $form_id = $entity_type;
-  if ($bundle != $entity_type) {
-    $form_id = $bundle . '_' . $form_id;
-  }
-  if ($operation != 'default') {
-    $form_id = $form_id . '_' . $operation;
-  }
-  return $form_id . '_form';
-}
-
-/**
  * Returns the default form state for the given entity and operation.
  *
  * @param EntityInterface $entity
@@ -451,9 +427,10 @@ function entity_form_id(EntityInterface $entity, $operation = 'default') {
 function entity_form_state_defaults(EntityInterface $entity, $operation = 'default') {
   $form_state = array();
   $controller = drupal_container()->get('plugin.manager.entity')->getFormController($entity->entityType(), $operation);
-  $form_state['build_info']['callback'] = array($controller, 'build');
-  $form_state['build_info']['base_form_id'] = $entity->entityType() . '_form';
-  $form_state['build_info']['args'] = array($entity);
+  $controller->setEntity($entity);
+  $form_state['build_info']['callback_object'] = $controller;
+  $form_state['build_info']['base_form_id'] = $controller->getBaseFormID();
+  $form_state['build_info']['args'] = array();
   return $form_state;
 }
 
@@ -472,7 +449,7 @@ function entity_form_state_defaults(EntityInterface $entity, $operation = 'defau
  */
 function entity_form_submit(EntityInterface $entity, $operation = 'default', &$form_state = array()) {
   $form_state += entity_form_state_defaults($entity, $operation);
-  $form_id = entity_form_id($entity, $operation);
+  $form_id = $form_state['build_info']['callback_object']->getFormID();
   drupal_form_submit($form_id, $form_state);
 }
 
@@ -496,7 +473,7 @@ function entity_form_submit(EntityInterface $entity, $operation = 'default', &$f
  */
 function entity_get_form(EntityInterface $entity, $operation = 'default', array $form_state = array()) {
   $form_state += entity_form_state_defaults($entity, $operation);
-  $form_id = entity_form_id($entity, $operation);
+  $form_id = $form_state['build_info']['callback_object']->getFormID();
   return drupal_build_form($form_id, $form_state);
 }
 
diff --git a/core/lib/Drupal/Core/Entity/EntityFormController.php b/core/lib/Drupal/Core/Entity/EntityFormController.php
index 4a03975..267709b 100644
--- a/core/lib/Drupal/Core/Entity/EntityFormController.php
+++ b/core/lib/Drupal/Core/Entity/EntityFormController.php
@@ -23,6 +23,13 @@ class EntityFormController implements EntityFormControllerInterface {
   protected $operation;
 
   /**
+   * The entity being used by this form.
+   *
+   * @var \Drupal\Core\Entity\EntityInterface
+   */
+  protected $entity;
+
+  /**
    * Constructs an EntityFormController object.
    *
    * @param string $operation
@@ -33,20 +40,41 @@ public function __construct($operation) {
   }
 
   /**
-   * Implements \Drupal\Core\Entity\EntityFormControllerInterface::build().
+   * Implements EntityFormControllerInterface::getBaseFormID().
    */
-  public function build(array $form, array &$form_state, EntityInterface $entity) {
+  public function getBaseFormID() {
+    return $this->entity->entityType() . '_form';
+  }
+
+  /**
+   * Implements \Drupal\Core\Form\FormInterface::getFormID().
+   */
+  public function getFormID() {
+    $entity_type = $this->entity->entityType();
+    $bundle = $this->entity->bundle();
+    $form_id = $entity_type;
+    if ($bundle != $entity_type) {
+      $form_id = $bundle . '_' . $form_id;
+    }
+    if ($this->operation != 'default') {
+      $form_id = $form_id . '_' . $this->operation;
+    }
+    return $form_id . '_form';
+  }
 
+  /**
+   * Implements \Drupal\Core\Form\FormInterface::buildForm().
+   */
+  public function buildForm(array $form, array &$form_state) {
     // During the initial form build, add the entity to the form state for use
     // during form building and processing. During a rebuild, use what is in the
     // form state.
-    if (!$this->getEntity($form_state)) {
-      $this->init($form_state, $entity);
+    if (!isset($form_state['entity'])) {
+      $this->init($form_state);
     }
 
     // Retrieve the form array using the possibly updated entity in form state.
-    $entity = $this->getEntity($form_state);
-    $form = $this->form($form, $form_state, $entity);
+    $form = $this->form($form, $form_state);
 
     // Retrieve and add the form actions array.
     $actions = $this->actionsElement($form, $form_state);
@@ -58,14 +86,26 @@ public function build(array $form, array &$form_state, EntityInterface $entity)
   }
 
   /**
+   * Implements \Drupal\Core\Form\FormInterface::validateForm().
+   */
+  public function validateForm(array &$form, array &$form_state) {
+  }
+
+  /**
+   * Implements \Drupal\Core\Form\FormInterface::submitForm().
+   */
+  public function submitForm(array &$form, array &$form_state) {
+  }
+
+  /**
    * Initialize the form state and the entity before the first form build.
    */
-  protected function init(array &$form_state, EntityInterface $entity) {
+  protected function init(array &$form_state) {
     // Add the controller to the form state so it can be easily accessed by
     // module-provided form handlers there.
     $form_state['controller'] = $this;
-    $this->setEntity($entity, $form_state);
-    $this->prepareEntity($entity);
+    $form_state['entity'] = $this->entity;
+    $this->prepareEntity();
   }
 
   /**
@@ -73,12 +113,12 @@ protected function init(array &$form_state, EntityInterface $entity) {
    *
    * @see Drupal\Core\Entity\EntityFormController::build()
    */
-  public function form(array $form, array &$form_state, EntityInterface $entity) {
+  public function form(array $form, array &$form_state) {
     // @todo Exploit the Field API to generate the default widgets for the
     // entity properties.
-    $info = $entity->entityInfo();
+    $info = $this->entity->entityInfo();
     if (!empty($info['fieldable'])) {
-      field_attach_form($entity, $form, $form_state, $this->getFormLangcode($form_state));
+      field_attach_form($this->entity, $form, $form_state, $this->getFormLangcode($form_state));
     }
     return $form;
   }
@@ -90,7 +130,7 @@ protected function actionsElement(array $form, array &$form_state) {
     $element = $this->actions($form, $form_state);
 
     // We cannot delete an entity that has not been created yet.
-    if ($this->getEntity($form_state)->isNew()) {
+    if ($this->entity->isNew()) {
       unset($element['delete']);
     }
     elseif (isset($element['delete'])) {
@@ -156,11 +196,11 @@ protected function actions(array $form, array &$form_state) {
   public function validate(array $form, array &$form_state) {
     // @todo Exploit the Field API to validate the values submitted for the
     // entity properties.
-    $entity = $this->buildEntity($form, $form_state);
-    $info = $entity->entityInfo();
+    $this->entity = $this->buildEntity($form, $form_state);
+    $info = $this->entity->entityInfo();
 
     if (!empty($info['fieldable'])) {
-      field_attach_form_validate($entity, $form, $form_state);
+      field_attach_form_validate($this->entity, $form, $form_state);
     }
 
     // @todo Remove this.
@@ -189,9 +229,8 @@ public function submit(array $form, array &$form_state) {
 
     $this->updateFormLangcode($form_state);
     $this->submitEntityLanguage($form, $form_state);
-    $entity = $this->buildEntity($form, $form_state);
-    $this->setEntity($entity, $form_state);
-    return $entity;
+    $this->entity = $this->buildEntity($form, $form_state);
+    return $this->entity;
   }
 
   /**
@@ -222,8 +261,7 @@ public function delete(array $form, array &$form_state) {
    * Implements \Drupal\Core\Entity\EntityFormControllerInterface::getFormLangcode().
    */
   public function getFormLangcode(array $form_state) {
-    $entity = $this->getEntity($form_state);
-    $translations = $entity->getTranslationLanguages();
+    $translations = $this->entity->getTranslationLanguages();
 
     if (!empty($form_state['langcode'])) {
       $langcode = $form_state['langcode'];
@@ -241,14 +279,14 @@ public function getFormLangcode(array $form_state) {
 
     // If the site is not multilingual or no translation for the given form
     // language is available, fall back to the entity language.
-    return !empty($langcode) ? $langcode : $entity->language()->langcode;
+    return !empty($langcode) ? $langcode : $this->entity->language()->langcode;
   }
 
   /**
    * Implements \Drupal\Core\Entity\EntityFormControllerInterface::isDefaultFormLangcode().
    */
   public function isDefaultFormLangcode(array $form_state) {
-    return $this->getFormLangcode($form_state) == $this->getEntity($form_state)->language()->langcode;
+    return $this->getFormLangcode($form_state) == $this->entity->language()->langcode;
   }
 
   /**
@@ -273,8 +311,7 @@ protected function updateFormLangcode(array $form_state) {
    *   A reference to a keyed array containing the current state of the form.
    */
   protected function submitEntityLanguage(array $form, array &$form_state) {
-    $entity = $this->getEntity($form_state);
-    $entity_type = $entity->entityType();
+    $entity_type = $this->entity->entityType();
 
     if (field_has_translation_handler($entity_type)) {
       $form_langcode = $this->getFormLangcode($form_state);
@@ -283,9 +320,9 @@ protected function submitEntityLanguage(array $form, array &$form_state) {
       // entity language as the new language for fields to handle any language
       // change. Otherwise the current form language is the proper value, since
       // in this case it is not supposed to change.
-      $current_langcode = $entity->language()->langcode == $form_langcode ? $form_state['values']['langcode'] : $form_langcode;
+      $current_langcode = $this->entity->language()->langcode == $form_langcode ? $form_state['values']['langcode'] : $form_langcode;
 
-      foreach (field_info_instances($entity_type, $entity->bundle()) as $instance) {
+      foreach (field_info_instances($entity_type, $this->entity->bundle()) as $instance) {
         $field_name = $instance['field_name'];
         $field = field_info_field($field_name);
         $previous_langcode = $form[$field_name]['#language'];
@@ -304,7 +341,7 @@ protected function submitEntityLanguage(array $form, array &$form_state) {
    * Implements \Drupal\Core\Entity\EntityFormControllerInterface::buildEntity().
    */
   public function buildEntity(array $form, array &$form_state) {
-    $entity = clone $this->getEntity($form_state);
+    $entity = clone $this->entity;
     // @todo Move entity_form_submit_build_entity() here.
     // @todo Exploit the Field API to process the submitted entity field.
     entity_form_submit_build_entity($entity->entityType(), $entity, $form, $form_state);
@@ -314,21 +351,22 @@ public function buildEntity(array $form, array &$form_state) {
   /**
    * Implements \Drupal\Core\Entity\EntityFormControllerInterface::getEntity().
    */
-  public function getEntity(array $form_state) {
-    return isset($form_state['entity']) ? $form_state['entity'] : NULL;
+  public function getEntity() {
+    return $this->entity;
   }
 
   /**
    * Implements \Drupal\Core\Entity\EntityFormControllerInterface::setEntity().
    */
-  public function setEntity(EntityInterface $entity, array &$form_state) {
-    $form_state['entity'] = $entity;
+  public function setEntity(EntityInterface $entity) {
+    $this->entity = $entity;
+    return $this;
   }
 
   /**
    * Prepares the entity object before the form is built first.
    */
-  protected function prepareEntity(EntityInterface $entity) {
+  protected function prepareEntity() {
     // @todo Perform common prepare operations and add a hook.
   }
 
diff --git a/core/lib/Drupal/Core/Entity/EntityFormControllerInterface.php b/core/lib/Drupal/Core/Entity/EntityFormControllerInterface.php
index 09a06bf..b83b2b4 100644
--- a/core/lib/Drupal/Core/Entity/EntityFormControllerInterface.php
+++ b/core/lib/Drupal/Core/Entity/EntityFormControllerInterface.php
@@ -7,30 +7,12 @@
 
 namespace Drupal\Core\Entity;
 
+use Drupal\Core\Form\FormInterface;
+
 /**
  * Defines a common interface for entity form controller classes.
  */
-interface EntityFormControllerInterface {
-
-  /**
-   * Builds an entity form.
-   *
-   * This is the entity form builder which is invoked via drupal_build_form()
-   * to retrieve the form.
-   *
-   * @param array $form
-   *   A nested array form elements comprising the form.
-   * @param array $form_state
-   *   An associative array containing the current state of the form.
-   * @param string $entity_type
-   *   The type of the entity being edited.
-   * @param \Drupal\Core\Entity\EntityInterface $entity
-   *   The entity being edited.
-   *
-   * @return array
-   *   The array containing the complete form.
-   */
-  public function build(array $form, array &$form_state, EntityInterface $entity);
+interface EntityFormControllerInterface extends FormInterface {
 
   /**
    * Returns the code identifying the active form language.
@@ -73,7 +55,7 @@ public function getOperation();
    * @return \Drupal\Core\Entity\EntityInterface
    *   The current form entity.
    */
-  public function getEntity(array $form_state);
+  public function getEntity();
 
   /**
    * Sets the form entity.
@@ -86,10 +68,8 @@ public function getEntity(array $form_state);
    *
    * @param \Drupal\Core\Entity\EntityInterface $entity
    *   The entity the current form should operate upon.
-   * @param array $form_state
-   *   An associative array containing the current state of the form.
    */
-  public function setEntity(EntityInterface $entity, array &$form_state);
+  public function setEntity(EntityInterface $entity);
 
   /**
    * Builds an updated entity object based upon the submitted form values.
@@ -134,4 +114,14 @@ public function validate(array $form, array &$form_state);
    */
   public function submit(array $form, array &$form_state);
 
+  /**
+   * Returns a string identifying the base form.
+   *
+   * @return string|false
+   *   The string identifying the base form or FALSE if this is not a base form.
+   *
+   * @todo Move to \Drupal\Core\Form\FormInterface.
+   */
+  public function getBaseFormID();
+
 }
diff --git a/core/lib/Drupal/Core/Entity/EntityFormControllerNG.php b/core/lib/Drupal/Core/Entity/EntityFormControllerNG.php
index ef9bc89..8b7676a 100644
--- a/core/lib/Drupal/Core/Entity/EntityFormControllerNG.php
+++ b/core/lib/Drupal/Core/Entity/EntityFormControllerNG.php
@@ -22,7 +22,8 @@ class EntityFormControllerNG extends EntityFormController {
   /**
    * Overrides EntityFormController::form().
    */
-  public function form(array $form, array &$form_state, EntityInterface $entity) {
+  public function form(array $form, array &$form_state) {
+    $entity = $this->entity;
     // @todo Exploit the Field API to generate the default widgets for the
     // entity fields.
     $info = $entity->entityInfo();
@@ -65,7 +66,7 @@ protected function submitEntityLanguage(array $form, array &$form_state) {
    * Overrides EntityFormController::buildEntity().
    */
   public function buildEntity(array $form, array &$form_state) {
-    $entity = clone $this->getEntity($form_state);
+    $entity = clone $this->entity;
     $entity_type = $entity->entityType();
     $info = entity_get_info($entity_type);
     // @todo Exploit the Field API to process the submitted entity fields.
diff --git a/core/modules/aggregator/lib/Drupal/aggregator/FeedFormController.php b/core/modules/aggregator/lib/Drupal/aggregator/FeedFormController.php
index 97fb698..b68ab94 100644
--- a/core/modules/aggregator/lib/Drupal/aggregator/FeedFormController.php
+++ b/core/modules/aggregator/lib/Drupal/aggregator/FeedFormController.php
@@ -7,7 +7,6 @@
 
 namespace Drupal\aggregator;
 
-use Drupal\Core\Entity\EntityInterface;
 use Drupal\Core\Entity\EntityFormControllerNG;
 
 /**
@@ -18,7 +17,8 @@ class FeedFormController extends EntityFormControllerNG {
   /**
    * Overrides Drupal\Core\Entity\EntityFormController::form().
    */
-  public function form(array $form, array &$form_state, EntityInterface $feed) {
+  public function form(array $form, array &$form_state) {
+    $feed = $this->entity;
     $period = drupal_map_assoc(array(900, 1800, 3600, 7200, 10800, 21600, 32400, 43200, 64800, 86400, 172800, 259200, 604800, 1209600, 2419200), 'format_interval');
     $period[AGGREGATOR_CLEAR_NEVER] = t('Never');
 
@@ -111,7 +111,7 @@ public function validate(array $form, array &$form_state) {
    * Overrides Drupal\Core\Entity\EntityFormController::save().
    */
   public function save(array $form, array &$form_state) {
-    $feed = $this->getEntity($form_state);
+    $feed = $this->entity;
     $insert = (bool) $feed->id();
     if (!empty($form_state['values']['category'])) {
       // Store category values for post save operations.
@@ -138,7 +138,7 @@ public function save(array $form, array &$form_state) {
    * Overrides Drupal\Core\Entity\EntityFormController::delete().
    */
   public function delete(array $form, array &$form_state) {
-    $feed = $this->getEntity($form_state);
+    $feed = $this->entity;
     $feed->delete();
     watchdog('aggregator', 'Feed %feed deleted.', array('%feed' => $feed->label()));
     drupal_set_message(t('The feed %feed has been deleted.', array('%feed' => $feed->label())));
diff --git a/core/modules/block/custom_block/lib/Drupal/custom_block/CustomBlockFormController.php b/core/modules/block/custom_block/lib/Drupal/custom_block/CustomBlockFormController.php
index bec8b59..d9cf703 100644
--- a/core/modules/block/custom_block/lib/Drupal/custom_block/CustomBlockFormController.php
+++ b/core/modules/block/custom_block/lib/Drupal/custom_block/CustomBlockFormController.php
@@ -8,7 +8,6 @@
 namespace Drupal\custom_block;
 
 use Drupal\Core\Datetime\DrupalDateTime;
-use Drupal\Core\Entity\EntityInterface;
 use Drupal\Core\Entity\EntityFormControllerNG;
 
 /**
@@ -24,7 +23,8 @@ class CustomBlockFormController extends EntityFormControllerNG {
    * Fills in a few default values, and then invokes hook_custom_block_prepare()
    * on all modules.
    */
-  protected function prepareEntity(EntityInterface $block) {
+  protected function prepareEntity() {
+    $block = $this->entity;
     // Set up default values, if required.
     $block_type = entity_load('custom_block_type', $block->type->value);
     // If this is a new custom block, fill in the default values.
@@ -40,7 +40,8 @@ protected function prepareEntity(EntityInterface $block) {
   /**
    * Overrides \Drupal\Core\Entity\EntityFormController::form().
    */
-  public function form(array $form, array &$form_state, EntityInterface $block) {
+  public function form(array $form, array &$form_state) {
+    $block = $this->entity;
     // Override the default CSS class name, since the user-defined custom block
     // type name in 'TYPE-block-form' potentially clashes with third-party class
     // names.
@@ -158,7 +159,7 @@ public function submit(array $form, array &$form_state) {
    * Overrides \Drupal\Core\Entity\EntityFormController::save().
    */
   public function save(array $form, array &$form_state) {
-    $block = $this->getEntity($form_state);
+    $block = $this->entity;
     $insert = empty($block->id->value);
     $block->save();
     $watchdog_args = array('@type' => $block->bundle(), '%info' => $block->label());
diff --git a/core/modules/block/custom_block/lib/Drupal/custom_block/CustomBlockTypeFormController.php b/core/modules/block/custom_block/lib/Drupal/custom_block/CustomBlockTypeFormController.php
index 77664e9..6e5de33 100644
--- a/core/modules/block/custom_block/lib/Drupal/custom_block/CustomBlockTypeFormController.php
+++ b/core/modules/block/custom_block/lib/Drupal/custom_block/CustomBlockTypeFormController.php
@@ -7,7 +7,6 @@
 
 namespace Drupal\custom_block;
 
-use Drupal\Core\Entity\EntityInterface;
 use Drupal\Core\Entity\EntityFormController;
 
 /**
@@ -18,9 +17,10 @@ class CustomBlockTypeFormController extends EntityFormController {
   /**
    * Overrides \Drupal\Core\Entity\EntityFormController::form().
    */
-  public function form(array $form, array &$form_state, EntityInterface $block_type) {
-    $form = parent::form($form, $form_state, $block_type);
+  public function form(array $form, array &$form_state) {
+    $form = parent::form($form, $form_state);
 
+    $block_type = $this->entity;
     $form['label'] = array(
       '#type' => 'textfield',
       '#title' => t('Label'),
@@ -87,7 +87,7 @@ public function form(array $form, array &$form_state, EntityInterface $block_typ
    * Overrides \Drupal\Core\Entity\EntityFormController::save().
    */
   public function save(array $form, array &$form_state) {
-    $block_type = $this->getEntity($form_state);
+    $block_type = $this->entity;
     $status = $block_type->save();
 
     $uri = $block_type->uri();
@@ -107,7 +107,7 @@ public function save(array $form, array &$form_state) {
    * Overrides \Drupal\Core\Entity\EntityFormController::delete().
    */
   public function delete(array $form, array &$form_state) {
-    $block_type = $this->getEntity($form_state);
+    $block_type = $this->entity;
     $form_state['redirect'] = 'admin/structure/custom-blocks/manage/' . $block_type->id() . '/delete';
   }
 
diff --git a/core/modules/block/lib/Drupal/block/BlockFormController.php b/core/modules/block/lib/Drupal/block/BlockFormController.php
index 8e95248..175d6b0 100644
--- a/core/modules/block/lib/Drupal/block/BlockFormController.php
+++ b/core/modules/block/lib/Drupal/block/BlockFormController.php
@@ -7,7 +7,6 @@
 
 namespace Drupal\block;
 
-use Drupal\Core\Entity\EntityInterface;
 use Drupal\Core\Entity\EntityFormController;
 
 /**
@@ -18,8 +17,8 @@ class BlockFormController extends EntityFormController {
   /**
    * Overrides \Drupal\Core\Entity\EntityFormController::form().
    */
-  public function form(array $form, array &$form_state, EntityInterface $entity) {
-    return $entity->getPlugin()->form($form, $form_state);
+  public function form(array $form, array &$form_state) {
+    return $this->entity->getPlugin()->form($form, $form_state);
   }
 
   /**
@@ -37,7 +36,7 @@ protected function actions(array $form, array &$form_state) {
   public function validate(array $form, array &$form_state) {
     parent::validate($form, $form_state);
 
-    $entity = $this->getEntity($form_state);
+    $entity = $this->entity;
     $entity->getPlugin()->validate($form, $form_state);
   }
 
@@ -47,7 +46,7 @@ public function validate(array $form, array &$form_state) {
   public function submit(array $form, array &$form_state) {
     parent::submit($form, $form_state);
 
-    $entity = $this->getEntity($form_state);
+    $entity = $this->entity;
     // Call the plugin submit handler.
     $entity->getPlugin()->submit($form, $form_state);
 
diff --git a/core/modules/book/book.module b/core/modules/book/book.module
index a2eae8e..7d9c281 100644
--- a/core/modules/book/book.module
+++ b/core/modules/book/book.module
@@ -322,7 +322,7 @@ function book_get_books() {
  * @see book_pick_book_nojs_submit()
  */
 function book_form_node_form_alter(&$form, &$form_state, $form_id) {
-  $node = $form_state['controller']->getEntity($form_state);
+  $node = $form_state['controller']->getEntity();
   $access = user_access('administer book outlines');
   if (!$access) {
     if (user_access('add content to books') && ((!empty($node->book['mlid']) && !empty($node->nid)) || book_type_is_allowed($node->type))) {
@@ -361,7 +361,7 @@ function book_form_node_form_alter(&$form, &$form_state, $form_id) {
  * @see book_form_node_form_alter()
  */
 function book_pick_book_nojs_submit($form, &$form_state) {
-  $node = $form_state['controller']->getEntity($form_state);
+  $node = $form_state['controller']->getEntity();
   $node->book = $form_state['values']['book'];
   $form_state['rebuild'] = TRUE;
 }
diff --git a/core/modules/comment/comment.module b/core/modules/comment/comment.module
index 9ee6f81..ce19e8a 100644
--- a/core/modules/comment/comment.module
+++ b/core/modules/comment/comment.module
@@ -1115,7 +1115,7 @@ function comment_translation_configuration_element_submit($form, &$form_state) {
  * Implements hook_form_BASE_FORM_ID_alter().
  */
 function comment_form_node_form_alter(&$form, $form_state) {
-  $node = $form_state['controller']->getEntity($form_state);
+  $node = $form_state['controller']->getEntity();
   $form['comment_settings'] = array(
     '#type' => 'details',
     '#access' => user_access('administer comments'),
diff --git a/core/modules/comment/lib/Drupal/comment/CommentFormController.php b/core/modules/comment/lib/Drupal/comment/CommentFormController.php
index a5e5f15..443066e 100644
--- a/core/modules/comment/lib/Drupal/comment/CommentFormController.php
+++ b/core/modules/comment/lib/Drupal/comment/CommentFormController.php
@@ -8,7 +8,6 @@
 namespace Drupal\comment;
 
 use Drupal\Core\Datetime\DrupalDateTime;
-use Drupal\Core\Entity\EntityInterface;
 use Drupal\Core\Entity\EntityFormControllerNG;
 
 /**
@@ -19,8 +18,9 @@ class CommentFormController extends EntityFormControllerNG {
   /**
    * Overrides Drupal\Core\Entity\EntityFormController::form().
    */
-  public function form(array $form, array &$form_state, EntityInterface $comment) {
+  public function form(array $form, array &$form_state) {
     global $user;
+    $comment = $this->entity;
     $node = $comment->nid->entity;
 
     // Use #comment-form as unique jump target, regardless of node type.
@@ -170,7 +170,7 @@ public function form(array $form, array &$form_state, EntityInterface $comment)
    */
   protected function actions(array $form, array &$form_state) {
     $element = parent::actions($form, $form_state);
-    $comment = $this->getEntity($form_state);
+    $comment = $this->entity;
     $node = $comment->nid->entity;
     $preview_mode = variable_get('comment_preview_' . $node->type, DRUPAL_OPTIONAL);
 
@@ -299,7 +299,7 @@ public function submit(array $form, array &$form_state) {
    *   A reference to a keyed array containing the current state of the form.
    */
   public function preview(array $form, array &$form_state) {
-    $comment = $this->getEntity($form_state);
+    $comment = $this->entity;
     drupal_set_title(t('Preview comment'), PASS_THROUGH);
     $form_state['comment_preview'] = comment_preview($comment);
     $form_state['rebuild'] = TRUE;
@@ -310,7 +310,7 @@ public function preview(array $form, array &$form_state) {
    */
   public function save(array $form, array &$form_state) {
     $node = node_load($form_state['values']['nid']);
-    $comment = $this->getEntity($form_state);
+    $comment = $this->entity;
 
     if (user_access('post comments') && (user_access('administer comments') || $node->comment == COMMENT_NODE_OPEN)) {
       // Save the anonymous user information to a cookie for reuse.
diff --git a/core/modules/config/tests/config_test/lib/Drupal/config_test/ConfigTestFormController.php b/core/modules/config/tests/config_test/lib/Drupal/config_test/ConfigTestFormController.php
index 7e54e1c..efba401 100644
--- a/core/modules/config/tests/config_test/lib/Drupal/config_test/ConfigTestFormController.php
+++ b/core/modules/config/tests/config_test/lib/Drupal/config_test/ConfigTestFormController.php
@@ -7,7 +7,6 @@
 
 namespace Drupal\config_test;
 
-use Drupal\Core\Entity\EntityInterface;
 use Drupal\Core\Entity\EntityFormController;
 
 /**
@@ -18,9 +17,10 @@ class ConfigTestFormController extends EntityFormController {
   /**
    * Overrides Drupal\Core\Entity\EntityFormController::form().
    */
-  public function form(array $form, array &$form_state, EntityInterface $entity) {
-    $form = parent::form($form, $form_state, $entity);
+  public function form(array $form, array &$form_state) {
+    $form = parent::form($form, $form_state);
 
+    $entity = $this->entity;
     $form['label'] = array(
       '#type' => 'textfield',
       '#title' => 'Label',
@@ -64,7 +64,7 @@ public function form(array $form, array &$form_state, EntityInterface $entity) {
    * Overrides Drupal\Core\Entity\EntityFormController::save().
    */
   public function save(array $form, array &$form_state) {
-    $entity = $this->getEntity($form_state);
+    $entity = $this->entity;
     $status = $entity->save();
 
     if ($status === SAVED_UPDATED) {
@@ -81,7 +81,7 @@ public function save(array $form, array &$form_state) {
    * Overrides Drupal\Core\Entity\EntityFormController::delete().
    */
   public function delete(array $form, array &$form_state) {
-    $entity = $this->getEntity($form_state);
+    $entity = $this->entity;
     $form_state['redirect'] = 'admin/structure/config_test/manage/' . $entity->id() . '/delete';
   }
 
diff --git a/core/modules/contact/contact.module b/core/modules/contact/contact.module
index 4957052..17ede88 100644
--- a/core/modules/contact/contact.module
+++ b/core/modules/contact/contact.module
@@ -341,7 +341,7 @@ function contact_form_user_profile_form_alter(&$form, &$form_state) {
     '#title' => t('Contact settings'),
     '#weight' => 5,
   );
-  $account = $form_state['controller']->getEntity($form_state);
+  $account = $form_state['controller']->getEntity();
   $account_data = drupal_container()->get('user.data')->get('contact', $account->id(), 'enabled');
   $form['contact']['contact'] = array(
     '#type' => 'checkbox',
diff --git a/core/modules/contact/lib/Drupal/contact/CategoryFormController.php b/core/modules/contact/lib/Drupal/contact/CategoryFormController.php
index d60308f..8febed8 100644
--- a/core/modules/contact/lib/Drupal/contact/CategoryFormController.php
+++ b/core/modules/contact/lib/Drupal/contact/CategoryFormController.php
@@ -7,7 +7,6 @@
 
 namespace Drupal\contact;
 
-use Drupal\Core\Entity\EntityInterface;
 use Drupal\Core\Entity\EntityFormController;
 
 /**
@@ -18,9 +17,10 @@ class CategoryFormController extends EntityFormController {
   /**
    * Overrides Drupal\Core\Entity\EntityFormController::form().
    */
-  public function form(array $form, array &$form_state, EntityInterface $category) {
-    $form = parent::form($form, $form_state, $category);
+  public function form(array $form, array &$form_state) {
+    $form = parent::form($form, $form_state);
 
+    $category = $this->entity;
     $default_category = config('contact.settings')->get('default_category');
 
     $form['label'] = array(
@@ -94,7 +94,7 @@ public function validate(array $form, array &$form_state) {
    * Overrides Drupal\Core\Entity\EntityFormController::save().
    */
   public function save(array $form, array &$form_state) {
-    $category = $this->getEntity($form_state);
+    $category = $this->entity;
     $status = $category->save();
 
     $uri = $category->uri();
@@ -128,7 +128,7 @@ public function save(array $form, array &$form_state) {
    * Overrides Drupal\Core\Entity\EntityFormController::delete().
    */
   public function delete(array $form, array &$form_state) {
-    $category = $this->getEntity($form_state);
+    $category = $this->entity;
     $form_state['redirect'] = 'admin/structure/contact/manage/' . $category->id() . '/delete';
   }
 
diff --git a/core/modules/contact/lib/Drupal/contact/MessageFormController.php b/core/modules/contact/lib/Drupal/contact/MessageFormController.php
index e536675..28222a0 100644
--- a/core/modules/contact/lib/Drupal/contact/MessageFormController.php
+++ b/core/modules/contact/lib/Drupal/contact/MessageFormController.php
@@ -7,7 +7,6 @@
 
 namespace Drupal\contact;
 
-use Drupal\Core\Entity\EntityInterface;
 use Drupal\Core\Entity\EntityFormController;
 use Drupal\user\Plugin\Core\Entity\User;
 
@@ -19,8 +18,9 @@ class MessageFormController extends EntityFormController {
   /**
    * Overrides Drupal\Core\Entity\EntityFormController::form().
    */
-  public function form(array $form, array &$form_state, EntityInterface $message) {
+  public function form(array $form, array &$form_state) {
     global $user;
+    $message = $this->entity;
     $form = parent::form($form, $form_state, $message);
     $form['#attributes']['class'][] = 'contact-form';
 
@@ -128,7 +128,7 @@ public function actions(array $form, array &$form_state) {
    * Form submission handler for the 'preview' action.
    */
   public function preview(array $form, array &$form_state) {
-    $message = $this->getEntity($form_state);
+    $message = $this->entity;
     $message->preview = TRUE;
     $form_state['rebuild'] = TRUE;
   }
@@ -140,7 +140,7 @@ public function save(array $form, array &$form_state) {
     global $user;
 
     $language_interface = language(LANGUAGE_TYPE_INTERFACE);
-    $message = $this->getEntity($form_state);
+    $message = $this->entity;
 
     $sender = clone user_load($user->uid);
     if (!$user->uid) {
diff --git a/core/modules/field/tests/modules/field_test/lib/Drupal/field_test/TestEntityFormController.php b/core/modules/field/tests/modules/field_test/lib/Drupal/field_test/TestEntityFormController.php
index 93ef2aa..d5a4508 100644
--- a/core/modules/field/tests/modules/field_test/lib/Drupal/field_test/TestEntityFormController.php
+++ b/core/modules/field/tests/modules/field_test/lib/Drupal/field_test/TestEntityFormController.php
@@ -7,7 +7,6 @@
 
 namespace Drupal\field_test;
 
-use Drupal\Core\Entity\EntityInterface;
 use Drupal\Core\Entity\EntityFormController;
 
 /**
@@ -18,8 +17,10 @@ class TestEntityFormController extends EntityFormController {
   /**
    * Overrides Drupal\Core\Entity\EntityFormController::form().
    */
-  public function form(array $form, array &$form_state, EntityInterface $entity) {
-    $form = parent::form($form, $form_state, $entity);
+  public function form(array $form, array &$form_state) {
+    $form = parent::form($form, $form_state);
+
+    $entity = $this->entity;
     if (!$entity->isNew()) {
       $form['revision'] = array(
         '#access' => user_access('administer field_test content'),
@@ -36,7 +37,7 @@ public function form(array $form, array &$form_state, EntityInterface $entity) {
    * Overrides Drupal\Core\Entity\EntityFormController::save().
    */
   public function save(array $form, array &$form_state) {
-    $entity = $this->getEntity($form_state);
+    $entity = $this->entity;
     $is_new = $entity->isNew();
     $entity->save();
 
diff --git a/core/modules/forum/forum.module b/core/modules/forum/forum.module
index 8b35c3e..f9a4f82 100644
--- a/core/modules/forum/forum.module
+++ b/core/modules/forum/forum.module
@@ -590,7 +590,7 @@ function forum_field_storage_pre_update(EntityInterface $entity, &$skip_fields)
  */
 function forum_form_taxonomy_vocabulary_form_alter(&$form, &$form_state, $form_id) {
   $vid = config('forum.settings')->get('vocabulary');
-  $vocabulary = $form_state['controller']->getEntity($form_state);
+  $vocabulary = $form_state['controller']->getEntity();
   if ($vid == $vocabulary->id()) {
     $form['help_forum_vocab'] = array(
       '#markup' => t('This is the designated forum vocabulary. Some of the normal vocabulary options have been removed.'),
diff --git a/core/modules/menu/lib/Drupal/menu/MenuFormController.php b/core/modules/menu/lib/Drupal/menu/MenuFormController.php
index c51678f..9ef21fb 100644
--- a/core/modules/menu/lib/Drupal/menu/MenuFormController.php
+++ b/core/modules/menu/lib/Drupal/menu/MenuFormController.php
@@ -7,7 +7,6 @@
 
 namespace Drupal\menu;
 
-use Drupal\Core\Entity\EntityInterface;
 use Drupal\Core\Entity\EntityFormController;
 
 /**
@@ -18,8 +17,9 @@ class MenuFormController extends EntityFormController {
   /**
    * Overrides Drupal\Core\Entity\EntityFormController::form().
    */
-  public function form(array $form, array &$form_state, EntityInterface $menu) {
-    $form = parent::form($form, $form_state, $menu);
+  public function form(array $form, array &$form_state) {
+    $form = parent::form($form, $form_state);
+    $menu = $this->entity;
     $system_menus = menu_list_system_menus();
     $form_state['menu'] = &$menu;
 
@@ -84,7 +84,7 @@ public function form(array $form, array &$form_state, EntityInterface $menu) {
    * Overrides Drupal\Core\Entity\EntityFormController::save().
    */
   public function save(array $form, array &$form_state) {
-    $menu = $this->getEntity($form_state);
+    $menu = $this->entity;
     $system_menus = menu_list_system_menus();
 
     if (!$menu->isNew() || isset($system_menus[$menu->id()])) {
@@ -115,7 +115,7 @@ public function save(array $form, array &$form_state) {
    * Overrides Drupal\Core\Entity\EntityFormController::delete().
    */
   public function delete(array $form, array &$form_state) {
-    $menu = $this->getEntity($form_state);
+    $menu = $this->entity;
     $form_state['redirect'] = 'admin/structure/menu/manage/' . $menu->id() . '/delete';
   }
 
diff --git a/core/modules/menu/menu.module b/core/modules/menu/menu.module
index c300ed6..36ed4f0 100644
--- a/core/modules/menu/menu.module
+++ b/core/modules/menu/menu.module
@@ -551,7 +551,7 @@ function _menu_parent_depth_limit($item) {
 function menu_form_node_form_alter(&$form, $form_state) {
   // Generate a list of possible parents (not including this link or descendants).
   // @todo This must be handled in a #process handler.
-  $node = $form_state['controller']->getEntity($form_state);
+  $node = $form_state['controller']->getEntity();
   $link = $node->menu;
   $type = $node->type;
   $options = menu_parent_options(menu_get_menus(), $link, $type);
diff --git a/core/modules/menu_link/lib/Drupal/menu_link/MenuLinkFormController.php b/core/modules/menu_link/lib/Drupal/menu_link/MenuLinkFormController.php
index 9506602..68b0bcb 100644
--- a/core/modules/menu_link/lib/Drupal/menu_link/MenuLinkFormController.php
+++ b/core/modules/menu_link/lib/Drupal/menu_link/MenuLinkFormController.php
@@ -7,7 +7,6 @@
 
 namespace Drupal\menu_link;
 
-use Drupal\Core\Entity\EntityInterface;
 use Drupal\Core\Entity\EntityFormController;
 
 /**
@@ -18,7 +17,8 @@ class MenuLinkFormController extends EntityFormController {
   /**
    * Overrides EntityFormController::form().
    */
-  public function form(array $form, array &$form_state, EntityInterface $menu_link) {
+  public function form(array $form, array &$form_state) {
+    $menu_link = $this->entity;
     // Since menu_link_load() no longer returns a translated and access checked
     // item, do it here instead.
     _menu_link_translate($menu_link);
@@ -137,7 +137,7 @@ public function form(array $form, array &$form_state, EntityInterface $menu_link
   protected function actions(array $form, array &$form_state) {
     $element = parent::actions($form, $form_state);
     $element['submit']['#button_type'] = 'primary';
-    $element['delete']['#access'] = $this->getEntity($form_state)->module == 'menu';
+    $element['delete']['#access'] = $this->entity->module == 'menu';
 
     return $element;
   }
@@ -202,7 +202,7 @@ public function submit(array $form, array &$form_state) {
    * Overrides EntityFormController::save().
    */
   public function save(array $form, array &$form_state) {
-    $menu_link = $this->getEntity($form_state);
+    $menu_link = $this->entity;
 
     $saved = $menu_link->save();
 
@@ -220,7 +220,7 @@ public function save(array $form, array &$form_state) {
    * Overrides EntityFormController::delete().
    */
   public function delete(array $form, array &$form_state) {
-    $menu_link = $this->getEntity($form_state);
+    $menu_link = $this->entity;
     $form_state['redirect'] = 'admin/structure/menu/item/' . $menu_link->id() . '/delete';
   }
 }
diff --git a/core/modules/node/lib/Drupal/node/NodeFormController.php b/core/modules/node/lib/Drupal/node/NodeFormController.php
index 63b4189..5145a57 100644
--- a/core/modules/node/lib/Drupal/node/NodeFormController.php
+++ b/core/modules/node/lib/Drupal/node/NodeFormController.php
@@ -9,7 +9,6 @@
 
 use Drupal\Component\Utility\NestedArray;
 use Drupal\Core\Datetime\DrupalDateTime;
-use Drupal\Core\Entity\EntityInterface;
 use Drupal\Core\Entity\EntityFormController;
 
 /**
@@ -25,7 +24,8 @@ class NodeFormController extends EntityFormController {
    *
    * Overrides Drupal\Core\Entity\EntityFormController::prepareEntity().
    */
-  protected function prepareEntity(EntityInterface $node) {
+  protected function prepareEntity() {
+    $node = $this->entity;
     // Set up default values, if required.
     $node_options = variable_get('node_options_' . $node->type, array('status', 'promote'));
     // If this is a new node, fill in the default values.
@@ -55,7 +55,8 @@ protected function prepareEntity(EntityInterface $node) {
   /**
    * Overrides Drupal\Core\Entity\EntityFormController::form().
    */
-  public function form(array $form, array &$form_state, EntityInterface $node) {
+  public function form(array $form, array &$form_state) {
+    $node = $this->entity;
 
     $user_config = config('user.settings');
     // Some special stuff when previewing a node.
@@ -236,7 +237,7 @@ public function form(array $form, array &$form_state, EntityInterface $node) {
    */
   protected function actions(array $form, array &$form_state) {
     $element = parent::actions($form, $form_state);
-    $node = $this->getEntity($form_state);
+    $node = $this->entity;
     $preview_mode = variable_get('node_preview_' . $node->type, DRUPAL_OPTIONAL);
 
     $element['submit']['#access'] = $preview_mode != DRUPAL_REQUIRED || (!form_get_errors() && isset($form_state['node_preview']));
@@ -390,7 +391,7 @@ public function preview(array $form, array &$form_state) {
     //   classes.
     module_load_include('inc', 'node', 'node.pages');
     drupal_set_title(t('Preview'), PASS_THROUGH);
-    $form_state['node_preview'] = node_preview($this->getEntity($form_state));
+    $form_state['node_preview'] = node_preview($this->entity);
     $form_state['rebuild'] = TRUE;
   }
 
@@ -403,7 +404,7 @@ public function preview(array $form, array &$form_state) {
    *   A reference to a keyed array containing the current state of the form.
    */
   public function publish(array $form, array &$form_state) {
-    $node = $this->getEntity($form_state);
+    $node = $this->entity;
     $node->status = 1;
     return $node;
   }
@@ -417,7 +418,7 @@ public function publish(array $form, array &$form_state) {
    *   A reference to a keyed array containing the current state of the form.
    */
   public function unpublish(array $form, array &$form_state) {
-    $node = $this->getEntity($form_state);
+    $node = $this->entity;
     $node->status = 0;
     return $node;
   }
@@ -426,7 +427,7 @@ public function unpublish(array $form, array &$form_state) {
    * Overrides Drupal\Core\Entity\EntityFormController::save().
    */
   public function save(array $form, array &$form_state) {
-    $node = $this->getEntity($form_state);
+    $node = $this->entity;
     $insert = empty($node->nid);
     $node->save();
     $node_link = l(t('view'), 'node/' . $node->nid);
@@ -467,7 +468,7 @@ public function delete(array $form, array &$form_state) {
       $destination = drupal_get_destination();
       unset($_GET['destination']);
     }
-    $node = $this->getEntity($form_state);
+    $node = $this->entity;
     $form_state['redirect'] = array('node/' . $node->nid . '/delete', array('query' => $destination));
   }
 
diff --git a/core/modules/node/lib/Drupal/node/NodeTranslationController.php b/core/modules/node/lib/Drupal/node/NodeTranslationController.php
index a9e6b7c..4531a8e 100644
--- a/core/modules/node/lib/Drupal/node/NodeTranslationController.php
+++ b/core/modules/node/lib/Drupal/node/NodeTranslationController.php
@@ -61,7 +61,7 @@ public function entityFormEntityBuild($entity_type, EntityInterface $entity, arr
     if (isset($form_state['values']['translation_entity'])) {
       $form_controller = translation_entity_form_controller($form_state);
       $translation = &$form_state['values']['translation_entity'];
-      $translation['status'] = $form_controller->getEntity($form_state)->status;
+      $translation['status'] = $form_controller->getEntity()->status;
       $translation['name'] = $form_state['values']['name'];
       $translation['created'] = $form_state['values']['date'];
     }
diff --git a/core/modules/node/tests/modules/node_access_test/node_access_test.module b/core/modules/node/tests/modules/node_access_test/node_access_test.module
index 4efee88..d248ffd 100644
--- a/core/modules/node/tests/modules/node_access_test/node_access_test.module
+++ b/core/modules/node/tests/modules/node_access_test/node_access_test.module
@@ -183,7 +183,7 @@ function node_access_entity_test_page() {
 function node_access_test_form_node_form_alter(&$form, $form_state) {
   // Only show this checkbox for NodeAccessBaseTableTestCase.
   if (state()->get('node_access_test.private')) {
-    $node = $form_state['controller']->getEntity($form_state);
+    $node = $form_state['controller']->getEntity();
     $form['private'] = array(
       '#type' => 'checkbox',
       '#title' => t('Private'),
diff --git a/core/modules/openid/openid.module b/core/modules/openid/openid.module
index 6d31124..9c9a689 100644
--- a/core/modules/openid/openid.module
+++ b/core/modules/openid/openid.module
@@ -287,7 +287,7 @@ function openid_form_user_register_form_alter(&$form, &$form_state) {
       $timezone = current($ax_timezone_values);
     }
     if (in_array($timezone, timezone_identifiers_list())) {
-      $account = $form_state['controller']->getEntity($form_state);
+      $account = $form_state['controller']->getEntity();
       $account->timezone = $timezone;
     }
 
diff --git a/core/modules/overlay/overlay.module b/core/modules/overlay/overlay.module
index cc29255..97b3e9a 100644
--- a/core/modules/overlay/overlay.module
+++ b/core/modules/overlay/overlay.module
@@ -97,7 +97,7 @@ function overlay_field_extra_fields() {
  * Implements hook_form_FORM_ID_alter().
  */
 function overlay_form_user_profile_form_alter(&$form, &$form_state) {
-  $account = $form_state['controller']->getEntity($form_state);
+  $account = $form_state['controller']->getEntity();
   if (user_access('access overlay', $account)) {
     $account_data = drupal_container()->get('user.data')->get('overlay', $account->id(), 'enabled');
     $form['overlay_control'] = array(
diff --git a/core/modules/path/path.module b/core/modules/path/path.module
index 6401a8b..9927eac 100644
--- a/core/modules/path/path.module
+++ b/core/modules/path/path.module
@@ -99,7 +99,7 @@ function path_menu() {
  * @see path_form_element_validate()
  */
 function path_form_node_form_alter(&$form, $form_state) {
-  $node = $form_state['controller']->getEntity($form_state);
+  $node = $form_state['controller']->getEntity();
   $path = array();
   if (!empty($node->nid)) {
     $conditions = array('source' => 'node/' . $node->nid);
@@ -234,7 +234,7 @@ function path_node_predelete(Node $node) {
 function path_form_taxonomy_term_form_alter(&$form, $form_state) {
   // Make sure this does not show up on the delete confirmation form.
   if (empty($form_state['confirm_delete'])) {
-    $term = $form_state['controller']->getEntity($form_state);
+    $term = $form_state['controller']->getEntity();
     $path = (isset($term->tid) ? drupal_container()->get('path.crud')->load(array('source' => 'taxonomy/term/' . $term->tid)) : array());
     if ($path === FALSE) {
       $path = array();
diff --git a/core/modules/picture/lib/Drupal/picture/PictureMappingFormController.php b/core/modules/picture/lib/Drupal/picture/PictureMappingFormController.php
index 466e14c..b69a277 100644
--- a/core/modules/picture/lib/Drupal/picture/PictureMappingFormController.php
+++ b/core/modules/picture/lib/Drupal/picture/PictureMappingFormController.php
@@ -7,7 +7,6 @@
 
 namespace Drupal\picture;
 
-use Drupal\Core\Entity\EntityInterface;
 use Drupal\Core\Entity\EntityFormController;
 
 /**
@@ -28,7 +27,8 @@ class PictureMappingFormController extends EntityFormController {
    * @return array
    *   The array containing the complete form.
    */
-  public function form(array $form, array &$form_state, EntityInterface $picture_mapping) {
+  public function form(array $form, array &$form_state) {
+    $picture_mapping = $this->entity;
     $form['label'] = array(
       '#type' => 'textfield',
       '#title' => t('Label'),
@@ -104,7 +104,7 @@ protected function actions(array $form, array &$form_state) {
    * Overrides Drupal\Core\Entity\EntityFormController::validate().
    */
   public function validate(array $form, array &$form_state) {
-    $picture_mapping = $this->getEntity($form_state);
+    $picture_mapping = $this->entity;
 
     // Only validate on edit.
     if (isset($form_state['values']['mappings'])) {
@@ -126,7 +126,7 @@ public function validate(array $form, array &$form_state) {
    * Overrides Drupal\Core\Entity\EntityFormController::save().
    */
   public function save(array $form, array &$form_state) {
-    $picture_mapping = $this->getEntity($form_state);
+    $picture_mapping = $this->entity;
     $picture_mapping->save();
 
     watchdog('picture', 'Picture mapping @label saved.', array('@label' => $picture_mapping->label()), WATCHDOG_NOTICE);
diff --git a/core/modules/shortcut/lib/Drupal/shortcut/ShortcutFormController.php b/core/modules/shortcut/lib/Drupal/shortcut/ShortcutFormController.php
index 059de38..2b7b1d6 100644
--- a/core/modules/shortcut/lib/Drupal/shortcut/ShortcutFormController.php
+++ b/core/modules/shortcut/lib/Drupal/shortcut/ShortcutFormController.php
@@ -7,7 +7,6 @@
 
 namespace Drupal\shortcut;
 
-use Drupal\Core\Entity\EntityInterface;
 use Drupal\Core\Entity\EntityFormController;
 
 /**
@@ -18,9 +17,10 @@ class ShortcutFormController extends EntityFormController {
   /**
    * Overrides \Drupal\Core\Entity\EntityFormController::form().
    */
-  public function form(array $form, array &$form_state, EntityInterface $entity) {
-    $form = parent::form($form, $form_state, $entity);
+  public function form(array $form, array &$form_state) {
+    $form = parent::form($form, $form_state);
 
+    $entity = $this->entity;
     $form['label'] = array(
       '#type' => 'textfield',
       '#title' => t('Set name'),
@@ -53,7 +53,7 @@ public function form(array $form, array &$form_state, EntityInterface $entity) {
   protected function actions(array $form, array &$form_state) {
     // Disable delete of default shortcut set.
     $actions = parent::actions($form, $form_state);
-    $actions['delete']['#access'] = shortcut_set_delete_access($this->getEntity($form_state));
+    $actions['delete']['#access'] = shortcut_set_delete_access($this->entity);
     return $actions;
   }
 
@@ -62,7 +62,7 @@ protected function actions(array $form, array &$form_state) {
    */
   public function validate(array $form, array &$form_state) {
     parent::validate($form, $form_state);
-    $entity = $this->getEntity($form_state);
+    $entity = $this->entity;
     // Check to prevent a duplicate title.
     if ($form_state['values']['label'] != $entity->label() && shortcut_set_title_exists($form_state['values']['label'])) {
       form_set_error('label', t('The shortcut set %name already exists. Choose another name.', array('%name' => $form_state['values']['label'])));
@@ -73,7 +73,7 @@ public function validate(array $form, array &$form_state) {
    * Overrides \Drupal\Core\Entity\EntityFormController::save().
    */
   public function save(array $form, array &$form_state) {
-    $entity = $this->getEntity($form_state);
+    $entity = $this->entity;
     $is_new = !$entity->getOriginalID();
     $entity->save();
 
@@ -90,7 +90,7 @@ public function save(array $form, array &$form_state) {
    * Overrides \Drupal\Core\Entity\EntityFormController::delete().
    */
   public function delete(array $form, array &$form_state) {
-    $entity = $this->getEntity($form_state);
+    $entity = $this->entity;
     $form_state['redirect'] = 'admin/config/user-interface/shortcut/manage/' . $entity->id() . '/delete';
   }
 
diff --git a/core/modules/system/system.api.php b/core/modules/system/system.api.php
index 2f98dad..7ecdac8 100644
--- a/core/modules/system/system.api.php
+++ b/core/modules/system/system.api.php
@@ -1129,7 +1129,7 @@ function hook_page_alter(&$page) {
  *
  * One popular use of this hook is to add form elements to the node form. When
  * altering a node form, the node entity can be retrieved by invoking
- * $form_state['controller']->getEntity($form_state).
+ * $form_state['controller']->getEntity().
  *
  * In addition to hook_form_alter(), which is called for all forms, there are
  * two more specific form hooks available. The first,
diff --git a/core/modules/system/system.module b/core/modules/system/system.module
index 1a659c5..89e64df 100644
--- a/core/modules/system/system.module
+++ b/core/modules/system/system.module
@@ -2602,7 +2602,7 @@ function system_user_login($account) {
 function system_user_timezone(&$form, &$form_state) {
   global $user;
 
-  $account = $form_state['controller']->getEntity($form_state);
+  $account = $form_state['controller']->getEntity();
   $form['timezone'] = array(
     '#type' => 'details',
     '#title' => t('Locale settings'),
diff --git a/core/modules/system/tests/modules/entity_test/lib/Drupal/entity_test/EntityTestFormController.php b/core/modules/system/tests/modules/entity_test/lib/Drupal/entity_test/EntityTestFormController.php
index c08e3b3..acea3a1 100644
--- a/core/modules/system/tests/modules/entity_test/lib/Drupal/entity_test/EntityTestFormController.php
+++ b/core/modules/system/tests/modules/entity_test/lib/Drupal/entity_test/EntityTestFormController.php
@@ -6,7 +6,6 @@
 
 namespace Drupal\entity_test;
 
-use Drupal\Core\Entity\EntityInterface;
 use Drupal\Core\Entity\EntityFormControllerNG;
 
 /**
@@ -17,9 +16,10 @@ class EntityTestFormController extends EntityFormControllerNG {
   /**
    * Overrides Drupal\Core\Entity\EntityFormController::form().
    */
-  public function form(array $form, array &$form_state, EntityInterface $entity) {
-    $form = parent::form($form, $form_state, $entity);
+  public function form(array $form, array &$form_state) {
+    $form = parent::form($form, $form_state);
 
+    $entity = $this->entity;
     $langcode = $this->getFormLangcode($form_state);
     $translation = $entity->getTranslation($langcode);
 
@@ -57,7 +57,7 @@ public function form(array $form, array &$form_state, EntityInterface $entity) {
    * Overrides Drupal\Core\Entity\EntityFormController::save().
    */
   public function save(array $form, array &$form_state) {
-    $entity = $this->getEntity($form_state);
+    $entity = $this->entity;
     $is_new = $entity->isNew();
     $entity->save();
 
@@ -83,7 +83,7 @@ public function save(array $form, array &$form_state) {
    * Overrides Drupal\Core\Entity\EntityFormController::delete().
    */
   public function delete(array $form, array &$form_state) {
-    $entity = $this->getEntity($form_state);
+    $entity = $this->entity;
     $entity->delete();
     drupal_set_message(t('%entity_type @id has been deleted.', array('@id' => $entity->id(), '%entity_type' => $entity->entityType())));
     $form_state['redirect'] = '<front>';
diff --git a/core/modules/system/tests/modules/taxonomy_test/taxonomy_test.module b/core/modules/system/tests/modules/taxonomy_test/taxonomy_test.module
index 2c6c00a..b9be670 100644
--- a/core/modules/system/tests/modules/taxonomy_test/taxonomy_test.module
+++ b/core/modules/system/tests/modules/taxonomy_test/taxonomy_test.module
@@ -91,7 +91,7 @@ function taxonomy_test_entity_view($entity, EntityDisplay $display, $view_mode,
  * Implements hook_form_FORM_ID_alter().
  */
 function taxonomy_test_form_taxonomy_term_form_alter(&$form, $form_state, $form_id) {
-  $term = $form_state['controller']->getEntity($form_state);
+  $term = $form_state['controller']->getEntity();
   $antonym = taxonomy_test_get_antonym($term->tid);
   $form['advanced']['antonym'] = array(
     '#type' => 'textfield',
diff --git a/core/modules/taxonomy/lib/Drupal/taxonomy/TermFormController.php b/core/modules/taxonomy/lib/Drupal/taxonomy/TermFormController.php
index 3735ad6..31c960c 100644
--- a/core/modules/taxonomy/lib/Drupal/taxonomy/TermFormController.php
+++ b/core/modules/taxonomy/lib/Drupal/taxonomy/TermFormController.php
@@ -7,7 +7,6 @@
 
 namespace Drupal\taxonomy;
 
-use Drupal\Core\Entity\EntityInterface;
 use Drupal\Core\Entity\EntityFormController;
 
 /**
@@ -18,7 +17,8 @@ class TermFormController extends EntityFormController {
   /**
    * Overrides Drupal\Core\Entity\EntityFormController::form().
    */
-  public function form(array $form, array &$form_state, EntityInterface $term) {
+  public function form(array $form, array &$form_state) {
+    $term = $this->entity;
     $vocabulary = taxonomy_vocabulary_load($term->bundle());
 
     $parent = array_keys(taxonomy_term_load_parents($term->tid));
@@ -150,7 +150,7 @@ public function submit(array $form, array &$form_state) {
    * Overrides Drupal\Core\Entity\EntityFormController::save().
    */
   public function save(array $form, array &$form_state) {
-    $term = $this->getEntity($form_state);
+    $term = $this->entity;
 
     $status = taxonomy_term_save($term);
     switch ($status) {
@@ -199,7 +199,7 @@ public function delete(array $form, array &$form_state) {
       $destination = drupal_get_destination();
       unset($_GET['destination']);
     }
-    $term = $this->getEntity($form_state);
+    $term = $this->entity;
     $form_state['redirect'] = array('taxonomy/term/' . $term->tid . '/delete', array('query' => $destination));
   }
 }
diff --git a/core/modules/taxonomy/lib/Drupal/taxonomy/TermTranslationController.php b/core/modules/taxonomy/lib/Drupal/taxonomy/TermTranslationController.php
index ab36a79..22a05db 100644
--- a/core/modules/taxonomy/lib/Drupal/taxonomy/TermTranslationController.php
+++ b/core/modules/taxonomy/lib/Drupal/taxonomy/TermTranslationController.php
@@ -32,7 +32,7 @@ public function entityFormAlter(array &$form, array &$form_state, EntityInterfac
    */
   function entityFormSave(array $form, array &$form_state) {
     if ($this->getSourceLangcode($form_state)) {
-      $entity = translation_entity_form_controller($form_state)->getEntity($form_state);
+      $entity = translation_entity_form_controller($form_state)->getEntity();
       // We need a redirect here, otherwise we would get an access denied page,
       // since the current URL would be preserved and we would try to add a
       // translation for a language that already has a translation.
diff --git a/core/modules/taxonomy/lib/Drupal/taxonomy/VocabularyFormController.php b/core/modules/taxonomy/lib/Drupal/taxonomy/VocabularyFormController.php
index 6785335..a498aa7 100644
--- a/core/modules/taxonomy/lib/Drupal/taxonomy/VocabularyFormController.php
+++ b/core/modules/taxonomy/lib/Drupal/taxonomy/VocabularyFormController.php
@@ -7,7 +7,6 @@
 
 namespace Drupal\taxonomy;
 
-use Drupal\Core\Entity\EntityInterface;
 use Drupal\Core\Entity\EntityFormController;
 
 /**
@@ -18,7 +17,8 @@ class VocabularyFormController extends EntityFormController {
   /**
    * Overrides Drupal\Core\Entity\EntityFormController::form().
    */
-  public function form(array $form, array &$form_state, EntityInterface $vocabulary) {
+  public function form(array $form, array &$form_state) {
+    $vocabulary = $this->entity;
 
     // Check whether we need a deletion confirmation form.
     if (isset($form_state['confirm_delete']) && isset($form_state['values']['vid'])) {
@@ -131,7 +131,7 @@ public function validate(array $form, array &$form_state) {
    * Submit handler to update the bundle for the default language configuration.
    */
   public function languageConfigurationSubmit(array &$form, array &$form_state) {
-    $vocabulary = $this->getEntity($form_state);
+    $vocabulary = $this->entity;
     // Delete the old language settings for the vocabulary, if the machine name
     // is changed.
     if ($vocabulary && $vocabulary->id() && $vocabulary->id() != $form_state['values']['vid']) {
@@ -164,7 +164,7 @@ public function submit(array $form, array &$form_state) {
    * Overrides Drupal\Core\Entity\EntityFormController::save().
    */
   public function save(array $form, array &$form_state) {
-    $vocabulary = $this->getEntity($form_state);
+    $vocabulary = $this->entity;
 
     // Prevent leading and trailing spaces in vocabulary names.
     $vocabulary->name = trim($vocabulary->name);
diff --git a/core/modules/translation/translation.module b/core/modules/translation/translation.module
index a864120..55a4e32 100644
--- a/core/modules/translation/translation.module
+++ b/core/modules/translation/translation.module
@@ -192,7 +192,7 @@ function translation_node_type_language_translation_enabled_validate($element, &
  * @see node_form()
  */
 function translation_form_node_form_alter(&$form, &$form_state) {
-  $node = $form_state['controller']->getEntity($form_state);
+  $node = $form_state['controller']->getEntity();
   if (translation_supported_type($node->type)) {
     if (!empty($node->translation_source)) {
       // We are creating a translation. Add values and lock language field.
@@ -410,7 +410,7 @@ function translation_node_update(Node $node) {
  */
 function translation_node_validate(Node $node, $form, &$form_state) {
   // Only act on translatable nodes with a tnid or translation_source.
-  $form_node = $form_state['controller']->getEntity($form_state);
+  $form_node = $form_state['controller']->getEntity();
   if (translation_supported_type($node->type) && (!empty($node->tnid) || !empty($form_node->translation_source->nid))) {
     $tnid = !empty($node->tnid) ? $node->tnid : $form_node->translation_source->nid;
     $translations = translation_node_get_translations($tnid);
diff --git a/core/modules/translation_entity/lib/Drupal/translation_entity/EntityTranslationController.php b/core/modules/translation_entity/lib/Drupal/translation_entity/EntityTranslationController.php
index ce9d3a0..4ffc6ef 100644
--- a/core/modules/translation_entity/lib/Drupal/translation_entity/EntityTranslationController.php
+++ b/core/modules/translation_entity/lib/Drupal/translation_entity/EntityTranslationController.php
@@ -465,7 +465,7 @@ function entityFormValidate($form, &$form_state) {
    */
   public function entityFormSourceChange($form, &$form_state) {
     $form_controller = translation_entity_form_controller($form_state);
-    $entity = $form_controller->getEntity($form_state);
+    $entity = $form_controller->getEntity();
     $source = $form_state['values']['source_langcode']['source'];
     $path = $this->getBasePath($entity) . '/translations/add/' . $source . '/' . $form_controller->getFormLangcode($form_state);
     $form_state['redirect'] = array('path' => $path);
@@ -480,7 +480,7 @@ public function entityFormSourceChange($form, &$form_state) {
    */
   function entityFormDelete($form, &$form_state) {
     $form_controller = translation_entity_form_controller($form_state);
-    $entity = $form_controller->getEntity($form_state);
+    $entity = $form_controller->getEntity();
     if (count($entity->getTranslationLanguages()) > 1) {
       drupal_set_message(t('This will delete all the translations of %label.', array('%label' => $entity->label())), 'warning');
     }
@@ -493,7 +493,7 @@ function entityFormDelete($form, &$form_state) {
    */
   function entityFormDeleteTranslation($form, &$form_state) {
     $form_controller = translation_entity_form_controller($form_state);
-    $entity = $form_controller->getEntity($form_state);
+    $entity = $form_controller->getEntity();
     $base_path = $this->getBasePath($entity);
     $form_langcode = $form_controller->getFormLangcode($form_state);
     $form_state['redirect'] = $base_path . '/translations/delete/' . $form_langcode;
diff --git a/core/modules/translation_entity/translation_entity.module b/core/modules/translation_entity/translation_entity.module
index ac00322..975d317 100644
--- a/core/modules/translation_entity/translation_entity.module
+++ b/core/modules/translation_entity/translation_entity.module
@@ -602,7 +602,7 @@ function translation_entity_permission() {
  * Implements hook_form_alter().
  */
 function translation_entity_form_alter(array &$form, array &$form_state) {
-  if (($form_controller = translation_entity_form_controller($form_state)) && ($entity = $form_controller->getEntity($form_state)) && !$entity->isNew() && translation_entity_enabled($entity->entityType(), $entity->bundle())) {
+  if (($form_controller = translation_entity_form_controller($form_state)) && ($entity = $form_controller->getEntity()) && !$entity->isNew() && translation_entity_enabled($entity->entityType(), $entity->bundle())) {
     $controller = translation_entity_controller($entity->entityType());
     $controller->entityFormAlter($form, $form_state, $entity);
 
diff --git a/core/modules/user/lib/Drupal/user/AccountFormController.php b/core/modules/user/lib/Drupal/user/AccountFormController.php
index 8f2f0c5..ca8e638 100644
--- a/core/modules/user/lib/Drupal/user/AccountFormController.php
+++ b/core/modules/user/lib/Drupal/user/AccountFormController.php
@@ -7,7 +7,6 @@
 
 namespace Drupal\user;
 
-use Drupal\Core\Entity\EntityInterface;
 use Drupal\Core\Entity\EntityFormController;
 
 /**
@@ -18,7 +17,8 @@
   /**
    * Overrides Drupal\Core\Entity\EntityFormController::form().
    */
-  public function form(array $form, array &$form_state, EntityInterface $account) {
+  public function form(array $form, array &$form_state) {
+    $account = $this->entity;
     global $user;
     $config = config('user.settings');
 
@@ -230,7 +230,7 @@ public function form(array $form, array &$form_state, EntityInterface $account)
   public function validate(array $form, array &$form_state) {
     parent::validate($form, $form_state);
 
-    $account = $this->getEntity($form_state);
+    $account = $this->entity;
     // Validate new or changing username.
     if (isset($form_state['values']['name'])) {
       if ($error = user_validate_name($form_state['values']['name'])) {
diff --git a/core/modules/user/lib/Drupal/user/ProfileFormController.php b/core/modules/user/lib/Drupal/user/ProfileFormController.php
index c2b139d..484a4af 100644
--- a/core/modules/user/lib/Drupal/user/ProfileFormController.php
+++ b/core/modules/user/lib/Drupal/user/ProfileFormController.php
@@ -7,8 +7,6 @@
 
 namespace Drupal\user;
 
-use Drupal\Core\Entity\EntityInterface;
-
 /**
  * Form controller for the profile forms.
  */
@@ -19,7 +17,7 @@ class ProfileFormController extends AccountFormController {
    */
   protected function actions(array $form, array &$form_state) {
     $element = parent::actions($form, $form_state);
-    $account = $this->getEntity($form_state);
+    $account = $this->entity;
 
     $element['delete']['#type'] = 'submit';
     $element['delete']['#value'] = t('Cancel account');
@@ -43,7 +41,7 @@ public function submit(array $form, array &$form_state) {
    * Overrides Drupal\Core\Entity\EntityFormController::save().
    */
   public function save(array $form, array &$form_state) {
-    $account = $this->getEntity($form_state);
+    $account = $this->entity;
     $account->save();
     $form_state['values']['uid'] = $account->id();
 
diff --git a/core/modules/user/lib/Drupal/user/ProfileTranslationController.php b/core/modules/user/lib/Drupal/user/ProfileTranslationController.php
index 582644b..c1b2414 100644
--- a/core/modules/user/lib/Drupal/user/ProfileTranslationController.php
+++ b/core/modules/user/lib/Drupal/user/ProfileTranslationController.php
@@ -32,7 +32,7 @@ public function entityFormAlter(array &$form, array &$form_state, EntityInterfac
    */
   function entityFormSave(array $form, array &$form_state) {
     if ($this->getSourceLangcode($form_state)) {
-      $entity = translation_entity_form_controller($form_state)->getEntity($form_state);
+      $entity = translation_entity_form_controller($form_state)->getEntity();
       // We need a redirect here, otherwise we would get an access denied page
       // since the current URL would be preserved and we would try to add a
       // translation for a language that already has a translation.
diff --git a/core/modules/user/lib/Drupal/user/RegisterFormController.php b/core/modules/user/lib/Drupal/user/RegisterFormController.php
index 2a84412..b533683 100644
--- a/core/modules/user/lib/Drupal/user/RegisterFormController.php
+++ b/core/modules/user/lib/Drupal/user/RegisterFormController.php
@@ -7,8 +7,6 @@
 
 namespace Drupal\user;
 
-use Drupal\Core\Entity\EntityInterface;
-
 /**
  * Form controller for the user register forms.
  */
@@ -17,8 +15,9 @@ class RegisterFormController extends AccountFormController {
   /**
    * Overrides Drupal\Core\Entity\EntityFormController::form().
    */
-  public function form(array $form, array &$form_state, EntityInterface $account) {
+  public function form(array $form, array &$form_state) {
     global $user;
+    $account = $this->entity;
 
     $admin = user_access('administer users');
 
@@ -94,7 +93,7 @@ public function submit(array $form, array &$form_state) {
    * Overrides Drupal\Core\Entity\EntityFormController::submit().
    */
   public function save(array $form, array &$form_state) {
-    $account = $this->getEntity($form_state);
+    $account = $this->entity;
     $pass = $account->pass;
     $admin = $form_state['values']['administer_users'];
     $notify = !empty($form_state['values']['notify']);
diff --git a/core/modules/user/user.pages.inc b/core/modules/user/user.pages.inc
index 6559313..9448e14 100644
--- a/core/modules/user/user.pages.inc
+++ b/core/modules/user/user.pages.inc
@@ -198,7 +198,7 @@ function user_edit_cancel_submit($form, &$form_state) {
     unset($_GET['destination']);
   }
   // Note: We redirect from user/uid/edit to user/uid/cancel to make the tabs disappear.
-  $account = $form_state['controller']->getEntity($form_state);
+  $account = $form_state['controller']->getEntity();
   $form_state['redirect'] = array("user/" . $account->uid . "/cancel", array('query' => $destination));
 }
 
diff --git a/core/modules/views/views_ui/lib/Drupal/views_ui/ViewAddFormController.php b/core/modules/views/views_ui/lib/Drupal/views_ui/ViewAddFormController.php
index ca6478d..195f2f8 100644
--- a/core/modules/views/views_ui/lib/Drupal/views_ui/ViewAddFormController.php
+++ b/core/modules/views/views_ui/lib/Drupal/views_ui/ViewAddFormController.php
@@ -7,7 +7,6 @@
 
 namespace Drupal\views_ui;
 
-use Drupal\Core\Entity\EntityInterface;
 use Drupal\views\Plugin\views\wizard\WizardPluginBase;
 use Drupal\views\Plugin\views\wizard\WizardException;
 
@@ -19,14 +18,14 @@ class ViewAddFormController extends ViewFormControllerBase {
   /**
    * Overrides Drupal\Core\Entity\EntityFormController::prepareForm().
    */
-  protected function prepareEntity(EntityInterface $view) {
+  protected function prepareEntity() {
     // Do not prepare the entity while it is being added.
   }
 
   /**
    * Overrides Drupal\Core\Entity\EntityFormController::form().
    */
-  public function form(array $form, array &$form_state, EntityInterface $view) {
+  public function form(array $form, array &$form_state) {
     $form['#attached']['css'] = static::getAdminCSS();
     $form['#attached']['js'][] = drupal_get_path('module', 'views_ui') . '/js/views-admin.js';
     $form['#attributes']['class'] = array('views-admin');
diff --git a/core/modules/views/views_ui/lib/Drupal/views_ui/ViewCloneFormController.php b/core/modules/views/views_ui/lib/Drupal/views_ui/ViewCloneFormController.php
index dcf319a..9299beb 100644
--- a/core/modules/views/views_ui/lib/Drupal/views_ui/ViewCloneFormController.php
+++ b/core/modules/views/views_ui/lib/Drupal/views_ui/ViewCloneFormController.php
@@ -7,8 +7,6 @@
 
 namespace Drupal\views_ui;
 
-use Drupal\Core\Entity\EntityInterface;
-
 /**
  * Form controller for the Views clone form.
  */
@@ -17,15 +15,15 @@ class ViewCloneFormController extends ViewFormControllerBase {
   /**
    * Overrides \Drupal\Core\Entity\EntityFormController::prepareForm().
    */
-  protected function prepareEntity(EntityInterface $entity) {
+  protected function prepareEntity() {
     // Do not prepare the entity while it is being added.
   }
 
   /**
    * Overrides \Drupal\Core\Entity\EntityFormController::form().
    */
-  public function form(array $form, array &$form_state, EntityInterface $entity) {
-    parent::form($form, $form_state, $entity);
+  public function form(array $form, array &$form_state) {
+    parent::form($form, $form_state);
 
     $form['human_name'] = array(
       '#type' => 'textfield',
@@ -34,7 +32,7 @@ public function form(array $form, array &$form_state, EntityInterface $entity) {
       '#size' => 32,
       '#default_value' => '',
       '#maxlength' => 255,
-      '#default_value' => t('Clone of @human_name', array('@human_name' => $entity->getHumanName())),
+      '#default_value' => t('Clone of @human_name', array('@human_name' => $this->entity->getHumanName())),
     );
     $form['id'] = array(
       '#type' => 'machine_name',
@@ -67,14 +65,14 @@ protected function actions(array $form, array &$form_state) {
    * Overrides \Drupal\Core\Entity\EntityFormController::form().
    */
   public function submit(array $form, array &$form_state) {
-    $entity = parent::submit($form, $form_state);
-    $entity->setOriginalID(NULL);
-    $entity->save();
+    $this->entity = parent::submit($form, $form_state);
+    $this->entity->setOriginalID(NULL);
+    $this->entity->save();
 
     // Redirect the user to the view admin form.
-    $uri = $entity->uri();
+    $uri = $this->entity->uri();
     $form_state['redirect'] = $uri['path'] . '/edit';
-    return $entity;
+    return $this->entity;
   }
 
 }
diff --git a/core/modules/views/views_ui/lib/Drupal/views_ui/ViewEditFormController.php b/core/modules/views/views_ui/lib/Drupal/views_ui/ViewEditFormController.php
index 80d1b7c..5e31eef 100644
--- a/core/modules/views/views_ui/lib/Drupal/views_ui/ViewEditFormController.php
+++ b/core/modules/views/views_ui/lib/Drupal/views_ui/ViewEditFormController.php
@@ -10,7 +10,6 @@
 use Drupal\Core\Ajax\AjaxResponse;
 use Drupal\Core\Ajax\HtmlCommand;
 use Drupal\Core\Ajax\ReplaceCommand;
-use Drupal\Core\Entity\EntityInterface;
 use Drupal\Component\Utility\NestedArray;
 use Drupal\views\ViewExecutable;
 
@@ -19,24 +18,16 @@
  */
 class ViewEditFormController extends ViewFormControllerBase {
 
-  /**
-   * Overrides Drupal\Core\Entity\EntityFormController::getEntity().
-   */
-  public function getEntity(array $form_state) {
-    return isset($form_state['view']) ? $form_state['view'] : NULL;
-  }
-
-  /**
-   * Overrides Drupal\Core\Entity\EntityFormController::setEntity().
-   */
-  public function setEntity(EntityInterface $entity, array &$form_state) {
-    $form_state['view'] = $entity;
+  protected function init(array &$form_state) {
+    parent::init($form_state);
+    $form_state['view'] = $this->entity;
   }
 
   /**
    * Overrides Drupal\Core\Entity\EntityFormController::form().
    */
-  public function form(array $form, array &$form_state, EntityInterface $view) {
+  public function form(array $form, array &$form_state) {
+    $view = $this->entity;
     $display_id = $this->displayID;
     // Do not allow the form to be cached, because $form_state['view'] can become
     // stale between page requests.
@@ -209,8 +200,7 @@ protected function actions(array $form, array &$form_state) {
   public function validate(array $form, array &$form_state) {
     parent::validate($form, $form_state);
 
-    $view = $this->getEntity($form_state);
-    $errors = $view->get('executable')->validate();
+    $errors = $this->entity->get('executable')->validate();
     if ($errors !== TRUE) {
       foreach ($errors as $error) {
         form_set_error('', $error);
@@ -224,7 +214,7 @@ public function validate(array $form, array &$form_state) {
   public function submit(array $form, array &$form_state) {
     parent::submit($form, $form_state);
 
-    $view = $this->getEntity($form_state);
+    $view = $this->entity;
     // Go through and remove displayed scheduled for removal.
     $displays = $view->get('display');
     foreach ($displays as $id => $display) {
@@ -291,7 +281,7 @@ public function submit(array $form, array &$form_state) {
    */
   public function cancel(array $form, array &$form_state) {
     // Remove this view from cache so edits will be lost.
-    $view = $this->getEntity($form_state);
+    $view = $this->entity;
     drupal_container()->get('user.tempstore')->get('views')->delete($view->id());
     $form_state['redirect'] = 'admin/structure/views';
   }
@@ -302,7 +292,7 @@ public function cancel(array $form, array &$form_state) {
   protected function actionsElement(array $form, array &$form_state) {
     $element = parent::actionsElement($form, $form_state);
     $element['#weight'] = 0;
-    $view = $this->getEntity($form_state);
+    $view = $this->entity;
     if (empty($view->changed)) {
       $element['#attributes'] = array(
         'class' => array(
@@ -545,7 +535,7 @@ public function getDisplayDetails($view, $display) {
    * Submit handler to add a restore a removed display to a view.
    */
   public function submitDisplayUndoDelete($form, &$form_state) {
-    $view = $this->getEntity($form_state);
+    $view = $this->entity;
     // Create the new display
     $id = $form_state['display_id'];
     $displays = $view->get('display');
@@ -563,7 +553,7 @@ public function submitDisplayUndoDelete($form, &$form_state) {
    * Submit handler to enable a disabled display.
    */
   public function submitDisplayEnable($form, &$form_state) {
-    $view = $this->getEntity($form_state);
+    $view = $this->entity;
     $id = $form_state['display_id'];
     // setOption doesn't work because this would might affect upper displays
     $view->get('executable')->displayHandlers->get($id)->setOption('enabled', TRUE);
@@ -579,7 +569,7 @@ public function submitDisplayEnable($form, &$form_state) {
    * Submit handler to disable display.
    */
   public function submitDisplayDisable($form, &$form_state) {
-    $view = $this->getEntity($form_state);
+    $view = $this->entity;
     $id = $form_state['display_id'];
     $view->get('executable')->displayHandlers->get($id)->setOption('enabled', FALSE);
 
@@ -594,7 +584,7 @@ public function submitDisplayDisable($form, &$form_state) {
    * Submit handler to delete a display from a view.
    */
   public function submitDisplayDelete($form, &$form_state) {
-    $view = $this->getEntity($form_state);
+    $view = $this->entity;
     $display_id = $form_state['display_id'];
 
     // Mark the display for deletion.
@@ -754,7 +744,7 @@ public function submitDelayDestination($form, &$form_state) {
    * Submit handler to duplicate a display for a view.
    */
   public function submitDisplayDuplicate($form, &$form_state) {
-    $view = $this->getEntity($form_state);
+    $view = $this->entity;
     $display_id = $this->displayID;
 
     // Create the new display.
@@ -777,7 +767,7 @@ public function submitDisplayDuplicate($form, &$form_state) {
    * Submit handler to add a display to a view.
    */
   public function submitDisplayAdd($form, &$form_state) {
-    $view = $this->getEntity($form_state);
+    $view = $this->entity;
     // Create the new display.
     $parents = $form_state['triggering_element']['#parents'];
     $display_type = array_pop($parents);
@@ -795,7 +785,7 @@ public function submitDisplayAdd($form, &$form_state) {
    * Submit handler to clone a display as another display type.
    */
   public function submitCloneDisplayAsType($form, &$form_state) {
-    $view = $this->getEntity($form_state);
+    $view = $this->entity;
     $display_id = $this->displayID;
 
     // Create the new display.
diff --git a/core/modules/views/views_ui/lib/Drupal/views_ui/ViewFormControllerBase.php b/core/modules/views/views_ui/lib/Drupal/views_ui/ViewFormControllerBase.php
index f05f0de..897e15c 100644
--- a/core/modules/views/views_ui/lib/Drupal/views_ui/ViewFormControllerBase.php
+++ b/core/modules/views/views_ui/lib/Drupal/views_ui/ViewFormControllerBase.php
@@ -8,7 +8,6 @@
 namespace Drupal\views_ui;
 
 use Drupal\Core\Entity\EntityFormController;
-use Drupal\Core\Entity\EntityInterface;
 use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
 use Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException;
 
@@ -25,9 +24,9 @@
   protected $displayID;
 
   /**
-   * Overrides \Drupal\Core\Entity\EntityFormController::build().
+   * Overrides \Drupal\Core\Entity\EntityFormController::buildForm().
    */
-  public function build(array $form, array &$form_state, EntityInterface $entity) {
+  public function buildForm(array $form, array &$form_state) {
     if (isset($form_state['display_id'])) {
       $this->displayID = $form_state['display_id'];
     }
@@ -35,15 +34,15 @@ public function build(array $form, array &$form_state, EntityInterface $entity)
     // @todo Remove the need for this.
     form_load_include($form_state, 'inc', 'views_ui', 'admin');
 
-    return parent::build($form, $form_state, $entity);
+    return parent::buildForm($form, $form_state);
   }
 
   /**
    * Overrides Drupal\Core\Entity\EntityFormController::prepareForm().
    */
-  protected function prepareEntity(EntityInterface $view) {
+  protected function prepareEntity() {
     // Determine the displays available for editing.
-    if ($tabs = $this->getDisplayTabs($view)) {
+    if ($tabs = $this->getDisplayTabs($this->entity)) {
       // If a display isn't specified, use the first one.
       if (empty($this->displayID)) {
         foreach ($tabs as $id => $tab) {
diff --git a/core/modules/views/views_ui/lib/Drupal/views_ui/ViewPreviewFormController.php b/core/modules/views/views_ui/lib/Drupal/views_ui/ViewPreviewFormController.php
index 449735f..331f959 100644
--- a/core/modules/views/views_ui/lib/Drupal/views_ui/ViewPreviewFormController.php
+++ b/core/modules/views/views_ui/lib/Drupal/views_ui/ViewPreviewFormController.php
@@ -7,8 +7,6 @@
 
 namespace Drupal\views_ui;
 
-use Drupal\Core\Entity\EntityInterface;
-
 /**
  * Form controller for the Views preview form.
  */
@@ -17,7 +15,8 @@ class ViewPreviewFormController extends ViewFormControllerBase {
   /**
    * Overrides Drupal\Core\Entity\EntityFormController::form().
    */
-  public function form(array $form, array &$form_state, EntityInterface $view) {
+  public function form(array $form, array &$form_state) {
+    $view = $this->entity;
     $form['#prefix'] = '<div id="views-preview-wrapper" class="views-admin clearfix">';
     $form['#suffix'] = '</div>';
     $form['#id'] = 'views-ui-preview-form';
@@ -70,7 +69,7 @@ public function form(array $form, array &$form_state, EntityInterface $view) {
    * Overrides Drupal\Core\Entity\EntityFormController::actions().
    */
   protected function actions(array $form, array &$form_state) {
-    $view = $this->getEntity($form_state);
+    $view = $this->entity;
     return array(
       '#attributes' => array(
         'id' => 'preview-submit-wrapper',
@@ -97,7 +96,7 @@ protected function actions(array $form, array &$form_state) {
    */
   public function submitPreview($form, &$form_state) {
     // Rebuild the form with a pristine $view object.
-    $view = $this->getEntity($form_state);
+    $view = $this->entity;
     $form_state['build_info']['args'][0] = drupal_container()->get('views_ui.controller')->getViewUI($view);
     $view->renderPreview = TRUE;
     $form_state['show_preview'] = TRUE;
diff --git a/core/themes/seven/template.php b/core/themes/seven/template.php
index 147e557..e20459f 100644
--- a/core/themes/seven/template.php
+++ b/core/themes/seven/template.php
@@ -141,7 +141,7 @@ function seven_preprocess_install_page(&$variables) {
  * Changes vertical tabs to container and adds meta information.
  */
 function seven_form_node_form_alter(&$form, &$form_state) {
-  $node = $form_state['controller']->getEntity($form_state);
+  $node = $form_state['controller']->getEntity();
 
   $form['#theme'] = array('node_edit_form');
   $form['#attached'] = array(
