diff --git a/core/includes/menu.inc b/core/includes/menu.inc
index c5aae17..76aafd0 100644
--- a/core/includes/menu.inc
+++ b/core/includes/menu.inc
@@ -122,6 +122,11 @@
  * As a note, if your module registers multiple simple routes, it is usual
  * (and usually easiest) to put all of their methods on one controller class.
  *
+ * If the route has placeholders (see @ref sec_placeholders above) the
+ * placeholders will be passed to the method (using reflection) by name.
+ * For example, the placeholder '{myvar}' in a route will become the $myvar
+ * parameter to the method.
+ *
  * Most controllers will need to display some information stored in the Drupal
  * database, which will involve using one or more Drupal services (see the
  * @link container Services and container topic @endlink). In order to properly
diff --git a/core/lib/Drupal/Core/Entity/EntityDisplayModeBase.php b/core/lib/Drupal/Core/Entity/EntityDisplayModeBase.php
index 01fefaf..a13c61b 100644
--- a/core/lib/Drupal/Core/Entity/EntityDisplayModeBase.php
+++ b/core/lib/Drupal/Core/Entity/EntityDisplayModeBase.php
@@ -20,14 +20,14 @@
    *
    * @var string
    */
-  public $id;
+  protected $id;
 
   /**
    * The human-readable name of the form or view mode.
    *
    * @var string
    */
-  public $label;
+  protected $label;
 
   /**
    * The entity type this form or view mode is used for.
@@ -37,7 +37,7 @@
    *
    * @var string
    */
-  public $targetEntityType;
+  protected $targetEntityType;
 
   /**
    * Whether or not this form or view mode has custom settings by default.
@@ -56,7 +56,7 @@
    *
    * @var bool
    */
-  public $cache = TRUE;
+  protected $cache = TRUE;
 
   /**
    * {@inheritdoc}
@@ -65,8 +65,8 @@ public static function sort(ConfigEntityInterface $a, ConfigEntityInterface $b)
     /** @var \Drupal\Core\Entity\EntityDisplayModeInterface $a */
     /** @var \Drupal\Core\Entity\EntityDisplayModeInterface $b */
     // Sort by the type of entity the view mode is used for.
-    $a_type = $a->getTargetType();
-    $b_type = $b->getTargetType();
+    $a_type = $a->getTargetEntityTypeId();
+    $b_type = $b->getTargetEntityTypeId();
     $type_order = strnatcasecmp($a_type, $b_type);
     return $type_order != 0 ? $type_order : parent::sort($a, $b);
   }
@@ -74,16 +74,32 @@ public static function sort(ConfigEntityInterface $a, ConfigEntityInterface $b)
   /**
    * {@inheritdoc}
    */
