diff --git a/core/lib/Drupal/Core/Config/Entity/ConfigEntityType.php b/core/lib/Drupal/Core/Config/Entity/ConfigEntityType.php
new file mode 100644
index 0000000..c72b707
--- /dev/null
+++ b/core/lib/Drupal/Core/Config/Entity/ConfigEntityType.php
@@ -0,0 +1,68 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\Core\Config\Entity\ConfigEntityType.
+ */
+
+namespace Drupal\Core\Config\Entity;
+
+use Drupal\Core\Entity\EntityType;
+
+/**
+ * Provides an implementation of a config entity type and its metadata.
+ */
+class ConfigEntityType extends EntityType {
+
+  /**
+   * Returns the config prefix used by the configuration entity type.
+   *
+   * @var string
+   */
+  protected $config_prefix;
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getControllerClasses() {
+    return parent::getControllerClasses() + array(
+      'storage' => 'Drupal\Core\Config\Entity\ConfigStorageController',
+    );
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getConfigPrefix() {
+    return isset($this->config_prefix) ? $this->config_prefix : FALSE;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getBaseTable() {
+    return FALSE;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getRevisionDataTable() {
+    return FALSE;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getRevisionTable() {
+    return FALSE;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getDataTable() {
+    return FALSE;
+  }
+
+}
diff --git a/core/lib/Drupal/Core/Entity/Annotation/ConfigEntityType.php b/core/lib/Drupal/Core/Entity/Annotation/ConfigEntityType.php
new file mode 100644
index 0000000..b99e472
--- /dev/null
+++ b/core/lib/Drupal/Core/Entity/Annotation/ConfigEntityType.php
@@ -0,0 +1,22 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\Core\Entity\Annotation\ConfigEntityType.
+ */
+
+namespace Drupal\Core\Entity\Annotation;
+
+/**
+ * Defines a config entity type annotation object.
+ *
+ * @Annotation
+ */
+class ConfigEntityType extends EntityType {
+
+  /**
+   * {@inheritdoc}
+   */
+  public $entity_type_class = 'Drupal\Core\Config\Entity\ConfigEntityType';
+
+}
diff --git a/core/lib/Drupal/Core/Entity/Annotation/ContentEntityType.php b/core/lib/Drupal/Core/Entity/Annotation/ContentEntityType.php
new file mode 100644
index 0000000..e9ae852
--- /dev/null
+++ b/core/lib/Drupal/Core/Entity/Annotation/ContentEntityType.php
@@ -0,0 +1,22 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\Core\Entity\Annotation\ContentEntityType.
+ */
+
+namespace Drupal\Core\Entity\Annotation;
+
+/**
+ * Defines a content entity type annotation object.
+ *
+ * @Annotation
+ */
+class ContentEntityType extends EntityType {
+
+  /**
+   * {@inheritdoc}
+   */
+  public $entity_type_class = 'Drupal\Core\Entity\ContentEntityType';
+
+}
diff --git a/core/lib/Drupal/Core/Entity/ContentEntityType.php b/core/lib/Drupal/Core/Entity/ContentEntityType.php
new file mode 100644
index 0000000..14f7ee2
--- /dev/null
+++ b/core/lib/Drupal/Core/Entity/ContentEntityType.php
@@ -0,0 +1,31 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\Core\Entity\ContentEntityType.
+ */
+
+namespace Drupal\Core\Entity;
+
+/**
+ * Defines a config entity type annotation object.
+ */
+class ContentEntityType extends EntityType {
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getControllerClasses() {
+    return parent::getControllerClasses() + array(
+      'storage' => 'Drupal\Core\Entity\FieldableDatabaseStorageController',
+    );
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getConfigPrefix() {
+    return FALSE;
+  }
+
+}
diff --git a/core/lib/Drupal/Core/Entity/EntityType.php b/core/lib/Drupal/Core/Entity/EntityType.php
index b4fe29c..4eae0df 100644
--- a/core/lib/Drupal/Core/Entity/EntityType.php
+++ b/core/lib/Drupal/Core/Entity/EntityType.php
@@ -164,13 +164,6 @@ class EntityType implements EntityTypeInterface {
   protected $translatable = FALSE;
 
   /**
-   * Returns the config prefix used by the configuration entity type.
-   *
-   * @var string
-   */
-  protected $config_prefix;
-
-  /**
    * The human-readable name of the type.
    *
    * @var string
@@ -541,7 +534,7 @@ public function isTranslatable() {
    * {@inheritdoc}
    */
   public function getConfigPrefix() {
-    return isset($this->config_prefix) ? $this->config_prefix : FALSE;
+    return FALSE;
   }
 
   /**
diff --git a/core/modules/aggregator/lib/Drupal/aggregator/Entity/Feed.php b/core/modules/aggregator/lib/Drupal/aggregator/Entity/Feed.php
index 1918bbc..3ade60e 100644
--- a/core/modules/aggregator/lib/Drupal/aggregator/Entity/Feed.php
+++ b/core/modules/aggregator/lib/Drupal/aggregator/Entity/Feed.php
@@ -16,7 +16,7 @@
 /**
  * Defines the aggregator feed entity class.
  *
- * @EntityType(
+ * @ContentEntityType(
  *   id = "aggregator_feed",
  *   label = @Translation("Aggregator feed"),
  *   controllers = {
diff --git a/core/modules/aggregator/lib/Drupal/aggregator/Entity/Item.php b/core/modules/aggregator/lib/Drupal/aggregator/Entity/Item.php
index 9b88830..191f5bc 100644
--- a/core/modules/aggregator/lib/Drupal/aggregator/Entity/Item.php
+++ b/core/modules/aggregator/lib/Drupal/aggregator/Entity/Item.php
@@ -15,7 +15,7 @@
 /**
  * Defines the aggregator item entity class.
  *
- * @EntityType(
+ * @ContentEntityType(
  *   id = "aggregator_item",
  *   label = @Translation("Aggregator feed item"),
  *   controllers = {
diff --git a/core/modules/block/custom_block/lib/Drupal/custom_block/Entity/CustomBlock.php b/core/modules/block/custom_block/lib/Drupal/custom_block/Entity/CustomBlock.php
index 68c3b10..cdaea5a 100644
--- a/core/modules/block/custom_block/lib/Drupal/custom_block/Entity/CustomBlock.php
+++ b/core/modules/block/custom_block/lib/Drupal/custom_block/Entity/CustomBlock.php
@@ -15,12 +15,11 @@
 /**
  * Defines the custom block entity class.
  *
- * @EntityType(
+ * @ContentEntityType(
  *   id = "custom_block",
  *   label = @Translation("Custom Block"),
  *   bundle_label = @Translation("Custom Block type"),
  *   controllers = {
- *     "storage" = "Drupal\Core\Entity\FieldableDatabaseStorageController",
  *     "access" = "Drupal\custom_block\CustomBlockAccessController",
  *     "list" = "Drupal\custom_block\CustomBlockListController",
  *     "view_builder" = "Drupal\custom_block\CustomBlockViewBuilder",
diff --git a/core/modules/block/custom_block/lib/Drupal/custom_block/Entity/CustomBlockType.php b/core/modules/block/custom_block/lib/Drupal/custom_block/Entity/CustomBlockType.php
index 0b41a4d..d630254 100644
--- a/core/modules/block/custom_block/lib/Drupal/custom_block/Entity/CustomBlockType.php
+++ b/core/modules/block/custom_block/lib/Drupal/custom_block/Entity/CustomBlockType.php
@@ -14,11 +14,10 @@
 /**
  * Defines the custom block type entity.
  *
- * @EntityType(
+ * @ConfigEntityType(
  *   id = "custom_block_type",
  *   label = @Translation("Custom block type"),
  *   controllers = {
- *     "storage" = "Drupal\Core\Config\Entity\ConfigStorageController",
  *     "form" = {
  *       "default" = "Drupal\custom_block\CustomBlockTypeFormController",
  *       "add" = "Drupal\custom_block\CustomBlockTypeFormController",
diff --git a/core/modules/block/lib/Drupal/block/Entity/Block.php b/core/modules/block/lib/Drupal/block/Entity/Block.php
index dc20929..9437e77 100644
--- a/core/modules/block/lib/Drupal/block/Entity/Block.php
+++ b/core/modules/block/lib/Drupal/block/Entity/Block.php
@@ -15,11 +15,10 @@
 /**
  * Defines a Block configuration entity class.
  *
- * @EntityType(
+ * @ConfigEntityType(
  *   id = "block",
  *   label = @Translation("Block"),
  *   controllers = {
- *     "storage" = "Drupal\Core\Config\Entity\ConfigStorageController",
  *     "access" = "Drupal\block\BlockAccessController",
  *     "view_builder" = "Drupal\block\BlockViewBuilder",
  *     "list" = "Drupal\block\BlockListController",
diff --git a/core/modules/breakpoint/lib/Drupal/breakpoint/Entity/Breakpoint.php b/core/modules/breakpoint/lib/Drupal/breakpoint/Entity/Breakpoint.php
index b23f6f6..1d40959 100644
--- a/core/modules/breakpoint/lib/Drupal/breakpoint/Entity/Breakpoint.php
+++ b/core/modules/breakpoint/lib/Drupal/breakpoint/Entity/Breakpoint.php
@@ -18,12 +18,9 @@
 /**
  * Defines the Breakpoint entity.
  *
- * @EntityType(
+ * @ConfigEntityType(
  *   id = "breakpoint",
  *   label = @Translation("Breakpoint"),
- *   controllers = {
- *     "storage" = "Drupal\Core\Config\Entity\ConfigStorageController"
- *   },
  *   config_prefix = "breakpoint.breakpoint",
  *   entity_keys = {
  *     "id" = "id",
diff --git a/core/modules/breakpoint/lib/Drupal/breakpoint/Entity/BreakpointGroup.php b/core/modules/breakpoint/lib/Drupal/breakpoint/Entity/BreakpointGroup.php
index f038cb1..2833b67 100644
--- a/core/modules/breakpoint/lib/Drupal/breakpoint/Entity/BreakpointGroup.php
+++ b/core/modules/breakpoint/lib/Drupal/breakpoint/Entity/BreakpointGroup.php
@@ -15,12 +15,9 @@
 /**
  * Defines the BreakpointGroup entity.
  *
- * @EntityType(
+ * @ConfigEntityType(
  *   id = "breakpoint_group",
  *   label = @Translation("Breakpoint group"),
- *   controllers = {
- *     "storage" = "Drupal\Core\Config\Entity\ConfigStorageController"
- *   },
  *   config_prefix = "breakpoint.breakpoint_group",
  *   entity_keys = {
  *     "id" = "id",
diff --git a/core/modules/comment/lib/Drupal/comment/Entity/Comment.php b/core/modules/comment/lib/Drupal/comment/Entity/Comment.php
index a715fb4..e7c0116 100644
--- a/core/modules/comment/lib/Drupal/comment/Entity/Comment.php
+++ b/core/modules/comment/lib/Drupal/comment/Entity/Comment.php
@@ -19,7 +19,7 @@
 /**
  * Defines the comment entity class.
  *
- * @EntityType(
+ * @ContentEntityType(
  *   id = "comment",
  *   label = @Translation("Comment"),
  *   bundle_label = @Translation("Content type"),
diff --git a/core/modules/config/tests/config_test/lib/Drupal/config_test/Entity/ConfigQueryTest.php b/core/modules/config/tests/config_test/lib/Drupal/config_test/Entity/ConfigQueryTest.php
index c781d22..8c37a49 100644
--- a/core/modules/config/tests/config_test/lib/Drupal/config_test/Entity/ConfigQueryTest.php
+++ b/core/modules/config/tests/config_test/lib/Drupal/config_test/Entity/ConfigQueryTest.php
@@ -10,7 +10,7 @@
 /**
  * Defines the ConfigQueryTest configuration entity used by the query test.
  *
- * @EntityType(
+ * @ConfigEntityType(
  *   id = "config_query_test",
  *   label = @Translation("Test configuration for query"),
  *   controllers = {
diff --git a/core/modules/config/tests/config_test/lib/Drupal/config_test/Entity/ConfigTest.php b/core/modules/config/tests/config_test/lib/Drupal/config_test/Entity/ConfigTest.php
index 623fa14..36d7fbf 100644
--- a/core/modules/config/tests/config_test/lib/Drupal/config_test/Entity/ConfigTest.php
+++ b/core/modules/config/tests/config_test/lib/Drupal/config_test/Entity/ConfigTest.php
@@ -13,7 +13,7 @@
 /**
  * Defines the ConfigTest configuration entity.
  *
- * @EntityType(
+ * @ConfigEntityType(
  *   id = "config_test",
  *   label = @Translation("Test configuration"),
  *   controllers = {
diff --git a/core/modules/contact/lib/Drupal/contact/Entity/Category.php b/core/modules/contact/lib/Drupal/contact/Entity/Category.php
index a3d3187..4b12fc5 100644
--- a/core/modules/contact/lib/Drupal/contact/Entity/Category.php
+++ b/core/modules/contact/lib/Drupal/contact/Entity/Category.php
@@ -14,7 +14,7 @@
 /**
  * Defines the contact category entity.
  *
- * @EntityType(
+ * @ConfigEntityType(
  *   id = "contact_category",
  *   label = @Translation("Contact category"),
  *   controllers = {
diff --git a/core/modules/contact/lib/Drupal/contact/Entity/Message.php b/core/modules/contact/lib/Drupal/contact/Entity/Message.php
index 573b304..62b83d9 100644
--- a/core/modules/contact/lib/Drupal/contact/Entity/Message.php
+++ b/core/modules/contact/lib/Drupal/contact/Entity/Message.php
@@ -14,7 +14,7 @@
 /**
  * Defines the contact message entity.
  *
- * @EntityType(
+ * @ContentEntityType(
  *   id = "contact_message",
  *   label = @Translation("Contact message"),
  *   controllers = {
diff --git a/core/modules/editor/lib/Drupal/editor/Entity/Editor.php b/core/modules/editor/lib/Drupal/editor/Entity/Editor.php
index 27346c9..bce9d21 100644
--- a/core/modules/editor/lib/Drupal/editor/Entity/Editor.php
+++ b/core/modules/editor/lib/Drupal/editor/Entity/Editor.php
@@ -13,12 +13,9 @@
 /**
  * Defines the configured text editor entity.
  *
- * @EntityType(
+ * @ConfigEntityType(
  *   id = "editor",
  *   label = @Translation("Editor"),
- *   controllers = {
- *     "storage" = "Drupal\Core\Config\Entity\ConfigStorageController"
- *   },
  *   config_prefix = "editor.editor",
  *   entity_keys = {
  *     "id" = "format",
diff --git a/core/modules/entity/lib/Drupal/entity/Entity/EntityFormDisplay.php b/core/modules/entity/lib/Drupal/entity/Entity/EntityFormDisplay.php
index 3222af7..7192894 100644
--- a/core/modules/entity/lib/Drupal/entity/Entity/EntityFormDisplay.php
+++ b/core/modules/entity/lib/Drupal/entity/Entity/EntityFormDisplay.php
@@ -14,12 +14,9 @@
  * Configuration entity that contains widget options for all components of a
  * entity form in a given form mode.
  *
- * @EntityType(
+ * @ConfigEntityType(
  *   id = "entity_form_display",
  *   label = @Translation("Entity form display"),
- *   controllers = {
- *     "storage" = "Drupal\Core\Config\Entity\ConfigStorageController"
- *   },
  *   config_prefix = "entity.form_display",
  *   entity_keys = {
  *     "id" = "id",
diff --git a/core/modules/entity/lib/Drupal/entity/Entity/EntityFormMode.php b/core/modules/entity/lib/Drupal/entity/Entity/EntityFormMode.php
index 43bdad1..38bf22f 100644
--- a/core/modules/entity/lib/Drupal/entity/Entity/EntityFormMode.php
+++ b/core/modules/entity/lib/Drupal/entity/Entity/EntityFormMode.php
@@ -27,17 +27,17 @@
  * @see entity_get_form_modes()
  * @see hook_entity_form_mode_info_alter()
  *
- * @EntityType(
+ * @ConfigEntityType(
  *   id = "form_mode",
  *   label = @Translation("Form mode"),
  *   controllers = {
+ *     "storage" = "Drupal\entity\EntityDisplayModeStorageController",
  *     "list" = "Drupal\entity\EntityFormModeListController",
  *     "form" = {
  *       "add" = "Drupal\entity\Form\EntityFormModeAddForm",
  *       "edit" = "Drupal\entity\Form\EntityDisplayModeEditForm",
  *       "delete" = "Drupal\entity\Form\EntityDisplayModeDeleteForm"
- *     },
- *     "storage" = "Drupal\entity\EntityDisplayModeStorageController"
+ *     }
  *   },
  *   admin_permission = "administer display modes",
  *   config_prefix = "entity.form_mode",
diff --git a/core/modules/entity/lib/Drupal/entity/Entity/EntityViewDisplay.php b/core/modules/entity/lib/Drupal/entity/Entity/EntityViewDisplay.php
index 5ab421e..20c63bd 100644
--- a/core/modules/entity/lib/Drupal/entity/Entity/EntityViewDisplay.php
+++ b/core/modules/entity/lib/Drupal/entity/Entity/EntityViewDisplay.php
@@ -16,7 +16,7 @@
  * Configuration entity that contains display options for all components of a
  * rendered entity in a given view mode.
  *
- * @EntityType(
+ * @ConfigEntityType(
  *   id = "entity_view_display",
  *   label = @Translation("Entity view display"),
  *   controllers = {
diff --git a/core/modules/entity/lib/Drupal/entity/Entity/EntityViewMode.php b/core/modules/entity/lib/Drupal/entity/Entity/EntityViewMode.php
index 9a31767..1785888 100644
--- a/core/modules/entity/lib/Drupal/entity/Entity/EntityViewMode.php
+++ b/core/modules/entity/lib/Drupal/entity/Entity/EntityViewMode.php
@@ -28,7 +28,7 @@
  * @see entity_get_view_modes()
  * @see hook_entity_view_mode_info_alter()
  *
- * @EntityType(
+ * @ConfigEntityType(
  *   id = "view_mode",
  *   label = @Translation("View mode"),
  *   controllers = {
@@ -37,8 +37,7 @@
  *       "add" = "Drupal\entity\Form\EntityDisplayModeAddForm",
  *       "edit" = "Drupal\entity\Form\EntityDisplayModeEditForm",
  *       "delete" = "Drupal\entity\Form\EntityDisplayModeDeleteForm"
- *     },
- *     "storage" = "Drupal\entity\EntityDisplayModeStorageController"
+ *     }
  *   },
  *   admin_permission = "administer display modes",
  *   config_prefix = "entity.view_mode",
diff --git a/core/modules/field/lib/Drupal/field/Entity/Field.php b/core/modules/field/lib/Drupal/field/Entity/Field.php
index 69c7551..9c2aaa8 100644
--- a/core/modules/field/lib/Drupal/field/Entity/Field.php
+++ b/core/modules/field/lib/Drupal/field/Entity/Field.php
@@ -21,7 +21,7 @@
  * @todo use 'field' as the id once hook_field_load() and friends
  * are removed.
  *
- * @EntityType(
+ * @ConfigEntityType(
  *   id = "field_entity",
  *   label = @Translation("Field"),
  *   controllers = {
diff --git a/core/modules/field/lib/Drupal/field/Entity/FieldInstance.php b/core/modules/field/lib/Drupal/field/Entity/FieldInstance.php
index 620e48c..e112dc4 100644
--- a/core/modules/field/lib/Drupal/field/Entity/FieldInstance.php
+++ b/core/modules/field/lib/Drupal/field/Entity/FieldInstance.php
@@ -17,7 +17,7 @@
 /**
  * Defines the Field instance entity.
  *
- * @EntityType(
+ * @ConfigEntityType(
  *   id = "field_instance",
  *   label = @Translation("Field instance"),
  *   controllers = {
diff --git a/core/modules/file/lib/Drupal/file/Entity/File.php b/core/modules/file/lib/Drupal/file/Entity/File.php
index 62a754b..d74dee8 100644
--- a/core/modules/file/lib/Drupal/file/Entity/File.php
+++ b/core/modules/file/lib/Drupal/file/Entity/File.php
@@ -17,7 +17,7 @@
 /**
  * Defines the file entity class.
  *
- * @EntityType(
+ * @ContentEntityType(
  *   id = "file",
  *   label = @Translation("File"),
  *   controllers = {
diff --git a/core/modules/filter/lib/Drupal/filter/Entity/FilterFormat.php b/core/modules/filter/lib/Drupal/filter/Entity/FilterFormat.php
index 15537ac..5487c12 100644
--- a/core/modules/filter/lib/Drupal/filter/Entity/FilterFormat.php
+++ b/core/modules/filter/lib/Drupal/filter/Entity/FilterFormat.php
@@ -17,7 +17,7 @@
 /**
  * Represents a text format.
  *
- * @EntityType(
+ * @ConfigEntityType(
  *   id = "filter_format",
  *   label = @Translation("Text format"),
  *   controllers = {
@@ -28,7 +28,6 @@
  *     },
  *     "list" = "Drupal\filter\FilterFormatListController",
  *     "access" = "Drupal\filter\FilterFormatAccessController",
- *     "storage" = "Drupal\Core\Config\Entity\ConfigStorageController"
  *   },
  *   config_prefix = "filter.format",
  *   admin_permission = "administer filters",
diff --git a/core/modules/image/lib/Drupal/image/Entity/ImageStyle.php b/core/modules/image/lib/Drupal/image/Entity/ImageStyle.php
index cc67dea..65e8f6d 100644
--- a/core/modules/image/lib/Drupal/image/Entity/ImageStyle.php
+++ b/core/modules/image/lib/Drupal/image/Entity/ImageStyle.php
@@ -19,7 +19,7 @@
 /**
  * Defines an image style configuration entity.
  *
- * @EntityType(
+ * @ConfigEntityType(
  *   id = "image_style",
  *   label = @Translation("Image style"),
  *   controllers = {
@@ -29,7 +29,6 @@
  *       "delete" = "Drupal\image\Form\ImageStyleDeleteForm",
  *       "flush" = "Drupal\image\Form\ImageStyleFlushForm"
  *     },
- *     "storage" = "Drupal\Core\Config\Entity\ConfigStorageController",
  *     "list" = "Drupal\image\ImageStyleListController",
  *   },
  *   admin_permission = "administer image styles",
diff --git a/core/modules/language/lib/Drupal/language/Entity/Language.php b/core/modules/language/lib/Drupal/language/Entity/Language.php
index 63e8542..bc42a81 100644
--- a/core/modules/language/lib/Drupal/language/Entity/Language.php
+++ b/core/modules/language/lib/Drupal/language/Entity/Language.php
@@ -15,11 +15,10 @@
 /**
  * Defines the Language entity.
  *
- * @EntityType(
+ * @ConfigEntityType(
  *   id = "language_entity",
  *   label = @Translation("Language"),
  *   controllers = {
- *     "storage" = "Drupal\Core\Config\Entity\ConfigStorageController",
  *     "list" = "Drupal\language\LanguageListController",
  *     "access" = "Drupal\language\LanguageAccessController",
  *     "form" = {
diff --git a/core/modules/migrate/lib/Drupal/migrate/Entity/Migration.php b/core/modules/migrate/lib/Drupal/migrate/Entity/Migration.php
index e572bed..033d910 100644
--- a/core/modules/migrate/lib/Drupal/migrate/Entity/Migration.php
+++ b/core/modules/migrate/lib/Drupal/migrate/Entity/Migration.php
@@ -17,14 +17,12 @@
  * The migration entity stores the information about a single migration, like
  * the source, process and destination plugins.
  *
- * @EntityType(
+ * @ConfigEntityType(
  *   id = "migration",
  *   label = @Translation("Migration"),
  *   module = "migrate",
  *   controllers = {
- *     "storage" = "Drupal\Core\Config\Entity\ConfigStorageController",
  *     "list" = "Drupal\Core\Config\Entity\DraggableListController",
- *     "access" = "Drupal\Core\Entity\EntityAccessController",
  *     "form" = {
  *       "add" = "Drupal\Core\Entity\EntityFormController",
  *       "edit" = "Drupal\Core\Entity\EntityFormController",
diff --git a/core/modules/node/lib/Drupal/node/Entity/Node.php b/core/modules/node/lib/Drupal/node/Entity/Node.php
index 017e89c..b8f2a0e 100644
--- a/core/modules/node/lib/Drupal/node/Entity/Node.php
+++ b/core/modules/node/lib/Drupal/node/Entity/Node.php
@@ -18,12 +18,11 @@
 /**
  * Defines the node entity class.
  *
- * @EntityType(
+ * @ContentEntityType(
  *   id = "node",
  *   label = @Translation("Content"),
  *   bundle_label = @Translation("Content type"),
  *   controllers = {
- *     "storage" = "Drupal\Core\Entity\FieldableDatabaseStorageController",
  *     "view_builder" = "Drupal\node\NodeViewBuilder",
  *     "access" = "Drupal\node\NodeAccessController",
  *     "form" = {
diff --git a/core/modules/node/lib/Drupal/node/Entity/NodeType.php b/core/modules/node/lib/Drupal/node/Entity/NodeType.php
index 2b36eb5..eb1c57a 100644
--- a/core/modules/node/lib/Drupal/node/Entity/NodeType.php
+++ b/core/modules/node/lib/Drupal/node/Entity/NodeType.php
@@ -16,11 +16,10 @@
 /**
  * Defines the Node type configuration entity.
  *
- * @EntityType(
+ * @ConfigEntityType(
  *   id = "node_type",
  *   label = @Translation("Content type"),
  *   controllers = {
- *     "storage" = "Drupal\Core\Config\Entity\ConfigStorageController",
  *     "access" = "Drupal\node\NodeTypeAccessController",
  *     "form" = {
  *       "add" = "Drupal\node\NodeTypeFormController",
diff --git a/core/modules/picture/lib/Drupal/picture/Entity/PictureMapping.php b/core/modules/picture/lib/Drupal/picture/Entity/PictureMapping.php
index 05ff927..9c11628 100644
--- a/core/modules/picture/lib/Drupal/picture/Entity/PictureMapping.php
+++ b/core/modules/picture/lib/Drupal/picture/Entity/PictureMapping.php
@@ -13,11 +13,10 @@
 /**
  * Defines the Picture entity.
  *
- * @EntityType(
+ * @ConfigEntityType(
  *   id = "picture_mapping",
  *   label = @Translation("Picture mapping"),
  *   controllers = {
- *     "storage" = "Drupal\Core\Config\Entity\ConfigStorageController",
  *     "list" = "Drupal\picture\PictureMappingListController",
  *     "form" = {
  *       "edit" = "Drupal\picture\PictureMappingFormController",
diff --git a/core/modules/rdf/lib/Drupal/rdf/Entity/RdfMapping.php b/core/modules/rdf/lib/Drupal/rdf/Entity/RdfMapping.php
index 662f44d..5a4297d 100644
--- a/core/modules/rdf/lib/Drupal/rdf/Entity/RdfMapping.php
+++ b/core/modules/rdf/lib/Drupal/rdf/Entity/RdfMapping.php
@@ -14,12 +14,9 @@
 /**
  * Config entity for working with RDF mappings.
  *
- * @EntityType(
+ * @ConfigEntityType(
  *   id = "rdf_mapping",
  *   label = @Translation("RDF mapping"),
- *   controllers = {
- *     "storage" = "Drupal\Core\Config\Entity\ConfigStorageController"
- *   },
  *   config_prefix = "rdf.mapping",
  *   entity_keys = {
  *     "id" = "id",
diff --git a/core/modules/search/lib/Drupal/search/Entity/SearchPage.php b/core/modules/search/lib/Drupal/search/Entity/SearchPage.php
index bbc4e6f..c640abe 100644
--- a/core/modules/search/lib/Drupal/search/Entity/SearchPage.php
+++ b/core/modules/search/lib/Drupal/search/Entity/SearchPage.php
@@ -17,7 +17,7 @@
 /**
  * Defines a configured search page.
  *
- * @EntityType(
+ * @ConfigEntityType(
  *   id = "search_page",
  *   label = @Translation("Search page"),
  *   controllers = {
diff --git a/core/modules/shortcut/lib/Drupal/shortcut/Entity/Shortcut.php b/core/modules/shortcut/lib/Drupal/shortcut/Entity/Shortcut.php
index e73c7ab..b609bbd 100644
--- a/core/modules/shortcut/lib/Drupal/shortcut/Entity/Shortcut.php
+++ b/core/modules/shortcut/lib/Drupal/shortcut/Entity/Shortcut.php
@@ -17,12 +17,11 @@
 /**
  * Defines the shortcut entity class.
  *
- * @EntityType(
+ * @ContentEntityType(
  *   id = "shortcut",
  *   label = @Translation("Shortcut link"),
  *   module = "shortcut",
  *   controllers = {
- *     "storage" = "Drupal\Core\Entity\FieldableDatabaseStorageController",
  *     "access" = "Drupal\shortcut\ShortcutAccessController",
  *     "form" = {
  *       "default" = "Drupal\shortcut\ShortcutFormController",
diff --git a/core/modules/shortcut/lib/Drupal/shortcut/Entity/ShortcutSet.php b/core/modules/shortcut/lib/Drupal/shortcut/Entity/ShortcutSet.php
index 44e0e15..a4d30c8 100644
--- a/core/modules/shortcut/lib/Drupal/shortcut/Entity/ShortcutSet.php
+++ b/core/modules/shortcut/lib/Drupal/shortcut/Entity/ShortcutSet.php
@@ -15,7 +15,7 @@
 /**
  * Defines the Shortcut configuration entity.
  *
- * @EntityType(
+ * @ConfigEntityType(
  *   id = "shortcut_set",
  *   label = @Translation("Shortcut set"),
  *   controllers = {
diff --git a/core/modules/system/lib/Drupal/system/Entity/Action.php b/core/modules/system/lib/Drupal/system/Entity/Action.php
index a313158..7df6352 100644
--- a/core/modules/system/lib/Drupal/system/Entity/Action.php
+++ b/core/modules/system/lib/Drupal/system/Entity/Action.php
@@ -16,12 +16,9 @@
 /**
  * Defines the configured action entity.
  *
- * @EntityType(
+ * @ConfigEntityType(
  *   id = "action",
  *   label = @Translation("Action"),
- *   controllers = {
- *     "storage" = "Drupal\Core\Config\Entity\ConfigStorageController",
- *   },
  *   admin_permission = "administer actions",
  *   config_prefix = "system.action",
  *   entity_keys = {
diff --git a/core/modules/system/lib/Drupal/system/Entity/DateFormat.php b/core/modules/system/lib/Drupal/system/Entity/DateFormat.php
index 8dbdf5b..0a1d494 100644
--- a/core/modules/system/lib/Drupal/system/Entity/DateFormat.php
+++ b/core/modules/system/lib/Drupal/system/Entity/DateFormat.php
@@ -15,11 +15,10 @@
 /**
  * Defines the Date Format configuration entity class.
  *
- * @EntityType(
+ * @ConfigEntityType(
  *   id = "date_format",
  *   label = @Translation("Date format"),
  *   controllers = {
- *     "storage" = "Drupal\Core\Config\Entity\ConfigStorageController",
  *     "access" = "Drupal\system\DateFormatAccessController",
  *     "list" = "Drupal\system\DateFormatListController",
  *     "form" = {
diff --git a/core/modules/system/lib/Drupal/system/Entity/Menu.php b/core/modules/system/lib/Drupal/system/Entity/Menu.php
index 644629a..9a5120c 100644
--- a/core/modules/system/lib/Drupal/system/Entity/Menu.php
+++ b/core/modules/system/lib/Drupal/system/Entity/Menu.php
@@ -14,11 +14,10 @@
 /**
  * Defines the Menu configuration entity class.
  *
- * @EntityType(
+ * @ConfigEntityType(
  *   id = "menu",
  *   label = @Translation("Menu"),
  *   controllers = {
- *     "storage" = "Drupal\Core\Config\Entity\ConfigStorageController",
  *     "access" = "Drupal\system\MenuAccessController"
  *   },
  *   config_prefix = "system.menu",
diff --git a/core/modules/system/system.api.php b/core/modules/system/system.api.php
index 59dfce0..b7d72a1 100644
--- a/core/modules/system/system.api.php
+++ b/core/modules/system/system.api.php
@@ -3234,7 +3234,7 @@ function hook_link_alter(&$variables) {
  * To annotate a class as a plugin, add code similar to the following to the
  * end of the documentation block immediately preceding the class declaration:
  * @code
- * * @EntityType(
+ * * @ContentEntityType(
  * *   id = "comment",
  * *   label = @Translation("Comment"),
  * *   ...
diff --git a/core/modules/system/tests/modules/entity_test/lib/Drupal/entity_test/Entity/EntityTest.php b/core/modules/system/tests/modules/entity_test/lib/Drupal/entity_test/Entity/EntityTest.php
index 91bd8fd..72acdf2 100644
--- a/core/modules/system/tests/modules/entity_test/lib/Drupal/entity_test/Entity/EntityTest.php
+++ b/core/modules/system/tests/modules/entity_test/lib/Drupal/entity_test/Entity/EntityTest.php
@@ -17,11 +17,10 @@
 /**
  * Defines the test entity class.
  *
- * @EntityType(
+ * @ContentEntityType(
  *   id = "entity_test",
  *   label = @Translation("Test entity"),
  *   controllers = {
- *     "storage" = "Drupal\Core\Entity\FieldableDatabaseStorageController",
  *     "list" = "Drupal\entity_test\EntityTestListController",
  *     "view_builder" = "Drupal\entity_test\EntityTestViewBuilder",
  *     "access" = "Drupal\entity_test\EntityTestAccessController",
diff --git a/core/modules/system/tests/modules/entity_test/lib/Drupal/entity_test/Entity/EntityTestBaseFieldDisplay.php b/core/modules/system/tests/modules/entity_test/lib/Drupal/entity_test/Entity/EntityTestBaseFieldDisplay.php
index 8134acf..14ed78a 100644
--- a/core/modules/system/tests/modules/entity_test/lib/Drupal/entity_test/Entity/EntityTestBaseFieldDisplay.php
+++ b/core/modules/system/tests/modules/entity_test/lib/Drupal/entity_test/Entity/EntityTestBaseFieldDisplay.php
@@ -16,7 +16,6 @@
  *   id = "entity_test_base_field_display",
  *   label = @Translation("Test entity - base field display"),
  *   controllers = {
- *     "storage" = "Drupal\Core\Entity\FieldableDatabaseStorageController",
  *     "access" = "Drupal\entity_test\EntityTestAccessController",
  *     "form" = {
  *       "default" = "Drupal\entity_test\EntityTestFormController"
diff --git a/core/modules/system/tests/modules/entity_test/lib/Drupal/entity_test/Entity/EntityTestCache.php b/core/modules/system/tests/modules/entity_test/lib/Drupal/entity_test/Entity/EntityTestCache.php
index 460b2e7..6e509b5 100644
--- a/core/modules/system/tests/modules/entity_test/lib/Drupal/entity_test/Entity/EntityTestCache.php
+++ b/core/modules/system/tests/modules/entity_test/lib/Drupal/entity_test/Entity/EntityTestCache.php
@@ -12,11 +12,10 @@
 /**
  * Defines the test entity class.
  *
- * @EntityType(
+ * @ContentEntityType(
  *   id = "entity_test_cache",
  *   label = @Translation("Test entity with field cache"),
  *   controllers = {
- *     "storage" = "Drupal\Core\Entity\FieldableDatabaseStorageController",
  *     "access" = "Drupal\entity_test\EntityTestAccessController",
  *     "form" = {
  *       "default" = "Drupal\entity_test\EntityTestFormController"
diff --git a/core/modules/system/tests/modules/entity_test/lib/Drupal/entity_test/Entity/EntityTestDefaultAccess.php b/core/modules/system/tests/modules/entity_test/lib/Drupal/entity_test/Entity/EntityTestDefaultAccess.php
index d5f22cc..7df4362 100644
--- a/core/modules/system/tests/modules/entity_test/lib/Drupal/entity_test/Entity/EntityTestDefaultAccess.php
+++ b/core/modules/system/tests/modules/entity_test/lib/Drupal/entity_test/Entity/EntityTestDefaultAccess.php
@@ -10,12 +10,9 @@
 /**
  * Defines a test entity class with no access controller.
  *
- * @EntityType(
+ * @ContentEntityType(
  *   id = "entity_test_default_access",
  *   label = @Translation("Test entity with default access"),
- *   controllers = {
- *     "storage" = "Drupal\Core\Entity\FieldableDatabaseStorageController"
- *   },
  *   base_table = "entity_test",
  *   entity_keys = {
  *     "id" = "id",
diff --git a/core/modules/system/tests/modules/entity_test/lib/Drupal/entity_test/Entity/EntityTestLabel.php b/core/modules/system/tests/modules/entity_test/lib/Drupal/entity_test/Entity/EntityTestLabel.php
index b022a17..90a56a5 100644
--- a/core/modules/system/tests/modules/entity_test/lib/Drupal/entity_test/Entity/EntityTestLabel.php
+++ b/core/modules/system/tests/modules/entity_test/lib/Drupal/entity_test/Entity/EntityTestLabel.php
@@ -10,11 +10,10 @@
 /**
  * Test entity class.
  *
- * @EntityType(
+ * @ContentEntityType(
  *   id = "entity_test_label",
  *   label = @Translation("Entity Test label"),
  *   controllers = {
- *     "storage" = "Drupal\Core\Entity\FieldableDatabaseStorageController",
  *     "view_builder" = "Drupal\entity_test\EntityTestViewBuilder"
  *   },
  *   base_table = "entity_test",
diff --git a/core/modules/system/tests/modules/entity_test/lib/Drupal/entity_test/Entity/EntityTestLabelCallback.php b/core/modules/system/tests/modules/entity_test/lib/Drupal/entity_test/Entity/EntityTestLabelCallback.php
index aa96db3..481711f 100644
--- a/core/modules/system/tests/modules/entity_test/lib/Drupal/entity_test/Entity/EntityTestLabelCallback.php
+++ b/core/modules/system/tests/modules/entity_test/lib/Drupal/entity_test/Entity/EntityTestLabelCallback.php
@@ -10,12 +10,9 @@
 /**
  * Test entity class.
  *
- * @EntityType(
+ * @ContentEntityType(
  *   id = "entity_test_label_callback",
  *   label = @Translation("Entity test label callback"),
- *   controllers = {
- *     "storage" = "Drupal\Core\Entity\FieldableDatabaseStorageController"
- *   },
  *   field_cache = FALSE,
  *   base_table = "entity_test",
  *   revision_table = "entity_test_revision",
diff --git a/core/modules/system/tests/modules/entity_test/lib/Drupal/entity_test/Entity/EntityTestMul.php b/core/modules/system/tests/modules/entity_test/lib/Drupal/entity_test/Entity/EntityTestMul.php
index adfef6e..2292ca5 100644
--- a/core/modules/system/tests/modules/entity_test/lib/Drupal/entity_test/Entity/EntityTestMul.php
+++ b/core/modules/system/tests/modules/entity_test/lib/Drupal/entity_test/Entity/EntityTestMul.php
@@ -13,11 +13,10 @@
 /**
  * Defines the test entity class.
  *
- * @EntityType(
+ * @ContentEntityType(
  *   id = "entity_test_mul",
  *   label = @Translation("Test entity - data table"),
  *   controllers = {
- *     "storage" = "Drupal\Core\Entity\FieldableDatabaseStorageController",
  *     "view_builder" = "Drupal\entity_test\EntityTestViewBuilder",
  *     "access" = "Drupal\entity_test\EntityTestAccessController",
  *     "form" = {
diff --git a/core/modules/system/tests/modules/entity_test/lib/Drupal/entity_test/Entity/EntityTestMulRev.php b/core/modules/system/tests/modules/entity_test/lib/Drupal/entity_test/Entity/EntityTestMulRev.php
index e0dce68..e82dde3 100644
--- a/core/modules/system/tests/modules/entity_test/lib/Drupal/entity_test/Entity/EntityTestMulRev.php
+++ b/core/modules/system/tests/modules/entity_test/lib/Drupal/entity_test/Entity/EntityTestMulRev.php
@@ -13,11 +13,10 @@
 /**
  * Defines the test entity class.
  *
- * @EntityType(
+ * @ContentEntityType(
  *   id = "entity_test_mulrev",
  *   label = @Translation("Test entity - revisions and data table"),
  *   controllers = {
- *     "storage" = "Drupal\Core\Entity\FieldableDatabaseStorageController",
  *     "access" = "Drupal\entity_test\EntityTestAccessController",
  *     "form" = {
  *       "default" = "Drupal\entity_test\EntityTestFormController"
diff --git a/core/modules/system/tests/modules/entity_test/lib/Drupal/entity_test/Entity/EntityTestNoLabel.php b/core/modules/system/tests/modules/entity_test/lib/Drupal/entity_test/Entity/EntityTestNoLabel.php
index ce97a1e..6dc35d4 100644
--- a/core/modules/system/tests/modules/entity_test/lib/Drupal/entity_test/Entity/EntityTestNoLabel.php
+++ b/core/modules/system/tests/modules/entity_test/lib/Drupal/entity_test/Entity/EntityTestNoLabel.php
@@ -10,12 +10,9 @@
 /**
  * Test entity class.
  *
- * @EntityType(
+ * @ContentEntityType(
  *   id = "entity_test_no_label",
  *   label = @Translation("Entity Test without label"),
- *   controllers = {
- *     "storage" = "Drupal\Core\Entity\FieldableDatabaseStorageController"
- *   },
  *   field_cache = FALSE,
  *   base_table = "entity_test",
  *   entity_keys = {
diff --git a/core/modules/system/tests/modules/entity_test/lib/Drupal/entity_test/Entity/EntityTestRev.php b/core/modules/system/tests/modules/entity_test/lib/Drupal/entity_test/Entity/EntityTestRev.php
index a31dcdc..5ab2561 100644
--- a/core/modules/system/tests/modules/entity_test/lib/Drupal/entity_test/Entity/EntityTestRev.php
+++ b/core/modules/system/tests/modules/entity_test/lib/Drupal/entity_test/Entity/EntityTestRev.php
@@ -13,11 +13,10 @@
 /**
  * Defines the test entity class.
  *
- * @EntityType(
+ * @ContentEntityType(
  *   id = "entity_test_rev",
  *   label = @Translation("Test entity - revisions"),
  *   controllers = {
- *     "storage" = "Drupal\Core\Entity\FieldableDatabaseStorageController",
  *     "access" = "Drupal\entity_test\EntityTestAccessController",
  *     "form" = {
  *       "default" = "Drupal\entity_test\EntityTestFormController"
diff --git a/core/modules/taxonomy/lib/Drupal/taxonomy/Entity/Term.php b/core/modules/taxonomy/lib/Drupal/taxonomy/Entity/Term.php
index d8f503c..66ac456 100644
--- a/core/modules/taxonomy/lib/Drupal/taxonomy/Entity/Term.php
+++ b/core/modules/taxonomy/lib/Drupal/taxonomy/Entity/Term.php
@@ -17,7 +17,7 @@
 /**
  * Defines the taxonomy term entity.
  *
- * @EntityType(
+ * @ContentEntityType(
  *   id = "taxonomy_term",
  *   label = @Translation("Taxonomy term"),
  *   bundle_label = @Translation("Vocabulary"),
diff --git a/core/modules/taxonomy/lib/Drupal/taxonomy/Entity/Vocabulary.php b/core/modules/taxonomy/lib/Drupal/taxonomy/Entity/Vocabulary.php
index 7857c07..7e8283a 100644
--- a/core/modules/taxonomy/lib/Drupal/taxonomy/Entity/Vocabulary.php
+++ b/core/modules/taxonomy/lib/Drupal/taxonomy/Entity/Vocabulary.php
@@ -14,7 +14,7 @@
 /**
  * Defines the taxonomy vocabulary entity.
  *
- * @EntityType(
+ * @ConfigEntityType(
  *   id = "taxonomy_vocabulary",
  *   label = @Translation("Taxonomy vocabulary"),
  *   controllers = {
diff --git a/core/modules/tour/lib/Drupal/tour/Entity/Tour.php b/core/modules/tour/lib/Drupal/tour/Entity/Tour.php
index 1f553c8..e7e8d10 100644
--- a/core/modules/tour/lib/Drupal/tour/Entity/Tour.php
+++ b/core/modules/tour/lib/Drupal/tour/Entity/Tour.php
@@ -14,11 +14,10 @@
 /**
  * Defines the configured tour entity.
  *
- * @EntityType(
+ * @ConfigEntityType(
  *   id = "tour",
  *   label = @Translation("Tour"),
  *   controllers = {
- *     "storage" = "Drupal\Core\Config\Entity\ConfigStorageController",
  *     "view_builder" = "Drupal\tour\TourViewBuilder"
  *   },
  *   config_prefix = "tour.tour",
diff --git a/core/modules/user/lib/Drupal/user/Entity/Role.php b/core/modules/user/lib/Drupal/user/Entity/Role.php
index e4b5f04..71ac261 100644
--- a/core/modules/user/lib/Drupal/user/Entity/Role.php
+++ b/core/modules/user/lib/Drupal/user/Entity/Role.php
@@ -15,7 +15,7 @@
 /**
  * Defines the user role entity class.
  *
- * @EntityType(
+ * @ConfigEntityType(
  *   id = "user_role",
  *   label = @Translation("Role"),
  *   controllers = {
diff --git a/core/modules/user/lib/Drupal/user/Entity/User.php b/core/modules/user/lib/Drupal/user/Entity/User.php
index 80c44ee..44bce77 100644
--- a/core/modules/user/lib/Drupal/user/Entity/User.php
+++ b/core/modules/user/lib/Drupal/user/Entity/User.php
@@ -16,7 +16,7 @@
 /**
  * Defines the user entity class.
  *
- * @EntityType(
+ * @ContentEntityType(
  *   id = "user",
  *   label = @Translation("User"),
  *   controllers = {
diff --git a/core/modules/views/lib/Drupal/views/Entity/View.php b/core/modules/views/lib/Drupal/views/Entity/View.php
index f96fbd0..f9e4b07 100644
--- a/core/modules/views/lib/Drupal/views/Entity/View.php
+++ b/core/modules/views/lib/Drupal/views/Entity/View.php
@@ -18,7 +18,7 @@
 /**
  * Defines a View configuration entity class.
  *
- * @EntityType(
+ * @ConfigEntityType(
  *   id = "view",
  *   label = @Translation("View"),
  *   controllers = {
