diff --git a/core/lib/Drupal/Core/Entity/Annotation/EntityType.php b/core/lib/Drupal/Core/Entity/Annotation/EntityType.php
new file mode 100644
index 0000000..f8e3649
--- /dev/null
+++ b/core/lib/Drupal/Core/Entity/Annotation/EntityType.php
@@ -0,0 +1,274 @@
+<?php
+
+/**
+ * @file
+ * Contains Drupal\Core\Entity\Annotation\EntityType.
+ */
+
+namespace Drupal\Core\Entity\Annotation;
+
+use Drupal\Component\Annotation\Plugin;
+
+/**
+ * Defines an Entity type annotation object.
+ *
+ * @Annotation
+ */
+class EntityType extends Plugin {
+
+  /**
+   * The name of the module providing the type.
+   *
+   * @var string
+   */
+  public $module;
+
+  /**
+   * The name of the entity type class.
+   *
+   * @var string
+   */
+  public $class;
+
+  /**
+   * The name of the entity type's base table.
+   *
+   * @todo This is only used by \Drupal\Core\Entity\DatabaseStorageController.
+   *
+   * @var string
+   */
+  public $base_table;
+
+  /**
+   * The name of the class that is used to load the objects.
+   *
+   * This must implement \Drupal\Core\Entity\EntityStorageControllerInterface.
+   *
+   * @var string
+   */
+  public $controller_class = 'Drupal\Core\Entity\DatabaseStorageController';
+
+  /**
+   * Boolean indicating whether fields can be attached to entities of this type.
+   *
+   * @var bool
+   */
+  public $fieldable = FALSE;
+
+  /**
+   * Boolean indicating if the persistent cache of field data should be used.
+   *
+   * The persistent cache should usually only be disabled if a higher level
+   * persistent cache is available for the entity type. Defaults to TRUE.
+   *
+   * @var bool
+   */
+  public $field_cache = FALSE;
+
+  /**
+   * The names of classes for various form operations.
+   *
+   * 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 operations. The name of the
+   * operation is passed also to the form controller's constructor, so that one
+   * class can be used for multiple entity forms when the forms are similar.
+   * Defaults to Drupal\Core\Entity\EntityFormController.
+   *
+   * @var array
+   */
+  public $form_controller_class = 'Drupal\Core\Entity\EntityFormController';
+
+  /**
+   * The human-readable name of the type.
+   *
+   * @var string
+   */
+  public $label;
+
+  /**
+   * The human-readable name of the entity bundles, e.g. Vocabulary.
+   *
+   * @var string
+   */
+  public $bundle_label;
+
+  /**
+   * The name of a function that returns the label of the entity.
+   *
+   * The function takes an entity and optional langcode argument, and returns
+   * the label of the entity. If langcode is omitted, the entity's default
+   * language is used. The entity label is the main string associated with an
+   * entity; for example, the title of a node or the subject of a comment. If
+   * there is an entity object property that defines the label, use the 'label'
+   * element of the 'entity_keys' return value component to provide this
+   * information (see below). If more complex logic is needed to determine the
+   * label of an entity, you can instead specify a callback function here, which
+   * will be called to determine the entity label. See also the
+   * \Drupal\Core\Entity\EntityInterface::label() method, which implements this
+   * logic.
+   *
+   * @var string
+   */
+  public $label_callback;
+
+  /**
+   * The name of the class that provides listings of the entities.
+   *
+   * The class must implement \Drupal\Core\Entity\EntityListControllerInterface.
+   *
+   * @var string
+   */
+  public $list_controller_class = 'Drupal\Core\Entity\EntityListController';
+
+  /**
+   * The name of the class that is used to render the entities.
+   *
+   * @var string
+   */
+  public $render_controller_class = 'Drupal\Core\Entity\EntityRenderController';
+
+  /**
+   * The name of the class that is used for access checks.
+   *
+   * The class must implement \Drupal\Core\Entity\EntityAccessControllerInterface.
+   *
+   * @var string
+   */
+  public $access_controller_class = 'Drupal\Core\Entity\EntityAccessController';
+
+  /**
+   * The name of the translation controller class that should be used to handle the translation process.
+   *
+   * The class must implement \Drupal\translation_entity\EntityTranslationControllerInterface.
+   *
+   * @todo Interfaces from outside \Drupal\Core or \Drupal\Component should not
+   *   be used here.
+   *
+   * @var string
+   */
+  public $translation_controller_class;
+
+  /**
+   * Boolean indicating whether entities should be statically cached during a page request.
+   *
+   * @todo This is only used by \Drupal\Core\Entity\DatabaseStorageController.
+   *
+   * @var bool
+   */
+  public $static_cache = TRUE;
+
+  /**
+   * Boolean indicating whether entities of this type have mutlilingual support.
+   *
+   * @var bool
+   */
+  public $translatable = FALSE;
+
+  /**
+   * An array describing how the Field API can extract certain information from
+   * objects of this entity type:
+   * - id: The name of the property that contains the primary ID of the entity.
+   *   Every entity object passed to the Field API must have this property and
+   *   its value must be numeric.
+   * - revision: (optional) The name of the property that contains the revision
+   *   ID of the entity. The Field API assumes that all revision IDs are unique
+   *   across all entities of a type. This entry can be omitted if the entities
+   *   of this type are not versionable.
+   * - bundle: (optional) The name of the property that contains the bundle name
+   *   for the entity. The bundle name defines which set of fields are attached
+   *   to the entity (e.g. what nodes call "content type"). This entry can be
+   *   omitted if this entity type exposes a single bundle (such that all
+   *   entities have the same collection of fields). The name of this single
+   *   bundle will be the same as the entity type.
+   * - label: The name of the property that contains the entity label. For
+   *   example, if the entity's label is located in $entity->subject, then
+   *   'subject' should be specified here. If complex logic is required to build
+   *   the label, a 'label_callback' should be defined instead (see the
+   *   $label_callback block above for details).
+   * - uuid (optional): The name of the property that contains the universally
+   *   unique identifier of the entity, which is used to distinctly identify an
+   *   entity across different systems.
+   *
+   * @var array
+   */
+  public $entity_keys = array(
+    'revision' => '',
+    'bundle' => '',
+  );
+
+  /**
+   * An array describing how the Field API can extract the information it needs
+   * from the bundle objects for this type (e.g Vocabulary objects for terms;
+   * not applicable for nodes):
+   * - bundle: The name of the property that contains the name of the bundle
+   *   object.
+   *
+   * This entry can be omitted if this type's bundles do not exist as standalone
+   * objects.
+   *
+   * @var array
+   */
+  public $bundle_keys;
+
+  /**
+   * The base menu router path to which the entity admin user interface responds.
+   *
+   * It can be used to generate UI links and to attach additional router items
+   * to the entity UI in a generic fashion.
+   *
+   * @var string
+   */
+  public $menu_base_path;
+
+  /**
+   * The menu router path to be used to view the entity.
+   *
+   * @var string
+   */
+  public $menu_view_path;
+
+  /**
+   * The menu router path to be used to edit the entity.
+   *
+   * @var string
+   */
+  public $menu_edit_path;
+
+  /**
+   * A string identifying the menu loader in the router path.
+   *
+   * @var string
+   */
+  public $menu_path_wildcard;
+
+  /**
+   * Specifies whether a module exposing permissions for the current entity type
+   * should use entity-type level granularity, bundle level granularity or just
+   * skip this entity. The allowed values are respectively "entity_type",
+   * "bundle" or FALSE.
+   *
+   * @var string|bool
+   */
+  public $permission_granularity = 'entity_type';
+
+  /**
+   * {@inheritdoc}
+   */
+  public function __construct($values) {
+    // These keys are translatable.
+    $translatable_keys = array(
+      'label',
+      'bundle_label',
+    );
+    // Loop through and call t() on them.
+    foreach ($translatable_keys as $key) {
+      if (isset($values[$key])) {
+        $values[$key] = t($values[$key]);
+      }
+    }
+
+    parent::__construct($values);
+  }
+
+}
diff --git a/core/lib/Drupal/Core/Entity/Discovery/EntityTypeClassDiscovery.php b/core/lib/Drupal/Core/Entity/Discovery/EntityTypeClassDiscovery.php
new file mode 100644
index 0000000..0fb867d
--- /dev/null
+++ b/core/lib/Drupal/Core/Entity/Discovery/EntityTypeClassDiscovery.php
@@ -0,0 +1,32 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\Core\Entity\Discovery\AnnotatedClassDiscovery.
+ */
+
+namespace Drupal\Core\Entity\Discovery;
+
+use Drupal\Core\Plugin\Discovery\AnnotatedClassDiscovery;
+
+/**
+ * Defines a discovery mechanism to find annotated entity types.
+ */
+class EntityTypeClassDiscovery extends AnnotatedClassDiscovery {
+
+  /**
+   * Constructs an EntityTypeClassDiscovery object.
+   *
+   * @param array $root_namespaces
+   *   (optional) Array of root paths keyed by the corresponding namespace to
+   *   look for plugin implementations, \Plugin\Core\Entity will be appended to
+   *   each namespace. Defaults to an empty array.
+   */
+  function __construct(array $root_namespaces = array()) {
+    $annotation_namespaces = array(
+      'Drupal\Core\Entity\Annotation' => DRUPAL_ROOT . '/core/lib',
+    );
+    parent::__construct('Core', 'Entity', $root_namespaces, $annotation_namespaces, 'Drupal\Core\Entity\Annotation\EntityType');
+  }
+
+}
diff --git a/core/lib/Drupal/Core/Entity/EntityManager.php b/core/lib/Drupal/Core/Entity/EntityManager.php
index 43d0497..967797c 100644
--- a/core/lib/Drupal/Core/Entity/EntityManager.php
+++ b/core/lib/Drupal/Core/Entity/EntityManager.php
@@ -12,121 +12,21 @@
 use Drupal\Component\Plugin\Discovery\ProcessDecorator;
 use Drupal\Core\Plugin\Discovery\AlterDecorator;
 use Drupal\Core\Plugin\Discovery\CacheDecorator;