-  public function getTargetType() {
+  public function getTargetEntityTypeId() {
     return $this->targetEntityType;
   }
 
   /**
    * {@inheritdoc}
    */
+  public function setTargetEntityTypeId($target_entity_type_id) {
+    $this->set('targetEntityType', $target_entity_type_id);
+    return $this;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setLabel($label) {
+    $this->set('label', $label);
+    return $this;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
   public function calculateDependencies() {
     parent::calculateDependencies();
-    $target_entity_type = \Drupal::entityManager()->getDefinition($this->targetEntityType);
+    $target_entity_type = \Drupal::entityManager()->getDefinition($this->getTargetEntityTypeId());
     $this->addDependency('module', $target_entity_type->getProvider());
     return $this->dependencies;
   }
diff --git a/core/lib/Drupal/Core/Entity/EntityDisplayModeInterface.php b/core/lib/Drupal/Core/Entity/EntityDisplayModeInterface.php
index bf21c93..8b696da 100644
--- a/core/lib/Drupal/Core/Entity/EntityDisplayModeInterface.php
+++ b/core/lib/Drupal/Core/Entity/EntityDisplayModeInterface.php
@@ -20,6 +20,26 @@
    * @return string
    *   The entity type name.
    */
-  public function getTargetType();
+  public function getTargetEntityTypeId();
+
+  /**
+   * Sets the target entity type to be displayed.
+   *
+   * @param string target_entity_type_id
+   *   The entity type to be displayed.
+   *
+   * @return $this
+   */
+  public function setTargetEntityTypeId($target_entity_type_id);
+
+  /**
+   * Sets the label.
+   *
+   * @param string $label
+   *   The label to be set for the display mode.
+   *
+   * @return $this
+   */
+  public function setLabel($label);
 
 }
diff --git a/core/modules/entity_reference/src/ConfigurableEntityReferenceItem.php b/core/modules/entity_reference/src/ConfigurableEntityReferenceItem.php
index c0301e1..cbbac44 100644
--- a/core/modules/entity_reference/src/ConfigurableEntityReferenceItem.php
+++ b/core/modules/entity_reference/src/ConfigurableEntityReferenceItem.php
@@ -100,28 +100,6 @@ public function getSettableOptions(AccountInterface $account = NULL) {
   /**
    * {@inheritdoc}
    */
-  public static function propertyDefinitions(FieldStorageDefinitionInterface $field_definition) {
-    $settings = $field_definition->getSettings();
-    $target_type = $settings['target_type'];
-
-    // Call the parent to define the target_id and entity properties.
-    $properties = parent::propertyDefinitions($field_definition);
-
-    // Only add the revision ID property if the target entity type supports
-    // revisions.
-    $target_type_info = \Drupal::entityManager()->getDefinition($target_type);
-    if ($target_type_info->hasKey('revision') && $target_type_info->getRevisionTable()) {
-      $properties['revision_id'] = DataDefinition::create('integer')
-        ->setLabel(t('Revision ID'))
-        ->setSetting('unsigned', TRUE);
-    }
-
-    return $properties;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
   public function getConstraints() {
     $constraints = parent::getConstraints();
 
@@ -139,27 +117,6 @@ public function getConstraints() {
   /**
    * {@inheritdoc}
    */
-  public static function schema(FieldStorageDefinitionInterface $field_definition) {
-    $schema = parent::schema($field_definition);
-
-    $target_type = $field_definition->getSetting('target_type');
-    $target_type_info = \Drupal::entityManager()->getDefinition($target_type);
-
-    if ($target_type_info->isSubclassOf('\Drupal\Core\Entity\FieldableEntityInterface') && $field_definition instanceof FieldStorageConfigInterface) {
-      $schema['columns']['revision_id'] = array(
-        'description' => 'The revision ID of the target entity.',
-        'type' => 'int',
-        'unsigned' => TRUE,
-        'not null' => FALSE,
-      );
-    }
-
-    return $schema;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
   public function storageSettingsForm(array &$form, FormStateInterface $form_state, $has_data) {
     $element['target_type'] = array(
       '#type' => 'select',
diff --git a/core/modules/entity_reference/src/Plugin/Field/FieldFormatter/EntityReferenceFormatterBase.php b/core/modules/entity_reference/src/Plugin/Field/FieldFormatter/EntityReferenceFormatterBase.php
index 265651c..3a32d69 100644
--- a/core/modules/entity_reference/src/Plugin/Field/FieldFormatter/EntityReferenceFormatterBase.php
+++ b/core/modules/entity_reference/src/Plugin/Field/FieldFormatter/EntityReferenceFormatterBase.php
@@ -57,15 +57,11 @@ protected function getEntitiesToView(FieldItemListInterface $items) {
    */
   public function prepareView(array $entities_items) {
     $target_ids = array();
-    $revision_ids = array();
 
     // Collect every possible entity attached to any of the entities.
     foreach ($entities_items as $items) {
       foreach ($items as $item) {
-        if (!empty($item->revision_id)) {
-          $revision_ids[] = $item->revision_id;
-        }
-        elseif (!empty($item->target_id)) {
+        if (!empty($item->target_id)) {
           $target_ids[] = $item->target_id;
         }
       }
@@ -79,38 +75,21 @@ public function prepareView(array $entities_items) {
       $target_entities = entity_load_multiple($target_type, $target_ids);
     }
 
-    if ($revision_ids) {
-      // We need to load the revisions one by-one.
-      foreach ($revision_ids as $revision_id) {
-        $target_entity = entity_revision_load($target_type, $revision_id);
-        // Use the revision ID in the key.
-        $identifier = $target_entity->id() . ':' . $revision_id;
-        $target_entities[$identifier] = $target_entity;
-      }
-    }
-
     // Iterate through the fieldable entities again to attach the loaded data.
     foreach ($entities_items as $items) {
       $rekey = FALSE;
       foreach ($items as $item) {
-        // If we have a revision ID, the key uses it as well.
-        $identifier = !empty($item->revision_id) ? $item->target_id . ':' . $item->revision_id : $item->target_id;
-        if ($item->target_id !== 0) {
-          if (!isset($target_entities[$identifier])) {
-            // The entity no longer exists, so empty the item.
-            $item->setValue(NULL);
-            $rekey = TRUE;
-            continue;
-          }
-        }
-        else {
-          // This is an "auto_create" item, just leave the entity in place.
+        if ($item->target_id !== 0 && !isset($target_entities[$item->target_id])) {
+          // The entity no longer exists, so empty the item.
+          $item->setValue(NULL);
+          $rekey = TRUE;
+          continue;
         }
 
-        $item->originalEntity = $target_entities[$identifier];
+        $item->originalEntity = $target_entities[$item->target_id];
       }
 
-      // Rekey the items array if needed.
+      // Re-key the items array if needed.
       if ($rekey) {
         $items->filterEmptyItems();
       }
diff --git a/core/modules/field_ui/src/EntityDisplayModeListBuilder.php b/core/modules/field_ui/src/EntityDisplayModeListBuilder.php
index 6056508..56ff68e 100644
--- a/core/modules/field_ui/src/EntityDisplayModeListBuilder.php
+++ b/core/modules/field_ui/src/EntityDisplayModeListBuilder.php
@@ -78,7 +78,7 @@ public function buildRow(EntityInterface $entity) {
   public function load() {
     $entities = array();
     foreach (parent::load() as $entity) {
-      $entities[$entity->getTargetType()][] = $entity;
+      $entities[$entity->getTargetEntityTypeId()][] = $entity;
     }
     return $entities;
   }
diff --git a/core/modules/field_ui/src/Form/EntityDisplayModeAddForm.php b/core/modules/field_ui/src/Form/EntityDisplayModeAddForm.php
index cd207de..19ecefa 100644
--- a/core/modules/field_ui/src/Form/EntityDisplayModeAddForm.php
+++ b/core/modules/field_ui/src/Form/EntityDisplayModeAddForm.php
@@ -53,7 +53,7 @@ protected function prepareEntity() {
       throw new NotFoundHttpException();
     }
 
-    $this->entity->targetEntityType = $this->targetEntityTypeId;
+    $this->entity->setTargetEntityTypeId($this->targetEntityTypeId);
   }
 
 }
diff --git a/core/modules/field_ui/src/Form/EntityDisplayModeFormBase.php b/core/modules/field_ui/src/Form/EntityDisplayModeFormBase.php
index 9b7fdd2..b2e6bdb 100644
--- a/core/modules/field_ui/src/Form/EntityDisplayModeFormBase.php
+++ b/core/modules/field_ui/src/Form/EntityDisplayModeFormBase.php
@@ -86,7 +86,7 @@ public function form(array $form, FormStateInterface $form_state) {
       '#description' => t('A unique machine-readable name. Can only contain lowercase letters, numbers, and underscores.'),
       '#disabled' => !$this->entity->isNew(),
       '#default_value' => $this->entity->id(),
-      '#field_prefix' => $this->entity->isNew() ? $this->entity->getTargetType() . '.' : '',
+      '#field_prefix' => $this->entity->isNew() ? $this->entity->getTargetEntityTypeId() . '.' : '',
       '#machine_name' => array(
         'exists' => array($this, 'exists'),
         'replace_pattern' => '[^a-z0-9_.]+',
diff --git a/core/modules/field_ui/src/Form/EntityFormModeAddForm.php b/core/modules/field_ui/src/Form/EntityFormModeAddForm.php
index d7864ca..6b33fd4 100644
--- a/core/modules/field_ui/src/Form/EntityFormModeAddForm.php
+++ b/core/modules/field_ui/src/Form/EntityFormModeAddForm.php
@@ -23,7 +23,7 @@ protected function prepareEntity() {
       throw new NotFoundHttpException();
     }
 
-    $this->entity->targetEntityType = $this->targetEntityTypeId;
+    $this->entity->setTargetEntityTypeId($this->targetEntityTypeId);
   }
 
 }
diff --git a/core/tests/Drupal/Tests/Core/Config/Entity/EntityDisplayModeBaseUnitTest.php b/core/tests/Drupal/Tests/Core/Config/Entity/EntityDisplayModeBaseUnitTest.php
index 4e62f11..4f14454 100644
--- a/core/tests/Drupal/Tests/Core/Config/Entity/EntityDisplayModeBaseUnitTest.php
+++ b/core/tests/Drupal/Tests/Core/Config/Entity/EntityDisplayModeBaseUnitTest.php
@@ -104,4 +104,35 @@ public function testCalculateDependencies() {
 
   }
 
+  /**
+   * @covers ::setTargetEntityTypeId()
+   * @covers ::getTargetEntityTypeId()
+   */
+  public function testGetTargetEntityTypeId() {
+    $display = $this->getMockForAbstractClass('Drupal\Core\Entity\EntityDisplayModeBase', array(array(), $this->entityType));
+    $display->setTargetEntityTypeId('test');
+    $this->assertEquals('test', $display->getTargetEntityTypeId());
+  }
+
+  /**
+   * @covers ::setLabel()
+   * @covers ::label()
+   */
+  public function testSetLabel() {
+    $this->entityManager->expects($this->once())
+      ->method('getDefinition')
+      ->with($this->entityType)
+      ->will($this->returnValue($this->entityInfo));
+    $this->entityInfo->expects($this->any())
+      ->method('getLabelCallback')
+      ->will($this->returnValue(NULL));
+    $this->entityInfo->expects($this->any())
+      ->method('getKey')
+      ->with('label')
+      ->will($this->returnValue('label'));
+    $display = $this->getMockForAbstractClass('Drupal\Core\Entity\EntityDisplayModeBase', array(array(), $this->entityType));
+    $display->setLabel('test');
+    $this->assertEquals('test', $display->label());
+  }
+
 }
