diff --git a/core/includes/entity.inc b/core/includes/entity.inc
index 7814b03..bfefff5 100644
--- a/core/includes/entity.inc
+++ b/core/includes/entity.inc
@@ -15,7 +15,7 @@
 function entity_render_cache_clear() {
   $entity_manager = Drupal::entityManager();
   foreach ($entity_manager->getDefinitions() as $entity_type => $info) {
-    if ($entity_manager->hasController($entity_type, 'view_builder')) {
+    if ($entity_manager->hasHandler($entity_type, 'view_builder')) {
       $entity_manager->getViewBuilder($entity_type)->resetCache();
     }
   }
@@ -283,21 +283,6 @@ function entity_create($entity_type, array $values = array()) {
 }
 
 /**
- * Gets the entity controller class for an entity type.
- *
- * @return \Drupal\Core\Entity\EntityStorageInterface
- *
- * @see \Drupal\Core\Entity\EntityManagerInterface::getStorage()
- *
- * @deprecated in Drupal 8.x-dev, will be removed before Drupal 8.0.
- *   Use \Drupal::entityManager()->getStorage().
- */
-function entity_get_controller($entity_type) {
-  return \Drupal::entityManager()
-    ->getStorage($entity_type);
-}
-
-/**
  * Returns the label of an entity.
  *
  * This is a wrapper for Drupal\Core\Entity\EntityInterface::label(). This function
diff --git a/core/lib/Drupal/Core/Config/Entity/ConfigEntityType.php b/core/lib/Drupal/Core/Config/Entity/ConfigEntityType.php
index 2b5dfd5..9948c74 100644
--- a/core/lib/Drupal/Core/Config/Entity/ConfigEntityType.php
+++ b/core/lib/Drupal/Core/Config/Entity/ConfigEntityType.php
@@ -67,7 +67,7 @@ public function __construct($definition) {
     parent::__construct($definition);
     // Always add a default 'uuid' key.
     $this->entity_keys['uuid'] = 'uuid';
-    $this->controllers += array(
+    $this->handlers += array(
       'storage' => 'Drupal\Core\Config\Entity\ConfigEntityStorage',
     );
   }
diff --git a/core/lib/Drupal/Core/Entity/ContentEntityBase.php b/core/lib/Drupal/Core/Entity/ContentEntityBase.php
index f2c655f..aac1cbb 100644
--- a/core/lib/Drupal/Core/Entity/ContentEntityBase.php
+++ b/core/lib/Drupal/Core/Entity/ContentEntityBase.php
@@ -845,8 +845,8 @@ public function updateOriginalValues() {
   /**
    * Implements the magic method for getting object properties.
    *
-   * @todo: A lot of code still uses non-fields (e.g. $entity->content in render
-   *   controllers) by reference. Clean that up.
+   * @todo: A lot of code still uses non-fields (e.g. $entity->content in view
+   *   builders) by reference. Clean that up.
    */
   public function &__get($name) {
     // If this is an entity field, handle it accordingly. We first check whether
diff --git a/core/lib/Drupal/Core/Entity/ContentEntityDatabaseStorage.php b/core/lib/Drupal/Core/Entity/ContentEntityDatabaseStorage.php
index b39d900..5391da2 100644
--- a/core/lib/Drupal/Core/Entity/ContentEntityDatabaseStorage.php
+++ b/core/lib/Drupal/Core/Entity/ContentEntityDatabaseStorage.php
@@ -23,11 +23,9 @@
 use Symfony\Component\DependencyInjection\ContainerInterface;
 
 /**
- * Defines a base entity controller class.
+ * A content entity database storage implementation.
  *
- * Default implementation of Drupal\Core\Entity\EntityStorageInterface.
- *
- * This class can be used as-is by most simple entity types. Entity types
+ * This class can be used as-is by most content entity types. Entity types
  * requiring special handling can extend the class.
  *
  * The class uses \Drupal\Core\Entity\Schema\ContentEntitySchemaHandler
@@ -229,7 +227,7 @@ public function getSchema() {
   }
 
   /**
-   * Gets the schema handler for this storage controller.
+   * Gets the schema handler for this entity storage.
    *
    * @return \Drupal\Core\Entity\Schema\ContentEntitySchemaHandler
    *   The schema handler.
@@ -275,7 +273,7 @@ public function getTableMapping() {
 
       $revisionable = $this->entityType->isRevisionable();
       // @todo Remove the data table check once all entity types are using
-      // entity query and we have a views data controller. See:
+      // entity query and we have a views data handler. See:
       // - https://drupal.org/node/2068325
       // - https://drupal.org/node/1740492
       $translatable = $this->entityType->getDataTable() && $this->entityType->isTranslatable();
diff --git a/core/lib/Drupal/Core/Entity/ContentEntityType.php b/core/lib/Drupal/Core/Entity/ContentEntityType.php
index 4be18fe..d303de4 100644
--- a/core/lib/Drupal/Core/Entity/ContentEntityType.php
+++ b/core/lib/Drupal/Core/Entity/ContentEntityType.php
@@ -17,7 +17,7 @@ class ContentEntityType extends EntityType implements ContentEntityTypeInterface
    */
   public function __construct($definition) {
     parent::__construct($definition);
-    $this->controllers += array(
+    $this->handlers += array(
       'storage' => 'Drupal\Core\Entity\ContentEntityDatabaseStorage',
     );
   }
diff --git a/core/lib/Drupal/Core/Entity/Entity.php b/core/lib/Drupal/Core/Entity/Entity.php
index a9d2001..ba7380a 100644
--- a/core/lib/Drupal/Core/Entity/Entity.php
+++ b/core/lib/Drupal/Core/Entity/Entity.php
@@ -453,7 +453,7 @@ protected function onSaveOrDelete() {
     }
 
     foreach ($referenced_entities as $entity_type => $entities) {
-      if ($this->entityManager()->hasController($entity_type, 'view_builder')) {
+      if ($this->entityManager()->hasHandler($entity_type, 'view_builder')) {
         $this->entityManager()->getViewBuilder($entity_type)->resetCache($entities);
       }
     }
@@ -510,7 +510,7 @@ protected function onUpdateBundleEntity() {
       // builder class, then invalidate the render cache of entities for which
       // this entity is a bundle.
       $entity_manager = $this->entityManager();
-      if ($entity_manager->hasController($bundle_of, 'view_builder')) {
+      if ($entity_manager->hasHandler($bundle_of, 'view_builder')) {
         $entity_manager->getViewBuilder($bundle_of)->resetCache();
       }
       // Entity bundle field definitions may depend on bundle settings.
diff --git a/core/lib/Drupal/Core/Entity/EntityAccessControlHandler.php b/core/lib/Drupal/Core/Entity/EntityAccessControlHandler.php
index dce7eb5..5b43673 100644
--- a/core/lib/Drupal/Core/Entity/EntityAccessControlHandler.php
+++ b/core/lib/Drupal/Core/Entity/EntityAccessControlHandler.php
@@ -15,7 +15,7 @@
 /**
  * Defines a default implementation for entity access control handler.
  */
-class EntityAccessControlHandler extends EntityControllerBase implements EntityAccessControlHandlerInterface {
+class EntityAccessControlHandler extends EntityHandlerBase implements EntityAccessControlHandlerInterface {
 
   /**
    * Stores calculated access check results.
@@ -284,7 +284,8 @@ public function fieldAccess($operation, FieldDefinitionInterface $field_definiti
     // Get the default access restriction that lives within this field.
     $default = $items ? $items->defaultAccess($operation, $account) : TRUE;
 
-    // Get the default access restriction as specified by the access controller.
+    // Get the default access restriction as specified by the access control
+    // handler.
     $entity_default = $this->checkFieldAccess($operation, $field_definition, $account, $items);
 
     // Combine default access, denying access wins.
@@ -320,7 +321,7 @@ public function fieldAccess($operation, FieldDefinitionInterface $field_definiti
   }
 
   /**
-   * Default field access as determined by this access controller.
+   * Default field access as determined by this access control handler.
    *
    * @param string $operation
    *   The operation access should be checked for.
diff --git a/core/lib/Drupal/Core/Entity/EntityAccessControlHandlerInterface.php b/core/lib/Drupal/Core/Entity/EntityAccessControlHandlerInterface.php
index 52c1b7b..bea60e3 100644
--- a/core/lib/Drupal/Core/Entity/EntityAccessControlHandlerInterface.php
+++ b/core/lib/Drupal/Core/Entity/EntityAccessControlHandlerInterface.php
@@ -14,7 +14,7 @@
 use Drupal\Core\Session\AccountInterface;
 
 /**
- * Defines a common interface for entity access control handlers.
+ * Defines an interface for entity access control handlers.
  */
 interface EntityAccessControlHandlerInterface {
 
diff --git a/core/lib/Drupal/Core/Entity/EntityChangedInterface.php b/core/lib/Drupal/Core/Entity/EntityChangedInterface.php
index 9a6c194..a8b1a61 100644
--- a/core/lib/Drupal/Core/Entity/EntityChangedInterface.php
+++ b/core/lib/Drupal/Core/Entity/EntityChangedInterface.php
@@ -8,7 +8,7 @@
 namespace Drupal\Core\Entity;
 
 /**
- * Defines a common interface for entity change timestamp tracking.
+ * Defines an interface for entity change timestamp tracking.
  *
  * This data may be useful for more precise cache invalidation (especially
  * on the client side) and concurrent editing locking.
diff --git a/core/lib/Drupal/Core/Entity/EntityDatabaseStorage.php b/core/lib/Drupal/Core/Entity/EntityDatabaseStorage.php
index 4566515..b55736d 100644
--- a/core/lib/Drupal/Core/Entity/EntityDatabaseStorage.php
+++ b/core/lib/Drupal/Core/Entity/EntityDatabaseStorage.php
@@ -12,7 +12,7 @@
 use Symfony\Component\DependencyInjection\ContainerInterface;
 
 /**
- * Defines a base entity controller class.
+ * Defines a base entity storage class.
  *
  * This class only supports bare, non-content entities.
  */
diff --git a/core/lib/Drupal/Core/Entity/EntityForm.php b/core/lib/Drupal/Core/Entity/EntityForm.php
index f154844..3ca1d38 100644
--- a/core/lib/Drupal/Core/Entity/EntityForm.php
+++ b/core/lib/Drupal/Core/Entity/EntityForm.php
@@ -89,7 +89,7 @@ public function getFormId() {
    * {@inheritdoc}
    */
   public function buildForm(array $form, FormStateInterface $form_state) {
-    // During the initial form build, add this controller to the form state and
+    // During the initial form build, add this form object to the form state and
     // allow for initial preparation before form building and processing.
     if (!isset($form_state['controller'])) {
       $this->init($form_state);
@@ -117,7 +117,7 @@ public function submitForm(array &$form, FormStateInterface $form_state) {
    * Initialize the form state and the entity before the first form build.
    */
   protected function init(FormStateInterface $form_state) {
-    // Add the controller to the form state so it can be easily accessed by
+    // Add the form object to the form state so it can be easily accessed by
     // module-provided form handlers there.
     $form_state['controller'] = $this;
 
@@ -318,8 +318,8 @@ protected function updateFormLangcode(FormStateInterface $form_state) {
   public function buildEntity(array $form, FormStateInterface $form_state) {
     $entity = clone $this->entity;
     // If you submit a form, the form state comes from caching, which forces
-    // the controller to be the one before caching. Ensure to have the
-    // controller of the current request.
+    // the form object to be the one before caching. Ensure to have the
+    // form object of the current request.
     $form_state['controller'] = $this;
 
     $this->copyFormValuesToEntity($entity, $form, $form_state);
diff --git a/core/lib/Drupal/Core/Entity/EntityFormInterface.php b/core/lib/Drupal/Core/Entity/EntityFormInterface.php
index 31f485a..ccb16d7 100644
--- a/core/lib/Drupal/Core/Entity/EntityFormInterface.php
+++ b/core/lib/Drupal/Core/Entity/EntityFormInterface.php
@@ -13,7 +13,7 @@
 use Drupal\Core\StringTranslation\TranslationInterface;
 
 /**
- * Defines a common interface for entity form classes.
+ * Defines an interface for entity form classes.
  */
 interface EntityFormInterface extends BaseFormIdInterface {
 
diff --git a/core/lib/Drupal/Core/Entity/EntityControllerBase.php b/core/lib/Drupal/Core/Entity/EntityHandlerBase.php
similarity index 81%
rename from core/lib/Drupal/Core/Entity/EntityControllerBase.php
rename to core/lib/Drupal/Core/Entity/EntityHandlerBase.php
index 9b13ed8..047f49f 100644
--- a/core/lib/Drupal/Core/Entity/EntityControllerBase.php
+++ b/core/lib/Drupal/Core/Entity/EntityHandlerBase.php
@@ -2,7 +2,7 @@
 
 /**
  * @file
- * Contains \Drupal\Core\Entity\EntityControllerBase.
+ * Contains \Drupal\Core\Entity\EntityHandlerBase.
  */
 
 namespace Drupal\Core\Entity;
@@ -10,14 +10,13 @@
 use Drupal\Core\DependencyInjection\DependencySerializationTrait;
 use Drupal\Core\Extension\ModuleHandlerInterface;
 use Drupal\Core\StringTranslation\StringTranslationTrait;
-use Drupal\Core\StringTranslation\TranslationInterface;
 
 /**
- * Provides a base class for entity controllers.
+ * Provides a base class for entity handlers.
  *
  * @todo Convert this to a trait.
  */
-abstract class EntityControllerBase {
+abstract class EntityHandlerBase {
   use StringTranslationTrait;
   use DependencySerializationTrait;
 
@@ -42,7 +41,7 @@ protected function moduleHandler() {
   }
 
   /**
-   * Sets the module handler for this controller.
+   * Sets the module handler for this handler.
    *
    * @param \Drupal\Core\Extension\ModuleHandlerInterface $module_handler
    *   The module handler.
diff --git a/core/lib/Drupal/Core/Entity/EntityControllerInterface.php b/core/lib/Drupal/Core/Entity/EntityHandlerInterface.php
similarity index 58%
rename from core/lib/Drupal/Core/Entity/EntityControllerInterface.php
rename to core/lib/Drupal/Core/Entity/EntityHandlerInterface.php
index 0259e81..f6b862a 100644
--- a/core/lib/Drupal/Core/Entity/EntityControllerInterface.php
+++ b/core/lib/Drupal/Core/Entity/EntityHandlerInterface.php
@@ -2,27 +2,23 @@
 
 /**
  * @file
- * Contains \Drupal\Core\Entity\EntityControllerInterface.
+ * Contains \Drupal\Core\Entity\EntityHandlerInterface.
  */
 
 namespace Drupal\Core\Entity;
 
-use Drupal\Core\Entity\EntityStorageInterface;
-use Drupal\Core\Entity\EntityTypeInterface;
 use Symfony\Component\DependencyInjection\ContainerInterface;
 
 /**
- * Defines a common interface for entity controllers.
+ * Defines an interface for entity handlers.
  *
- * This interface can be implemented by entity controllers that require
- * dependency injection. These are not controllers in the routing sense of the
- * word, but instead are handlers that perform a specific function for an entity
- * type.
+ * This interface can be implemented by entity handlers that require
+ * dependency injection.
  */
-interface EntityControllerInterface {
+interface EntityHandlerInterface {
 
   /**
-   * Instantiates a new instance of this entity controller.
+   * Instantiates a new instance of this entity handler.
    *
    * This is a factory method that returns a new instance of this object. The
    * factory should pass any needed dependencies into the constructor of this
@@ -35,7 +31,7 @@
    *   The entity type definition.
    *
    * @return static
-   *   A new instance of the entity controller.
+   *   A new instance of the entity handler.
    */
   public static function createInstance(ContainerInterface $container, EntityTypeInterface $entity_type);
 
diff --git a/core/lib/Drupal/Core/Entity/EntityListBuilder.php b/core/lib/Drupal/Core/Entity/EntityListBuilder.php
index 16a0849..eee643b 100644
--- a/core/lib/Drupal/Core/Entity/EntityListBuilder.php
+++ b/core/lib/Drupal/Core/Entity/EntityListBuilder.php
@@ -16,7 +16,7 @@
  *
  * @ingroup entity_api
  */
-class EntityListBuilder extends EntityControllerBase implements EntityListBuilderInterface, EntityControllerInterface {
+class EntityListBuilder extends EntityHandlerBase implements EntityListBuilderInterface, EntityHandlerInterface {
 
   /**
    * The entity storage class.
diff --git a/core/lib/Drupal/Core/Entity/EntityManager.php b/core/lib/Drupal/Core/Entity/EntityManager.php
index 2f16516..b583b8c 100644
--- a/core/lib/Drupal/Core/Entity/EntityManager.php
+++ b/core/lib/Drupal/Core/Entity/EntityManager.php
@@ -54,11 +54,11 @@ class EntityManager extends DefaultPluginManager implements EntityManagerInterfa
   protected $extraFields = array();
 
   /**
-   * Contains instantiated controllers keyed by controller type and entity type.
+   * Contains instantiated handlers keyed by handler type and entity type.
    *
    * @var array
    */
-  protected $controllers = array();
+  protected $handlers = array();
 
   /**
    * Static cache of base field definitions.
@@ -230,9 +230,9 @@ public function getDefinition($entity_type_id, $exception_on_invalid = TRUE) {
   /**
    * {@inheritdoc}
    */
-  public function hasController($entity_type, $controller_type) {
+  public function hasHandler($entity_type, $handler_type) {
     if ($definition = $this->getDefinition($entity_type, FALSE)) {
-      return $definition->hasControllerClass($controller_type);
+      return $definition->hasHandlerClass($handler_type);
     }
     return FALSE;
   }
@@ -241,92 +241,75 @@ public function hasController($entity_type, $controller_type) {
    * {@inheritdoc}
    */
   public function getStorage($entity_type) {
-    return $this->getController($entity_type, 'storage', 'getStorageClass');
+    return $this->getHandler($entity_type, 'storage');
   }
 
   /**
    * {@inheritdoc}
    */
   public function getListBuilder($entity_type) {
-    return $this->getController($entity_type, 'list_builder', 'getListBuilderClass');
+    return $this->getHandler($entity_type, 'list_builder');
   }
 
   /**
    * {@inheritdoc}
    */
   public function getFormObject($entity_type, $operation) {
-    if (!isset($this->controllers['form'][$operation][$entity_type])) {
+    if (!isset($this->handlers['form'][$operation][$entity_type])) {
       if (!$class = $this->getDefinition($entity_type, TRUE)->getFormClass($operation)) {
         throw new InvalidPluginDefinitionException($entity_type, sprintf('The "%s" entity type did not specify a "%s" form class.', $entity_type, $operation));
       }
 
-      $controller = $this->classResolver->getInstanceFromDefinition($class);
+      $form_object = $this->classResolver->getInstanceFromDefinition($class);
 
-      $controller
+      $form_object
         ->setStringTranslation($this->translationManager)
         ->setModuleHandler($this->moduleHandler)
         ->setOperation($operation);
-      $this->controllers['form'][$operation][$entity_type] = $controller;
+      $this->handlers['form'][$operation][$entity_type] = $form_object;
     }
-    return $this->controllers['form'][$operation][$entity_type];
+    return $this->handlers['form'][$operation][$entity_type];
   }
 
   /**
    * {@inheritdoc}
    */
   public function getViewBuilder($entity_type) {
-    return $this->getController($entity_type, 'view_builder', 'getViewBuilderClass');
+    return $this->getHandler($entity_type, 'view_builder');
   }
 
   /**
    * {@inheritdoc}
    */
   public function getAccessControlHandler($entity_type) {
-    return $this->getController($entity_type, 'access', 'getAccessControlClass');
+    return $this->getHandler($entity_type, 'access');
   }
 
   /**
-   * Creates a new controller instance.
-   *
-   * @param string $entity_type
-   *   The entity type for this controller.
-   * @param string $controller_type
-   *   The controller type to create an instance for.
-   * @param string $controller_class_getter
-   *   (optional) The method to call on the entity type object to get the controller class.
-   *
-   * @return mixed
-   *   A controller instance.
-   *
-   * @throws \Drupal\Component\Plugin\Exception\InvalidPluginDefinitionException
+   * {@inheritdoc}
    */
-  public function getController($entity_type, $controller_type, $controller_class_getter = NULL) {
-    if (!isset($this->controllers[$controller_type][$entity_type])) {
+  public function getHandler($entity_type, $handler_type) {
+    if (!isset($this->handlers[$handler_type][$entity_type])) {
       $definition = $this->getDefinition($entity_type);
-      if ($controller_class_getter) {
-        $class = $definition->{$controller_class_getter}();
-      }
-      else {
-        $class = $definition->getControllerClass($controller_type);
-      }
+      $class = $definition->getHandlerClass($handler_type);
       if (!$class) {
-        throw new InvalidPluginDefinitionException($entity_type, sprintf('The "%s" entity type did not specify a %s class.', $entity_type, $controller_type));
+        throw new InvalidPluginDefinitionException($entity_type, sprintf('The "%s" entity type did not specify a %s handler.', $entity_type, $handler_type));
       }
-      if (is_subclass_of($class, 'Drupal\Core\Entity\EntityControllerInterface')) {
-        $controller = $class::createInstance($this->container, $definition);
+      if (is_subclass_of($class, 'Drupal\Core\Entity\EntityHandlerInterface')) {
+        $handler = $class::createInstance($this->container, $definition);
       }
       else {
-        $controller = new $class($definition);
+        $handler = new $class($definition);
       }
-      if (method_exists($controller, 'setModuleHandler')) {
-        $controller->setModuleHandler($this->moduleHandler);
+      if (method_exists($handler, 'setModuleHandler')) {
+        $handler->setModuleHandler($this->moduleHandler);
       }
-      if (method_exists($controller, 'setStringTranslation')) {
-        $controller->setStringTranslation($this->translationManager);
+      if (method_exists($handler, 'setStringTranslation')) {
+        $handler->setStringTranslation($this->translationManager);
       }
-      $this->controllers[$controller_type][$entity_type] = $controller;
+      $this->handlers[$handler_type][$entity_type] = $handler;
     }
-    return $this->controllers[$controller_type][$entity_type];
+    return $this->handlers[$handler_type][$entity_type];
   }
 
   /**
diff --git a/core/lib/Drupal/Core/Entity/EntityManagerInterface.php b/core/lib/Drupal/Core/Entity/EntityManagerInterface.php
index 18c7c8b..aac79ca 100644
--- a/core/lib/Drupal/Core/Entity/EntityManagerInterface.php
+++ b/core/lib/Drupal/Core/Entity/EntityManagerInterface.php
@@ -157,7 +157,7 @@ public function clearCachedBundles();
    *   The entity type for this view builder.
    *
    * @return \Drupal\Core\Entity\EntityViewBuilderInterface.
-   *   A render controller instance.
+   *   A view builder instance.
    */
   public function getViewBuilder($entity_type);
 
@@ -186,32 +186,32 @@ public function getListBuilder($entity_type);
   public function getFormObject($entity_type, $operation);
 
   /**
-   * Checks whether a certain entity type has a certain controller.
+   * Checks whether a certain entity type has a certain handler.
    *
    * @param string $entity_type
    *   The name of the entity type.
-   * @param string $controller_type
-   *   The name of the controller.
+   * @param string $handler_type
+   *   The name of the handler.
    *
    * @return bool
-   *   Returns TRUE if the entity type has the controller, else FALSE.
+   *   Returns TRUE if the entity type has the handler, else FALSE.
    */
-  public function hasController($entity_type, $controller_type);
+  public function hasHandler($entity_type, $handler_type);
 
   /**
-   * Creates a new controller instance.
+   * Creates a new handler instance.
    *
    * @param string $entity_type
    *   The entity type for this controller.
-   * @param string $controller_type
+   * @param string $handler_type
    *   The controller type to create an instance for.
    *
    * @return mixed
-   *   A controller instance.
+   *   A handler instance.
    *
    * @throws \Drupal\Component\Plugin\Exception\InvalidPluginDefinitionException
    */
-  public function getController($entity_type, $controller_type);
+  public function getHandler($entity_type, $handler_type);
 
   /**
    * Get the bundle info of an entity type.
diff --git a/core/lib/Drupal/Core/Entity/EntityStorageBase.php b/core/lib/Drupal/Core/Entity/EntityStorageBase.php
index 3dc3bb6..49d7ecf 100644
--- a/core/lib/Drupal/Core/Entity/EntityStorageBase.php
+++ b/core/lib/Drupal/Core/Entity/EntityStorageBase.php
@@ -13,7 +13,7 @@
 /**
  * A base entity storage class.
  */
-abstract class EntityStorageBase extends EntityControllerBase implements EntityStorageInterface, EntityControllerInterface {
+abstract class EntityStorageBase extends EntityHandlerBase implements EntityStorageInterface, EntityHandlerInterface {
 
   /**
    * Static cache of entities, keyed by entity ID.
@@ -23,7 +23,7 @@
   protected $entities = array();
 
   /**
-   * Entity type ID for this controller instance.
+   * Entity type ID for this storage.
    *
    * @var string
    */
diff --git a/core/lib/Drupal/Core/Entity/EntityStorageInterface.php b/core/lib/Drupal/Core/Entity/EntityStorageInterface.php
index bb086e6..32867f4 100644
--- a/core/lib/Drupal/Core/Entity/EntityStorageInterface.php
+++ b/core/lib/Drupal/Core/Entity/EntityStorageInterface.php
@@ -8,15 +8,13 @@
 namespace Drupal\Core\Entity;
 
 /**
- * Defines a common interface for entity storage classes.
+ * Defines the interface for entity storage classes.
  *
- * All entity controller classes specified via the "controllers['storage']" key
- * returned by \Drupal\Core\Entity\EntityManagerInterface or
- * hook_entity_type_alter() have to implement this interface.
- *
- * Most simple, SQL-based entity controllers will do better by extending
- * Drupal\Core\Entity\ContentEntityDatabaseStorage instead of implementing this
- * interface directly.
+ * For common default implementations, see
+ * \Drupal\Core\Entity\ContentEntityDatabaseStorage for content entities and
+ * \Drupal\Core\Config\Entity\ConfigEntityStorage for config entities. Those
+ * implementations are used by default when the @ContentEntityType or
+ * @ConfigEntityType annotations are used.
  *
  * @ingroup entity_api
  */
diff --git a/core/lib/Drupal/Core/Entity/EntityType.php b/core/lib/Drupal/Core/Entity/EntityType.php
index 110fcee..37ed343 100644
--- a/core/lib/Drupal/Core/Entity/EntityType.php
+++ b/core/lib/Drupal/Core/Entity/EntityType.php
@@ -80,11 +80,11 @@ class EntityType implements EntityTypeInterface {
   protected $originalClass;
 
   /**
-   * An array of controllers.
+   * An array of handlers.
    *
    * @var array
    */
-  protected $controllers = array();
+  protected $handlers = array();
 
   /**
    * The name of the default administrative permission.
@@ -239,7 +239,7 @@ public function __construct($definition) {
       'revision' => '',
       'bundle' => ''
     );
-    $this->controllers += array(
+    $this->handlers += array(
       'access' => 'Drupal\Core\Entity\EntityAccessControlHandler',
     );
   }
@@ -354,69 +354,69 @@ public function isSubclassOf($class) {
   /**
    * {@inheritdoc}
    */
-  public function getControllerClasses() {
-    return $this->controllers;
+  public function getHandlerClasses() {
+    return $this->handlers;
   }
 
   /**
    * {@inheritdoc}
    */
-  public function getControllerClass($controller_type, $nested = FALSE) {
-    if ($this->hasControllerClass($controller_type, $nested)) {
-      $controllers = $this->getControllerClasses();
-      return $nested ? $controllers[$controller_type][$nested] : $controllers[$controller_type];
+  public function getHandlerClass($handler_type, $nested = FALSE) {
+    if ($this->hasHandlerClass($handler_type, $nested)) {
+      $handlers = $this->getHandlerClasses();
+      return $nested ? $handlers[$handler_type][$nested] : $handlers[$handler_type];
     }
   }
 
   /**
    * {@inheritdoc}
    */
-  public function setControllerClass($controller_type, $value) {
-    $this->controllers[$controller_type] = $value;
+  public function setHandlerClass($handler_type, $value) {
+    $this->handlers[$handler_type] = $value;
     return $this;
   }
 
   /**
    * {@inheritdoc}
    */
-  public function hasControllerClass($controller_type, $nested = FALSE) {
-    $controllers = $this->getControllerClasses();
-    if (!isset($controllers[$controller_type]) || ($nested && !isset($controllers[$controller_type][$nested]))) {
+  public function hasHandlerClass($handler_type, $nested = FALSE) {
+    $handlers = $this->getHandlerClasses();
+    if (!isset($handlers[$handler_type]) || ($nested && !isset($handlers[$handler_type][$nested]))) {
       return FALSE;
     }
-    $controller = $controllers[$controller_type];
+    $handler = $handlers[$handler_type];
     if ($nested) {
-      $controller = $controller[$nested];
+      $handler = $handler[$nested];
     }
-    return class_exists($controller);
+    return class_exists($handler);
   }
 
   /**
    * {@inheritdoc}
    */
   public function getStorageClass() {
-    return $this->getControllerClass('storage');
+    return $this->getHandlerClass('storage');
   }
 
   /**
    * {@inheritdoc}
    */
   public function setStorageClass($class) {
-    $this->controllers['storage'] = $class;
+    $this->handlers['storage'] = $class;
   }
 
   /**
    * {@inheritdoc}
    */
   public function getFormClass($operation) {
-    return $this->getControllerClass('form', $operation);
+    return $this->getHandlerClass('form', $operation);
   }
 
   /**
    * {@inheritdoc}
    */
   public function setFormClass($operation, $class) {
-    $this->controllers['form'][$operation] = $class;
+    $this->handlers['form'][$operation] = $class;
     return $this;
   }
 
@@ -424,21 +424,21 @@ public function setFormClass($operation, $class) {
    * {@inheritdoc}
    */
   public function hasFormClasses() {
-    return !empty($this->controllers['form']);
+    return !empty($this->handlers['form']);
   }
 
   /**
    * {@inheritdoc}
    */
   public function getListBuilderClass() {
-    return $this->getControllerClass('list_builder');
+    return $this->getHandlerClass('list_builder');
   }
 
   /**
    * {@inheritdoc}
    */
   public function setListBuilderClass($class) {
-    $this->controllers['list_builder'] = $class;
+    $this->handlers['list_builder'] = $class;
     return $this;
   }
 
@@ -446,21 +446,21 @@ public function setListBuilderClass($class) {
    * {@inheritdoc}
    */
   public function hasListBuilderClass() {
-    return $this->hasControllerClass('list_builder');
+    return $this->hasHandlerClass('list_builder');
   }
 
   /**
    * {@inheritdoc}
    */
   public function getViewBuilderClass() {
-    return $this->getControllerClass('view_builder');
+    return $this->getHandlerClass('view_builder');
   }
 
   /**
    * {@inheritdoc}
    */
   public function setViewBuilderClass($class) {
-    $this->controllers['view_builder'] = $class;
+    $this->handlers['view_builder'] = $class;
     return $this;
   }
 
@@ -468,21 +468,21 @@ public function setViewBuilderClass($class) {
    * {@inheritdoc}
    */
   public function hasViewBuilderClass() {
-    return $this->hasControllerClass('view_builder');
+    return $this->hasHandlerClass('view_builder');
   }
 
   /**
    * {@inheritdoc}
    */
   public function getAccessControlClass() {
-    return $this->getControllerClass('access');
+    return $this->getHandlerClass('access');
   }
 
   /**
    * {@inheritdoc}
    */
   public function setAccessClass($class) {
-    $this->controllers['access'] = $class;
+    $this->handlers['access'] = $class;
     return $this;
   }
 
diff --git a/core/lib/Drupal/Core/Entity/EntityTypeInterface.php b/core/lib/Drupal/Core/Entity/EntityTypeInterface.php
index e655df7..a1c1bc9 100644
--- a/core/lib/Drupal/Core/Entity/EntityTypeInterface.php
+++ b/core/lib/Drupal/Core/Entity/EntityTypeInterface.php
@@ -178,41 +178,41 @@ public function isPersistentlyCacheable();
   public function setClass($class);
 
   /**
-   * Determines if there is a controller for a given type.
+   * Determines if there is a handler for a given type.
    *
-   * @param string $controller_type
-   *   The type of controller to check.
+   * @param string $handler_type
+   *   The type of handler to check.
    * @param bool $nested
-   *   (optional) If this controller has a nested definition. Defaults to FALSE.
+   *   (optional) If this handler has a nested definition. Defaults to FALSE.
    *
    * @return bool
-   *   TRUE if a controller of this type exists, FALSE otherwise.
+   *   TRUE if a handler of this type exists, FALSE otherwise.
    */
-  public function hasControllerClass($controller_type, $nested = FALSE);
+  public function hasHandlerClass($handler_type, $nested = FALSE);
 
   /**
-   * @param string $controller_type
-   *   The controller type to get.
+   * @param string $handler_type
+   *   The handler type to get.
    *
    * @return array|string|null
-   *   The controllers for a given type, or NULL if none exist.
+   *   The handlers for a given type, or NULL if none exist.
    */
-  public function getControllerClass($controller_type);
+  public function getHandlerClass($handler_type);
 
   /**
-   * Returns an array of controllers.
+   * Returns an array of handlers.
    *
    * @return array
-   *   An associative array where the keys are the names of different controller
+   *   An associative array where the keys are the names of different handler
    *   types (listed below) and the values are the names of the classes that
-   *   implement that controller:
+   *   implement that handler:
    *   - storage: The name of the class used to load the objects. The class must
    *     implement \Drupal\Core\Entity\EntityStorageInterface.
    *   - form: An associative array where the keys are the names of the
    *     different form operations (such as 'create', 'edit', or 'delete') and
-   *     the values are the names of the controller classes for those
+   *     the values are the names of the handler classes for those
    *     operations. The name of the operation is passed also to the form
-   *     controller's constructor, so that one class can be used for multiple
+   *     handler's constructor, so that one class can be used for multiple
    *     entity forms when the forms are similar. The classes must implement
    *     \Drupal\Core\Entity\EntityFormInterface.
    *   - list: The name of the class that provides listings of the entities. The
@@ -223,7 +223,7 @@ public function getControllerClass($controller_type);
    *     must implement \Drupal\Core\Entity\EntityAccessControlHandlerInterface.
    *     Defaults to \Drupal\Core\Entity\EntityAccessControlHandler.
    */
-  public function getControllerClasses();
+  public function getHandlerClasses();
 
   /**
    * Returns the storage class.
@@ -361,16 +361,16 @@ public function setAccessClass($class);
   public function isSubclassOf($class);
 
   /**
-   * Sets the controllers for a given type.
+   * Sets the handlers for a given type.
    *
-   * @param string $controller_type
-   *   The type of controller to set.
+   * @param string $handler_type
+   *   The type of handler to set.
    * @param array|string $value
-   *   The value for a controller type.
+   *   The value for a handler type.
    *
    * @return static
    */
-  public function setControllerClass($controller_type, $value);
+  public function setHandlerClass($handler_type, $value);
 
   /**
    * Returns the name of the default administrative permission.
diff --git a/core/lib/Drupal/Core/Entity/EntityViewBuilder.php b/core/lib/Drupal/Core/Entity/EntityViewBuilder.php
index 99438d6..802aa5d 100644
--- a/core/lib/Drupal/Core/Entity/EntityViewBuilder.php
+++ b/core/lib/Drupal/Core/Entity/EntityViewBuilder.php
@@ -21,14 +21,14 @@
 use Symfony\Component\DependencyInjection\ContainerInterface;
 
 /**
- * Base class for entity view controllers.
+ * Base class for entity view builders.
  *
  * @ingroup entity_api
  */
-class EntityViewBuilder extends EntityControllerBase implements EntityControllerInterface, EntityViewBuilderInterface {
+class EntityViewBuilder extends EntityHandlerBase implements EntityHandlerInterface, EntityViewBuilderInterface {
 
   /**
-   * The type of entities for which this controller is instantiated.
+   * The type of entities for which this view builder is instantiated.
    *
    * @var string
    */
diff --git a/core/lib/Drupal/Core/Entity/EntityViewBuilderInterface.php b/core/lib/Drupal/Core/Entity/EntityViewBuilderInterface.php
index 89812fb..93e6528 100644
--- a/core/lib/Drupal/Core/Entity/EntityViewBuilderInterface.php
+++ b/core/lib/Drupal/Core/Entity/EntityViewBuilderInterface.php
@@ -11,7 +11,7 @@
 use Drupal\Core\Field\FieldItemListInterface;
 
 /**
- * Defines a common interface for entity view controller classes.
+ * Defines an interface for entity view builders.
  *
  * @ingroup entity_api
  */
diff --git a/core/lib/Drupal/Core/Entity/Sql/SqlEntityStorageInterface.php b/core/lib/Drupal/Core/Entity/Sql/SqlEntityStorageInterface.php
index 8c4e3d8..107ed26 100644
--- a/core/lib/Drupal/Core/Entity/Sql/SqlEntityStorageInterface.php
+++ b/core/lib/Drupal/Core/Entity/Sql/SqlEntityStorageInterface.php
@@ -11,7 +11,7 @@
 use Drupal\Core\Entity\Schema\EntitySchemaProviderInterface;
 
 /**
- * A common interface for SQL-based storage controllers.
+ * A common interface for SQL-based entity storage implementations.
  */
 interface SqlEntityStorageInterface extends EntityStorageInterface, EntitySchemaProviderInterface {
 
diff --git a/core/lib/Drupal/Core/Field/FieldConfigBase.php b/core/lib/Drupal/Core/Field/FieldConfigBase.php
index 08c69f9..af57600 100644
--- a/core/lib/Drupal/Core/Field/FieldConfigBase.php
+++ b/core/lib/Drupal/Core/Field/FieldConfigBase.php
@@ -245,7 +245,7 @@ public function postSave(EntityStorageInterface $storage, $update = TRUE) {
 
     // Invalidate the render cache for all affected entities.
     $entity_type = $this->getFieldStorageDefinition()->getTargetEntityTypeId();
-    if ($this->entityManager()->hasController($entity_type, 'view_builder')) {
+    if ($this->entityManager()->hasHandler($entity_type, 'view_builder')) {
       $this->entityManager()->getViewBuilder($entity_type)->resetCache();
     }
   }
diff --git a/core/modules/aggregator/src/Entity/Feed.php b/core/modules/aggregator/src/Entity/Feed.php
index d70ec7d..368e8f1 100644
--- a/core/modules/aggregator/src/Entity/Feed.php
+++ b/core/modules/aggregator/src/Entity/Feed.php
@@ -20,7 +20,7 @@
  * @ContentEntityType(
  *   id = "aggregator_feed",
  *   label = @Translation("Aggregator feed"),
- *   controllers = {
+ *   handlers = {
  *     "storage" = "Drupal\aggregator\FeedStorage",
  *     "view_builder" = "Drupal\aggregator\FeedViewBuilder",
  *     "access" = "Drupal\aggregator\FeedAccessControlHandler",
diff --git a/core/modules/aggregator/src/Entity/Item.php b/core/modules/aggregator/src/Entity/Item.php
index f41080a5..445f42e 100644
--- a/core/modules/aggregator/src/Entity/Item.php
+++ b/core/modules/aggregator/src/Entity/Item.php
@@ -21,7 +21,7 @@
  * @ContentEntityType(
  *   id = "aggregator_item",
  *   label = @Translation("Aggregator feed item"),
- *   controllers = {
+ *   handlers = {
  *     "storage" = "Drupal\aggregator\ItemStorage",
  *     "view_builder" = "Drupal\aggregator\ItemViewBuilder",
  *     "access" = "Drupal\aggregator\FeedAccessControlHandler",
diff --git a/core/modules/aggregator/src/FeedStorageInterface.php b/core/modules/aggregator/src/FeedStorageInterface.php
index 2746b69..87875b9 100644
--- a/core/modules/aggregator/src/FeedStorageInterface.php
+++ b/core/modules/aggregator/src/FeedStorageInterface.php
@@ -11,7 +11,7 @@
 use Drupal\Core\Entity\EntityStorageInterface;
 
 /**
- * Defines a common interface for aggregator feed entity controller classes.
+ * Defines an interface for aggregator feed entity storage classes.
  */
 interface FeedStorageInterface extends EntityStorageInterface {
 
diff --git a/core/modules/aggregator/src/ItemStorageInterface.php b/core/modules/aggregator/src/ItemStorageInterface.php
index 44501d3..e0c7600 100644
--- a/core/modules/aggregator/src/ItemStorageInterface.php
+++ b/core/modules/aggregator/src/ItemStorageInterface.php
@@ -11,7 +11,7 @@
 use Drupal\Core\Entity\EntityStorageInterface;
 
 /**
- * Defines a common interface for aggregator item entity controller classes.
+ * Defines an interface for aggregator item entity storage classes.
  */
 interface ItemStorageInterface extends EntityStorageInterface {
 
diff --git a/core/modules/block/src/Entity/Block.php b/core/modules/block/src/Entity/Block.php
index afd5697..ee977d0 100644
--- a/core/modules/block/src/Entity/Block.php
+++ b/core/modules/block/src/Entity/Block.php
@@ -21,7 +21,7 @@
  * @ConfigEntityType(
  *   id = "block",
  *   label = @Translation("Block"),
- *   controllers = {
+ *   handlers = {
  *     "access" = "Drupal\block\BlockAccessControlHandler",
  *     "view_builder" = "Drupal\block\BlockViewBuilder",
  *     "list_builder" = "Drupal\block\BlockListBuilder",
diff --git a/core/modules/block_content/src/Entity/BlockContent.php b/core/modules/block_content/src/Entity/BlockContent.php
index b004261..310edf3 100644
--- a/core/modules/block_content/src/Entity/BlockContent.php
+++ b/core/modules/block_content/src/Entity/BlockContent.php
@@ -20,7 +20,7 @@
  *   id = "block_content",
  *   label = @Translation("Custom Block"),
  *   bundle_label = @Translation("Custom Block type"),
- *   controllers = {
+ *   handlers = {
  *     "storage" = "Drupal\block_content\BlockContentStorage",
  *     "access" = "Drupal\block_content\BlockContentAccessControlHandler",
  *     "list_builder" = "Drupal\block_content\BlockContentListBuilder",
diff --git a/core/modules/block_content/src/Entity/BlockContentType.php b/core/modules/block_content/src/Entity/BlockContentType.php
index 4304b6d..c8f325c 100644
--- a/core/modules/block_content/src/Entity/BlockContentType.php
+++ b/core/modules/block_content/src/Entity/BlockContentType.php
@@ -18,7 +18,7 @@
  * @ConfigEntityType(
  *   id = "block_content_type",
  *   label = @Translation("Custom block type"),
- *   controllers = {
+ *   handlers = {
  *     "form" = {
  *       "default" = "Drupal\block_content\BlockContentTypeForm",
  *       "add" = "Drupal\block_content\BlockContentTypeForm",
diff --git a/core/modules/comment/src/CommentStorageInterface.php b/core/modules/comment/src/CommentStorageInterface.php
index 9eb4a66..2ecf1a3 100644
--- a/core/modules/comment/src/CommentStorageInterface.php
+++ b/core/modules/comment/src/CommentStorageInterface.php
@@ -12,7 +12,7 @@
 use Drupal\Core\Entity\EntityStorageInterface;
 
 /**
- * Defines a common interface for comment entity controller classes.
+ * Defines an interface for comment entity storage classes.
  */
 interface CommentStorageInterface extends EntityStorageInterface {
 
diff --git a/core/modules/comment/src/Entity/Comment.php b/core/modules/comment/src/Entity/Comment.php
index edde6c3..a60bc83 100644
--- a/core/modules/comment/src/Entity/Comment.php
+++ b/core/modules/comment/src/Entity/Comment.php
@@ -23,7 +23,7 @@
  *   id = "comment",
  *   label = @Translation("Comment"),
  *   bundle_label = @Translation("Content type"),
- *   controllers = {
+ *   handlers = {
  *     "storage" = "Drupal\comment\CommentStorage",
  *     "access" = "Drupal\comment\CommentAccessControlHandler",
  *     "view_builder" = "Drupal\comment\CommentViewBuilder",
diff --git a/core/modules/comment/src/Entity/CommentType.php b/core/modules/comment/src/Entity/CommentType.php
index 5edc24d..3a1b3a8 100644
--- a/core/modules/comment/src/Entity/CommentType.php
+++ b/core/modules/comment/src/Entity/CommentType.php
@@ -17,7 +17,7 @@
  * @ConfigEntityType(
  *   id = "comment_type",
  *   label = @Translation("Comment type"),
- *   controllers = {
+ *   handlers = {
  *     "form" = {
  *       "default" = "Drupal\comment\CommentTypeForm",
  *       "add" = "Drupal\comment\CommentTypeForm",
diff --git a/core/modules/config/tests/config_test/src/Entity/ConfigQueryTest.php b/core/modules/config/tests/config_test/src/Entity/ConfigQueryTest.php
index c314fc6..2cbdd91 100644
--- a/core/modules/config/tests/config_test/src/Entity/ConfigQueryTest.php
+++ b/core/modules/config/tests/config_test/src/Entity/ConfigQueryTest.php
@@ -13,7 +13,7 @@
  * @ConfigEntityType(
  *   id = "config_query_test",
  *   label = @Translation("Test configuration for query"),
- *   controllers = {
+ *   handlers = {
  *     "storage" = "Drupal\config_test\ConfigTestStorage",
  *     "list_builder" = "Drupal\Core\Config\Entity\ConfigEntityListBuilder",
  *     "form" = {
diff --git a/core/modules/config/tests/config_test/src/Entity/ConfigTest.php b/core/modules/config/tests/config_test/src/Entity/ConfigTest.php
index 36f7a69..0a0d2f1 100644
--- a/core/modules/config/tests/config_test/src/Entity/ConfigTest.php
+++ b/core/modules/config/tests/config_test/src/Entity/ConfigTest.php
@@ -18,7 +18,7 @@
  * @ConfigEntityType(
  *   id = "config_test",
  *   label = @Translation("Test configuration"),
- *   controllers = {
+ *   handlers = {
  *     "storage" = "Drupal\config_test\ConfigTestStorage",
  *     "list_builder" = "Drupal\config_test\ConfigTestListBuilder",
  *     "form" = {
diff --git a/core/modules/config_translation/config_translation.module b/core/modules/config_translation/config_translation.module
index b0565b7..43aa754 100644
--- a/core/modules/config_translation/config_translation.module
+++ b/core/modules/config_translation/config_translation.module
@@ -100,7 +100,7 @@ function config_translation_entity_type_alter(array &$entity_types) {
       else {
         $class = 'Drupal\config_translation\Controller\ConfigTranslationEntityListBuilder';
       }
-      $entity_type->setControllerClass('config_translation_list', $class);
+      $entity_type->setHandlerClass('config_translation_list', $class);
 
       if ($entity_type->hasLinkTemplate('edit-form')) {
         $entity_type->setLinkTemplate('drupal:config-translation-overview', 'config_translation.item.overview.' . $entity_type->getLinkTemplate('edit-form'));
diff --git a/core/modules/config_translation/src/Controller/ConfigTranslationListController.php b/core/modules/config_translation/src/Controller/ConfigTranslationListController.php
index 380f2ff..76273dc 100644
--- a/core/modules/config_translation/src/Controller/ConfigTranslationListController.php
+++ b/core/modules/config_translation/src/Controller/ConfigTranslationListController.php
@@ -68,7 +68,7 @@ public function listing($mapper_id) {
     // node_type and block, fallback to the generic configuration translation
     // list controller.
     $build = $this->entityManager()
-      ->getController($entity_type, 'config_translation_list')
+      ->getHandler($entity_type, 'config_translation_list')
       ->setMapperDefinition($mapper_definition)
       ->render();
     $build['#title'] = $mapper->getTypeLabel();
diff --git a/core/modules/contact/src/Entity/ContactForm.php b/core/modules/contact/src/Entity/ContactForm.php
index 4cf623a..08075a1 100644
--- a/core/modules/contact/src/Entity/ContactForm.php
+++ b/core/modules/contact/src/Entity/ContactForm.php
@@ -7,9 +7,7 @@
 
 namespace Drupal\contact\Entity;
 
-use Drupal\Core\Config\Entity\ConfigEntityBase;
 use Drupal\Core\Config\Entity\ConfigEntityBundleBase;
-use Drupal\Core\Entity\EntityStorageInterface;
 use Drupal\contact\ContactFormInterface;
 
 /**
@@ -18,7 +16,7 @@
  * @ConfigEntityType(
  *   id = "contact_form",
  *   label = @Translation("Contact form"),
- *   controllers = {
+ *   handlers = {
  *     "access" = "Drupal\contact\ContactFormAccessControlHandler",
  *     "list_builder" = "Drupal\contact\ContactFormListBuilder",
  *     "form" = {
diff --git a/core/modules/contact/src/Entity/Message.php b/core/modules/contact/src/Entity/Message.php
index 9cf50bc..9d2269e 100644
--- a/core/modules/contact/src/Entity/Message.php
+++ b/core/modules/contact/src/Entity/Message.php
@@ -18,7 +18,7 @@
  * @ContentEntityType(
  *   id = "contact_message",
  *   label = @Translation("Contact message"),
- *   controllers = {
+ *   handlers = {
  *     "storage" = "Drupal\Core\Entity\ContentEntityNullStorage",
  *     "view_builder" = "Drupal\contact\MessageViewBuilder",
  *     "form" = {
diff --git a/core/modules/content_translation/content_translation.module b/core/modules/content_translation/content_translation.module
index d8b2819..1c56c55 100644
--- a/core/modules/content_translation/content_translation.module
+++ b/core/modules/content_translation/content_translation.module
@@ -85,14 +85,14 @@ function content_translation_language_types_info_alter(array &$language_types) {
  * in the 'links' entity info property must be defined.
  *
  * Every entity type needs a translation controller to be translated. This can
- * be specified through the 'translation' key in the 'controllers' entity info
- * property. If an entity type is translatable and no translation controller is
- * defined, \Drupal\content_translation\ContentTranslationHandler will be
- * assumed. Every translation controller class must implement
+ * be specified through the 'translation' key in the 'handlers' entity
+ * annotation property. If an entity type is translatable and no translation
+ * handler is defined, \Drupal\content_translation\ContentTranslationHandler
+ * will be assumed. Every translation handler must implement
  * \Drupal\content_translation\ContentTranslationHandlerInterface.
  *
  * If the entity paths match the default pattern above and there is no need for
- * an entity-specific translation controller class, Content Translation will
+ * an entity-specific translation handler, Content Translation will
  * provide built-in support for the entity. However enabling translation for
  * each translatable bundle will be required.
  *
@@ -103,8 +103,8 @@ function content_translation_entity_type_alter(array &$entity_types) {
   /** @var $entity_types \Drupal\Core\Entity\EntityTypeInterface[] */
   foreach ($entity_types as $entity_type) {
     if ($entity_type->isTranslatable()) {
-      if (!$entity_type->hasControllerClass('translation')) {
-        $entity_type->setControllerClass('translation', 'Drupal\content_translation\ContentTranslationHandler');
+      if (!$entity_type->hasHandlerClass('translation')) {
+        $entity_type->setHandlerClass('translation', 'Drupal\content_translation\ContentTranslationHandler');
       }
 
       $translation = $entity_type->get('translation');
@@ -330,7 +330,7 @@ function content_translation_enabled($entity_type, $bundle = NULL) {
 function content_translation_controller($entity_type_id) {
   $entity_type = \Drupal::entityManager()->getDefinition($entity_type_id);
   // @todo Throw an exception if the key is missing.
-  $class = $entity_type->getControllerClass('translation');
+  $class = $entity_type->getHandlerClass('translation');
   return new $class($entity_type);
 }
 
diff --git a/core/modules/content_translation/src/Access/ContentTranslationManageAccessCheck.php b/core/modules/content_translation/src/Access/ContentTranslationManageAccessCheck.php
index 116c992..5f12452 100644
--- a/core/modules/content_translation/src/Access/ContentTranslationManageAccessCheck.php
+++ b/core/modules/content_translation/src/Access/ContentTranslationManageAccessCheck.php
@@ -76,7 +76,7 @@ public function access(Route $route, Request $request, AccountInterface $account
       $operation = $route->getRequirement('_access_content_translation_manage');
 
       /* @var \Drupal\content_translation\ContentTranslationHandlerInterface $handler */
-      $handler = $this->entityManager->getController($entity->getEntityTypeId(), 'translation');
+      $handler = $this->entityManager->getHandler($entity->getEntityTypeId(), 'translation');
 
       // Load translation.
       $translations = $entity->getTranslationLanguages();
diff --git a/core/modules/content_translation/src/Controller/ContentTranslationController.php b/core/modules/content_translation/src/Controller/ContentTranslationController.php
index 8d5a306..b442c04 100644
--- a/core/modules/content_translation/src/Controller/ContentTranslationController.php
+++ b/core/modules/content_translation/src/Controller/ContentTranslationController.php
@@ -48,7 +48,7 @@ public function prepareTranslation(ContentEntityInterface $entity, LanguageInter
   public function overview(Request $request, $entity_type_id = NULL) {
     $entity = $request->attributes->get($entity_type_id);
     $account = $this->currentUser();
-    $handler = $this->entityManager()->getController($entity_type_id, 'translation');
+    $handler = $this->entityManager()->getHandler($entity_type_id, 'translation');
 
     $languages = $this->languageManager()->getLanguages();
     $original = $entity->getUntranslated()->language()->getId();
diff --git a/core/modules/content_translation/tests/src/Access/ContentTranslationManageAccessCheckTest.php b/core/modules/content_translation/tests/src/Access/ContentTranslationManageAccessCheckTest.php
index cc6d15e..ffbb60b 100644
--- a/core/modules/content_translation/tests/src/Access/ContentTranslationManageAccessCheckTest.php
+++ b/core/modules/content_translation/tests/src/Access/ContentTranslationManageAccessCheckTest.php
@@ -36,7 +36,7 @@ public function testCreateAccess() {
 
     $entity_manager = $this->getMock('Drupal\Core\Entity\EntityManagerInterface');
     $entity_manager->expects($this->once())
-      ->method('getController')
+      ->method('getHandler')
       ->withAnyParameters()
       ->will($this->returnValue($translation_handler));
 
diff --git a/core/modules/datetime/src/Tests/DateTimeFieldTest.php b/core/modules/datetime/src/Tests/DateTimeFieldTest.php
index 8f7394b..1ecb656 100644
--- a/core/modules/datetime/src/Tests/DateTimeFieldTest.php
+++ b/core/modules/datetime/src/Tests/DateTimeFieldTest.php
@@ -480,7 +480,7 @@ function testInvalidField() {
    */
   protected function renderTestEntity($id, $view_mode = 'full', $reset = TRUE) {
     if ($reset) {
-      entity_get_controller('entity_test')->resetCache(array($id));
+      \Drupal::entityManager()->getStorage('entity_test')->resetCache(array($id));
     }
     $entity = entity_load('entity_test', $id);
     $display = EntityViewDisplay::collectRenderDisplay($entity, $view_mode);
diff --git a/core/modules/entity/src/Entity/EntityFormMode.php b/core/modules/entity/src/Entity/EntityFormMode.php
index 5b2f59a..7af8e06 100644
--- a/core/modules/entity/src/Entity/EntityFormMode.php
+++ b/core/modules/entity/src/Entity/EntityFormMode.php
@@ -31,7 +31,7 @@
  * @ConfigEntityType(
  *   id = "form_mode",
  *   label = @Translation("Form mode"),
- *   controllers = {
+ *   handlers = {
  *     "list_builder" = "Drupal\entity\EntityFormModeListBuilder",
  *     "form" = {
  *       "add" = "Drupal\entity\Form\EntityFormModeAddForm",
diff --git a/core/modules/entity/src/Entity/EntityViewDisplay.php b/core/modules/entity/src/Entity/EntityViewDisplay.php
index 3dcc55d..1e4b827 100644
--- a/core/modules/entity/src/Entity/EntityViewDisplay.php
+++ b/core/modules/entity/src/Entity/EntityViewDisplay.php
@@ -19,7 +19,7 @@
  * @ConfigEntityType(
  *   id = "entity_view_display",
  *   label = @Translation("Entity view display"),
- *   controllers = {
+ *   handlers = {
  *     "storage" = "Drupal\Core\Config\Entity\ConfigEntityStorage"
  *   },
  *   config_prefix = "view_display",
diff --git a/core/modules/entity/src/Entity/EntityViewMode.php b/core/modules/entity/src/Entity/EntityViewMode.php
index ef59f56..67e27f4 100644
--- a/core/modules/entity/src/Entity/EntityViewMode.php
+++ b/core/modules/entity/src/Entity/EntityViewMode.php
@@ -32,7 +32,7 @@
  * @ConfigEntityType(
  *   id = "view_mode",
  *   label = @Translation("View mode"),
- *   controllers = {
+ *   handlers = {
  *     "list_builder" = "Drupal\entity\EntityDisplayModeListBuilder",
  *     "form" = {
  *       "add" = "Drupal\entity\Form\EntityDisplayModeAddForm",
diff --git a/core/modules/entity/src/EntityDisplayBase.php b/core/modules/entity/src/EntityDisplayBase.php
index ff6d40e..8b108a21 100644
--- a/core/modules/entity/src/EntityDisplayBase.php
+++ b/core/modules/entity/src/EntityDisplayBase.php
@@ -197,7 +197,7 @@ public function calculateDependencies() {
    */
   public function postSave(EntityStorageInterface $storage, $update = TRUE) {
     // Reset the render cache for the target entity type.
-    if (\Drupal::entityManager()->hasController($this->targetEntityType, 'view_builder')) {
+    if (\Drupal::entityManager()->hasHandler($this->targetEntityType, 'view_builder')) {
       \Drupal::entityManager()->getViewBuilder($this->targetEntityType)->resetCache();
     }
   }
diff --git a/core/modules/field/src/Entity/FieldInstanceConfig.php b/core/modules/field/src/Entity/FieldInstanceConfig.php
index 23a4dc8..81b9396 100644
--- a/core/modules/field/src/Entity/FieldInstanceConfig.php
+++ b/core/modules/field/src/Entity/FieldInstanceConfig.php
@@ -20,7 +20,7 @@
  * @ConfigEntityType(
  *   id = "field_instance_config",
  *   label = @Translation("Field instance"),
- *   controllers = {
+ *   handlers = {
  *     "access" = "Drupal\field\FieldInstanceConfigAccessControlHandler",
  *     "storage" = "Drupal\field\FieldInstanceConfigStorage"
  *   },
diff --git a/core/modules/field/src/Entity/FieldStorageConfig.php b/core/modules/field/src/Entity/FieldStorageConfig.php
index 2c0e60b..46c87d5 100644
--- a/core/modules/field/src/Entity/FieldStorageConfig.php
+++ b/core/modules/field/src/Entity/FieldStorageConfig.php
@@ -21,7 +21,7 @@
  * @ConfigEntityType(
  *   id = "field_storage_config",
  *   label = @Translation("Field"),
- *   controllers = {
+ *   handlers = {
  *     "storage" = "Drupal\field\FieldStorageConfigStorage"
  *   },
  *   config_prefix = "storage",
@@ -353,7 +353,7 @@ public function postSave(EntityStorageInterface $storage, $update = TRUE) {
       // Invalidate the render cache for all affected entities.
       $entity_manager = \Drupal::entityManager();
       $entity_type = $this->getTargetEntityTypeId();
-      if ($entity_manager->hasController($entity_type, 'view_builder')) {
+      if ($entity_manager->hasHandler($entity_type, 'view_builder')) {
         $entity_manager->getViewBuilder($entity_type)->resetCache();
       }
     }
diff --git a/core/modules/field/src/Tests/FieldTestBase.php b/core/modules/field/src/Tests/FieldTestBase.php
index 6bf45a4..d71f152 100644
--- a/core/modules/field/src/Tests/FieldTestBase.php
+++ b/core/modules/field/src/Tests/FieldTestBase.php
@@ -52,7 +52,7 @@ function _generateTestFieldValues($cardinality) {
    */
   function assertFieldValues(EntityInterface $entity, $field_name, $expected_values, $langcode = LanguageInterface::LANGCODE_NOT_SPECIFIED, $column = 'value') {
     // Re-load the entity to make sure we have the latest changes.
-    entity_get_controller($entity->getEntityTypeId())->resetCache(array($entity->id()));
+    \Drupal::entityManager()->getStorage($entity->getEntityTypeId())->resetCache(array($entity->id()));
     $e = entity_load($entity->getEntityTypeId(), $entity->id());
     $field = $values = $e->getTranslation($langcode)->$field_name;
     // Filter out empty values so that they don't mess with the assertions.
diff --git a/core/modules/field/src/Tests/FieldUnitTestBase.php b/core/modules/field/src/Tests/FieldUnitTestBase.php
index 9cf33d0..66ba2a0 100644
--- a/core/modules/field/src/Tests/FieldUnitTestBase.php
+++ b/core/modules/field/src/Tests/FieldUnitTestBase.php
@@ -161,7 +161,7 @@ protected function _generateTestFieldValues($cardinality) {
    */
   protected function assertFieldValues(EntityInterface $entity, $field_name, $expected_values, $langcode = LanguageInterface::LANGCODE_NOT_SPECIFIED, $column = 'value') {
     // Re-load the entity to make sure we have the latest changes.
-    entity_get_controller($entity->getEntityTypeId())->resetCache(array($entity->id()));
+    \Drupal::entityManager()->getStorage($entity->getEntityTypeId())->resetCache(array($entity->id()));
     $e = entity_load($entity->getEntityTypeId(), $entity->id());
     $field = $values = $e->getTranslation($langcode)->$field_name;
     // Filter out empty values so that they don't mess with the assertions.
diff --git a/core/modules/field/src/Tests/FormTest.php b/core/modules/field/src/Tests/FormTest.php
index e4a04a7..bea7e14 100644
--- a/core/modules/field/src/Tests/FormTest.php
+++ b/core/modules/field/src/Tests/FormTest.php
@@ -627,7 +627,7 @@ function testHiddenField() {
     $edit = array("{$field_name}[0][value]" => $value);
     $this->drupalPostForm(NULL, $edit, t('Save'));
     $this->assertText(t('entity_test_rev @id has been updated.', array('@id' => $id)), 'Entity was updated');
-    entity_get_controller($entity_type)->resetCache(array($id));
+    \Drupal::entityManager()->getStorage($entity_type)->resetCache(array($id));
     $entity = entity_load($entity_type, $id);
     $this->assertEqual($entity->{$field_name}->value, $value, 'Field value was updated');
 
@@ -641,7 +641,7 @@ function testHiddenField() {
     $this->drupalPostForm($entity_type . '/manage/' . $id, $edit, t('Save'));
 
     // Check that the expected value has been carried over to the new revision.
-    entity_get_controller($entity_type)->resetCache(array($id));
+    \Drupal::entityManager()->getStorage($entity_type)->resetCache(array($id));
     $entity = entity_load($entity_type, $id);
     $this->assertEqual($entity->{$field_name}->value, $value, 'New revision has the expected value for the field with the Hidden widget');
   }
diff --git a/core/modules/field_ui/tests/modules/field_ui_test/src/Entity/FieldUITestNoBundle.php b/core/modules/field_ui/tests/modules/field_ui_test/src/Entity/FieldUITestNoBundle.php
index bc4c3bc..be18202 100644
--- a/core/modules/field_ui/tests/modules/field_ui_test/src/Entity/FieldUITestNoBundle.php
+++ b/core/modules/field_ui/tests/modules/field_ui_test/src/Entity/FieldUITestNoBundle.php
@@ -15,7 +15,7 @@
  * @EntityType(
  *   id = "field_ui_test_no_bundle",
  *   label = @Translation("Test Field UI entity, no bundle"),
- *   controllers = {
+ *   handlers = {
  *     "storage" = "Drupal\Core\Entity\EntityDatabaseStorage"
  *   },
  *   fieldable = TRUE
diff --git a/core/modules/file/src/Entity/File.php b/core/modules/file/src/Entity/File.php
index 48745d8..28d1ab65 100644
--- a/core/modules/file/src/Entity/File.php
+++ b/core/modules/file/src/Entity/File.php
@@ -21,7 +21,7 @@
  * @ContentEntityType(
  *   id = "file",
  *   label = @Translation("File"),
- *   controllers = {
+ *   handlers = {
  *     "storage" = "Drupal\file\FileStorage",
  *     "access" = "Drupal\file\FileAccessControlHandler",
  *     "view_builder" = "Drupal\Core\Entity\EntityViewBuilder",
diff --git a/core/modules/file/src/FileStorageInterface.php b/core/modules/file/src/FileStorageInterface.php
index 2ec6d50..75bc564 100644
--- a/core/modules/file/src/FileStorageInterface.php
+++ b/core/modules/file/src/FileStorageInterface.php
@@ -10,7 +10,7 @@
 use Drupal\Core\Entity\EntityStorageInterface;
 
 /**
- * Defines a common interface for file entity controller classes.
+ * Defines an interface for file entity storage classes.
  */
 interface FileStorageInterface extends EntityStorageInterface {
 
diff --git a/core/modules/filter/src/Entity/FilterFormat.php b/core/modules/filter/src/Entity/FilterFormat.php
index 2e68bba..c293025 100644
--- a/core/modules/filter/src/Entity/FilterFormat.php
+++ b/core/modules/filter/src/Entity/FilterFormat.php
@@ -20,7 +20,7 @@
  * @ConfigEntityType(
  *   id = "filter_format",
  *   label = @Translation("Text format"),
- *   controllers = {
+ *   handlers = {
  *     "form" = {
  *       "add" = "Drupal\filter\FilterFormatAddForm",
  *       "edit" = "Drupal\filter\FilterFormatEditForm",
diff --git a/core/modules/image/src/Entity/ImageStyle.php b/core/modules/image/src/Entity/ImageStyle.php
index dbb2155..4506891 100644
--- a/core/modules/image/src/Entity/ImageStyle.php
+++ b/core/modules/image/src/Entity/ImageStyle.php
@@ -26,7 +26,7 @@
  * @ConfigEntityType(
  *   id = "image_style",
  *   label = @Translation("Image style"),
- *   controllers = {
+ *   handlers = {
  *     "form" = {
  *       "add" = "Drupal\image\Form\ImageStyleAddForm",
  *       "edit" = "Drupal\image\Form\ImageStyleEditForm",
diff --git a/core/modules/language/src/Entity/ConfigurableLanguage.php b/core/modules/language/src/Entity/ConfigurableLanguage.php
index 54576c7..c252010 100644
--- a/core/modules/language/src/Entity/ConfigurableLanguage.php
+++ b/core/modules/language/src/Entity/ConfigurableLanguage.php
@@ -20,7 +20,7 @@
  * @ConfigEntityType(
  *   id = "configurable_language",
  *   label = @Translation("Language"),
- *   controllers = {
+ *   handlers = {
  *     "list_builder" = "Drupal\language\LanguageListBuilder",
  *     "access" = "Drupal\language\LanguageAccessControlHandler",
  *     "form" = {
diff --git a/core/modules/language/src/Form/NegotiationConfigureForm.php b/core/modules/language/src/Form/NegotiationConfigureForm.php
index 28e4d23..4e3283a 100644
--- a/core/modules/language/src/Form/NegotiationConfigureForm.php
+++ b/core/modules/language/src/Form/NegotiationConfigureForm.php
@@ -98,7 +98,7 @@ public function __construct(ConfigFactoryInterface $config_factory, Configurable
    */
   public static function create(ContainerInterface $container) {
     $entity_manager = $container->get('entity.manager');
-    $block_storage = $entity_manager->hasController('block', 'storage') ? $entity_manager->getStorage('block') : NULL;
+    $block_storage = $entity_manager->hasHandler('block', 'storage') ? $entity_manager->getStorage('block') : NULL;
     return new static(
       $container->get('config.factory'),
       $container->get('language_manager'),
diff --git a/core/modules/link/src/Tests/LinkFieldTest.php b/core/modules/link/src/Tests/LinkFieldTest.php
index cba6f38..6729e6b 100644
--- a/core/modules/link/src/Tests/LinkFieldTest.php
+++ b/core/modules/link/src/Tests/LinkFieldTest.php
@@ -554,7 +554,7 @@ function testLinkSeparateFormatter() {
    * @param string $view_mode
    *   (optional) The view mode to use for rendering.
    * @param bool $reset
-   *   (optional) Whether to reset the test_entity controller cache. Defaults to
+   *   (optional) Whether to reset the entity_test storage cache. Defaults to
    *   TRUE to simplify testing.
    */
   protected function renderTestEntity($id, $view_mode = 'full', $reset = TRUE) {
diff --git a/core/modules/menu_link_content/src/Entity/MenuLinkContent.php b/core/modules/menu_link_content/src/Entity/MenuLinkContent.php
index 11f1d12..28cefe4 100644
--- a/core/modules/menu_link_content/src/Entity/MenuLinkContent.php
+++ b/core/modules/menu_link_content/src/Entity/MenuLinkContent.php
@@ -20,7 +20,7 @@
  * @ContentEntityType(
  *   id = "menu_link_content",
  *   label = @Translation("Custom menu link"),
- *   controllers = {
+ *   handlers = {
  *     "storage" = "Drupal\Core\Entity\ContentEntityDatabaseStorage",
  *     "access" = "Drupal\menu_link_content\MenuLinkContentAccessControlHandler",
  *     "form" = {
diff --git a/core/modules/menu_link_content/src/MenuLinkContentAccessControlHandler.php b/core/modules/menu_link_content/src/MenuLinkContentAccessControlHandler.php
index e2d43c7..4274a8e 100644
--- a/core/modules/menu_link_content/src/MenuLinkContentAccessControlHandler.php
+++ b/core/modules/menu_link_content/src/MenuLinkContentAccessControlHandler.php
@@ -8,7 +8,7 @@
 
 use Drupal\Core\Access\AccessManagerInterface;
 use Drupal\Core\Entity\EntityAccessControlHandler;
-use Drupal\Core\Entity\EntityControllerInterface;
+use Drupal\Core\Entity\EntityHandlerInterface;
 use Drupal\Core\Entity\EntityInterface;
 use Drupal\Core\Entity\EntityTypeInterface;
 use Drupal\Core\Session\AccountInterface;
@@ -17,7 +17,7 @@
 /**
  * Defines the access control handler for the user entity type.
  */
-class MenuLinkContentAccessControlHandler extends EntityAccessControlHandler implements EntityControllerInterface {
+class MenuLinkContentAccessControlHandler extends EntityAccessControlHandler implements EntityHandlerInterface {
 
   /**
    * The access manager to check routes by name.
diff --git a/core/modules/migrate/src/Entity/Migration.php b/core/modules/migrate/src/Entity/Migration.php
index 4331c69..841171a 100644
--- a/core/modules/migrate/src/Entity/Migration.php
+++ b/core/modules/migrate/src/Entity/Migration.php
@@ -22,7 +22,7 @@
  *   id = "migration",
  *   label = @Translation("Migration"),
  *   module = "migrate",
- *   controllers = {
+ *   handlers = {
  *     "storage" = "Drupal\migrate\MigrationStorage"
  *   },
  *   entity_keys = {
diff --git a/core/modules/migrate_drupal/migrate_drupal.module b/core/modules/migrate_drupal/migrate_drupal.module
index 7b85d80..f76e67c 100644
--- a/core/modules/migrate_drupal/migrate_drupal.module
+++ b/core/modules/migrate_drupal/migrate_drupal.module
@@ -7,5 +7,5 @@ function migrate_drupal_entity_type_alter(array &$entity_types) {
   /** @var \Drupal\Core\Config\Entity\ConfigEntityType[] $entity_types */
   $entity_types['migration']
     ->setClass('Drupal\migrate_drupal\Entity\Migration')
-    ->setControllerClass('storage', 'Drupal\migrate_drupal\MigrationStorage');
+    ->setHandlerClass('storage', 'Drupal\migrate_drupal\MigrationStorage');
 }
diff --git a/core/modules/node/src/Entity/Node.php b/core/modules/node/src/Entity/Node.php
index da0eb0b..b96e9d2 100644
--- a/core/modules/node/src/Entity/Node.php
+++ b/core/modules/node/src/Entity/Node.php
@@ -23,7 +23,7 @@
  *   id = "node",
  *   label = @Translation("Content"),
  *   bundle_label = @Translation("Content type"),
- *   controllers = {
+ *   handlers = {
  *     "storage" = "Drupal\node\NodeStorage",
  *     "view_builder" = "Drupal\node\NodeViewBuilder",
  *     "access" = "Drupal\node\NodeAccessControlHandler",
diff --git a/core/modules/node/src/Entity/NodeType.php b/core/modules/node/src/Entity/NodeType.php
index 5f28ee9..22f66d4 100644
--- a/core/modules/node/src/Entity/NodeType.php
+++ b/core/modules/node/src/Entity/NodeType.php
@@ -18,7 +18,7 @@
  * @ConfigEntityType(
  *   id = "node_type",
  *   label = @Translation("Content type"),
- *   controllers = {
+ *   handlers = {
  *     "access" = "Drupal\node\NodeTypeAccessControlHandler",
  *     "form" = {
  *       "add" = "Drupal\node\NodeTypeForm",
diff --git a/core/modules/node/src/NodeAccessControlHandler.php b/core/modules/node/src/NodeAccessControlHandler.php
index 3bd534e..8cde33b 100644
--- a/core/modules/node/src/NodeAccessControlHandler.php
+++ b/core/modules/node/src/NodeAccessControlHandler.php
@@ -7,7 +7,7 @@
 
 namespace Drupal\node;
 
-use Drupal\Core\Entity\EntityControllerInterface;
+use Drupal\Core\Entity\EntityHandlerInterface;
 use Drupal\Core\Entity\EntityTypeInterface;
 use Drupal\Core\Field\FieldDefinitionInterface;
 use Drupal\Core\Field\FieldItemListInterface;
@@ -22,7 +22,7 @@
  *
  * @see \Drupal\node\Entity\Node
  */
-class NodeAccessControlHandler extends EntityAccessControlHandler implements NodeAccessControlHandlerInterface, EntityControllerInterface {
+class NodeAccessControlHandler extends EntityAccessControlHandler implements NodeAccessControlHandlerInterface, EntityHandlerInterface {
 
   /**
    * The node grant storage.
diff --git a/core/modules/node/src/NodeStorageInterface.php b/core/modules/node/src/NodeStorageInterface.php
index db68307..1b8da20 100644
--- a/core/modules/node/src/NodeStorageInterface.php
+++ b/core/modules/node/src/NodeStorageInterface.php
@@ -11,7 +11,7 @@
 use Drupal\Core\Session\AccountInterface;
 
 /**
- * Defines a common interface for node entity controller classes.
+ * Defines an interface for node entity storage classes.
  */
 interface NodeStorageInterface extends EntityStorageInterface {
 
diff --git a/core/modules/rdf/src/Entity/RdfMapping.php b/core/modules/rdf/src/Entity/RdfMapping.php
index 072f1af..b842547 100644
--- a/core/modules/rdf/src/Entity/RdfMapping.php
+++ b/core/modules/rdf/src/Entity/RdfMapping.php
@@ -156,7 +156,7 @@ public function calculateDependencies() {
   public function postSave(EntityStorageInterface $storage, $update = TRUE) {
     parent::postSave($storage, $update);
 
-    if (\Drupal::entityManager()->hasController($this->targetEntityType, 'view_builder')) {
+    if (\Drupal::entityManager()->hasHandler($this->targetEntityType, 'view_builder')) {
       \Drupal::entityManager()->getViewBuilder($this->targetEntityType)->resetCache();
     }
   }
diff --git a/core/modules/responsive_image/src/Entity/ResponsiveImageMapping.php b/core/modules/responsive_image/src/Entity/ResponsiveImageMapping.php
index 0780a0c..ffa63af 100644
--- a/core/modules/responsive_image/src/Entity/ResponsiveImageMapping.php
+++ b/core/modules/responsive_image/src/Entity/ResponsiveImageMapping.php
@@ -17,7 +17,7 @@
  * @ConfigEntityType(
  *   id = "responsive_image_mapping",
  *   label = @Translation("Responsive image mapping"),
- *   controllers = {
+ *   handlers = {
  *     "list_builder" = "Drupal\responsive_image\ResponsiveImageMappingListBuilder",
  *     "form" = {
  *       "edit" = "Drupal\responsive_image\ResponsiveImageMappingForm",
diff --git a/core/modules/search/src/Entity/SearchPage.php b/core/modules/search/src/Entity/SearchPage.php
index 4d15e55..28aa0f8 100644
--- a/core/modules/search/src/Entity/SearchPage.php
+++ b/core/modules/search/src/Entity/SearchPage.php
@@ -22,7 +22,7 @@
  * @ConfigEntityType(
  *   id = "search_page",
  *   label = @Translation("Search page"),
- *   controllers = {
+ *   handlers = {
  *     "access" = "Drupal\search\SearchPageAccessControlHandler",
  *     "storage" = "Drupal\Core\Config\Entity\ConfigEntityStorage",
  *     "list_builder" = "Drupal\search\SearchPageListBuilder",
diff --git a/core/modules/shortcut/src/Entity/Shortcut.php b/core/modules/shortcut/src/Entity/Shortcut.php
index 706ef0a..75541b8 100644
--- a/core/modules/shortcut/src/Entity/Shortcut.php
+++ b/core/modules/shortcut/src/Entity/Shortcut.php
@@ -21,7 +21,7 @@
  * @ContentEntityType(
  *   id = "shortcut",
  *   label = @Translation("Shortcut link"),
- *   controllers = {
+ *   handlers = {
  *     "access" = "Drupal\shortcut\ShortcutAccessControlHandler",
  *     "form" = {
  *       "default" = "Drupal\shortcut\ShortcutForm",
diff --git a/core/modules/shortcut/src/Entity/ShortcutSet.php b/core/modules/shortcut/src/Entity/ShortcutSet.php
index 5957961..a9fc866 100644
--- a/core/modules/shortcut/src/Entity/ShortcutSet.php
+++ b/core/modules/shortcut/src/Entity/ShortcutSet.php
@@ -17,7 +17,7 @@
  * @ConfigEntityType(
  *   id = "shortcut_set",
  *   label = @Translation("Shortcut set"),
- *   controllers = {
+ *   handlers = {
  *     "storage" = "Drupal\shortcut\ShortcutSetStorage",
  *     "access" = "Drupal\shortcut\ShortcutSetAccessControlHandler",
  *     "list_builder" = "Drupal\shortcut\ShortcutSetListBuilder",
diff --git a/core/modules/shortcut/src/ShortcutAccessControlHandler.php b/core/modules/shortcut/src/ShortcutAccessControlHandler.php
index c08f096..d07a2f5 100644
--- a/core/modules/shortcut/src/ShortcutAccessControlHandler.php
+++ b/core/modules/shortcut/src/ShortcutAccessControlHandler.php
@@ -8,7 +8,7 @@
 namespace Drupal\shortcut;
 
 use Drupal\Core\Entity\EntityAccessControlHandler;
-use Drupal\Core\Entity\EntityControllerInterface;
+use Drupal\Core\Entity\EntityHandlerInterface;
 use Drupal\Core\Entity\EntityInterface;
 use Drupal\Core\Entity\EntityTypeInterface;
 use Drupal\Core\Session\AccountInterface;
@@ -19,7 +19,7 @@
  *
  * @see \Drupal\shortcut\Entity\Shortcut
  */
-class ShortcutAccessControlHandler extends EntityAccessControlHandler implements EntityControllerInterface {
+class ShortcutAccessControlHandler extends EntityAccessControlHandler implements EntityHandlerInterface {
 
   /**
    * The shortcut_set storage.
diff --git a/core/modules/shortcut/src/ShortcutSetStorageInterface.php b/core/modules/shortcut/src/ShortcutSetStorageInterface.php
index 995ed9f..8881c84 100644
--- a/core/modules/shortcut/src/ShortcutSetStorageInterface.php
+++ b/core/modules/shortcut/src/ShortcutSetStorageInterface.php
@@ -11,7 +11,7 @@
 use Drupal\Core\Session\AccountInterface;
 
 /**
- * Defines a common interface for shortcut entity controller classes.
+ * Defines an interface for shortcut_set entity storage classes.
  */
 interface ShortcutSetStorageInterface extends ConfigEntityStorageInterface {
 
diff --git a/core/modules/system/entity.api.php b/core/modules/system/entity.api.php
index 56505c2..f4bbfd2 100644
--- a/core/modules/system/entity.api.php
+++ b/core/modules/system/entity.api.php
@@ -379,7 +379,7 @@
  *   block.default refers to the 'default' form controller on the block entity
  *   type, whose annotation contains:
  *   @code
- *   controllers = {
+ *   handlers = {
  *     "form" = {
  *       "default" = "Drupal\block\BlockForm",
  *   @endcode
diff --git a/core/modules/system/src/Entity/DateFormat.php b/core/modules/system/src/Entity/DateFormat.php
index 774eb3c..67614d2 100644
--- a/core/modules/system/src/Entity/DateFormat.php
+++ b/core/modules/system/src/Entity/DateFormat.php
@@ -18,7 +18,7 @@
  * @ConfigEntityType(
  *   id = "date_format",
  *   label = @Translation("Date format"),
- *   controllers = {
+ *   handlers = {
  *     "access" = "Drupal\system\DateFormatAccessControlHandler",
  *     "list_builder" = "Drupal\system\DateFormatListBuilder",
  *     "form" = {
diff --git a/core/modules/system/src/Entity/Menu.php b/core/modules/system/src/Entity/Menu.php
index a1848bb..d44b698 100644
--- a/core/modules/system/src/Entity/Menu.php
+++ b/core/modules/system/src/Entity/Menu.php
@@ -17,7 +17,7 @@
  * @ConfigEntityType(
  *   id = "menu",
  *   label = @Translation("Menu"),
- *   controllers = {
+ *   handlers = {
  *     "access" = "Drupal\system\MenuAccessControlHandler"
  *   },
  *   admin_permission = "administer menu",
diff --git a/core/modules/system/src/Tests/Entity/EntityApiInfoTest.php b/core/modules/system/src/Tests/Entity/EntityApiInfoTest.php
index a32a239..8b48f95 100644
--- a/core/modules/system/src/Tests/Entity/EntityApiInfoTest.php
+++ b/core/modules/system/src/Tests/Entity/EntityApiInfoTest.php
@@ -48,6 +48,6 @@ function testEntityInfoCacheModulesEnabled() {
     \Drupal::moduleHandler()->install(array('entity_cache_test'));
     $entity_type = \Drupal::state()->get('entity_cache_test');
     $this->assertEqual($entity_type->getLabel(), 'Entity Cache Test', 'Entity info label is correct.');
-    $this->assertEqual($entity_type->getStorageClass(), 'Drupal\Core\Entity\EntityDatabaseStorage', 'Entity controller class info is correct.');
+    $this->assertEqual($entity_type->getStorageClass(), 'Drupal\Core\Entity\EntityDatabaseStorage', 'Entity handler class info is correct.');
   }
 }
diff --git a/core/modules/system/src/Tests/Entity/EntityCacheTagsTestBase.php b/core/modules/system/src/Tests/Entity/EntityCacheTagsTestBase.php
index 472d408..94b27fc 100644
--- a/core/modules/system/src/Tests/Entity/EntityCacheTagsTestBase.php
+++ b/core/modules/system/src/Tests/Entity/EntityCacheTagsTestBase.php
@@ -208,7 +208,7 @@ protected function createReferenceTestEntities($referenced_entity) {
         ),
       ),
     ))->save();
-    if (!$this->entity->getEntityType()->hasControllerClass('view_builder')) {
+    if (!$this->entity->getEntityType()->hasHandlerClass('view_builder')) {
       entity_get_display($entity_type, $bundle, 'full')
         ->setComponent($field_name, array(
           'type' => 'entity_reference_label',
@@ -270,7 +270,7 @@ public function testReferencedEntity() {
     $theme_cache_tags = array('theme:stark', 'theme_global_settings:1');
 
     $view_cache_tag = array();
-    if ($this->entity->getEntityType()->hasControllerClass('view_builder')) {
+    if ($this->entity->getEntityType()->hasHandlerClass('view_builder')) {
       $view_cache_tag = \Drupal::entityManager()->getViewBuilder($entity_type)
         ->getCacheTag();
     }
@@ -362,7 +362,7 @@ public function testReferencedEntity() {
     $this->verifyPageCache($non_referencing_entity_path, 'HIT');
 
 
-    if ($this->entity->getEntityType()->hasControllerClass('view_builder')) {
+    if ($this->entity->getEntityType()->hasHandlerClass('view_builder')) {
       // Verify that after modifying the entity's display, there is a cache miss
       // for both the referencing entity, and the listing of referencing
       // entities, but not for the non-referencing entity.
diff --git a/core/modules/system/tests/modules/entity_cache_test_dependency/src/Entity/EntityCacheTest.php b/core/modules/system/tests/modules/entity_cache_test_dependency/src/Entity/EntityCacheTest.php
index dec7c7c..4c9c243 100644
--- a/core/modules/system/tests/modules/entity_cache_test_dependency/src/Entity/EntityCacheTest.php
+++ b/core/modules/system/tests/modules/entity_cache_test_dependency/src/Entity/EntityCacheTest.php
@@ -15,7 +15,7 @@
  * @EntityType(
  *   id = "entity_cache_test",
  *   label = @Translation("Entity cache test"),
- *   controllers = {
+ *   handlers = {
  *     "storage" = "Drupal\Core\Entity\EntityDatabaseStorage",
  *   }
  * )
diff --git a/core/modules/system/tests/modules/entity_test/src/Entity/EntityTest.php b/core/modules/system/tests/modules/entity_test/src/Entity/EntityTest.php
index 2470c8c..f66df2e 100644
--- a/core/modules/system/tests/modules/entity_test/src/Entity/EntityTest.php
+++ b/core/modules/system/tests/modules/entity_test/src/Entity/EntityTest.php
@@ -20,7 +20,7 @@
  * @ContentEntityType(
  *   id = "entity_test",
  *   label = @Translation("Test entity"),
- *   controllers = {
+ *   handlers = {
  *     "list_builder" = "Drupal\entity_test\EntityTestListBuilder",
  *     "view_builder" = "Drupal\entity_test\EntityTestViewBuilder",
  *     "views_data" = "Drupal\entity_test\EntityTestViewsData",
diff --git a/core/modules/system/tests/modules/entity_test/src/Entity/EntityTestBaseFieldDisplay.php b/core/modules/system/tests/modules/entity_test/src/Entity/EntityTestBaseFieldDisplay.php
index 79cf39f..9f1ef65 100644
--- a/core/modules/system/tests/modules/entity_test/src/Entity/EntityTestBaseFieldDisplay.php
+++ b/core/modules/system/tests/modules/entity_test/src/Entity/EntityTestBaseFieldDisplay.php
@@ -16,7 +16,7 @@
  * @ContentEntityType(
  *   id = "entity_test_base_field_display",
  *   label = @Translation("Test entity - base field display"),
- *   controllers = {
+ *   handlers = {
  *     "access" = "Drupal\entity_test\EntityTestAccessControlHandler",
  *     "form" = {
  *       "default" = "Drupal\entity_test\EntityTestForm"
diff --git a/core/modules/system/tests/modules/entity_test/src/Entity/EntityTestCache.php b/core/modules/system/tests/modules/entity_test/src/Entity/EntityTestCache.php
index a6e02e1..584a457 100644
--- a/core/modules/system/tests/modules/entity_test/src/Entity/EntityTestCache.php
+++ b/core/modules/system/tests/modules/entity_test/src/Entity/EntityTestCache.php
@@ -13,7 +13,7 @@
  * @ContentEntityType(
  *   id = "entity_test_cache",
  *   label = @Translation("Test entity with field cache"),
- *   controllers = {
+ *   handlers = {
  *     "access" = "Drupal\entity_test\EntityTestAccessControlHandler",
  *     "form" = {
  *       "default" = "Drupal\entity_test\EntityTestForm"
diff --git a/core/modules/system/tests/modules/entity_test/src/Entity/EntityTestConstraintViolation.php b/core/modules/system/tests/modules/entity_test/src/Entity/EntityTestConstraintViolation.php
index f90698d..e34bfd7 100644
--- a/core/modules/system/tests/modules/entity_test/src/Entity/EntityTestConstraintViolation.php
+++ b/core/modules/system/tests/modules/entity_test/src/Entity/EntityTestConstraintViolation.php
@@ -15,7 +15,7 @@
  * @ContentEntityType(
  *   id = "entity_test_constraint_violation",
  *   label = @Translation("Test entity constraint violation"),
- *   controllers = {
+ *   handlers = {
  *     "form" = {
  *       "default" = "Drupal\entity_test\EntityTestForm"
  *     }
diff --git a/core/modules/system/tests/modules/entity_test/src/Entity/EntityTestLabel.php b/core/modules/system/tests/modules/entity_test/src/Entity/EntityTestLabel.php
index 90a56a5..b392795 100644
--- a/core/modules/system/tests/modules/entity_test/src/Entity/EntityTestLabel.php
+++ b/core/modules/system/tests/modules/entity_test/src/Entity/EntityTestLabel.php
@@ -13,7 +13,7 @@
  * @ContentEntityType(
  *   id = "entity_test_label",
  *   label = @Translation("Entity Test label"),
- *   controllers = {
+ *   handlers = {
  *     "view_builder" = "Drupal\entity_test\EntityTestViewBuilder"
  *   },
  *   base_table = "entity_test",
diff --git a/core/modules/system/tests/modules/entity_test/src/Entity/EntityTestMul.php b/core/modules/system/tests/modules/entity_test/src/Entity/EntityTestMul.php
index a61f41b..8b3850c 100644
--- a/core/modules/system/tests/modules/entity_test/src/Entity/EntityTestMul.php
+++ b/core/modules/system/tests/modules/entity_test/src/Entity/EntityTestMul.php
@@ -17,7 +17,7 @@
  * @ContentEntityType(
  *   id = "entity_test_mul",
  *   label = @Translation("Test entity - data table"),
- *   controllers = {
+ *   handlers = {
  *     "view_builder" = "Drupal\entity_test\EntityTestViewBuilder",
  *     "access" = "Drupal\entity_test\EntityTestAccessControlHandler",
  *     "form" = {
diff --git a/core/modules/system/tests/modules/entity_test/src/Entity/EntityTestMulRev.php b/core/modules/system/tests/modules/entity_test/src/Entity/EntityTestMulRev.php
index f4ee307..52803c6 100644
--- a/core/modules/system/tests/modules/entity_test/src/Entity/EntityTestMulRev.php
+++ b/core/modules/system/tests/modules/entity_test/src/Entity/EntityTestMulRev.php
@@ -17,7 +17,7 @@
  * @ContentEntityType(
  *   id = "entity_test_mulrev",
  *   label = @Translation("Test entity - revisions and data table"),
- *   controllers = {
+ *   handlers = {
  *     "access" = "Drupal\entity_test\EntityTestAccessControlHandler",
  *     "form" = {
  *       "default" = "Drupal\entity_test\EntityTestForm",
diff --git a/core/modules/system/tests/modules/entity_test/src/Entity/EntityTestNoId.php b/core/modules/system/tests/modules/entity_test/src/Entity/EntityTestNoId.php
index b0ec16a..7953a61 100644
--- a/core/modules/system/tests/modules/entity_test/src/Entity/EntityTestNoId.php
+++ b/core/modules/system/tests/modules/entity_test/src/Entity/EntityTestNoId.php
@@ -13,7 +13,7 @@
  * @ContentEntityType(
  *   id = "entity_test_no_id",
  *   label = @Translation("Entity Test without id"),
- *   controllers = {
+ *   handlers = {
  *     "storage" = "Drupal\Core\Entity\ContentEntityNullStorage",
  *   },
  *   fieldable = TRUE,
diff --git a/core/modules/system/tests/modules/entity_test/src/Entity/EntityTestRev.php b/core/modules/system/tests/modules/entity_test/src/Entity/EntityTestRev.php
index 5f74c59..393fc90 100644
--- a/core/modules/system/tests/modules/entity_test/src/Entity/EntityTestRev.php
+++ b/core/modules/system/tests/modules/entity_test/src/Entity/EntityTestRev.php
@@ -17,7 +17,7 @@
  * @ContentEntityType(
  *   id = "entity_test_rev",
  *   label = @Translation("Test entity - revisions"),
- *   controllers = {
+ *   handlers = {
  *     "access" = "Drupal\entity_test\EntityTestAccessControlHandler",
  *     "form" = {
  *       "default" = "Drupal\entity_test\EntityTestForm",
diff --git a/core/modules/system/tests/modules/entity_test/src/Entity/EntityTestStringId.php b/core/modules/system/tests/modules/entity_test/src/Entity/EntityTestStringId.php
index eb70bdd..5577484 100644
--- a/core/modules/system/tests/modules/entity_test/src/Entity/EntityTestStringId.php
+++ b/core/modules/system/tests/modules/entity_test/src/Entity/EntityTestStringId.php
@@ -15,7 +15,7 @@
  * @ContentEntityType(
  *   id = "entity_test_string_id",
  *   label = @Translation("Test entity with string_id"),
- *   controllers = {
+ *   handlers = {
  *     "access" = "Drupal\entity_test\EntityTestAccessControlHandler",
  *     "form" = {
  *       "default" = "Drupal\entity_test\EntityTestForm"
diff --git a/core/modules/taxonomy/src/Entity/Term.php b/core/modules/taxonomy/src/Entity/Term.php
index e50e3a0..5ebab34 100644
--- a/core/modules/taxonomy/src/Entity/Term.php
+++ b/core/modules/taxonomy/src/Entity/Term.php
@@ -20,7 +20,7 @@
  *   id = "taxonomy_term",
  *   label = @Translation("Taxonomy term"),
  *   bundle_label = @Translation("Vocabulary"),
- *   controllers = {
+ *   handlers = {
  *     "storage" = "Drupal\taxonomy\TermStorage",
  *     "view_builder" = "Drupal\taxonomy\TermViewBuilder",
  *     "access" = "Drupal\taxonomy\TermAccessControlHandler",
diff --git a/core/modules/taxonomy/src/Entity/Vocabulary.php b/core/modules/taxonomy/src/Entity/Vocabulary.php
index 3927c34..3c6fa79 100644
--- a/core/modules/taxonomy/src/Entity/Vocabulary.php
+++ b/core/modules/taxonomy/src/Entity/Vocabulary.php
@@ -17,7 +17,7 @@
  * @ConfigEntityType(
  *   id = "taxonomy_vocabulary",
  *   label = @Translation("Taxonomy vocabulary"),
- *   controllers = {
+ *   handlers = {
  *     "storage" = "Drupal\taxonomy\VocabularyStorage",
  *     "list_builder" = "Drupal\taxonomy\VocabularyListBuilder",
  *     "form" = {
diff --git a/core/modules/taxonomy/src/TermStorageInterface.php b/core/modules/taxonomy/src/TermStorageInterface.php
index f450db0..7f53683 100644
--- a/core/modules/taxonomy/src/TermStorageInterface.php
+++ b/core/modules/taxonomy/src/TermStorageInterface.php
@@ -11,7 +11,7 @@
 use Drupal\Core\Entity\EntityStorageInterface;
 
 /**
- * Defines a common interface for taxonomy term entity controller classes.
+ * Defines an interface for taxonomy_term entity storage classes.
  */
 interface TermStorageInterface extends EntityStorageInterface {
 
diff --git a/core/modules/taxonomy/src/VocabularyStorageInterface.php b/core/modules/taxonomy/src/VocabularyStorageInterface.php
index c4e1aec..c6f15f0 100644
--- a/core/modules/taxonomy/src/VocabularyStorageInterface.php
+++ b/core/modules/taxonomy/src/VocabularyStorageInterface.php
@@ -10,7 +10,7 @@
 use Drupal\Core\Config\Entity\ConfigEntityStorageInterface;
 
 /**
- * Defines a common interface for taxonomy vocabulary entity controller classes.
+ * Defines an interface for vocabulary entity storage classes.
  */
 interface VocabularyStorageInterface extends ConfigEntityStorageInterface {
 
diff --git a/core/modules/taxonomy/taxonomy.module b/core/modules/taxonomy/taxonomy.module
index 3058dc3..6312d44 100644
--- a/core/modules/taxonomy/taxonomy.module
+++ b/core/modules/taxonomy/taxonomy.module
@@ -350,7 +350,7 @@ function taxonomy_terms_static_reset() {
  * Clear all static cache variables for vocabularies.
  *
  * @param $ids
- *   An array of ids to reset in entity controller cache.
+ *   An array of ids to reset in the entity cache.
  */
 function taxonomy_vocabulary_static_reset(array $ids = NULL) {
   \Drupal::entityManager()->getStorage('taxonomy_vocabulary')->resetCache($ids);
@@ -487,8 +487,7 @@ function taxonomy_get_tree($vid, $parent = 0, $max_depth = NULL, $load_entities
     }
   }
 
-  // Load full entities, if necessary. The entity controller statically
-  // caches the results.
+  // Load full entities, if necessary. The entity storage caches the results.
   if ($load_entities) {
     $term_entities = entity_load_multiple('taxonomy_term', array_keys($terms[$vid]));
   }
diff --git a/core/modules/tour/src/Entity/Tour.php b/core/modules/tour/src/Entity/Tour.php
index d8271ac..55b94f1 100644
--- a/core/modules/tour/src/Entity/Tour.php
+++ b/core/modules/tour/src/Entity/Tour.php
@@ -18,7 +18,7 @@
  * @ConfigEntityType(
  *   id = "tour",
  *   label = @Translation("Tour"),
- *   controllers = {
+ *   handlers = {
  *     "view_builder" = "Drupal\tour\TourViewBuilder"
  *   },
  *   entity_keys = {
diff --git a/core/modules/user/src/Entity/Role.php b/core/modules/user/src/Entity/Role.php
index e5a6f8b..9eba859 100644
--- a/core/modules/user/src/Entity/Role.php
+++ b/core/modules/user/src/Entity/Role.php
@@ -17,7 +17,7 @@
  * @ConfigEntityType(
  *   id = "user_role",
  *   label = @Translation("Role"),
- *   controllers = {
+ *   handlers = {
  *     "storage" = "Drupal\user\RoleStorage",
  *     "access" = "Drupal\user\RoleAccessControlHandler",
  *     "list_builder" = "Drupal\user\RoleListBuilder",
diff --git a/core/modules/user/src/Entity/User.php b/core/modules/user/src/Entity/User.php
index ffc9dfc..0087a70 100644
--- a/core/modules/user/src/Entity/User.php
+++ b/core/modules/user/src/Entity/User.php
@@ -23,7 +23,7 @@
  * @ContentEntityType(
  *   id = "user",
  *   label = @Translation("User"),
- *   controllers = {
+ *   handlers = {
  *     "storage" = "Drupal\user\UserStorage",
  *     "access" = "Drupal\user\UserAccessControlHandler",
  *     "list_builder" = "Drupal\user\UserListBuilder",
diff --git a/core/modules/user/src/RoleStorageInterface.php b/core/modules/user/src/RoleStorageInterface.php
index 84cf99c..1764de6 100644
--- a/core/modules/user/src/RoleStorageInterface.php
+++ b/core/modules/user/src/RoleStorageInterface.php
@@ -10,7 +10,7 @@
 use Drupal\Core\Config\Entity\ConfigEntityStorageInterface;
 
 /**
- * Defines a common interface for roel entity controller classes.
+ * Defines an interface for role entity storage classes.
  */
 interface RoleStorageInterface extends ConfigEntityStorageInterface {
 
diff --git a/core/modules/user/src/Tests/UserTranslationUITest.php b/core/modules/user/src/Tests/UserTranslationUITest.php
index cbccad9..5a98be4 100644
--- a/core/modules/user/src/Tests/UserTranslationUITest.php
+++ b/core/modules/user/src/Tests/UserTranslationUITest.php
@@ -34,7 +34,7 @@ protected function setUp() {
     $this->name = $this->randomMachineName();
     parent::setUp();
 
-    entity_get_controller('user')->resetCache();
+    \Drupal::entityManager()->getStorage('user')->resetCache();
   }
 
   /**
diff --git a/core/modules/user/src/Theme/AdminNegotiator.php b/core/modules/user/src/Theme/AdminNegotiator.php
index 9bb942a..aced48d 100644
--- a/core/modules/user/src/Theme/AdminNegotiator.php
+++ b/core/modules/user/src/Theme/AdminNegotiator.php
@@ -68,7 +68,7 @@ public function __construct(AccountInterface $user, ConfigFactoryInterface $conf
    * {@inheritdoc}
    */
   public function applies(RouteMatchInterface $route_match) {
-    return ($this->entityManager->hasController('user_role', 'storage') && $this->user->hasPermission('view the administration theme') && $this->adminContext->isAdminRoute($route_match->getRouteObject()));
+    return ($this->entityManager->hasHandler('user_role', 'storage') && $this->user->hasPermission('view the administration theme') && $this->adminContext->isAdminRoute($route_match->getRouteObject()));
   }
 
   /**
diff --git a/core/modules/user/src/UserStorageInterface.php b/core/modules/user/src/UserStorageInterface.php
index c5408d2..a73b58b 100644
--- a/core/modules/user/src/UserStorageInterface.php
+++ b/core/modules/user/src/UserStorageInterface.php
@@ -10,7 +10,7 @@
 use Drupal\Core\Session\AccountInterface;
 
 /**
- * Defines a common interface for user entity controller classes.
+ * Defines an interface for user entity storage classes.
  */
 interface UserStorageInterface {
 
diff --git a/core/modules/views/src/Entity/View.php b/core/modules/views/src/Entity/View.php
index 5bb0a94..1ad685a 100644
--- a/core/modules/views/src/Entity/View.php
+++ b/core/modules/views/src/Entity/View.php
@@ -19,7 +19,7 @@
  * @ConfigEntityType(
  *   id = "view",
  *   label = @Translation("View"),
- *   controllers = {
+ *   handlers = {
  *     "access" = "Drupal\views\ViewAccessControlHandler"
  *   },
  *   admin_permission = "administer views",
diff --git a/core/modules/views/src/Plugin/Derivative/ViewsEntityRow.php b/core/modules/views/src/Plugin/Derivative/ViewsEntityRow.php
index ea064c0..9f7ab13 100644
--- a/core/modules/views/src/Plugin/Derivative/ViewsEntityRow.php
+++ b/core/modules/views/src/Plugin/Derivative/ViewsEntityRow.php
@@ -93,7 +93,7 @@ public function getDerivativeDefinition($derivative_id, $base_plugin_definition)
   public function getDerivativeDefinitions($base_plugin_definition) {
     foreach ($this->entityManager->getDefinitions() as $entity_type_id => $entity_type) {
       // Just add support for entity types which have a views integration.
-      if (($base_table = $entity_type->getBaseTable()) && $this->viewsData->get($base_table) && $this->entityManager->hasController($entity_type_id, 'view_builder')) {
+      if (($base_table = $entity_type->getBaseTable()) && $this->viewsData->get($base_table) && $this->entityManager->hasHandler($entity_type_id, 'view_builder')) {
         $this->derivatives[$entity_type_id] = array(
           'id' => 'entity:' . $entity_type_id,
           'provider' => 'views',
diff --git a/core/modules/views/views.views.inc b/core/modules/views/views.views.inc
index a0dba2f..34167b0 100644
--- a/core/modules/views/views.views.inc
+++ b/core/modules/views/views.views.inc
@@ -158,9 +158,9 @@ function views_views_data() {
 
   // Registers views data for the entity itself.
   foreach (\Drupal::entityManager()->getDefinitions() as $entity_type_id => $entity_type) {
-    if ($entity_type->hasControllerClass('views_data')) {
+    if ($entity_type->hasHandlerClass('views_data')) {
       /** @var \Drupal\views\EntityViewsDataInterface $views_data */
-      $views_data = \Drupal::entityManager()->getController($entity_type_id, 'views_data');
+      $views_data = \Drupal::entityManager()->getHandler($entity_type_id, 'views_data');
       $data = NestedArray::mergeDeep($data, $views_data->getViewsData());
     }
   }
diff --git a/core/tests/Drupal/Tests/Core/Entity/EntityManagerTest.php b/core/tests/Drupal/Tests/Core/Entity/EntityManagerTest.php
index 5cfc5d0..a00082c 100644
--- a/core/tests/Drupal/Tests/Core/Entity/EntityManagerTest.php
+++ b/core/tests/Drupal/Tests/Core/Entity/EntityManagerTest.php
@@ -14,8 +14,8 @@
 use Drupal\Core\DependencyInjection\ContainerInjectionInterface;
 use Drupal\Core\Entity\ContentEntityBase;
 use Drupal\Core\Entity\ContentEntityInterface;
-use Drupal\Core\Entity\EntityControllerBase;
-use Drupal\Core\Entity\EntityControllerInterface;
+use Drupal\Core\Entity\EntityHandlerBase;
+use Drupal\Core\Entity\EntityHandlerInterface;
 use Drupal\Core\Entity\EntityInterface;
 use Drupal\Core\Entity\EntityManager;
 use Drupal\Core\Entity\EntityTypeInterface;
@@ -82,7 +82,7 @@ class EntityManagerTest extends UnitTestCase {
   /**
    * The controller resolver.
    *
-   * @var \Drupal\Core\Controller\ControllerResolverInterface|\PHPUnit_Framework_MockObject_MockObject
+   * @var \Drupal\Core\Handler\HandlerResolverInterface|\PHPUnit_Framework_MockObject_MockObject
    */
   protected $controllerResolver;
 
@@ -235,21 +235,21 @@ public function testGetDefinitionInvalidException() {
   }
 
   /**
-   * Tests the hasController() method.
+   * Tests the hasHandler() method.
    *
-   * @covers ::hasController()
+   * @covers ::hasHandler()
    *
-   * @dataProvider providerTestHasController
+   * @dataProvider providerTestHasHandler
    */
-  public function testHasController($entity_type_id, $expected) {
+  public function testHasHandler($entity_type_id, $expected) {
     $apple = $this->getMock('Drupal\Core\Entity\EntityTypeInterface');
     $apple->expects($this->any())
-      ->method('hasControllerClass')
+      ->method('hasHandlerClass')
       ->with('storage')
       ->will($this->returnValue(TRUE));
     $banana = $this->getMock('Drupal\Core\Entity\EntityTypeInterface');
     $banana->expects($this->any())
-      ->method('hasControllerClass')
+      ->method('hasHandlerClass')
       ->with('storage')
       ->will($this->returnValue(FALSE));
     $this->setUpEntityManager(array(
@@ -257,17 +257,17 @@ public function testHasController($entity_type_id, $expected) {
       'banana' => $banana,
     ));
 
-    $entity_type = $this->entityManager->hasController($entity_type_id, 'storage');
+    $entity_type = $this->entityManager->hasHandler($entity_type_id, 'storage');
     $this->assertSame($expected, $entity_type);
   }
 
   /**
-   * Provides test data for testHasController().
+   * Provides test data for testHasHandler().
    *
    * @return array
    *   Test data.
    */
-  public function providerTestHasController() {
+  public function providerTestHasHandler() {
     return array(
       array('apple', TRUE),
       array('banana', FALSE),
@@ -281,10 +281,11 @@ public function providerTestHasController() {
    * @covers ::getStorage()
    */
   public function testGetStorage() {
-    $class = $this->getTestControllerClass();
+    $class = $this->getTestHandlerClass();
     $entity = $this->getMock('Drupal\Core\Entity\EntityTypeInterface');
     $entity->expects($this->once())
-      ->method('getStorageClass')
+      ->method('getHandlerClass')
+      ->with('storage')
       ->will($this->returnValue($class));
     $this->setUpEntityManager(array('test_entity_type' => $entity));
 
@@ -297,10 +298,11 @@ public function testGetStorage() {
    * @covers ::getListBuilder()
    */
   public function testGetListBuilder() {
-    $class = $this->getTestControllerClass();
+    $class = $this->getTestHandlerClass();
     $entity = $this->getMock('Drupal\Core\Entity\EntityTypeInterface');
     $entity->expects($this->once())
-      ->method('getListBuilderClass')
+      ->method('getHandlerClass')
+      ->with('list_builder')
       ->will($this->returnValue($class));
     $this->setUpEntityManager(array('test_entity_type' => $entity));
 
@@ -313,10 +315,11 @@ public function testGetListBuilder() {
    * @covers ::getViewBuilder()
    */
   public function testGetViewBuilder() {
-    $class = $this->getTestControllerClass();
+    $class = $this->getTestHandlerClass();
     $entity = $this->getMock('Drupal\Core\Entity\EntityTypeInterface');
     $entity->expects($this->once())
-      ->method('getViewBuilderClass')
+      ->method('getHandlerClass')
+      ->with('view_builder')
       ->will($this->returnValue($class));
     $this->setUpEntityManager(array('test_entity_type' => $entity));
 
@@ -329,10 +332,11 @@ public function testGetViewBuilder() {
    * @covers ::getAccessControlHandler()
    */
   public function testGetAccessControlHandler() {
-    $class = $this->getTestControllerClass();
+    $class = $this->getTestHandlerClass();
     $entity = $this->getMock('Drupal\Core\Entity\EntityTypeInterface');
     $entity->expects($this->once())
-      ->method('getAccessControlClass')
+      ->method('getHandlerClass')
+      ->with('access')
       ->will($this->returnValue($class));
     $this->setUpEntityManager(array('test_entity_type' => $entity));
 
@@ -390,51 +394,42 @@ public function testGetFormObjectInvalidOperation() {
   }
 
   /**
-   * Tests the getController() method.
+   * Tests the getHandler() method.
    *
-   * @covers ::getController()
+   * @covers ::getHandler()
    */
-  public function testGetController() {
-    $class = $this->getTestControllerClass();
+  public function testGetHandler() {
+    $class = $this->getTestHandlerClass();
     $apple = $this->getMock('Drupal\Core\Entity\EntityTypeInterface');
     $apple->expects($this->once())
-      ->method('getControllerClass')
+      ->method('getHandlerClass')
       ->with('storage')
       ->will($this->returnValue($class));
-    $banana = $this->getMock('Drupal\Core\Entity\EntityTypeInterface');
-    $banana->expects($this->once())
-      ->method('getStorageClass')
-      ->will($this->returnValue('Drupal\Tests\Core\Entity\TestEntityControllerInjected'));
     $this->setUpEntityManager(array(
       'apple' => $apple,
-      'banana' => $banana,
     ));
 
-    $apple_controller = $this->entityManager->getController('apple', 'storage');
+    $apple_controller = $this->entityManager->getHandler('apple', 'storage');
     $this->assertInstanceOf($class, $apple_controller);
     $this->assertAttributeInstanceOf('Drupal\Core\Extension\ModuleHandlerInterface', 'moduleHandler', $apple_controller);
     $this->assertAttributeInstanceOf('Drupal\Core\StringTranslation\TranslationInterface', 'stringTranslation', $apple_controller);
-
-    $banana_controller = $this->entityManager->getController('banana', 'storage', 'getStorageClass');
-    $this->assertInstanceOf('Drupal\Tests\Core\Entity\TestEntityControllerInjected', $banana_controller);
-    $this->assertAttributeEquals('yellow', 'color', $banana_controller);
   }
 
   /**
-   * Tests the getController() method when no controller is defined.
+   * Tests the getHandler() method when no controller is defined.
    *
-   * @covers ::getController()
+   * @covers ::getHandler()
    *
    * @expectedException \Drupal\Component\Plugin\Exception\InvalidPluginDefinitionException
    */
-  public function testGetControllerMissingController() {
+  public function testGetHandlerMissingHandler() {
     $entity = $this->getMock('Drupal\Core\Entity\EntityTypeInterface');
     $entity->expects($this->once())
-      ->method('getControllerClass')
+      ->method('getHandlerClass')
       ->with('storage')
       ->will($this->returnValue(''));
     $this->setUpEntityManager(array('test_entity_type' => $entity));
-    $this->entityManager->getController('test_entity_type', 'storage');
+    $this->entityManager->getHandler('test_entity_type', 'storage');
   }
 
   /**
@@ -737,7 +732,8 @@ protected function setUpEntityWithFieldDefinition($custom_invoke_all = FALSE, $f
        ->will($this->returnValue(get_class($entity)));
 
     $override_entity_type->expects($this->any())
-      ->method('getStorageClass')
+      ->method('getHandlerClass')
+      ->with('storage')
       ->will($this->returnValue('\Drupal\Tests\Core\Entity\TestConfigEntityStorage'));
 
     $this->setUpEntityManager(array('test_entity_type' => $entity_type, 'base_field_override' => $override_entity_type));
@@ -1103,7 +1099,8 @@ public function testGetFieldMap() {
       ->will($this->returnValue($override_entity_class));
 
     $override_entity_type->expects($this->any())
-      ->method('getStorageClass')
+      ->method('getHandlerClass')
+      ->with('storage')
       ->will($this->returnValue('\Drupal\Tests\Core\Entity\TestConfigEntityStorage'));
 
     $this->setUpEntityManager(array(
@@ -1237,7 +1234,8 @@ public function testGetFieldMapByFieldType() {
       ->will($this->returnValue(get_class($entity)));
 
     $override_entity_type->expects($this->any())
-      ->method('getStorageClass')
+      ->method('getHandlerClass')
+      ->with('storage')
       ->will($this->returnValue('\Drupal\Tests\Core\Entity\TestConfigEntityStorage'));
 
     $this->setUpEntityManager(array(
@@ -1345,8 +1343,8 @@ public function testGetEntityTypeFromClassAmbiguous() {
    * @return string
    *   A mock controller class name.
    */
-  protected function getTestControllerClass() {
-    return get_class($this->getMockForAbstractClass('Drupal\Core\Entity\EntityControllerBase'));
+  protected function getTestHandlerClass() {
+    return get_class($this->getMockForAbstractClass('Drupal\Core\Entity\EntityHandlerBase'));
   }
 
 }
@@ -1423,9 +1421,9 @@ public function testClearEntityFieldInfo() {
 }
 
 /**
- * Provides a test entity controller that uses injection.
+ * Provides a test entity handler that uses injection.
  */
-class TestEntityControllerInjected implements EntityControllerInterface {
+class TestEntityHandlerInjected implements EntityHandlerInterface {
 
   /**
    * The color of the entity type.
@@ -1435,7 +1433,7 @@ class TestEntityControllerInjected implements EntityControllerInterface {
   protected $color;
 
   /**
-   * Constructs a new TestEntityControllerInjected.
+   * Constructs a new TestEntityHandlerInjected.
    *
    * @param string $color
    *   The color of the entity type.
@@ -1456,7 +1454,7 @@ public static function createInstance(ContainerInterface $container, EntityTypeI
 /**
  * Provides a test entity form.
  */
-class TestEntityForm extends EntityControllerBase {
+class TestEntityForm extends EntityHandlerBase {
 
   /**
    * {@inheritdoc}
diff --git a/core/tests/Drupal/Tests/Core/Entity/EntityTypeTest.php b/core/tests/Drupal/Tests/Core/Entity/EntityTypeTest.php
index eb6d936..4ff2f23 100644
--- a/core/tests/Drupal/Tests/Core/Entity/EntityTypeTest.php
+++ b/core/tests/Drupal/Tests/Core/Entity/EntityTypeTest.php
@@ -88,29 +88,29 @@ public function testIsRevisionable() {
   }
 
   /**
-   * Tests the getController() method.
+   * Tests the getHandler() method.
    */
-  public function testGetController() {
-    $controller = $this->getTestControllerClass();
+  public function testGetHandler() {
+    $controller = $this->getTestHandlerClass();
     $entity_type = $this->setUpEntityType(array(
-      'controllers' => array(
+      'handlers' => array(
         'storage' => $controller,
         'form' => array(
           'default' => $controller,
         ),
       ),
     ));
-    $this->assertSame($controller, $entity_type->getControllerClass('storage'));
-    $this->assertSame($controller, $entity_type->getControllerClass('form', 'default'));
+    $this->assertSame($controller, $entity_type->getHandlerClass('storage'));
+    $this->assertSame($controller, $entity_type->getHandlerClass('form', 'default'));
   }
 
   /**
    * Tests the getStorageClass() method.
    */
   public function testGetStorageClass() {
-    $controller = $this->getTestControllerClass();
+    $controller = $this->getTestHandlerClass();
     $entity_type = $this->setUpEntityType(array(
-      'controllers' => array(
+      'handlers' => array(
         'storage' => $controller,
       ),
     ));
@@ -121,9 +121,9 @@ public function testGetStorageClass() {
    * Tests the getListBuilderClass() method.
    */
   public function testGetListBuilderClass() {
-    $controller = $this->getTestControllerClass();
+    $controller = $this->getTestHandlerClass();
     $entity_type = $this->setUpEntityType(array(
-      'controllers' => array(
+      'handlers' => array(
         'list_builder' => $controller,
       ),
     ));
@@ -134,9 +134,9 @@ public function testGetListBuilderClass() {
    * Tests the getAccessControlClass() method.
    */
   public function testGetAccessControlClass() {
-    $controller = $this->getTestControllerClass();
+    $controller = $this->getTestHandlerClass();
     $entity_type = $this->setUpEntityType(array(
-      'controllers' => array(
+      'handlers' => array(
         'access' => $controller,
       ),
     ));
@@ -147,10 +147,10 @@ public function testGetAccessControlClass() {
    * Tests the getFormClass() method.
    */
   public function testGetFormClass() {
-    $controller = $this->getTestControllerClass();
+    $controller = $this->getTestHandlerClass();
     $operation = 'default';
     $entity_type = $this->setUpEntityType(array(
-      'controllers' => array(
+      'handlers' => array(
         'form' => array(
           $operation => $controller,
         ),
@@ -163,17 +163,17 @@ public function testGetFormClass() {
    * Tests the hasFormClasses() method.
    */
   public function testHasFormClasses() {
-    $controller = $this->getTestControllerClass();
+    $controller = $this->getTestHandlerClass();
     $operation = 'default';
     $entity_type1 = $this->setUpEntityType(array(
-      'controllers' => array(
+      'handlers' => array(
         'form' => array(
           $operation => $controller,
         ),
       ),
     ));
     $entity_type2 = $this->setUpEntityType(array(
-      'controllers' => array(),
+      'handlers' => array(),
     ));
     $this->assertTrue($entity_type1->hasFormClasses());
     $this->assertFalse($entity_type2->hasFormClasses());
@@ -183,9 +183,9 @@ public function testHasFormClasses() {
    * Tests the getViewBuilderClass() method.
    */
   public function testGetViewBuilderClass() {
-    $controller = $this->getTestControllerClass();
+    $controller = $this->getTestHandlerClass();
     $entity_type = $this->setUpEntityType(array(
-      'controllers' => array(
+      'handlers' => array(
         'view_builder' => $controller,
       ),
     ));
@@ -237,8 +237,8 @@ public function testId() {
    * @return string
    *   A mock controller class name.
    */
-  protected function getTestControllerClass() {
-    return get_class($this->getMockForAbstractClass('Drupal\Core\Entity\EntityControllerBase'));
+  protected function getTestHandlerClass() {
+    return get_class($this->getMockForAbstractClass('Drupal\Core\Entity\EntityHandlerBase'));
   }
 
 }