-use Drupal\Core\Plugin\Discovery\AnnotatedClassDiscovery;
+use Drupal\Core\Entity\Discovery\EntityTypeClassDiscovery;
 use Drupal\Core\Plugin\Discovery\InfoHookDecorator;
 use Drupal\Core\Cache\CacheBackendInterface;
 
 /**
  * Manages entity type plugin definitions.
  *
- * Each entity type definition array is set in the entity type plugin's
- * annotation and altered by hook_entity_info_alter(). The definition includes
- * the following keys:
- * - module: The name of the module providing the type.
- * - class: The name of the entity type class. Defaults to
- *   Drupal\Core\Entity\Entity.
- * - base_table: The name of the entity type's base table. Used by
- *   Drupal\Core\Entity\DatabaseStorageController.
- * - controller_class: The name of the class that is used to load the objects.
- *   The class must implement
- *   Drupal\Core\Entity\EntityStorageControllerInterface. Defaults to
- *   Drupal\Core\Entity\DatabaseStorageController.
- * - fieldable: (optional) Boolean indicating whether fields can be attached
- *   to entities of this type. Defaults to FALSE.
- * - field_cache: (optional) Boolean indicating whether the Field API's
- *   Field API's persistent cache of field data should be used. The persistent
- *   cache should usually only be disabled if a higher level persistent cache
- *   is available for the entity type. Defaults to TRUE.
- * - form_controller_class: (optional) 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 operations. The name of the operation is passed also
- *   to the form controller's constructor, so that one class can be used for
- *   multiple entity forms when the forms are similar. Defaults to
- *   Drupal\Core\Entity\EntityFormController.
- * - label: The human-readable name of the type.
- * - bundle_label: The human-readable name of the entity bundles, e.g.
- *   Vocabulary.
- * - label_callback: (optional) A function taking an entity and optional
- *   langcode argument, and returning the label of the entity. If langcode is
- *   omitted, the entity's default language is used.
- *   The entity label is the main string associated with an entity; for
- *   example, the title of a node or the subject of a comment. If there is an
- *   entity object property that defines the label, use the 'label' element
- *   of the 'entity_keys' return value component to provide this information
- *   (see below). If more complex logic is needed to determine the label of
- *   an entity, you can instead specify a callback function here, which will
- *   be called to determine the entity label. See also the
- *   Drupal\Core\Entity\Entity::label() method, which implements this logic.
- * - list_controller_class: (optional) The name of the class that provides
- *   listings of the entities. The class must implement
- *   Drupal\Core\Entity\EntityListControllerInterface. Defaults to
- *   Drupal\Core\Entity\EntityListController.
- * - render_controller_class: The name of the class that is used to render the
- *   entities. Defaults to Drupal\Core\Entity\EntityRenderController.
- * - access_controller_class: The name of the class that is used for access
- *   checks. The class must implement
- *   Drupal\Core\Entity\EntityAccessControllerInterface. Defaults to
- *   Drupal\Core\Entity\EntityAccessController.
- * - translation_controller_class: (optional) The name of the translation
- *   controller class that should be used to handle the translation process.
- *   See Drupal\translation_entity\EntityTranslationControllerInterface for more
- *   information.
- * - static_cache: (optional) Boolean indicating whether entities should be
- *   statically cached during a page request. Used by
- *   Drupal\Core\Entity\DatabaseStorageController. Defaults to TRUE.
- * - translatable: (optional) Boolean indicating whether entities of this type
- *   have mutlilingual support. Defaults to FALSE.
- * - entity_keys: An array describing how the Field API can extract certain
- *   information from objects of this entity type. Elements:
- *   - id: The name of the property that contains the primary ID of the
- *     entity. Every entity object passed to the Field API must have this
- *     property and its value must be numeric.
- *   - revision: (optional) The name of the property that contains the
- *     revision ID of the entity. The Field API assumes that all revision IDs
- *     are unique across all entities of a type. This entry can be omitted if
- *     the entities of this type are not versionable.
- *   - bundle: (optional) The name of the property that contains the bundle
- *     name for the entity. The bundle name defines which set of fields are
- *     attached to the entity (e.g. what nodes call "content type"). This
- *     entry can be omitted if this entity type exposes a single bundle (such
- *     that all entities have the same collection of fields). The name of
- *     this single bundle will be the same as the entity type.
- *   - label: The name of the property that contains the entity label. For
- *     example, if the entity's label is located in $entity->subject, then
- *     'subject' should be specified here. If complex logic is required to
- *     build the label, a 'label_callback' should be defined instead (see
- *     the 'label_callback' section above for details).
- *   - uuid (optional): The name of the property that contains the universally
- *     unique identifier of the entity, which is used to distinctly identify
- *     an entity across different systems.
- * - bundle_keys: An array describing how the Field API can extract the
- *   information it needs from the bundle objects for this type (e.g
- *   Vocabulary objects for terms; not applicable for nodes). This entry can
- *   be omitted if this type's bundles do not exist as standalone objects.
- *   Elements:
- *   - bundle: The name of the property that contains the name of the bundle
- *     object.
- * - menu_base_path: (optional) The base menu router path to which the entity
- *   administration user interface responds. It can be used to generate UI
- *   links and to attach additional router items to the entity UI in a generic
- *   fashion.
- * - menu_view_path: (optional) The menu router path to be used to view the
- *   entity.
- * - menu_edit_path: (optional) The menu router path to be used to edit the
- *   entity.
- * - menu_path_wildcard: (optional) A string identifying the menu loader in the
- *   router path.
- * - permission_granularity: (optional) Specifies whether a module exposing
- *   permissions for the current entity type should use entity-type level
- *   granularity, bundle level granularity or just skip this entity. The allowed
- *   values are respectively "entity_type", "bundle" or FALSE. Defaults to
- *   "entity_type".
+ * Each entity type definition array is set in the entity type's
+ * annotation and altered by hook_entity_info_alter().
  *
  * The defaults for the plugin definition are provided in
  * \Drupal\Core\Entity\EntityManager::defaults.
  *
- * @see \Drupal\Core\Entity\Entity
+ * @see \Drupal\Core\Entity\Annotation\EntityType
+ * @see \Drupal\Core\Entity\EntityInterface
  * @see entity_get_info()
  * @see hook_entity_info_alter()
  */
