diff --git a/core/includes/entity.inc b/core/includes/entity.inc
index 743cc4a..6c870a2 100644
--- a/core/includes/entity.inc
+++ b/core/includes/entity.inc
@@ -402,34 +402,6 @@ function entity_access_controller($entity_type) {
 }
 
 /**
- * Returns an entity form controller for the given operation.
- *
- * Since there might be different scenarios in which an entity is edited,
- * multiple form controllers suitable to the different operations may be defined.
- * If no controller is found for the default operation, the base class will be
- * used. If a non-existing non-default operation is specified an exception will
- * be thrown.
- *
- * @see \Drupal\Core\Entity\EntityManager
- *
- * @param $entity_type
- *   The type of the entity.
- * @param $operation
- *   (optional) The name of an operation, such as creation, editing or deletion,
- *   identifying the controlled form. Defaults to 'default' which is the usual
- *   create/edit form.
- *
- * @return Drupal\Core\Entity\EntityFormControllerInterface
- *   An entity form controller instance.
- *
- * @deprecated Use \Drupal\Core\Entity\EntityManager::getFormController().
- */
-function entity_form_controller($entity_type, $operation = 'default') {
-  return Drupal::entityManager()
-    ->getFormController($entity_type, $operation);
-}
-
-/**
  * Returns the default form state for the given entity and operation.
  *
  * @param EntityInterface $entity
@@ -440,7 +412,7 @@ function entity_form_controller($entity_type, $operation = 'default') {
  * @return
  *   A $form_state array already filled the entity form controller.
  */