@@ -145,7 +45,6 @@ class EntityManager extends PluginManagerBase {
    * @var array
    */
   protected $defaults = array(
-    'class' => 'Drupal\Core\Entity\Entity',
     'controller_class' => 'Drupal\Core\Entity\DatabaseStorageController',
     'entity_keys' => array(
       'revision' => '',
@@ -171,7 +70,7 @@ class EntityManager extends PluginManagerBase {
    */
   public function __construct(array $namespaces) {
     // Allow the plugin definition to be altered by hook_entity_info_alter().
-    $this->discovery = new AnnotatedClassDiscovery('Core', 'Entity', $namespaces);
+    $this->discovery = new EntityTypeClassDiscovery($namespaces);
     $this->discovery = new InfoHookDecorator($this->discovery, 'entity_info');
     $this->discovery = new ProcessDecorator($this->discovery, array($this, 'processDefinition'));
     $this->discovery = new AlterDecorator($this->discovery, 'entity_info');
diff --git a/core/lib/Drupal/Core/Plugin/Discovery/AnnotatedClassDiscovery.php b/core/lib/Drupal/Core/Plugin/Discovery/AnnotatedClassDiscovery.php
index 3c10366..61ebd63 100644
--- a/core/lib/Drupal/Core/Plugin/Discovery/AnnotatedClassDiscovery.php
+++ b/core/lib/Drupal/Core/Plugin/Discovery/AnnotatedClassDiscovery.php
@@ -33,8 +33,8 @@ class AnnotatedClassDiscovery extends ComponentAnnotatedClassDiscovery {
    *   until the next request. Additionally when a namespace is unregistered,
    *   plugins will not be removed until the next request.
    */
-  function __construct($owner, $type, array $root_namespaces = array()) {
-    $annotation_namespaces = array(
+  function __construct($owner, $type, array $root_namespaces = array(), $annotation_namespaces = array(), $plugin_definition_annotation_name = 'Drupal\Component\Annotation\Plugin') {
+    $annotation_namespaces += array(
       'Drupal\Component\Annotation' => DRUPAL_ROOT . '/core/lib',
       'Drupal\Core\Annotation' => DRUPAL_ROOT . '/core/lib',
     );
@@ -42,7 +42,7 @@ function __construct($owner, $type, array $root_namespaces = array()) {
     foreach ($root_namespaces as $namespace => $dir) {
       $plugin_namespaces["$namespace\\Plugin\\{$owner}\\{$type}"] = array($dir);
     }
-    parent::__construct($plugin_namespaces, $annotation_namespaces);
+    parent::__construct($plugin_namespaces, $annotation_namespaces, $plugin_definition_annotation_name);
   }
 
 }
diff --git a/core/modules/aggregator/lib/Drupal/aggregator/Plugin/Core/Entity/Feed.php b/core/modules/aggregator/lib/Drupal/aggregator/Plugin/Core/Entity/Feed.php
index 2c3cc20..f6374a8 100644
--- a/core/modules/aggregator/lib/Drupal/aggregator/Plugin/Core/Entity/Feed.php
+++ b/core/modules/aggregator/lib/Drupal/aggregator/Plugin/Core/Entity/Feed.php
@@ -9,15 +9,14 @@
 
 use Drupal\Core\Entity\ContentEntityInterface;
 use Drupal\Core\Entity\EntityNG;
-use Drupal\Component\Annotation\Plugin;
-use Drupal\Core\Annotation\Translation;
+use Drupal\Core\Entity\Annotation\EntityType;
 
 /**
  * Defines the aggregator feed entity class.
  *
- * @Plugin(
+ * @EntityType(
  *   id = "aggregator_feed",
- *   label = @Translation("Aggregator feed"),
+ *   label = "Aggregator feed",
  *   module = "aggregator",
  *   controller_class = "Drupal\aggregator\FeedStorageController",
  *   render_controller_class = "Drupal\aggregator\FeedRenderController",
diff --git a/core/modules/aggregator/lib/Drupal/aggregator/Plugin/Core/Entity/Item.php b/core/modules/aggregator/lib/Drupal/aggregator/Plugin/Core/Entity/Item.php
index 4d19a75..c0ef737 100644
--- a/core/modules/aggregator/lib/Drupal/aggregator/Plugin/Core/Entity/Item.php
+++ b/core/modules/aggregator/lib/Drupal/aggregator/Plugin/Core/Entity/Item.php
@@ -9,15 +9,14 @@
 
 use Drupal\Core\Entity\ContentEntityInterface;
 use Drupal\Core\Entity\EntityNG;
-use Drupal\Component\Annotation\Plugin;
-use Drupal\Core\Annotation\Translation;
+use Drupal\Core\Entity\Annotation\EntityType;
 
 /**
  * Defines the aggregator item entity class.
  *
- * @Plugin(
+ * @EntityType(
  *   id = "aggregator_item",
- *   label = @Translation("Aggregator feed item"),
+ *   label = "Aggregator feed item",
  *   module = "aggregator",
  *   controller_class = "Drupal\aggregator\ItemStorageController",
  *   render_controller_class = "Drupal\aggregator\ItemRenderController",
diff --git a/core/modules/block/custom_block/lib/Drupal/custom_block/Plugin/Core/Entity/CustomBlock.php b/core/modules/block/custom_block/lib/Drupal/custom_block/Plugin/Core/Entity/CustomBlock.php
index d0ea6ee..77da4d1 100644
--- a/core/modules/block/custom_block/lib/Drupal/custom_block/Plugin/Core/Entity/CustomBlock.php
+++ b/core/modules/block/custom_block/lib/Drupal/custom_block/Plugin/Core/Entity/CustomBlock.php
@@ -9,16 +9,15 @@
 
 use Drupal\Core\Entity\ContentEntityInterface;
 use Drupal\Core\Entity\EntityNG;
-use Drupal\Component\Annotation\Plugin;
-use Drupal\Core\Annotation\Translation;
+use Drupal\Core\Entity\Annotation\EntityType;
 
 /**
  * Defines the custom block entity class.
  *
- * @Plugin(
+ * @EntityType(
  *   id = "custom_block",
- *   label = @Translation("Custom Block"),
- *   bundle_label = @Translation("Custom Block type"),
+ *   label = "Custom Block",
+ *   bundle_label = "Custom Block type",
  *   module = "custom_block",
  *   controller_class = "Drupal\custom_block\CustomBlockStorageController",
  *   access_controller_class = "Drupal\custom_block\CustomBlockAccessController",
diff --git a/core/modules/block/custom_block/lib/Drupal/custom_block/Plugin/Core/Entity/CustomBlockType.php b/core/modules/block/custom_block/lib/Drupal/custom_block/Plugin/Core/Entity/CustomBlockType.php
index 991fbc5..0442646 100644
--- a/core/modules/block/custom_block/lib/Drupal/custom_block/Plugin/Core/Entity/CustomBlockType.php
+++ b/core/modules/block/custom_block/lib/Drupal/custom_block/Plugin/Core/Entity/CustomBlockType.php
@@ -8,15 +8,14 @@
 namespace Drupal\custom_block\Plugin\Core\Entity;
 
 use Drupal\Core\Config\Entity\ConfigEntityBase;
-use Drupal\Component\Annotation\Plugin;
-use Drupal\Core\Annotation\Translation;
+use Drupal\Core\Entity\Annotation\EntityType;
 
 /**
  * Defines the custom block type entity.
  *
- * @Plugin(
+ * @EntityType(
  *   id = "custom_block_type",
- *   label = @Translation("Custom block type"),
+ *   label = "Custom block type",
  *   module = "custom_block",
  *   controller_class = "Drupal\custom_block\CustomBlockTypeStorageController",
  *   list_controller_class = "Drupal\custom_block\CustomBlockTypeListController",
diff --git a/core/modules/block/lib/Drupal/block/Plugin/Core/Entity/Block.php b/core/modules/block/lib/Drupal/block/Plugin/Core/Entity/Block.php
index 077a81e..42aeceb 100644
--- a/core/modules/block/lib/Drupal/block/Plugin/Core/Entity/Block.php
+++ b/core/modules/block/lib/Drupal/block/Plugin/Core/Entity/Block.php
@@ -8,16 +8,15 @@
 namespace Drupal\block\Plugin\Core\Entity;
 
 use Drupal\Core\Config\Entity\ConfigEntityBase;
-use Drupal\Component\Annotation\Plugin;
-use Drupal\Core\Annotation\Translation;
+use Drupal\Core\Entity\Annotation\EntityType;
 use Drupal\Component\Plugin\Exception\PluginException;
 
 /**
  * Defines a Block configuration entity class.
  *
- * @Plugin(
+ * @EntityType(
  *   id = "block",
- *   label = @Translation("Block"),
+ *   label = "Block",
  *   module = "block",
  *   controller_class = "Drupal\block\BlockStorageController",
  *   access_controller_class = "Drupal\block\BlockAccessController",
diff --git a/core/modules/breakpoint/lib/Drupal/breakpoint/Plugin/Core/Entity/Breakpoint.php b/core/modules/breakpoint/lib/Drupal/breakpoint/Plugin/Core/Entity/Breakpoint.php
index c2dff01..14592d5 100644
--- a/core/modules/breakpoint/lib/Drupal/breakpoint/Plugin/Core/Entity/Breakpoint.php
+++ b/core/modules/breakpoint/lib/Drupal/breakpoint/Plugin/Core/Entity/Breakpoint.php
@@ -13,15 +13,14 @@
 use Drupal\breakpoint\InvalidBreakpointSourceException;
 use Drupal\breakpoint\InvalidBreakpointSourceTypeException;
 use Drupal\breakpoint\InvalidBreakpointMediaQueryException;
-use Drupal\Component\Annotation\Plugin;
-use Drupal\Core\Annotation\Translation;
+use Drupal\Core\Entity\Annotation\EntityType;
 
 /**
  * Defines the Breakpoint entity.
  *
- * @Plugin(
+ * @EntityType(
  *   id = "breakpoint",
- *   label = @Translation("Breakpoint"),
+ *   label = "Breakpoint",
  *   module = "breakpoint",
  *   controller_class = "Drupal\Core\Config\Entity\ConfigStorageController",
  *   config_prefix = "breakpoint.breakpoint",
diff --git a/core/modules/breakpoint/lib/Drupal/breakpoint/Plugin/Core/Entity/BreakpointGroup.php b/core/modules/breakpoint/lib/Drupal/breakpoint/Plugin/Core/Entity/BreakpointGroup.php
index 334d2cb..4341648 100644
--- a/core/modules/breakpoint/lib/Drupal/breakpoint/Plugin/Core/Entity/BreakpointGroup.php
+++ b/core/modules/breakpoint/lib/Drupal/breakpoint/Plugin/Core/Entity/BreakpointGroup.php
@@ -10,15 +10,14 @@
 use Drupal\Core\Config\Entity\ConfigEntityBase;
 use Drupal\breakpoint\InvalidBreakpointSourceException;
 use Drupal\breakpoint\InvalidBreakpointSourceTypeException;
-use Drupal\Component\Annotation\Plugin;
-use Drupal\Core\Annotation\Translation;
+use Drupal\Core\Entity\Annotation\EntityType;
 
 /**
  * Defines the BreakpointGroup entity.
  *
- * @Plugin(
+ * @EntityType(
  *   id = "breakpoint_group",
- *   label = @Translation("Breakpoint group"),
+ *   label = "Breakpoint group",
  *   module = "breakpoint",
  *   controller_class = "Drupal\Core\Config\Entity\ConfigStorageController",
  *   config_prefix = "breakpoint.breakpoint_group",
diff --git a/core/modules/comment/lib/Drupal/comment/Plugin/Core/Entity/Comment.php b/core/modules/comment/lib/Drupal/comment/Plugin/Core/Entity/Comment.php
index f6e9091..40bed60 100644
--- a/core/modules/comment/lib/Drupal/comment/Plugin/Core/Entity/Comment.php
+++ b/core/modules/comment/lib/Drupal/comment/Plugin/Core/Entity/Comment.php
@@ -9,16 +9,15 @@
 
 use Drupal\Core\Entity\ContentEntityInterface;
 use Drupal\Core\Entity\EntityNG;
-use Drupal\Component\Annotation\Plugin;
-use Drupal\Core\Annotation\Translation;
+use Drupal\Core\Entity\Annotation\EntityType;
 
 /**
  * Defines the comment entity class.
  *
- * @Plugin(
+ * @EntityType(
  *   id = "comment",
- *   label = @Translation("Comment"),
- *   bundle_label = @Translation("Content type"),
+ *   label = "Comment",
+ *   bundle_label = "Content type",
  *   module = "comment",
  *   controller_class = "Drupal\comment\CommentStorageController",
  *   render_controller_class = "Drupal\comment\CommentRenderController",
diff --git a/core/modules/config/tests/config_test/lib/Drupal/config_test/Plugin/Core/Entity/ConfigQueryTest.php b/core/modules/config/tests/config_test/lib/Drupal/config_test/Plugin/Core/Entity/ConfigQueryTest.php
index 530868b..2384fe8 100644
--- a/core/modules/config/tests/config_test/lib/Drupal/config_test/Plugin/Core/Entity/ConfigQueryTest.php
+++ b/core/modules/config/tests/config_test/lib/Drupal/config_test/Plugin/Core/Entity/ConfigQueryTest.php
@@ -7,15 +7,14 @@
 
 namespace Drupal\config_test\Plugin\Core\Entity;
 
-use Drupal\Component\Annotation\Plugin;
-use Drupal\Core\Annotation\Translation;
+use Drupal\Core\Entity\Annotation\EntityType;
 
 /**
  * Defines the ConfigQueryTest configuration entity used by the query test.
  *
- * @Plugin(
+ * @EntityType(
  *   id = "config_query_test",
- *   label = @Translation("Test configuration for query"),
+ *   label = "Test configuration for query",
  *   module = "config_test",
  *   controller_class = "Drupal\config_test\ConfigTestStorageController",
  *   list_controller_class = "Drupal\Core\Config\Entity\ConfigEntityListController",
diff --git a/core/modules/config/tests/config_test/lib/Drupal/config_test/Plugin/Core/Entity/ConfigTest.php b/core/modules/config/tests/config_test/lib/Drupal/config_test/Plugin/Core/Entity/ConfigTest.php
index 28b22cc..073b9f0 100644
--- a/core/modules/config/tests/config_test/lib/Drupal/config_test/Plugin/Core/Entity/ConfigTest.php
+++ b/core/modules/config/tests/config_test/lib/Drupal/config_test/Plugin/Core/Entity/ConfigTest.php
@@ -8,15 +8,14 @@
 namespace Drupal\config_test\Plugin\Core\Entity;
 
 use Drupal\Core\Config\Entity\ConfigEntityBase;
-use Drupal\Component\Annotation\Plugin;
-use Drupal\Core\Annotation\Translation;
+use Drupal\Core\Entity\Annotation\EntityType;
 
 /**
  * Defines the ConfigTest configuration entity.
  *
- * @Plugin(
+ * @EntityType(
  *   id = "config_test",
- *   label = @Translation("Test configuration"),
+ *   label = "Test configuration",
  *   module = "config_test",
  *   controller_class = "Drupal\config_test\ConfigTestStorageController",
  *   list_controller_class = "Drupal\Core\Config\Entity\ConfigEntityListController",
diff --git a/core/modules/config/tests/config_test/lib/Drupal/config_test/Plugin/Core/Entity/ConfigTestEmptyManifest.php b/core/modules/config/tests/config_test/lib/Drupal/config_test/Plugin/Core/Entity/ConfigTestEmptyManifest.php
index e639bea..1044e1d 100644
--- a/core/modules/config/tests/config_test/lib/Drupal/config_test/Plugin/Core/Entity/ConfigTestEmptyManifest.php
+++ b/core/modules/config/tests/config_test/lib/Drupal/config_test/Plugin/Core/Entity/ConfigTestEmptyManifest.php
@@ -8,15 +8,14 @@
 namespace Drupal\config_test\Plugin\Core\Entity;
 
 use Drupal\Core\Config\Entity\ConfigEntityBase;
-use Drupal\Component\Annotation\Plugin;
-use Drupal\Core\Annotation\Translation;
+use Drupal\Core\Entity\Annotation\EntityType;
 
 /**
  * Defines the ConfigTestEmptyManifest configuration entity.
  *
- * @Plugin(
+ * @EntityType(
  *   id = "config_test_empty_manifest",
- *   label = @Translation("Test empty manifest creation"),
+ *   label = "Test empty manifest creation",
  *   module = "config_test",
  *   controller_class = "Drupal\config_test\ConfigTestStorageController",
  *   config_prefix = "config_test.empty_manifest",
diff --git a/core/modules/contact/lib/Drupal/contact/Plugin/Core/Entity/Category.php b/core/modules/contact/lib/Drupal/contact/Plugin/Core/Entity/Category.php
index f01c2f5..892a038 100644
--- a/core/modules/contact/lib/Drupal/contact/Plugin/Core/Entity/Category.php
+++ b/core/modules/contact/lib/Drupal/contact/Plugin/Core/Entity/Category.php
@@ -8,15 +8,14 @@
 namespace Drupal\contact\Plugin\Core\Entity;
 
 use Drupal\Core\Config\Entity\ConfigEntityBase;
-use Drupal\Component\Annotation\Plugin;
-use Drupal\Core\Annotation\Translation;
+use Drupal\Core\Entity\Annotation\EntityType;
 
 /**
  * Defines the contact category entity.
  *
- * @Plugin(
+ * @EntityType(
  *   id = "contact_category",
- *   label = @Translation("Contact category"),
+ *   label = "Contact category",
  *   module = "contact",
  *   controller_class = "Drupal\contact\CategoryStorageController",
  *   list_controller_class = "Drupal\contact\CategoryListController",
diff --git a/core/modules/contact/lib/Drupal/contact/Plugin/Core/Entity/Message.php b/core/modules/contact/lib/Drupal/contact/Plugin/Core/Entity/Message.php
index 19901b2..c593b31 100644
--- a/core/modules/contact/lib/Drupal/contact/Plugin/Core/Entity/Message.php
+++ b/core/modules/contact/lib/Drupal/contact/Plugin/Core/Entity/Message.php
@@ -7,16 +7,15 @@
 
 namespace Drupal\contact\Plugin\Core\Entity;
 
-use Drupal\Component\Annotation\Plugin;
-use Drupal\Core\Annotation\Translation;
+use Drupal\Core\Entity\Annotation\EntityType;
 use Drupal\Core\Entity\Entity;
 
 /**
  * Defines the contact message entity.
  *
- * @Plugin(
+ * @EntityType(
  *   id = "contact_message",
- *   label = @Translation("Contact message"),
+ *   label = "Contact message",
  *   module = "contact",
  *   form_controller_class = {
  *     "default" = "Drupal\contact\MessageFormController"
diff --git a/core/modules/editor/lib/Drupal/editor/Plugin/Core/Entity/Editor.php b/core/modules/editor/lib/Drupal/editor/Plugin/Core/Entity/Editor.php
index 22271ee..15b58c5 100644
--- a/core/modules/editor/lib/Drupal/editor/Plugin/Core/Entity/Editor.php
+++ b/core/modules/editor/lib/Drupal/editor/Plugin/Core/Entity/Editor.php
@@ -8,15 +8,14 @@
 namespace Drupal\editor\Plugin\Core\Entity;
 
 use Drupal\Core\Config\Entity\ConfigEntityBase;
-use Drupal\Component\Annotation\Plugin;
-use Drupal\Core\Annotation\Translation;
+use Drupal\Core\Entity\Annotation\EntityType;
 
 /**
  * Defines the configured text editor entity.
  *
- * @Plugin(
+ * @EntityType(
  *   id = "editor",
- *   label = @Translation("Editor"),
+ *   label = "Editor",
  *   module = "editor",
  *   controller_class = "Drupal\Core\Config\Entity\ConfigStorageController",
  *   config_prefix = "editor.editor",
diff --git a/core/modules/entity/lib/Drupal/entity/Plugin/Core/Entity/EntityDisplay.php b/core/modules/entity/lib/Drupal/entity/Plugin/Core/Entity/EntityDisplay.php
index d88967f..74be130 100644
--- a/core/modules/entity/lib/Drupal/entity/Plugin/Core/Entity/EntityDisplay.php
+++ b/core/modules/entity/lib/Drupal/entity/Plugin/Core/Entity/EntityDisplay.php
@@ -8,16 +8,15 @@
 namespace Drupal\entity\Plugin\Core\Entity;
 
 use Drupal\Core\Config\Entity\ConfigEntityBase;
-use Drupal\Component\Annotation\Plugin;
-use Drupal\Core\Annotation\Translation;
+use Drupal\Core\Entity\Annotation\EntityType;
 
 /**
  * Configuration entity that contains display options for all components of a
  * rendered entity in a given view mode..
  *
- * @Plugin(
+ * @EntityType(
  *   id = "entity_display",
- *   label = @Translation("Entity display"),
+ *   label = "Entity display",
  *   module = "entity",
  *   controller_class = "Drupal\Core\Config\Entity\ConfigStorageController",
  *   config_prefix = "entity.display",
diff --git a/core/modules/field/tests/modules/field_test/lib/Drupal/field_test/Plugin/Core/Entity/BundleKeyTestEntity.php b/core/modules/field/tests/modules/field_test/lib/Drupal/field_test/Plugin/Core/Entity/BundleKeyTestEntity.php
index 11723b8..ec1bd74 100644
--- a/core/modules/field/tests/modules/field_test/lib/Drupal/field_test/Plugin/Core/Entity/BundleKeyTestEntity.php
+++ b/core/modules/field/tests/modules/field_test/lib/Drupal/field_test/Plugin/Core/Entity/BundleKeyTestEntity.php
@@ -7,15 +7,14 @@
 
 namespace Drupal\field_test\Plugin\Core\Entity;
 
-use Drupal\Component\Annotation\Plugin;
-use Drupal\Core\Annotation\Translation;
+use Drupal\Core\Entity\Annotation\EntityType;
 
 /**
  * Test entity class.
  *
- * @Plugin(
+ * @EntityType(
  *   id = "test_entity_bundle_key",
- *   label = @Translation("Test Entity with a bundle key"),
+ *   label = "Test Entity with a bundle key",
  *   module = "field_test",
  *   controller_class = "Drupal\field_test\TestEntityController",
  *   form_controller_class = {
diff --git a/core/modules/field/tests/modules/field_test/lib/Drupal/field_test/Plugin/Core/Entity/BundleTestEntity.php b/core/modules/field/tests/modules/field_test/lib/Drupal/field_test/Plugin/Core/Entity/BundleTestEntity.php
index ee91584..9858ebf 100644
--- a/core/modules/field/tests/modules/field_test/lib/Drupal/field_test/Plugin/Core/Entity/BundleTestEntity.php
+++ b/core/modules/field/tests/modules/field_test/lib/Drupal/field_test/Plugin/Core/Entity/BundleTestEntity.php
@@ -7,15 +7,14 @@
 
 namespace Drupal\field_test\Plugin\Core\Entity;
 
-use Drupal\Component\Annotation\Plugin;
-use Drupal\Core\Annotation\Translation;
+use Drupal\Core\Entity\Annotation\EntityType;
 
 /**
  * Test entity class.
  *
- * @Plugin(
+ * @EntityType(
  *   id = "test_entity_bundle",
- *   label = @Translation("Test Entity with a specified bundle"),
+ *   label = "Test Entity with a specified bundle",
  *   module = "field_test",
  *   controller_class = "Drupal\field_test\TestEntityController",
  *   form_controller_class = {
diff --git a/core/modules/field/tests/modules/field_test/lib/Drupal/field_test/Plugin/Core/Entity/CacheableTestEntity.php b/core/modules/field/tests/modules/field_test/lib/Drupal/field_test/Plugin/Core/Entity/CacheableTestEntity.php
index 6970fa0..a93a2fd 100644
--- a/core/modules/field/tests/modules/field_test/lib/Drupal/field_test/Plugin/Core/Entity/CacheableTestEntity.php
+++ b/core/modules/field/tests/modules/field_test/lib/Drupal/field_test/Plugin/Core/Entity/CacheableTestEntity.php
@@ -7,15 +7,14 @@
 
 namespace Drupal\field_test\Plugin\Core\Entity;
 
-use Drupal\Component\Annotation\Plugin;
-use Drupal\Core\Annotation\Translation;
+use Drupal\Core\Entity\Annotation\EntityType;
 
 /**
  * Test entity class.
  *
- * @Plugin(
+ * @EntityType(
  *   id = "test_cacheable_entity",
- *   label = @Translation("Test Entity, cacheable"),
+ *   label = "Test Entity, cacheable",
  *   module = "field_test",
  *   controller_class = "Drupal\field_test\TestEntityController",
  *   field_cache = TRUE,
diff --git a/core/modules/field/tests/modules/field_test/lib/Drupal/field_test/Plugin/Core/Entity/TestEntity.php b/core/modules/field/tests/modules/field_test/lib/Drupal/field_test/Plugin/Core/Entity/TestEntity.php
index be75dc0..0667f0b 100644
--- a/core/modules/field/tests/modules/field_test/lib/Drupal/field_test/Plugin/Core/Entity/TestEntity.php
+++ b/core/modules/field/tests/modules/field_test/lib/Drupal/field_test/Plugin/Core/Entity/TestEntity.php
@@ -8,15 +8,14 @@
 namespace Drupal\field_test\Plugin\Core\Entity;
 
 use Drupal\Core\Entity\Entity;
-use Drupal\Component\Annotation\Plugin;
-use Drupal\Core\Annotation\Translation;
+use Drupal\Core\Entity\Annotation\EntityType;
 
 /**
  * Test entity class.
  *
- * @Plugin(
+ * @EntityType(
  *   id = "test_entity",
- *   label = @Translation("Test Entity"),
+ *   label = "Test Entity",
  *   module = "field_test",
  *   controller_class = "Drupal\field_test\TestEntityController",
  *   render_controller_class = "Drupal\Core\Entity\EntityRenderController",
diff --git a/core/modules/file/lib/Drupal/file/Plugin/Core/Entity/File.php b/core/modules/file/lib/Drupal/file/Plugin/Core/Entity/File.php
index 080c47a..2c03ab6 100644
--- a/core/modules/file/lib/Drupal/file/Plugin/Core/Entity/File.php
+++ b/core/modules/file/lib/Drupal/file/Plugin/Core/Entity/File.php
@@ -9,15 +9,14 @@
 
 use Drupal\Core\Entity\ContentEntityInterface;
 use Drupal\Core\Entity\Entity;
-use Drupal\Component\Annotation\Plugin;
-use Drupal\Core\Annotation\Translation;
+use Drupal\Core\Entity\Annotation\EntityType;
 
 /**
  * Defines the file entity class.
  *
- * @Plugin(
+ * @EntityType(
  *   id = "file",
- *   label = @Translation("File"),
+ *   label = "File",
  *   module = "file",
  *   controller_class = "Drupal\file\FileStorageController",
  *   render_controller_class = "Drupal\Core\Entity\EntityRenderController",
diff --git a/core/modules/filter/lib/Drupal/filter/Plugin/Core/Entity/FilterFormat.php b/core/modules/filter/lib/Drupal/filter/Plugin/Core/Entity/FilterFormat.php
index 13c26b5..1dd914a 100644
--- a/core/modules/filter/lib/Drupal/filter/Plugin/Core/Entity/FilterFormat.php
+++ b/core/modules/filter/lib/Drupal/filter/Plugin/Core/Entity/FilterFormat.php
@@ -8,15 +8,14 @@
 namespace Drupal\filter\Plugin\Core\Entity;
 
 use Drupal\Core\Config\Entity\ConfigEntityBase;
-use Drupal\Component\Annotation\Plugin;
-use Drupal\Core\Annotation\Translation;
+use Drupal\Core\Entity\Annotation\EntityType;
 
 /**
  * Represents a text format.
  *
- * @Plugin(
+ * @EntityType(
  *   id = "filter_format",
- *   label = @Translation("Text format"),
+ *   label = "Text format",
  *   module = "filter",
  *   controller_class = "Drupal\filter\FilterFormatStorageController",
  *   config_prefix = "filter.format",
diff --git a/core/modules/image/lib/Drupal/image/Plugin/Core/Entity/ImageStyle.php b/core/modules/image/lib/Drupal/image/Plugin/Core/Entity/ImageStyle.php
index 2c01d95..0a594d9 100644
--- a/core/modules/image/lib/Drupal/image/Plugin/Core/Entity/ImageStyle.php
+++ b/core/modules/image/lib/Drupal/image/Plugin/Core/Entity/ImageStyle.php
@@ -8,15 +8,14 @@
 namespace Drupal\image\Plugin\Core\Entity;
 
 use Drupal\Core\Config\Entity\ConfigEntityBase;
-use Drupal\Component\Annotation\Plugin;
-use Drupal\Core\Annotation\Translation;
+use Drupal\Core\Entity\Annotation\EntityType;
 
 /**
  * Defines an image style configuration entity.
  *
- * @Plugin(
+ * @EntityType(
  *   id = "image_style",
- *   label = @Translation("Image style"),
+ *   label = "Image style",
  *   module = "image",
  *   controller_class = "Drupal\image\ImageStyleStorageController",
  *   uri_callback = "image_style_entity_uri",
diff --git a/core/modules/layout/lib/Drupal/layout/Plugin/Core/Entity/Display.php b/core/modules/layout/lib/Drupal/layout/Plugin/Core/Entity/Display.php
index 95abe27..5e272b5 100644
--- a/core/modules/layout/lib/Drupal/layout/Plugin/Core/Entity/Display.php
+++ b/core/modules/layout/lib/Drupal/layout/Plugin/Core/Entity/Display.php
@@ -11,15 +11,14 @@
 use Drupal\layout\Config\BoundDisplayInterface;
 use Drupal\layout\Config\UnboundDisplayInterface;
 use Drupal\layout\Plugin\LayoutInterface;
-use Drupal\Component\Annotation\Plugin;
-use Drupal\Core\Annotation\Translation;
+use Drupal\Core\Entity\Annotation\EntityType;
 
 /**
  * Defines the display entity.
  *
- * @Plugin(
+ * @EntityType(
  *   id = "display",
- *   label = @Translation("Display"),
+ *   label = "Display",
  *   module = "layout",
  *   controller_class = "Drupal\Core\Config\Entity\ConfigStorageController",
  *   config_prefix = "display.bound",
diff --git a/core/modules/layout/lib/Drupal/layout/Plugin/Core/Entity/UnboundDisplay.php b/core/modules/layout/lib/Drupal/layout/Plugin/Core/Entity/UnboundDisplay.php
index 712f014..0c36280 100644
--- a/core/modules/layout/lib/Drupal/layout/Plugin/Core/Entity/UnboundDisplay.php
+++ b/core/modules/layout/lib/Drupal/layout/Plugin/Core/Entity/UnboundDisplay.php
@@ -11,8 +11,7 @@
 use Drupal\layout\Config\BoundDisplayInterface;
 use Drupal\layout\Config\UnboundDisplayInterface;
 use Drupal\layout\Plugin\LayoutInterface;
-use Drupal\Component\Annotation\Plugin;
-use Drupal\Core\Annotation\Translation;
+use Drupal\Core\Entity\Annotation\EntityType;
 
 /**
  * Defines the unbound_display entity.
@@ -20,9 +19,9 @@
  * Unbound displays contain blocks that are not 'bound' to a specific layout,
  * and their contained blocks are mapped only to region types, not regions.
  *
- * @Plugin(
+ * @EntityType(
  *   id = "unbound_display",
- *   label = @Translation("Unbound Display"),
+ *   label = "Unbound Display",
  *   module = "layout",
  *   controller_class = "Drupal\Core\Config\Entity\ConfigStorageController",
  *   config_prefix = "display.unbound",
diff --git a/core/modules/menu_link/lib/Drupal/menu_link/Plugin/Core/Entity/MenuLink.php b/core/modules/menu_link/lib/Drupal/menu_link/Plugin/Core/Entity/MenuLink.php
index ce3911d..632f318 100644
--- a/core/modules/menu_link/lib/Drupal/menu_link/Plugin/Core/Entity/MenuLink.php
+++ b/core/modules/menu_link/lib/Drupal/menu_link/Plugin/Core/Entity/MenuLink.php
@@ -9,17 +9,16 @@
 
 use Symfony\Component\Routing\Route;
 
-use Drupal\Component\Annotation\Plugin;
-use Drupal\Core\Annotation\Translation;
+use Drupal\Core\Entity\Annotation\EntityType;
 use Drupal\Core\Entity\ContentEntityInterface;
 use Drupal\Core\Entity\Entity;
 
 /**
  * Defines the menu link entity class.
  *
- * @Plugin(
+ * @EntityType(
  *   id = "menu_link",
- *   label = @Translation("Menu link"),
+ *   label = "Menu link",
  *   module = "menu_link",
  *   controller_class = "Drupal\menu_link\MenuLinkStorageController",
  *   render_controller_class = "Drupal\Core\Entity\EntityRenderController",
diff --git a/core/modules/node/lib/Drupal/node/Plugin/Core/Entity/Node.php b/core/modules/node/lib/Drupal/node/Plugin/Core/Entity/Node.php
index 92ed8e8..cf29e84 100644
--- a/core/modules/node/lib/Drupal/node/Plugin/Core/Entity/Node.php
+++ b/core/modules/node/lib/Drupal/node/Plugin/Core/Entity/Node.php
@@ -9,16 +9,15 @@
 
 use Drupal\Core\Entity\ContentEntityInterface;
 use Drupal\Core\Entity\EntityNG;
-use Drupal\Component\Annotation\Plugin;
-use Drupal\Core\Annotation\Translation;
+use Drupal\Core\Entity\Annotation\EntityType;
 
 /**
  * Defines the node entity class.
  *
- * @Plugin(
+ * @EntityType(
  *   id = "node",
- *   label = @Translation("Content"),
- *   bundle_label = @Translation("Content type"),
+ *   label = "Content",
+ *   bundle_label = "Content type",
  *   module = "node",
  *   controller_class = "Drupal\node\NodeStorageController",
  *   render_controller_class = "Drupal\node\NodeRenderController",
diff --git a/core/modules/picture/lib/Drupal/picture/Plugin/Core/Entity/PictureMapping.php b/core/modules/picture/lib/Drupal/picture/Plugin/Core/Entity/PictureMapping.php
index b65f248..0fe3be3 100644
--- a/core/modules/picture/lib/Drupal/picture/Plugin/Core/Entity/PictureMapping.php
+++ b/core/modules/picture/lib/Drupal/picture/Plugin/Core/Entity/PictureMapping.php
@@ -8,15 +8,14 @@
 namespace Drupal\picture\Plugin\Core\Entity;
 
 use Drupal\Core\Config\Entity\ConfigEntityBase;
-use Drupal\Component\Annotation\Plugin;
-use Drupal\Core\Annotation\Translation;
+use Drupal\Core\Entity\Annotation\EntityType;
 
 /**
  * Defines the Picture entity.
  *
- * @Plugin(
+ * @EntityType(
  *   id = "picture_mapping",
- *   label = @Translation("Picture mapping"),
+ *   label = "Picture mapping",
  *   module = "picture",
  *   controller_class = "Drupal\Core\Config\Entity\ConfigStorageController",
  *   form_controller_class = {
diff --git a/core/modules/shortcut/lib/Drupal/shortcut/Plugin/Core/Entity/Shortcut.php b/core/modules/shortcut/lib/Drupal/shortcut/Plugin/Core/Entity/Shortcut.php
index fd72e3c..578bd05 100644
--- a/core/modules/shortcut/lib/Drupal/shortcut/Plugin/Core/Entity/Shortcut.php
+++ b/core/modules/shortcut/lib/Drupal/shortcut/Plugin/Core/Entity/Shortcut.php
@@ -8,15 +8,14 @@
 namespace Drupal\shortcut\Plugin\Core\Entity;
 
 use Drupal\Core\Config\Entity\ConfigEntityBase;
-use Drupal\Component\Annotation\Plugin;
-use Drupal\Core\Annotation\Translation;
+use Drupal\Core\Entity\Annotation\EntityType;
 
 /**
  * Defines the Shortcut configuration entity.
  *
- * @Plugin(
+ * @EntityType(
  *   id = "shortcut",
- *   label = @Translation("Shortcut set"),
+ *   label = "Shortcut set",
  *   module = "shortcut",
  *   controller_class = "Drupal\shortcut\ShortcutStorageController",
  *   list_controller_class = "Drupal\shortcut\ShortcutListController",
diff --git a/core/modules/system/lib/Drupal/system/Plugin/Core/Entity/Menu.php b/core/modules/system/lib/Drupal/system/Plugin/Core/Entity/Menu.php
index 4b63d9b..5bc31a1 100644
--- a/core/modules/system/lib/Drupal/system/Plugin/Core/Entity/Menu.php
+++ b/core/modules/system/lib/Drupal/system/Plugin/Core/Entity/Menu.php
@@ -8,15 +8,14 @@
 namespace Drupal\system\Plugin\Core\Entity;
 
 use Drupal\Core\Config\Entity\ConfigEntityBase;
-use Drupal\Component\Annotation\Plugin;
-use Drupal\Core\Annotation\Translation;
+use Drupal\Core\Entity\Annotation\EntityType;
 
 /**
  * Defines the Menu configuration entity class.
  *
- * @Plugin(
+ * @EntityType(
  *   id = "menu",
- *   label = @Translation("Menu"),
+ *   label = "Menu",
  *   module = "system",
  *   controller_class = "Drupal\Core\Config\Entity\ConfigStorageController",
  *   config_prefix = "menu.menu",
diff --git a/core/modules/system/tests/modules/entity_cache_test_dependency/lib/Drupal/entity_cache_test_dependency/Plugin/Core/Entity/EntityCacheTest.php b/core/modules/system/tests/modules/entity_cache_test_dependency/lib/Drupal/entity_cache_test_dependency/Plugin/Core/Entity/EntityCacheTest.php
index 534a5f4..f069505 100644
--- a/core/modules/system/tests/modules/entity_cache_test_dependency/lib/Drupal/entity_cache_test_dependency/Plugin/Core/Entity/EntityCacheTest.php
+++ b/core/modules/system/tests/modules/entity_cache_test_dependency/lib/Drupal/entity_cache_test_dependency/Plugin/Core/Entity/EntityCacheTest.php
@@ -8,15 +8,14 @@
 namespace Drupal\entity_cache_test_dependency\Plugin\Core\Entity;
 
 use Drupal\Core\Entity\Entity;
-use Drupal\Component\Annotation\Plugin;
-use Drupal\Core\Annotation\Translation;
+use Drupal\Core\Entity\Annotation\EntityType;
 
 /**
  * Defines the EntityCacheTest class.
  *
- * @Plugin(
+ * @EntityType(
  *   id = "entity_cache_test",
- *   label = @Translation("Entity cache test"),
+ *   label = "Entity cache test",
  *   module = "entity_cache_test_dependency"
  * )
  */
diff --git a/core/modules/system/tests/modules/entity_test/lib/Drupal/entity_test/Plugin/Core/Entity/EntityTest.php b/core/modules/system/tests/modules/entity_test/lib/Drupal/entity_test/Plugin/Core/Entity/EntityTest.php
index 0bfb73e..4605dd5 100644
--- a/core/modules/system/tests/modules/entity_test/lib/Drupal/entity_test/Plugin/Core/Entity/EntityTest.php
+++ b/core/modules/system/tests/modules/entity_test/lib/Drupal/entity_test/Plugin/Core/Entity/EntityTest.php
@@ -8,15 +8,14 @@
 namespace Drupal\entity_test\Plugin\Core\Entity;
 
 use Drupal\Core\Entity\EntityNG;
-use Drupal\Component\Annotation\Plugin;
-use Drupal\Core\Annotation\Translation;
+use Drupal\Core\Entity\Annotation\EntityType;
 
 /**
  * Defines the test entity class.
  *
- * @Plugin(
+ * @EntityType(
  *   id = "entity_test",
- *   label = @Translation("Test entity"),
+ *   label = "Test entity",
  *   module = "entity_test",
  *   controller_class = "Drupal\entity_test\EntityTestStorageController",
  *   access_controller_class = "Drupal\entity_test\EntityTestAccessController",
diff --git a/core/modules/system/tests/modules/entity_test/lib/Drupal/entity_test/Plugin/Core/Entity/EntityTestDefaultAccess.php b/core/modules/system/tests/modules/entity_test/lib/Drupal/entity_test/Plugin/Core/Entity/EntityTestDefaultAccess.php
index ef50be9..41c1ccd 100644
--- a/core/modules/system/tests/modules/entity_test/lib/Drupal/entity_test/Plugin/Core/Entity/EntityTestDefaultAccess.php
+++ b/core/modules/system/tests/modules/entity_test/lib/Drupal/entity_test/Plugin/Core/Entity/EntityTestDefaultAccess.php
@@ -7,15 +7,14 @@
 
 namespace Drupal\entity_test\Plugin\Core\Entity;
 
-use Drupal\Component\Annotation\Plugin;
-use Drupal\Core\Annotation\Translation;
+use Drupal\Core\Entity\Annotation\EntityType;
 
 /**
  * Defines a test entity class with no access controller.
  *
- * @Plugin(
+ * @EntityType(
  *   id = "entity_test_default_access",
- *   label = @Translation("Test entity with default access"),
+ *   label = "Test entity with default access",
  *   module = "entity_test",
  *   controller_class = "Drupal\entity_test\EntityTestStorageController",
  *   base_table = "entity_test",
diff --git a/core/modules/system/tests/modules/entity_test/lib/Drupal/entity_test/Plugin/Core/Entity/EntityTestLabel.php b/core/modules/system/tests/modules/entity_test/lib/Drupal/entity_test/Plugin/Core/Entity/EntityTestLabel.php
index bcc3170..b55c039 100644
--- a/core/modules/system/tests/modules/entity_test/lib/Drupal/entity_test/Plugin/Core/Entity/EntityTestLabel.php
+++ b/core/modules/system/tests/modules/entity_test/lib/Drupal/entity_test/Plugin/Core/Entity/EntityTestLabel.php
@@ -7,15 +7,14 @@
 
 namespace Drupal\entity_test\Plugin\Core\Entity;
 
-use Drupal\Component\Annotation\Plugin;
-use Drupal\Core\Annotation\Translation;
+use Drupal\Core\Entity\Annotation\EntityType;
 
 /**
  * Test entity class.
  *
- * @Plugin(
+ * @EntityType(
  *   id = "entity_test_label",
- *   label = @Translation("Entity Test label"),
+ *   label = "Entity Test label",
  *   module = "entity_test",
  *   controller_class = "Drupal\entity_test\EntityTestStorageController",
  *   base_table = "entity_test",
diff --git a/core/modules/system/tests/modules/entity_test/lib/Drupal/entity_test/Plugin/Core/Entity/EntityTestLabelCallback.php b/core/modules/system/tests/modules/entity_test/lib/Drupal/entity_test/Plugin/Core/Entity/EntityTestLabelCallback.php
index e49ba88..1c1263f 100644
--- a/core/modules/system/tests/modules/entity_test/lib/Drupal/entity_test/Plugin/Core/Entity/EntityTestLabelCallback.php
+++ b/core/modules/system/tests/modules/entity_test/lib/Drupal/entity_test/Plugin/Core/Entity/EntityTestLabelCallback.php
@@ -7,15 +7,14 @@
 
 namespace Drupal\entity_test\Plugin\Core\Entity;
 
-use Drupal\Component\Annotation\Plugin;
-use Drupal\Core\Annotation\Translation;
+use Drupal\Core\Entity\Annotation\EntityType;
 
 /**
  * Test entity class.
  *
- * @Plugin(
+ * @EntityType(
  *   id = "entity_test_label_callback",
- *   label = @Translation("Entity test label callback"),
+ *   label = "Entity test label callback",
  *   module = "entity_test",
  *   controller_class = "Drupal\entity_test\EntityTestStorageController",
  *   field_cache = FALSE,
diff --git a/core/modules/system/tests/modules/entity_test/lib/Drupal/entity_test/Plugin/Core/Entity/EntityTestMul.php b/core/modules/system/tests/modules/entity_test/lib/Drupal/entity_test/Plugin/Core/Entity/EntityTestMul.php
index 4de550b..f3af5f2 100644
--- a/core/modules/system/tests/modules/entity_test/lib/Drupal/entity_test/Plugin/Core/Entity/EntityTestMul.php
+++ b/core/modules/system/tests/modules/entity_test/lib/Drupal/entity_test/Plugin/Core/Entity/EntityTestMul.php
@@ -8,15 +8,14 @@
 namespace Drupal\entity_test\Plugin\Core\Entity;
 
 use Drupal\entity_test\Plugin\Core\Entity\EntityTest;
-use Drupal\Component\Annotation\Plugin;
-use Drupal\Core\Annotation\Translation;
+use Drupal\Core\Entity\Annotation\EntityType;
 
 /**
  * Defines the test entity class.
  *
- * @Plugin(
+ * @EntityType(
  *   id = "entity_test_mul",
- *   label = @Translation("Test entity - data table"),
+ *   label = "Test entity - data table",
  *   module = "entity_test",
  *   controller_class = "Drupal\entity_test\EntityTestMulStorageController",
  *   access_controller_class = "Drupal\entity_test\EntityTestAccessController",
diff --git a/core/modules/system/tests/modules/entity_test/lib/Drupal/entity_test/Plugin/Core/Entity/EntityTestMulRev.php b/core/modules/system/tests/modules/entity_test/lib/Drupal/entity_test/Plugin/Core/Entity/EntityTestMulRev.php
index 632ada7..2d0c7c3 100644
--- a/core/modules/system/tests/modules/entity_test/lib/Drupal/entity_test/Plugin/Core/Entity/EntityTestMulRev.php
+++ b/core/modules/system/tests/modules/entity_test/lib/Drupal/entity_test/Plugin/Core/Entity/EntityTestMulRev.php
@@ -8,15 +8,14 @@
 namespace Drupal\entity_test\Plugin\Core\Entity;
 
 use Drupal\entity_test\Plugin\Core\Entity\EntityTestRev;
-use Drupal\Component\Annotation\Plugin;
-use Drupal\Core\Annotation\Translation;
+use Drupal\Core\Entity\Annotation\EntityType;
 
 /**
  * Defines the test entity class.
  *
- * @Plugin(
+ * @EntityType(
  *   id = "entity_test_mulrev",
- *   label = @Translation("Test entity - revisions and data table"),
+ *   label = "Test entity - revisions and data table",
  *   module = "entity_test",
  *   controller_class = "Drupal\entity_test\EntityTestMulRevStorageController",
  *   access_controller_class = "Drupal\entity_test\EntityTestAccessController",
diff --git a/core/modules/system/tests/modules/entity_test/lib/Drupal/entity_test/Plugin/Core/Entity/EntityTestNoLabel.php b/core/modules/system/tests/modules/entity_test/lib/Drupal/entity_test/Plugin/Core/Entity/EntityTestNoLabel.php
index 9dfea73..5099b8d 100644
--- a/core/modules/system/tests/modules/entity_test/lib/Drupal/entity_test/Plugin/Core/Entity/EntityTestNoLabel.php
+++ b/core/modules/system/tests/modules/entity_test/lib/Drupal/entity_test/Plugin/Core/Entity/EntityTestNoLabel.php
@@ -7,15 +7,14 @@
 
 namespace Drupal\entity_test\Plugin\Core\Entity;
 
-use Drupal\Component\Annotation\Plugin;
-use Drupal\Core\Annotation\Translation;
+use Drupal\Core\Entity\Annotation\EntityType;
 
 /**
  * Test entity class.
  *
- * @Plugin(
+ * @EntityType(
  *   id = "entity_test_no_label",
- *   label = @Translation("Entity Test without label"),
+ *   label = "Entity Test without label",
  *   module = "entity_test",
  *   controller_class = "Drupal\entity_test\EntityTestStorageController",
  *   field_cache = FALSE,
diff --git a/core/modules/system/tests/modules/entity_test/lib/Drupal/entity_test/Plugin/Core/Entity/EntityTestRender.php b/core/modules/system/tests/modules/entity_test/lib/Drupal/entity_test/Plugin/Core/Entity/EntityTestRender.php
index 29b42d1..957ceb2 100644
--- a/core/modules/system/tests/modules/entity_test/lib/Drupal/entity_test/Plugin/Core/Entity/EntityTestRender.php
+++ b/core/modules/system/tests/modules/entity_test/lib/Drupal/entity_test/Plugin/Core/Entity/EntityTestRender.php
@@ -7,15 +7,14 @@
 
 namespace Drupal\entity_test\Plugin\Core\Entity;
 
-use Drupal\Component\Annotation\Plugin;
-use Drupal\Core\Annotation\Translation;
+use Drupal\Core\Entity\Annotation\EntityType;
 
 /**
  * Defines a test entity class with a render controller.
  *
- * @Plugin(
+ * @EntityType(
  *   id = "entity_test_render",
- *   label = @Translation("Test render entity"),
+ *   label = "Test render entity",
  *   module = "entity_test",
  *   controller_class = "Drupal\entity_test\EntityTestStorageController",
  *   render_controller_class = "Drupal\entity_test\EntityTestRenderController",
diff --git a/core/modules/system/tests/modules/entity_test/lib/Drupal/entity_test/Plugin/Core/Entity/EntityTestRev.php b/core/modules/system/tests/modules/entity_test/lib/Drupal/entity_test/Plugin/Core/Entity/EntityTestRev.php
index 1afc669..fe7e8b4 100644
--- a/core/modules/system/tests/modules/entity_test/lib/Drupal/entity_test/Plugin/Core/Entity/EntityTestRev.php
+++ b/core/modules/system/tests/modules/entity_test/lib/Drupal/entity_test/Plugin/Core/Entity/EntityTestRev.php
@@ -8,15 +8,14 @@
 namespace Drupal\entity_test\Plugin\Core\Entity;
 
 use Drupal\entity_test\Plugin\Core\Entity\EntityTest;
-use Drupal\Component\Annotation\Plugin;
-use Drupal\Core\Annotation\Translation;
+use Drupal\Core\Entity\Annotation\EntityType;
 
 /**
  * Defines the test entity class.
  *
- * @Plugin(
+ * @EntityType(
  *   id = "entity_test_rev",
- *   label = @Translation("Test entity - revisions"),
+ *   label = "Test entity - revisions",
  *   module = "entity_test",
  *   controller_class = "Drupal\entity_test\EntityTestRevStorageController",
  *   access_controller_class = "Drupal\entity_test\EntityTestAccessController",
diff --git a/core/modules/taxonomy/lib/Drupal/taxonomy/Plugin/Core/Entity/Term.php b/core/modules/taxonomy/lib/Drupal/taxonomy/Plugin/Core/Entity/Term.php
index affe712..72f9675 100644
--- a/core/modules/taxonomy/lib/Drupal/taxonomy/Plugin/Core/Entity/Term.php
+++ b/core/modules/taxonomy/lib/Drupal/taxonomy/Plugin/Core/Entity/Term.php
@@ -9,16 +9,15 @@
 
 use Drupal\Core\Entity\ContentEntityInterface;
 use Drupal\Core\Entity\Entity;
-use Drupal\Component\Annotation\Plugin;
-use Drupal\Core\Annotation\Translation;
+use Drupal\Core\Entity\Annotation\EntityType;
 
 /**
  * Defines the taxonomy term entity.
  *
- * @Plugin(
+ * @EntityType(
  *   id = "taxonomy_term",
- *   label = @Translation("Taxonomy term"),
- *   bundle_label = @Translation("Vocabulary"),
+ *   label = "Taxonomy term",
+ *   bundle_label = "Vocabulary",
  *   module = "taxonomy",
  *   controller_class = "Drupal\taxonomy\TermStorageController",
  *   render_controller_class = "Drupal\taxonomy\TermRenderController",
diff --git a/core/modules/taxonomy/lib/Drupal/taxonomy/Plugin/Core/Entity/Vocabulary.php b/core/modules/taxonomy/lib/Drupal/taxonomy/Plugin/Core/Entity/Vocabulary.php
index c125418..aa1c748 100644
--- a/core/modules/taxonomy/lib/Drupal/taxonomy/Plugin/Core/Entity/Vocabulary.php
+++ b/core/modules/taxonomy/lib/Drupal/taxonomy/Plugin/Core/Entity/Vocabulary.php
@@ -8,15 +8,14 @@
 namespace Drupal\taxonomy\Plugin\Core\Entity;
 
 use Drupal\Core\Config\Entity\ConfigEntityBase;
-use Drupal\Component\Annotation\Plugin;
-use Drupal\Core\Annotation\Translation;
+use Drupal\Core\Entity\Annotation\EntityType;
 
 /**
  * Defines the taxonomy vocabulary entity.
  *
- * @Plugin(
+ * @EntityType(
  *   id = "taxonomy_vocabulary",
- *   label = @Translation("Taxonomy vocabulary"),
+ *   label = "Taxonomy vocabulary",
  *   module = "taxonomy",
  *   controller_class = "Drupal\taxonomy\VocabularyStorageController",
  *   access_controller_class = "Drupal\taxonomy\VocabularyAccessController",
diff --git a/core/modules/tour/lib/Drupal/tour/Plugin/Core/Entity/Tour.php b/core/modules/tour/lib/Drupal/tour/Plugin/Core/Entity/Tour.php
index 12ca122..8888a2a 100644
--- a/core/modules/tour/lib/Drupal/tour/Plugin/Core/Entity/Tour.php
+++ b/core/modules/tour/lib/Drupal/tour/Plugin/Core/Entity/Tour.php
@@ -8,16 +8,15 @@
 namespace Drupal\tour\Plugin\Core\Entity;
 
 use Drupal\Core\Config\Entity\ConfigEntityBase;
-use Drupal\Component\Annotation\Plugin;
-use Drupal\Core\Annotation\Translation;
+use Drupal\Core\Entity\Annotation\EntityType;
 use Drupal\tour\TipsBag;
 
 /**
  * Defines the configured tour entity.
  *
- * @Plugin(
+ * @EntityType(
  *   id = "tour",
- *   label = @Translation("Tour"),
+ *   label = "Tour",
  *   module = "tour",
  *   controller_class = "Drupal\Core\Config\Entity\ConfigStorageController",
  *   render_controller_class = "Drupal\tour\TourRenderController",
diff --git a/core/modules/user/lib/Drupal/user/Plugin/Core/Entity/Role.php b/core/modules/user/lib/Drupal/user/Plugin/Core/Entity/Role.php
index f64955c..59cc343 100644
--- a/core/modules/user/lib/Drupal/user/Plugin/Core/Entity/Role.php
+++ b/core/modules/user/lib/Drupal/user/Plugin/Core/Entity/Role.php
@@ -7,16 +7,15 @@
 
 namespace Drupal\user\Plugin\Core\Entity;
 
-use Drupal\Component\Annotation\Plugin;
-use Drupal\Core\Annotation\Translation;
+use Drupal\Core\Entity\Annotation\EntityType;
 use Drupal\Core\Config\Entity\ConfigEntityBase;
 
 /**
  * Defines the user role entity class.
  *
- * @Plugin(
+ * @EntityType(
  *   id = "user_role",
- *   label = @Translation("Role"),
+ *   label = "Role",
  *   module = "user",
  *   controller_class = "Drupal\user\RoleStorageController",
  *   config_prefix = "user.role",
diff --git a/core/modules/user/lib/Drupal/user/Plugin/Core/Entity/User.php b/core/modules/user/lib/Drupal/user/Plugin/Core/Entity/User.php
index fb7cbbb..eca0410 100644
--- a/core/modules/user/lib/Drupal/user/Plugin/Core/Entity/User.php
+++ b/core/modules/user/lib/Drupal/user/Plugin/Core/Entity/User.php
@@ -8,15 +8,14 @@
 namespace Drupal\user\Plugin\Core\Entity;
 
 use Drupal\Core\Entity\Entity;
-use Drupal\Component\Annotation\Plugin;
-use Drupal\Core\Annotation\Translation;
+use Drupal\Core\Entity\Annotation\EntityType;
 
 /**
  * Defines the user entity class.
  *
- * @Plugin(
+ * @EntityType(
  *   id = "user",
- *   label = @Translation("User"),
+ *   label = "User",
  *   module = "user",
  *   controller_class = "Drupal\user\UserStorageController",
  *   render_controller_class = "Drupal\Core\Entity\EntityRenderController",
diff --git a/core/modules/views/lib/Drupal/views/Plugin/Core/Entity/View.php b/core/modules/views/lib/Drupal/views/Plugin/Core/Entity/View.php
index 3c7e525..43b5c5f 100644
--- a/core/modules/views/lib/Drupal/views/Plugin/Core/Entity/View.php
+++ b/core/modules/views/lib/Drupal/views/Plugin/Core/Entity/View.php
@@ -12,15 +12,14 @@
 use Drupal\views_ui\ViewUI;
 use Drupal\views\ViewStorageInterface;
 use Drupal\views\ViewExecutable;
-use Drupal\Component\Annotation\Plugin;
-use Drupal\Core\Annotation\Translation;
+use Drupal\Core\Entity\Annotation\EntityType;
 
 /**
  * Defines a View configuration entity class.
  *
- * @Plugin(
+ * @EntityType(
  *   id = "view",
- *   label = @Translation("View"),
+ *   label = "View",
  *   module = "views",
  *   controller_class = "Drupal\views\ViewStorageController",
  *   list_controller_class = "Drupal\views_ui\ViewListController",