-function entity_form_state_defaults(EntityInterface $entity, $operation = 'default') {
+function entity_form_state_defaults(EntityInterface $entity, $operation) {
   $form_state = array();
   $controller = Drupal::entityManager()->getFormController($entity->entityType(), $operation);
   $controller->setEntity($entity);
@@ -463,7 +435,7 @@ function entity_form_state_defaults(EntityInterface $entity, $operation = 'defau
  * @return
  *   A $form_state array already filled with the entity form controller.
  */
-function entity_form_submit(EntityInterface $entity, $operation = 'default', &$form_state = array()) {
+function entity_form_submit(EntityInterface $entity, $operation, &$form_state = array()) {
   $form_state += entity_form_state_defaults($entity, $operation);
   $form_id = $form_state['build_info']['callback_object']->getFormID();
   drupal_form_submit($form_id, $form_state);
@@ -475,13 +447,13 @@ function entity_form_submit(EntityInterface $entity, $operation = 'default', &$f
  * @param EntityInterface $entity
  *   The entity to be created or edited.
  * @param $operation
- *   (optional) The operation identifying the form variation to be returned.
+ *   The operation identifying the form variation to be returned.
  * @param array $form_state
  *   (optional) An associative array containing the current state of the form.
  *   Use this to pass additional information to the form, such as the langcode.
  *   @code
  *   $form_state['langcode'] = $langcode;
- *   $form = entity_get_form($entity, 'default', $form_state);
+ *   $form = entity_get_form($entity, $operation, $form_state);
  *   @endcode
  *
  * @return
@@ -490,7 +462,7 @@ function entity_form_submit(EntityInterface $entity, $operation = 'default', &$f
  * @deprecated Use Drupal::entityManager()->getForm() or _entity_form from a
  *   routing.yml file instead of a page callback.
  */
-function entity_get_form(EntityInterface $entity, $operation = 'default', array $form_state = array()) {
+function entity_get_form(EntityInterface $entity, $operation, array $form_state = array()) {
   return Drupal::entityManager()->getForm($entity, $operation, $form_state);
 }
 
diff --git a/core/lib/Drupal/Core/Entity/HtmlEntityFormController.php b/core/lib/Drupal/Core/Entity/HtmlEntityFormController.php
index 8f62a40..cab9e68 100644
--- a/core/lib/Drupal/Core/Entity/HtmlEntityFormController.php
+++ b/core/lib/Drupal/Core/Entity/HtmlEntityFormController.php
@@ -37,19 +37,10 @@ public function content(Request $request, $_entity_form) {
    *     _entity_form: 'node.edit'
    * @endcode
    * This means that the edit form controller for the node entity will used.
-   * If the entity type has a default form controller, only the name of the
-   * entity {param} needs to be passed:
-   * @code
-   *   pattern: '/foo/{node}/baz'
-   *   defaults:
-   *     _entity_form: 'node'
-   * @endcode
    */
   protected function getFormObject(Request $request, $form_arg) {
     $manager = $this->container->get('plugin.manager.entity');
 
-    // If no operation is provided, use 'default'.
-    $form_arg .= '.default';
     list ($entity_type, $operation) = explode('.', $form_arg);
 
     if ($request->attributes->has($entity_type)) {
diff --git a/core/modules/aggregator/aggregator.module b/core/modules/aggregator/aggregator.module
index d2c07af..3fb52e0 100644
--- a/core/modules/aggregator/aggregator.module
+++ b/core/modules/aggregator/aggregator.module
@@ -213,7 +213,7 @@ function aggregator_menu() {
   $items['aggregator/sources/%aggregator_feed/configure'] = array(
     'title' => 'Configure',
     'page callback' => 'entity_get_form',
-    'page arguments' => array(2),
+    'page arguments' => array(2, 'add'),
     'access arguments' => array('administer news feeds'),
     'type' => MENU_LOCAL_TASK,
     'weight' => 10,
@@ -222,7 +222,7 @@ function aggregator_menu() {
   $items['admin/config/services/aggregator/edit/feed/%aggregator_feed'] = array(
     'title' => 'Edit feed',
     'page callback' => 'entity_get_form',
-    'page arguments' => array(6),
+    'page arguments' => array(6, 'edit'),
     'access arguments' => array('administer news feeds'),
     'file' => 'aggregator.admin.inc',
   );
diff --git a/core/modules/aggregator/lib/Drupal/aggregator/Controller/AggregatorController.php b/core/modules/aggregator/lib/Drupal/aggregator/Controller/AggregatorController.php
index eac277c..9620f41 100644
--- a/core/modules/aggregator/lib/Drupal/aggregator/Controller/AggregatorController.php
+++ b/core/modules/aggregator/lib/Drupal/aggregator/Controller/AggregatorController.php
@@ -97,7 +97,7 @@ public function feedAdd() {
         'refresh' => 3600,
         'block' => 5,
       ));
-    return $this->entityManager->getForm($feed);
+    return $this->entityManager->getForm($feed, 'add');
   }
 
   /**
diff --git a/core/modules/aggregator/lib/Drupal/aggregator/Plugin/Core/Entity/Feed.php b/core/modules/aggregator/lib/Drupal/aggregator/Plugin/Core/Entity/Feed.php
index 73c015d..7b9ca5c 100644
--- a/core/modules/aggregator/lib/Drupal/aggregator/Plugin/Core/Entity/Feed.php
+++ b/core/modules/aggregator/lib/Drupal/aggregator/Plugin/Core/Entity/Feed.php
@@ -25,7 +25,8 @@
  *     "storage" = "Drupal\aggregator\FeedStorageController",
  *     "render" = "Drupal\aggregator\FeedRenderController",
  *     "form" = {
- *       "default" = "Drupal\aggregator\FeedFormController",
+ *       "add" = "Drupal\aggregator\FeedFormController",
+ *       "edit" = "Drupal\aggregator\FeedFormController",
  *       "delete" = "Drupal\aggregator\Form\FeedDeleteForm",
  *       "remove_items" = "Drupal\aggregator\Form\FeedItemsRemoveForm"
  *     }
diff --git a/core/modules/block/block.admin.inc b/core/modules/block/block.admin.inc
index af99b1a..fdddc15 100644
--- a/core/modules/block/block.admin.inc
+++ b/core/modules/block/block.admin.inc
@@ -37,7 +37,7 @@ function block_admin_add($plugin_id, $theme) {
     'plugin' => $plugin_id,
     'theme' => $theme,
   ));
-  return Drupal::entityManager()->getForm($entity);
+  return Drupal::entityManager()->getForm($entity, 'add');
 }
 
 /**
@@ -67,5 +67,5 @@ function block_admin_edit(Block $entity) {
   // Get the block label for the page title.
   drupal_set_title(t("Configure %label block in %theme", array('%label' => $entity->label(), '%theme' => $theme_title)), PASS_THROUGH);
 
-  return Drupal::entityManager()->getForm($entity);
+  return Drupal::entityManager()->getForm($entity, 'edit');
 }
diff --git a/core/modules/block/custom_block/custom_block.admin.inc b/core/modules/block/custom_block/custom_block.admin.inc
index 8cb5c8c..7e01f11 100644
--- a/core/modules/block/custom_block/custom_block.admin.inc
+++ b/core/modules/block/custom_block/custom_block.admin.inc
@@ -17,7 +17,7 @@
  */
 function custom_block_type_add() {
   $block_type = entity_create('custom_block_type', array());
-  return Drupal::entityManager()->getForm($block_type);
+  return Drupal::entityManager()->getForm($block_type, 'add');
 }
 
 /**
@@ -32,5 +32,5 @@ function custom_block_type_add() {
  * @see custom_block_menu()
  */
 function custom_block_type_edit(CustomBlockType $block_type) {
-  return Drupal::entityManager()->getForm($block_type);
+  return Drupal::entityManager()->getForm($block_type, 'edit');
 }
diff --git a/core/modules/block/custom_block/custom_block.pages.inc b/core/modules/block/custom_block/custom_block.pages.inc
index f6c4076..ed04eda 100644
--- a/core/modules/block/custom_block/custom_block.pages.inc
+++ b/core/modules/block/custom_block/custom_block.pages.inc
@@ -42,7 +42,7 @@ function template_preprocess_custom_block_add_list(&$variables) {
  */
 function custom_block_edit(CustomBlock $block) {
   drupal_set_title(t('Edit custom block %label', array('%label' => $block->label())), PASS_THROUGH);
-  return Drupal::entityManager()->getForm($block);
+  return Drupal::entityManager()->getForm($block, 'edit');
 }
 
 /**
diff --git a/core/modules/block/custom_block/lib/Drupal/custom_block/Controller/CustomBlockController.php b/core/modules/block/custom_block/lib/Drupal/custom_block/Controller/CustomBlockController.php
index 4f139f3..b1724ed 100644
--- a/core/modules/block/custom_block/lib/Drupal/custom_block/Controller/CustomBlockController.php
+++ b/core/modules/block/custom_block/lib/Drupal/custom_block/Controller/CustomBlockController.php
@@ -68,16 +68,19 @@ public function __construct(PluginManagerInterface $entity_manager, EntityStorag
   /**
    * Displays add custom block links for available types.
    *
+   * @param \Symfony\Component\HttpFoundation\Request $request
+   *   The current request object.
+   *
    * @return array
    *   A render array for a list of the custom block types that can be added or
    *   if there is only one custom block type defined for the site, the function
    *   returns the custom block add page for that custom block type.
    */
-  public function add() {
+  public function add(Request $request) {
     $types = $this->customBlockTypeStorage->load();
     if ($types && count($types) == 1) {
       $type = reset($types);
-      return $this->addForm($type);
+      return $this->addForm($type, $request);
     }
 
     return array('#theme' => 'custom_block_add_list', '#content' => $types);
@@ -108,7 +111,7 @@ public function addForm(CustomBlockTypeInterface $custom_block_type, Request $re
       // newly created block in the given theme.
       $block->setTheme($theme);
     }
-    return $this->entityManager->getForm($block);
+    return $this->entityManager->getForm($block, 'add');
   }
 
 }
diff --git a/core/modules/block/custom_block/lib/Drupal/custom_block/Plugin/Core/Entity/CustomBlock.php b/core/modules/block/custom_block/lib/Drupal/custom_block/Plugin/Core/Entity/CustomBlock.php
index 74dfc25..9e11250 100644
--- a/core/modules/block/custom_block/lib/Drupal/custom_block/Plugin/Core/Entity/CustomBlock.php
+++ b/core/modules/block/custom_block/lib/Drupal/custom_block/Plugin/Core/Entity/CustomBlock.php
@@ -26,7 +26,8 @@
  *     "access" = "Drupal\custom_block\CustomBlockAccessController",
  *     "render" = "Drupal\custom_block\CustomBlockRenderController",
  *     "form" = {
- *       "default" = "Drupal\custom_block\CustomBlockFormController"
+ *       "add" = "Drupal\custom_block\CustomBlockFormController",
+ *       "edit" = "Drupal\custom_block\CustomBlockFormController"
  *     },
  *     "translation" = "Drupal\custom_block\CustomBlockTranslationController"
  *   },
diff --git a/core/modules/block/custom_block/lib/Drupal/custom_block/Plugin/Core/Entity/CustomBlockType.php b/core/modules/block/custom_block/lib/Drupal/custom_block/Plugin/Core/Entity/CustomBlockType.php
index 4d5f33b..b5cd280 100644
--- a/core/modules/block/custom_block/lib/Drupal/custom_block/Plugin/Core/Entity/CustomBlockType.php
+++ b/core/modules/block/custom_block/lib/Drupal/custom_block/Plugin/Core/Entity/CustomBlockType.php
@@ -23,7 +23,8 @@
  *   controllers = {
  *     "storage" = "Drupal\Core\Config\Entity\ConfigStorageController",
  *     "form" = {
- *       "default" = "Drupal\custom_block\CustomBlockTypeFormController",
+ *       "add" = "Drupal\custom_block\CustomBlockTypeFormController",
+ *       "edit" = "Drupal\custom_block\CustomBlockTypeFormController",
  *       "delete" = "Drupal\custom_block\Form\CustomBlockTypeDeleteForm"
  *     },
  *     "list" = "Drupal\custom_block\CustomBlockTypeListController"
diff --git a/core/modules/block/lib/Drupal/block/Plugin/Core/Entity/Block.php b/core/modules/block/lib/Drupal/block/Plugin/Core/Entity/Block.php
index 1d3cca8..76cb2d6 100644
--- a/core/modules/block/lib/Drupal/block/Plugin/Core/Entity/Block.php
+++ b/core/modules/block/lib/Drupal/block/Plugin/Core/Entity/Block.php
@@ -27,7 +27,8 @@
  *     "render" = "Drupal\block\BlockRenderController",
  *     "list" = "Drupal\block\BlockListController",
  *     "form" = {
- *       "default" = "Drupal\block\BlockFormController",
+ *       "add" = "Drupal\block\BlockFormController",
+ *       "edit" = "Drupal\block\BlockFormController",
  *       "delete" = "Drupal\block\Form\BlockDeleteForm"
  *     }
  *   },
diff --git a/core/modules/comment/comment.module b/core/modules/comment/comment.module
index 2466ce7..e61616c 100644
--- a/core/modules/comment/comment.module
+++ b/core/modules/comment/comment.module
@@ -729,7 +729,7 @@ function comment_node_page_additions(EntityInterface $node) {
 function comment_add(EntityInterface $node, $pid = NULL) {
   $values = array('nid' => $node->nid, 'pid' => $pid, 'node_type' => 'comment_node_' . $node->type);
   $comment = entity_create('comment', $values);
-  return Drupal::entityManager()->getForm($comment);
+  return Drupal::entityManager()->getForm($comment, 'add');
 }
 
 /**
diff --git a/core/modules/comment/comment.routing.yml b/core/modules/comment/comment.routing.yml
index 6f786dd..1db07dc 100644
--- a/core/modules/comment/comment.routing.yml
+++ b/core/modules/comment/comment.routing.yml
@@ -1,7 +1,7 @@
 comment_edit_page:
     pattern: 'comment/{comment}/edit'
     defaults:
-        _entity_form: comment.default
+        _entity_form: 'comment.edit'
     requirements:
         _entity_access: comment.update
 
diff --git a/core/modules/comment/lib/Drupal/comment/Plugin/Core/Entity/Comment.php b/core/modules/comment/lib/Drupal/comment/Plugin/Core/Entity/Comment.php
index 700b629..61b7269 100644
--- a/core/modules/comment/lib/Drupal/comment/Plugin/Core/Entity/Comment.php
+++ b/core/modules/comment/lib/Drupal/comment/Plugin/Core/Entity/Comment.php
@@ -27,7 +27,8 @@
  *     "access" = "Drupal\comment\CommentAccessController",
  *     "render" = "Drupal\comment\CommentRenderController",
  *     "form" = {
- *       "default" = "Drupal\comment\CommentFormController"
+ *       "add" = "Drupal\comment\CommentFormController",
+ *       "edit" = "Drupal\comment\CommentFormController"
  *     },
  *     "translation" = "Drupal\comment\CommentTranslationController"
  *   },
diff --git a/core/modules/config/tests/config_test/config_test.routing.yml b/core/modules/config/tests/config_test/config_test.routing.yml
index c26a438..18ab7db 100644
--- a/core/modules/config/tests/config_test/config_test.routing.yml
+++ b/core/modules/config/tests/config_test/config_test.routing.yml
@@ -8,23 +8,14 @@ config_test_list_page:
 config_test_entity_add:
   pattern: 'admin/structure/config_test/add'
   defaults:
-    _entity_form: 'config_test'
-  requirements:
-    _access: 'TRUE'
-
-config_test_entity:
-  pattern: 'admin/structure/config_test/manage/{config_test}'
-  defaults:
-    _controller: '\Drupal\config_test\ConfigTestController::edit'
-    entity_type: 'config_test'
+    _entity_form: 'config_test.add'
   requirements:
     _access: 'TRUE'
 
 config_test_entity_edit:
-  pattern: 'admin/structure/config_test/manage/{config_test}/edit'
+  pattern: 'admin/structure/config_test/manage/{config_test}'
   defaults:
-    _controller: '\Drupal\config_test\ConfigTestController::edit'
-    entity_type: 'config_test'
+    _entity_form: 'config_test.edit'
   requirements:
     _access: 'TRUE'
 
diff --git a/core/modules/config/tests/config_test/lib/Drupal/config_test/ConfigTestController.php b/core/modules/config/tests/config_test/lib/Drupal/config_test/ConfigTestController.php
index 0888dba..60bb12b 100644
--- a/core/modules/config/tests/config_test/lib/Drupal/config_test/ConfigTestController.php
+++ b/core/modules/config/tests/config_test/lib/Drupal/config_test/ConfigTestController.php
@@ -7,9 +7,6 @@
 
 namespace Drupal\config_test;
 
-use Drupal\config_test\Plugin\Core\Entity\ConfigTest;
-use Drupal\Component\Utility\String;
-use Symfony\Component\DependencyInjection\ContainerInterface;
 use Symfony\Component\HttpFoundation\RedirectResponse;
 
 /**
@@ -18,29 +15,15 @@
 class ConfigTestController {
 
   /**
-   * Presents the ConfigTest edit form.
-   *
-   * @param \Drupal\config_test\Plugin\Core\Entity\ConfigTest $config_test
-   *   The ConfigTest object to edit.
-   *
-   * @return array
-   *   A form array as expected by drupal_render().
-   */
-  public function edit(ConfigTest $config_test) {
-    drupal_set_title(String::format('Edit %label', array('%label' => $config_test->label())), PASS_THROUGH);
-    return \Drupal::entityManager()->getForm($config_test);
-  }
-
-  /**
    * Enables a ConfigTest object.
    *
-   * @param \Drupal\config_test\ConfigTest $config_test
+   * @param \Drupal\config_test\ConfigTestInterface $config_test
    *   The ConfigTest object to enable.
    *
    * @return \Symfony\Component\HttpFoundation\RedirectResponse
    *   A redirect response to the config_test listing page.
    */
-  function enable(ConfigTest $config_test) {
+  function enable(ConfigTestInterface $config_test) {
     $config_test->enable()->save();
     return new RedirectResponse(url('admin/structure/config_test', array('absolute' => TRUE)));
   }
@@ -48,13 +31,13 @@ function enable(ConfigTest $config_test) {
   /**
    * Disables a ConfigTest object.
    *
-   * @param \Drupal\config_test\ConfigTest $config_test
+   * @param \Drupal\config_test\ConfigTestInterface $config_test
    *   The ConfigTest object to disable.
    *
    * @return \Symfony\Component\HttpFoundation\RedirectResponse
    *   A redirect response to the config_test listing page.
    */
-  function disable(ConfigTest $config_test) {
+  function disable(ConfigTestInterface $config_test) {
     $config_test->disable()->save();
     return new RedirectResponse(url('admin/structure/config_test', array('absolute' => TRUE)));
   }
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 119774b..414d213 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,6 +7,7 @@
 
 namespace Drupal\config_test;
 
+use Drupal\Component\Utility\String;
 use Drupal\Core\Entity\EntityFormController;
 
 /**
@@ -20,6 +21,10 @@ class ConfigTestFormController extends EntityFormController {
   public function form(array $form, array &$form_state) {
     $form = parent::form($form, $form_state);
 
+    if ($this->operation == 'edit') {
+      drupal_set_title(String::format('Edit %label', array('%label' => $this->entity->label())), PASS_THROUGH);
+    }
+
     $entity = $this->entity;
     $form['label'] = array(
       '#type' => 'textfield',
diff --git a/core/modules/config/tests/config_test/lib/Drupal/config_test/Plugin/Core/Entity/ConfigQueryTest.php b/core/modules/config/tests/config_test/lib/Drupal/config_test/Plugin/Core/Entity/ConfigQueryTest.php
index b62538e..f8ae5bd 100644
--- a/core/modules/config/tests/config_test/lib/Drupal/config_test/Plugin/Core/Entity/ConfigQueryTest.php
+++ b/core/modules/config/tests/config_test/lib/Drupal/config_test/Plugin/Core/Entity/ConfigQueryTest.php
@@ -21,7 +21,8 @@
  *     "storage" = "Drupal\config_test\ConfigTestStorageController",
  *     "list" = "Drupal\Core\Config\Entity\ConfigEntityListController",
  *     "form" = {
- *       "default" = "Drupal\config_test\ConfigTestFormController"
+ *       "add" = "Drupal\config_test\ConfigTestFormController",
+ *       "edit" = "Drupal\config_test\ConfigTestFormController"
  *     }
  *   },
  *   uri_callback = "config_test_uri",
diff --git a/core/modules/config/tests/config_test/lib/Drupal/config_test/Plugin/Core/Entity/ConfigTest.php b/core/modules/config/tests/config_test/lib/Drupal/config_test/Plugin/Core/Entity/ConfigTest.php
index 12a033b..65e12a8 100644
--- a/core/modules/config/tests/config_test/lib/Drupal/config_test/Plugin/Core/Entity/ConfigTest.php
+++ b/core/modules/config/tests/config_test/lib/Drupal/config_test/Plugin/Core/Entity/ConfigTest.php
@@ -23,7 +23,8 @@
  *     "storage" = "Drupal\config_test\ConfigTestStorageController",
  *     "list" = "Drupal\Core\Config\Entity\ConfigEntityListController",
  *     "form" = {
- *       "default" = "Drupal\config_test\ConfigTestFormController",
+ *       "add" = "Drupal\config_test\ConfigTestFormController",
+ *       "edit" = "Drupal\config_test\ConfigTestFormController",
  *       "delete" = "Drupal\config_test\Form\ConfigTestDeleteForm"
  *     }
  *   },
diff --git a/core/modules/contact/contact.pages.inc b/core/modules/contact/contact.pages.inc
index 52afd28..f9534d3 100644
--- a/core/modules/contact/contact.pages.inc
+++ b/core/modules/contact/contact.pages.inc
@@ -51,7 +51,7 @@ function contact_site_page(Category $category = NULL) {
   $message = entity_create('contact_message', array(
     'category' => $category->id(),
   ));
-  return Drupal::entityManager()->getForm($message);
+  return Drupal::entityManager()->getForm($message, 'add');
 }
 
 /**
@@ -81,7 +81,7 @@ function contact_personal_page($recipient) {
     'recipient' => $recipient,
     'category' => 'personal',
   ));
-  return Drupal::entityManager()->getForm($message);
+  return Drupal::entityManager()->getForm($message, 'add');
 }
 
 /**
diff --git a/core/modules/contact/contact.routing.yml b/core/modules/contact/contact.routing.yml
index ba47a6a..66583a1 100644
--- a/core/modules/contact/contact.routing.yml
+++ b/core/modules/contact/contact.routing.yml
@@ -15,13 +15,13 @@ contact_category_list:
 contact_category_add:
   pattern: '/admin/structure/contact/add'
   defaults:
-    _entity_form: contact_category.add
+    _entity_form: 'contact_category.add'
   requirements:
     _permission: 'administer contact forms'
 
 contact_category_edit:
   pattern: '/admin/structure/contact/manage/{contact_category}'
   defaults:
-    _entity_form: contact_category.edit
+    _entity_form: 'contact_category.edit'
   requirements:
     _entity_access: contact_category.update
diff --git a/core/modules/contact/lib/Drupal/contact/Plugin/Core/Entity/Message.php b/core/modules/contact/lib/Drupal/contact/Plugin/Core/Entity/Message.php
index a7ae2b3..9d0c5b7 100644
--- a/core/modules/contact/lib/Drupal/contact/Plugin/Core/Entity/Message.php
+++ b/core/modules/contact/lib/Drupal/contact/Plugin/Core/Entity/Message.php
@@ -23,7 +23,7 @@
  *     "storage" = "Drupal\contact\MessageStorageController",
  *     "render" = "Drupal\contact\MessageRenderController",
  *     "form" = {
- *       "default" = "Drupal\contact\MessageFormController"
+ *       "add" = "Drupal\contact\MessageFormController"
  *     }
  *   },
  *   entity_keys = {
diff --git a/core/modules/content_translation/content_translation.pages.inc b/core/modules/content_translation/content_translation.pages.inc
index 2940585..4b110d5 100644
--- a/core/modules/content_translation/content_translation.pages.inc
+++ b/core/modules/content_translation/content_translation.pages.inc
@@ -196,7 +196,7 @@ function content_translation_add_page(EntityInterface $entity, Language $source
   // @todo Exploit the upcoming hook_entity_prepare() when available.
   content_translation_prepare_translation($entity, $source, $target);
   $info = $entity->entityInfo();
-  $operation = isset($info['default_operation']) ? $info['default_operation'] : 'default';
+  $operation = isset($info['default_operation']) ? $info['default_operation'] : 'add';
   $form_state['langcode'] = $target->langcode;
   $form_state['content_translation']['source'] = $source;
   $form_state['content_translation']['target'] = $target;
@@ -220,7 +220,7 @@ function content_translation_add_page(EntityInterface $entity, Language $source
 function content_translation_edit_page(EntityInterface $entity, Language $language = NULL) {
   $language = !empty($language) ? $language : language(Language::TYPE_CONTENT);
   $info = $entity->entityInfo();
-  $operation = isset($info['default_operation']) ? $info['default_operation'] : 'default';
+  $operation = isset($info['default_operation']) ? $info['default_operation'] : 'edit';
   $form_state['langcode'] = $language->langcode;
   $form_state['content_translation']['translation_form'] = TRUE;
   return Drupal::entityManager()->getForm($entity, $operation, $form_state);
diff --git a/core/modules/field/tests/modules/field_test/field_test.entity.inc b/core/modules/field/tests/modules/field_test/field_test.entity.inc
index 7802bda..1d5afe2 100644
--- a/core/modules/field/tests/modules/field_test/field_test.entity.inc
+++ b/core/modules/field/tests/modules/field_test/field_test.entity.inc
@@ -208,7 +208,7 @@ function field_test_entity_add($fttype) {
   $fttype = str_replace('-', '_', $fttype);
   $entity = field_test_create_entity(NULL, NULL, $fttype);
   drupal_set_title(t('Create test_entity @bundle', array('@bundle' => $fttype)), PASS_THROUGH);
-  return Drupal::entityManager()->getForm($entity);
+  return Drupal::entityManager()->getForm($entity, 'add');
 }
 
 /**
@@ -216,7 +216,7 @@ function field_test_entity_add($fttype) {
  */
 function field_test_entity_edit(TestEntity $entity) {
   drupal_set_title(t('test_entity @ftid revision @ftvid', array('@ftid' => $entity->ftid, '@ftvid' => $entity->ftvid)), PASS_THROUGH);
-  return Drupal::entityManager()->getForm($entity);
+  return Drupal::entityManager()->getForm($entity, 'edit');
 }
 
 /**
diff --git a/core/modules/field/tests/modules/field_test/lib/Drupal/field_test/Plugin/Core/Entity/BundleKeyTestEntity.php b/core/modules/field/tests/modules/field_test/lib/Drupal/field_test/Plugin/Core/Entity/BundleKeyTestEntity.php
index d0e715a..d585101 100644
--- a/core/modules/field/tests/modules/field_test/lib/Drupal/field_test/Plugin/Core/Entity/BundleKeyTestEntity.php
+++ b/core/modules/field/tests/modules/field_test/lib/Drupal/field_test/Plugin/Core/Entity/BundleKeyTestEntity.php
@@ -20,7 +20,8 @@
  *   controllers = {
  *     "storage" = "Drupal\Core\Entity\DatabaseStorageController",
  *     "form" = {
- *       "default" = "Drupal\field_test\TestEntityFormController"
+ *       "add" = "Drupal\field_test\TestEntityFormController",
+ *       "edit" = "Drupal\field_test\TestEntityFormController"
  *     }
  *   },
  *   field_cache = FALSE,
diff --git a/core/modules/field/tests/modules/field_test/lib/Drupal/field_test/Plugin/Core/Entity/BundleTestEntity.php b/core/modules/field/tests/modules/field_test/lib/Drupal/field_test/Plugin/Core/Entity/BundleTestEntity.php
index 5ad5777..e37e8ed 100644
--- a/core/modules/field/tests/modules/field_test/lib/Drupal/field_test/Plugin/Core/Entity/BundleTestEntity.php
+++ b/core/modules/field/tests/modules/field_test/lib/Drupal/field_test/Plugin/Core/Entity/BundleTestEntity.php
@@ -20,7 +20,8 @@
  *   controllers = {
  *     "storage" = "Drupal\Core\Entity\DatabaseStorageController",
  *     "form" = {
- *       "default" = "Drupal\field_test\TestEntityFormController"
+ *       "add" = "Drupal\field_test\TestEntityFormController",
+ *       "edit" = "Drupal\field_test\TestEntityFormController"
  *     }
  *   },
  *   field_cache = FALSE,
diff --git a/core/modules/field/tests/modules/field_test/lib/Drupal/field_test/Plugin/Core/Entity/TestEntity.php b/core/modules/field/tests/modules/field_test/lib/Drupal/field_test/Plugin/Core/Entity/TestEntity.php
index 1d8d9d0..1eda794 100644
--- a/core/modules/field/tests/modules/field_test/lib/Drupal/field_test/Plugin/Core/Entity/TestEntity.php
+++ b/core/modules/field/tests/modules/field_test/lib/Drupal/field_test/Plugin/Core/Entity/TestEntity.php
@@ -23,7 +23,8 @@
  *     "storage" = "Drupal\Core\Entity\DatabaseStorageController",
  *     "render" = "Drupal\Core\Entity\EntityRenderController",
  *     "form" = {
- *       "default" = "Drupal\field_test\TestEntityFormController"
+ *       "add" = "Drupal\field_test\TestEntityFormController",
+ *       "edit" = "Drupal\field_test\TestEntityFormController"
  *     }
  *   },
  *   field_cache = FALSE,
diff --git a/core/modules/menu/menu.admin.inc b/core/modules/menu/menu.admin.inc
index 7346712..ddb0386 100644
--- a/core/modules/menu/menu.admin.inc
+++ b/core/modules/menu/menu.admin.inc
@@ -29,7 +29,7 @@ function menu_overview_page() {
  */
 function menu_menu_add() {
   $menu = entity_create('menu', array());
-  return Drupal::entityManager()->getForm($menu);
+  return Drupal::entityManager()->getForm($menu, 'add');
 }
 
 /**
@@ -45,7 +45,7 @@ function menu_menu_add() {
  */
 function menu_menu_edit(Menu $menu) {
   drupal_set_title(t('Edit menu %label', array('%label' => $menu->label())), PASS_THROUGH);
-  return Drupal::entityManager()->getForm($menu);
+  return Drupal::entityManager()->getForm($menu, 'edit');
 }
 
 /**
@@ -387,5 +387,5 @@ function menu_link_add(Menu $menu) {
     'menu_name' => $menu->id(),
   ));
   drupal_set_title(t('Add menu link'));
-  return Drupal::entityManager()->getForm($menu_link);
+  return Drupal::entityManager()->getForm($menu_link, 'add');
 }
diff --git a/core/modules/menu/menu.module b/core/modules/menu/menu.module
index 68c3125..35a8995 100644
--- a/core/modules/menu/menu.module
+++ b/core/modules/menu/menu.module
@@ -127,7 +127,7 @@ function menu_menu() {
   $items['admin/structure/menu/item/%menu_link/edit'] = array(
     'title' => 'Edit menu link',
     'page callback' => 'entity_get_form',
-    'page arguments' => array(4),
+    'page arguments' => array(4, 'edit'),
     'access arguments' => array('administer menu'),
   );
   $items['admin/structure/menu/item/%menu_link/reset'] = array(
@@ -148,7 +148,8 @@ function menu_entity_info(&$entity_info) {
   $entity_info['menu']['controllers']['list'] = 'Drupal\menu\MenuListController';
   $entity_info['menu']['uri_callback'] = 'menu_uri';
   $entity_info['menu']['controllers']['form'] = array(
-    'default' => 'Drupal\menu\MenuFormController',
+    'add' => 'Drupal\menu\MenuFormController',
+    'edit' => 'Drupal\menu\MenuFormController',
     'delete' => 'Drupal\menu\Form\MenuDeleteForm',
   );
 
diff --git a/core/modules/menu_link/lib/Drupal/menu_link/Plugin/Core/Entity/MenuLink.php b/core/modules/menu_link/lib/Drupal/menu_link/Plugin/Core/Entity/MenuLink.php
index c3cd2fe..7905551 100644
--- a/core/modules/menu_link/lib/Drupal/menu_link/Plugin/Core/Entity/MenuLink.php
+++ b/core/modules/menu_link/lib/Drupal/menu_link/Plugin/Core/Entity/MenuLink.php
@@ -30,7 +30,8 @@
  *     "storage" = "Drupal\menu_link\MenuLinkStorageController",
  *     "render" = "Drupal\Core\Entity\EntityRenderController",
  *     "form" = {
- *       "default" = "Drupal\menu_link\MenuLinkFormController"
+ *       "add" = "Drupal\menu_link\MenuLinkFormController",
+ *       "edit" = "Drupal\menu_link\MenuLinkFormController"
  *     }
  *   },
  *   static_cache = FALSE,
diff --git a/core/modules/node/lib/Drupal/node/Plugin/Core/Entity/Node.php b/core/modules/node/lib/Drupal/node/Plugin/Core/Entity/Node.php
index 0791287..a492f4b 100644
--- a/core/modules/node/lib/Drupal/node/Plugin/Core/Entity/Node.php
+++ b/core/modules/node/lib/Drupal/node/Plugin/Core/Entity/Node.php
@@ -27,7 +27,7 @@
  *     "render" = "Drupal\node\NodeRenderController",
  *     "access" = "Drupal\node\NodeAccessController",
  *     "form" = {
- *       "default" = "Drupal\node\NodeFormController",
+ *       "add" = "Drupal\node\NodeFormController",
  *       "edit" = "Drupal\node\NodeFormController"
  *     },
  *     "translation" = "Drupal\node\NodeTranslationController"
diff --git a/core/modules/node/node.pages.inc b/core/modules/node/node.pages.inc
index 155f595..e1c4c2f 100644
--- a/core/modules/node/node.pages.inc
+++ b/core/modules/node/node.pages.inc
@@ -93,7 +93,7 @@ function node_add($node_type) {
     'langcode' => $langcode ? $langcode : language_default()->langcode,
   ))->getBCEntity();
   drupal_set_title(t('Create @name', array('@name' => $node_type->name)), PASS_THROUGH);
-  return Drupal::entityManager()->getForm($node);
+  return Drupal::entityManager()->getForm($node, 'add');
 }
 
 /**
diff --git a/core/modules/options/lib/Drupal/options/Tests/OptionsFieldTest.php b/core/modules/options/lib/Drupal/options/Tests/OptionsFieldTest.php
index 218e413..dfbd98b 100644
--- a/core/modules/options/lib/Drupal/options/Tests/OptionsFieldTest.php
+++ b/core/modules/options/lib/Drupal/options/Tests/OptionsFieldTest.php
@@ -38,7 +38,7 @@ function testUpdateAllowedValues() {
 
     // All three options appear.
     $entity = entity_create('entity_test', array());
-    $form = \Drupal::entityManager()->getForm($entity);
+    $form = \Drupal::entityManager()->getForm($entity, 'add');
     $this->assertTrue(!empty($form[$this->fieldName][$langcode][1]), 'Option 1 exists');
     $this->assertTrue(!empty($form[$this->fieldName][$langcode][2]), 'Option 2 exists');
     $this->assertTrue(!empty($form[$this->fieldName][$langcode][3]), 'Option 3 exists');
@@ -64,7 +64,7 @@ function testUpdateAllowedValues() {
     $this->field->settings['allowed_values'] = array(2 => 'Two');
     $this->field->save();
     $entity = entity_create('entity_test', array());
-    $form = \Drupal::entityManager()->getForm($entity);
+    $form = \Drupal::entityManager()->getForm($entity, 'add');
     $this->assertTrue(empty($form[$this->fieldName][$langcode][1]), 'Option 1 does not exist');
     $this->assertTrue(!empty($form[$this->fieldName][$langcode][2]), 'Option 2 exists');
     $this->assertTrue(empty($form[$this->fieldName][$langcode][3]), 'Option 3 does not exist');
@@ -72,7 +72,7 @@ function testUpdateAllowedValues() {
     // Completely new options appear.
     $this->field['settings']['allowed_values'] = array(10 => 'Update', 20 => 'Twenty');
     $this->field->save();
-    $form = \Drupal::entityManager()->getForm($entity);
+    $form = \Drupal::entityManager()->getForm($entity, 'edit');
     $this->assertTrue(empty($form[$this->fieldName][$langcode][1]), 'Option 1 does not exist');
     $this->assertTrue(empty($form[$this->fieldName][$langcode][2]), 'Option 2 does not exist');
     $this->assertTrue(empty($form[$this->fieldName][$langcode][3]), 'Option 3 does not exist');
@@ -93,7 +93,7 @@ function testUpdateAllowedValues() {
       ))
       ->save();
     $entity = entity_create('entity_test', array());
-    $form = \Drupal::entityManager()->getForm($entity);
+    $form = \Drupal::entityManager()->getForm($entity, 'add');
     $this->assertTrue(!empty($form[$this->fieldName][$langcode][1]), 'Option 1 exists');
     $this->assertTrue(!empty($form[$this->fieldName][$langcode][2]), 'Option 2 exists');
     $this->assertTrue(!empty($form[$this->fieldName][$langcode][3]), 'Option 3 exists');
diff --git a/core/modules/shortcut/lib/Drupal/shortcut/Plugin/Core/Entity/Shortcut.php b/core/modules/shortcut/lib/Drupal/shortcut/Plugin/Core/Entity/Shortcut.php
index 5b3f17a..accf961 100644
--- a/core/modules/shortcut/lib/Drupal/shortcut/Plugin/Core/Entity/Shortcut.php
+++ b/core/modules/shortcut/lib/Drupal/shortcut/Plugin/Core/Entity/Shortcut.php
@@ -25,7 +25,7 @@
  *     "access" = "Drupal\shortcut\ShortcutAccessController",
  *     "list" = "Drupal\shortcut\ShortcutListController",
  *     "form" = {
- *       "default" = "Drupal\shortcut\ShortcutFormController",
+ *       "add" = "Drupal\shortcut\ShortcutFormController",
  *       "edit" = "Drupal\shortcut\ShortcutFormController",
  *       "delete" = "Drupal\shortcut\Form\ShortcutDeleteForm"
  *     }
diff --git a/core/modules/shortcut/shortcut.admin.inc b/core/modules/shortcut/shortcut.admin.inc
index d2d3a60..afc082c 100644
--- a/core/modules/shortcut/shortcut.admin.inc
+++ b/core/modules/shortcut/shortcut.admin.inc
@@ -176,7 +176,7 @@ function shortcut_set_switch_submit($form, &$form_state) {
  */
 function shortcut_set_add() {
   $entity = entity_create('shortcut', array());
-  return Drupal::entityManager()->getForm($entity);
+  return Drupal::entityManager()->getForm($entity, 'add');
 }
 
 /**
diff --git a/core/modules/system/lib/Drupal/system/Tests/Ajax/MultiFormTest.php b/core/modules/system/lib/Drupal/system/Tests/Ajax/MultiFormTest.php
index f15f382..d44e609 100644
--- a/core/modules/system/lib/Drupal/system/Tests/Ajax/MultiFormTest.php
+++ b/core/modules/system/lib/Drupal/system/Tests/Ajax/MultiFormTest.php
@@ -62,8 +62,8 @@ function testMultiForm() {
     // desired elements.
     $field_name = 'field_ajax_test';
     $field_xpaths = array(
-      'page-node-form' => '//form[@id="page-node-form"]//div[contains(@class, "field-name-field-ajax-test")]',
-      'page-node-form--2' => '//form[@id="page-node-form--2"]//div[contains(@class, "field-name-field-ajax-test")]',
+      'page-node-add-form' => '//form[@id="page-node-add-form"]//div[contains(@class, "field-name-field-ajax-test")]',
+      'page-node-add-form--2' => '//form[@id="page-node-add-form--2"]//div[contains(@class, "field-name-field-ajax-test")]',
     );
     $button_name = $field_name . '_add_more';
     $button_value = t('Add another item');
diff --git a/core/modules/system/lib/Drupal/system/Tests/Entity/EntityTranslationFormTest.php b/core/modules/system/lib/Drupal/system/Tests/Entity/EntityTranslationFormTest.php
index 80d00b8..fd1e1bf 100644
--- a/core/modules/system/lib/Drupal/system/Tests/Entity/EntityTranslationFormTest.php
+++ b/core/modules/system/lib/Drupal/system/Tests/Entity/EntityTranslationFormTest.php
@@ -79,7 +79,7 @@ function testEntityFormLanguage() {
     // Explicitly set form langcode.
     $langcode = $this->langcodes[0];
     $form_state['langcode'] = $langcode;
-    \Drupal::entityManager()->getForm($node, 'default', $form_state);
+    \Drupal::entityManager()->getForm($node, 'edit', $form_state);
     $form_langcode = \Drupal::state()->get('entity_test.form_langcode') ?: FALSE;
     $this->assertTrue($langcode == $form_langcode, 'Form language is the same as the language parameter.');
 
diff --git a/core/modules/system/lib/Drupal/system/Tests/Form/RebuildTest.php b/core/modules/system/lib/Drupal/system/Tests/Form/RebuildTest.php
index c580e88..1610305 100644
--- a/core/modules/system/lib/Drupal/system/Tests/Form/RebuildTest.php
+++ b/core/modules/system/lib/Drupal/system/Tests/Form/RebuildTest.php
@@ -95,7 +95,7 @@ function testPreserveFormActionAfterAJAX() {
     // submission and verify it worked by ensuring the updated page has two text
     // field items in the field for which we just added an item.
     $this->drupalGet('node/add/page');
-    $this->drupalPostAJAX(NULL, array(), array('field_ajax_test_add_more' => t('Add another item')), 'system/ajax', array(), array(), 'page-node-form');
+    $this->drupalPostAJAX(NULL, array(), array('field_ajax_test_add_more' => t('Add another item')), 'system/ajax', array(), array(), 'page-node-add-form');
     $this->assert(count($this->xpath('//div[contains(@class, "field-name-field-ajax-test")]//input[@type="text"]')) == 2, 'AJAX submission succeeded.');
 
     // Submit the form with the non-Ajax "Save" button, leaving the title field
@@ -108,7 +108,7 @@ function testPreserveFormActionAfterAJAX() {
 
     // Ensure that the form contains two items in the multi-valued field, so we
     // know we're testing a form that was correctly retrieved from cache.
-    $this->assert(count($this->xpath('//form[contains(@id, "page-node-form")]//div[contains(@class, "form-item-field-ajax-test")]//input[@type="text"]')) == 2, 'Form retained its state from cache.');
+    $this->assert(count($this->xpath('//form[contains(@id, "page-node-add-form")]//div[contains(@class, "form-item-field-ajax-test")]//input[@type="text"]')) == 2, 'Form retained its state from cache.');
 
     // Ensure that the form's action is correct.
     $forms = $this->xpath('//form[contains(@class, "node-page-form")]');
diff --git a/core/modules/system/tests/modules/entity_test/entity_test.module b/core/modules/system/tests/modules/entity_test/entity_test.module
index 55d0dac..c1e639b 100644
--- a/core/modules/system/tests/modules/entity_test/entity_test.module
+++ b/core/modules/system/tests/modules/entity_test/entity_test.module
@@ -257,7 +257,7 @@ function entity_test_form_node_form_alter(&$form, &$form_state, $form_id) {
 function entity_test_add($entity_type) {
   drupal_set_title(t('Create an @type', array('@type' => $entity_type)));
   $entity = entity_create($entity_type, array());
-  return Drupal::entityManager()->getForm($entity);
+  return Drupal::entityManager()->getForm($entity, 'add');
 }
 
 /**
@@ -273,7 +273,7 @@ function entity_test_add($entity_type) {
  */
 function entity_test_edit(EntityInterface $entity) {
   drupal_set_title($entity->label(), PASS_THROUGH);
-  return Drupal::entityManager()->getForm($entity);
+  return Drupal::entityManager()->getForm($entity, 'edit');
 }
 
 /**
diff --git a/core/modules/system/tests/modules/entity_test/lib/Drupal/entity_test/Plugin/Core/Entity/EntityTest.php b/core/modules/system/tests/modules/entity_test/lib/Drupal/entity_test/Plugin/Core/Entity/EntityTest.php
index 6ce0c1b..419e29b 100644
--- a/core/modules/system/tests/modules/entity_test/lib/Drupal/entity_test/Plugin/Core/Entity/EntityTest.php
+++ b/core/modules/system/tests/modules/entity_test/lib/Drupal/entity_test/Plugin/Core/Entity/EntityTest.php
@@ -23,7 +23,8 @@
  *     "storage" = "Drupal\entity_test\EntityTestStorageController",
  *     "access" = "Drupal\entity_test\EntityTestAccessController",
  *     "form" = {
- *       "default" = "Drupal\entity_test\EntityTestFormController"
+ *       "add" = "Drupal\entity_test\EntityTestFormController",
+ *       "edit" = "Drupal\entity_test\EntityTestFormController"
  *     },
  *     "translation" = "Drupal\content_translation\ContentTranslationControllerNG"
  *   },
diff --git a/core/modules/system/tests/modules/entity_test/lib/Drupal/entity_test/Plugin/Core/Entity/EntityTestMul.php b/core/modules/system/tests/modules/entity_test/lib/Drupal/entity_test/Plugin/Core/Entity/EntityTestMul.php
index 99455a5..62d422e 100644
--- a/core/modules/system/tests/modules/entity_test/lib/Drupal/entity_test/Plugin/Core/Entity/EntityTestMul.php
+++ b/core/modules/system/tests/modules/entity_test/lib/Drupal/entity_test/Plugin/Core/Entity/EntityTestMul.php
@@ -22,7 +22,8 @@
  *     "storage" = "Drupal\entity_test\EntityTestMulStorageController",
  *     "access" = "Drupal\entity_test\EntityTestAccessController",
  *     "form" = {
- *       "default" = "Drupal\entity_test\EntityTestFormController"
+ *       "add" = "Drupal\entity_test\EntityTestFormController",
+ *       "edit" = "Drupal\entity_test\EntityTestFormController"
  *     },
  *     "translation" = "Drupal\content_translation\ContentTranslationControllerNG"
  *   },
diff --git a/core/modules/system/tests/modules/entity_test/lib/Drupal/entity_test/Plugin/Core/Entity/EntityTestMulRev.php b/core/modules/system/tests/modules/entity_test/lib/Drupal/entity_test/Plugin/Core/Entity/EntityTestMulRev.php
index b0bd877..b99dc9a 100644
--- a/core/modules/system/tests/modules/entity_test/lib/Drupal/entity_test/Plugin/Core/Entity/EntityTestMulRev.php
+++ b/core/modules/system/tests/modules/entity_test/lib/Drupal/entity_test/Plugin/Core/Entity/EntityTestMulRev.php
@@ -22,7 +22,8 @@
  *     "storage" = "Drupal\entity_test\EntityTestMulRevStorageController",
  *     "access" = "Drupal\entity_test\EntityTestAccessController",
  *     "form" = {
- *       "default" = "Drupal\entity_test\EntityTestFormController"
+ *       "add" = "Drupal\entity_test\EntityTestFormController",
+ *       "edit" = "Drupal\entity_test\EntityTestFormController"
  *     },
  *     "translation" = "Drupal\content_translation\ContentTranslationControllerNG"
  *   },
diff --git a/core/modules/system/tests/modules/entity_test/lib/Drupal/entity_test/Plugin/Core/Entity/EntityTestRev.php b/core/modules/system/tests/modules/entity_test/lib/Drupal/entity_test/Plugin/Core/Entity/EntityTestRev.php
index 6209cf5..83c354b 100644
--- a/core/modules/system/tests/modules/entity_test/lib/Drupal/entity_test/Plugin/Core/Entity/EntityTestRev.php
+++ b/core/modules/system/tests/modules/entity_test/lib/Drupal/entity_test/Plugin/Core/Entity/EntityTestRev.php
@@ -22,7 +22,8 @@
  *     "storage" = "Drupal\entity_test\EntityTestRevStorageController",
  *     "access" = "Drupal\entity_test\EntityTestAccessController",
  *     "form" = {
- *       "default" = "Drupal\entity_test\EntityTestFormController"
+ *       "add" = "Drupal\entity_test\EntityTestFormController",
+ *       "edit" = "Drupal\entity_test\EntityTestFormController"
  *     },
  *     "translation" = "Drupal\content_translation\ContentTranslationControllerNG"
  *   },
diff --git a/core/modules/system/tests/modules/form_test/form_test.module b/core/modules/system/tests/modules/form_test/form_test.module
index 25ae931..ab908d4 100644
--- a/core/modules/system/tests/modules/form_test/form_test.module
+++ b/core/modules/system/tests/modules/form_test/form_test.module
@@ -2268,8 +2268,8 @@ function form_test_two_instances() {
     'langcode' => Language::LANGCODE_NOT_SPECIFIED,
   ));
   $node2 = clone($node1);
-  $return['node_form_1'] = Drupal::entityManager()->getForm($node1);
-  $return['node_form_2'] = Drupal::entityManager()->getForm($node2);
+  $return['node_form_1'] = Drupal::entityManager()->getForm($node1, 'add');
+  $return['node_form_2'] = Drupal::entityManager()->getForm($node2, 'add');
   return $return;
 }
 
diff --git a/core/modules/taxonomy/lib/Drupal/taxonomy/Plugin/Core/Entity/Term.php b/core/modules/taxonomy/lib/Drupal/taxonomy/Plugin/Core/Entity/Term.php
index 424a91b..2ff9676 100644
--- a/core/modules/taxonomy/lib/Drupal/taxonomy/Plugin/Core/Entity/Term.php
+++ b/core/modules/taxonomy/lib/Drupal/taxonomy/Plugin/Core/Entity/Term.php
@@ -27,7 +27,8 @@
  *     "render" = "Drupal\taxonomy\TermRenderController",
  *     "access" = "Drupal\taxonomy\TermAccessController",
  *     "form" = {
- *       "default" = "Drupal\taxonomy\TermFormController"
+ *       "add" = "Drupal\taxonomy\TermFormController",
+ *       "edit" = "Drupal\taxonomy\TermFormController"
  *     },
  *     "translation" = "Drupal\taxonomy\TermTranslationController"
  *   },
diff --git a/core/modules/taxonomy/lib/Drupal/taxonomy/Plugin/Core/Entity/Vocabulary.php b/core/modules/taxonomy/lib/Drupal/taxonomy/Plugin/Core/Entity/Vocabulary.php
index 9d55435..7e289f2 100644
--- a/core/modules/taxonomy/lib/Drupal/taxonomy/Plugin/Core/Entity/Vocabulary.php
+++ b/core/modules/taxonomy/lib/Drupal/taxonomy/Plugin/Core/Entity/Vocabulary.php
@@ -25,7 +25,8 @@
  *     "access" = "Drupal\taxonomy\VocabularyAccessController",
  *     "list" = "Drupal\taxonomy\VocabularyListController",
  *     "form" = {
- *       "default" = "Drupal\taxonomy\VocabularyFormController"
+ *       "add" = "Drupal\taxonomy\VocabularyFormController",
+ *       "edit" = "Drupal\taxonomy\VocabularyFormController"
  *     }
  *   },
  *   config_prefix = "taxonomy.vocabulary",
diff --git a/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/TermTest.php b/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/TermTest.php
index caf5397..12a9b53 100644
--- a/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/TermTest.php
+++ b/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/TermTest.php
@@ -351,6 +351,7 @@ function testTermInterface() {
     // Check that the term edit page does not try to interpret additional path
     // components as arguments for taxonomy_term_form().
     $this->drupalGet('taxonomy/term/' . $term->id() . '/edit/' . $this->randomName());
+    $this->assertResponse(200);
 
     // Delete the term.
     $this->drupalPost('taxonomy/term/' . $term->id() . '/edit', array(), t('Delete'));
diff --git a/core/modules/taxonomy/taxonomy.admin.inc b/core/modules/taxonomy/taxonomy.admin.inc
index e8bd8e0..c3c3d72 100644
--- a/core/modules/taxonomy/taxonomy.admin.inc
+++ b/core/modules/taxonomy/taxonomy.admin.inc
@@ -17,7 +17,7 @@ function taxonomy_vocabulary_add() {
     // most likely default value until we have better flexible settings.
     'langcode' => language_default()->langcode,
   ));
-  return Drupal::entityManager()->getForm($vocabulary);
+  return Drupal::entityManager()->getForm($vocabulary, 'add');
 }
 
 /**
@@ -398,7 +398,7 @@ function taxonomy_term_add($vocabulary) {
   if (module_exists('language')) {
     $term->langcode = language_get_default_langcode('taxonomy_term', $vocabulary->id());
   }
-  return Drupal::entityManager()->getForm($term);
+  return Drupal::entityManager()->getForm($term, 'add');
 }
 
 /**
diff --git a/core/modules/taxonomy/taxonomy.module b/core/modules/taxonomy/taxonomy.module
index c21b665..40eb35a 100644
--- a/core/modules/taxonomy/taxonomy.module
+++ b/core/modules/taxonomy/taxonomy.module
@@ -265,9 +265,10 @@ function taxonomy_menu() {
   $items['taxonomy/term/%taxonomy_term/edit'] = array(
     'title' => 'Edit',
     'page callback' => 'entity_get_form',
-    // Pass a NULL argument to ensure that additional path components are not
-    // passed to taxonomy_term_form() as the vocabulary machine name argument.
-    'page arguments' => array(2),
+    // Pass an array as an argument to ensure that additional path components
+    // are not passed to taxonomy_term_form() as the vocabulary machine name
+    // argument.
+    'page arguments' => array(2, 'edit', array()),
     'access callback' => 'entity_page_access',
     'access arguments' => array(2, 'update'),
     'type' => MENU_LOCAL_TASK,
@@ -322,7 +323,7 @@ function taxonomy_menu() {
   $items['admin/structure/taxonomy/manage/%taxonomy_vocabulary/edit'] = array(
     'title' => 'Edit',
     'page callback' => 'entity_get_form',
-    'page arguments' => array(4),
+    'page arguments' => array(4, 'edit'),
     'access callback' => 'entity_page_access',
     'access arguments' => array(4, 'update'),
     'type' => MENU_LOCAL_TASK,
diff --git a/core/modules/user/lib/Drupal/user/Plugin/Core/Entity/Role.php b/core/modules/user/lib/Drupal/user/Plugin/Core/Entity/Role.php
index d35d7f1..bea2513 100644
--- a/core/modules/user/lib/Drupal/user/Plugin/Core/Entity/Role.php
+++ b/core/modules/user/lib/Drupal/user/Plugin/Core/Entity/Role.php
@@ -25,7 +25,8 @@
  *     "access" = "Drupal\user\RoleAccessController",
  *     "list" = "Drupal\user\RoleListController",
  *     "form" = {
- *       "default" = "Drupal\user\RoleFormController",
+ *       "add" = "Drupal\user\RoleFormController",
+ *       "edit" = "Drupal\user\RoleFormController",
  *       "delete" = "Drupal\user\Form\UserRoleDelete"
  *     }
  *   },
diff --git a/core/modules/user/user.routing.yml b/core/modules/user/user.routing.yml
index 3d52545..94ee8ba 100644
--- a/core/modules/user/user.routing.yml
+++ b/core/modules/user/user.routing.yml
@@ -50,14 +50,14 @@ user_role_list:
 user_role_add:
   pattern: '/admin/people/roles/add'
   defaults:
-    _entity_form: user_role.default
+    _entity_form: 'user_role.add'
   requirements:
     _permission: 'administer permissions'
 
 user_role_edit:
   pattern: '/admin/people/roles/manage/{user_role}'
   defaults:
-    _entity_form: user_role.default
+    _entity_form: 'user_role.edit'
   requirements:
     _entity_access: user_role.update
 
