diff --git a/core/lib/Drupal/Core/Config/ConfigManager.php b/core/lib/Drupal/Core/Config/ConfigManager.php
index 6faa23e..c38e85a 100644
--- a/core/lib/Drupal/Core/Config/ConfigManager.php
+++ b/core/lib/Drupal/Core/Config/ConfigManager.php
@@ -9,6 +9,7 @@
 
 use Drupal\Component\Serialization\Yaml;
 use Drupal\Core\Config\Entity\ConfigDependencyManager;
+use Drupal\Core\Config\Entity\ConfigEntityTypeInterface;
 use Drupal\Core\Entity\EntityManagerInterface;
 use Drupal\Core\Entity\EntityTypeInterface;
 use Drupal\Core\StringTranslation\TranslationManager;
@@ -78,7 +79,7 @@ public function __construct(EntityManagerInterface $entity_manager, ConfigFactor
    */
   public function getEntityTypeIdByName($name) {
     $entities = array_filter($this->entityManager->getDefinitions(), function (EntityTypeInterface $entity_type) use ($name) {
-      return ($config_prefix = $entity_type->getConfigPrefix()) && strpos($name, $config_prefix . '.') === 0;
+      return ($entity_type instanceof ConfigEntityTypeInterface && $config_prefix = $entity_type->getConfigPrefix()) && strpos($name, $config_prefix . '.') === 0;
     });
     return key($entities);
   }
diff --git a/core/lib/Drupal/Core/Config/Entity/ConfigEntityType.php b/core/lib/Drupal/Core/Config/Entity/ConfigEntityType.php
index 7960edc..7d57245 100644
--- a/core/lib/Drupal/Core/Config/Entity/ConfigEntityType.php
+++ b/core/lib/Drupal/Core/Config/Entity/ConfigEntityType.php
@@ -14,7 +14,7 @@
 /**
  * Provides an implementation of a configuration entity type and its metadata.
  */
-class ConfigEntityType extends EntityType {
+class ConfigEntityType extends EntityType implements ConfigEntityTypeInterface {
 
   /**
    * Length limit of the configuration entity prefix.
@@ -49,7 +49,14 @@ class ConfigEntityType extends EntityType {
   const PREFIX_LENGTH = 83;
 
   /**
-   * Returns the config prefix used by the configuration entity type.
+   * The config prefix set in the configuration entity type annotation.
+   *
+   * The default configuration prefix is constructed from the name of the module
+   * that provides the entity type and the ID of the entity type. If a
+   * config_prefix annotation is present it will be used in place of the entity
+   * type ID.
+   *
+   * @see \Drupal\Core\Config\Entity\ConfigEntityType::getConfigPrefix()
    *
    * @var string
    */
diff --git a/core/lib/Drupal/Core/Config/Entity/ConfigEntityTypeInterface.php b/core/lib/Drupal/Core/Config/Entity/ConfigEntityTypeInterface.php
new file mode 100644
index 0000000..3e0be3b
--- /dev/null
+++ b/core/lib/Drupal/Core/Config/Entity/ConfigEntityTypeInterface.php
@@ -0,0 +1,34 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\Core\Config\Entity\ConfigEntityTypeInterface.
+ */
+
+namespace Drupal\Core\Config\Entity;
+
+use Drupal\Core\Entity\EntityTypeInterface;
+
+/**
+ * Provides an interface for a configuration entity type and its metadata.
+ *
+ * @see \Drupal\Core\Entity\EntityTypeInterface
+ */
+interface ConfigEntityTypeInterface extends EntityTypeInterface {
+
+  /**
+   * Gets the configuration name prefix.
+   *
+   * Ensures that all configuration entities are prefixed by the module that
+   * provides the configuration entity type. This ensures that if a
+   * configuration entity is contained in a extension's default configuration it
+   * be created during extension installation. Additionally, it allows
+   * dependencies to be calculated without the modules that provide configuration
+   * entity types being installed.
+   *
+   * @return string
+   *   The configuration entity prefix
+   */
+  public function getConfigPrefix();
+
+}
diff --git a/core/lib/Drupal/Core/Entity/ContentEntityType.php b/core/lib/Drupal/Core/Entity/ContentEntityType.php
index f69f901..a8606a4 100644
--- a/core/lib/Drupal/Core/Entity/ContentEntityType.php
+++ b/core/lib/Drupal/Core/Entity/ContentEntityType.php
@@ -21,11 +21,4 @@ public function getControllerClasses() {
     );
   }
 
-  /**
-   * {@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 de4411c..36889af 100644
--- a/core/lib/Drupal/Core/Entity/EntityType.php
+++ b/core/lib/Drupal/Core/Entity/EntityType.php
@@ -548,13 +548,6 @@ public function isTranslatable() {
   /**
    * {@inheritdoc}
    */
-  public function getConfigPrefix() {
-    return FALSE;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
   public function getRevisionDataTable() {
     return isset($this->revision_data_table) ? $this->revision_data_table : FALSE;
   }
diff --git a/core/lib/Drupal/Core/Entity/EntityTypeInterface.php b/core/lib/Drupal/Core/Entity/EntityTypeInterface.php
index 7706a58..8662375 100644
--- a/core/lib/Drupal/Core/Entity/EntityTypeInterface.php
+++ b/core/lib/Drupal/Core/Entity/EntityTypeInterface.php
@@ -542,16 +542,6 @@ public function getBaseTable();
   public function isTranslatable();
 
   /**
-   * Returns the config prefix used by the configuration entity type.
-   *
-   * @todo Used for configuration entities only.
-   *
-   * @return string|bool
-   *   The config prefix, or FALSE if not a configuration entity type.
-   */
-  public function getConfigPrefix();
-
-  /**
    * Returns the name of the entity's revision data table.
    *
    * @todo Used by ContentEntityDatabaseStorage only.
diff --git a/core/modules/config_translation/tests/Drupal/config_translation/Tests/ConfigEntityMapperTest.php b/core/modules/config_translation/tests/Drupal/config_translation/Tests/ConfigEntityMapperTest.php
index b7ed1f5..fe541f2 100644
--- a/core/modules/config_translation/tests/Drupal/config_translation/Tests/ConfigEntityMapperTest.php
+++ b/core/modules/config_translation/tests/Drupal/config_translation/Tests/ConfigEntityMapperTest.php
@@ -36,7 +36,7 @@ class ConfigEntityMapperTest extends UnitTestCase {
   /**
    * The entity instance used for testing.
    *
-   * @var \Drupal\Core\Config\TypedConfigManager|\PHPUnit_Framework_MockObject_MockObject
+   * @var \Drupal\Core\Entity\EntityInterface|\PHPUnit_Framework_MockObject_MockObject
    */
   protected $entity;
 
@@ -48,6 +48,13 @@ class ConfigEntityMapperTest extends UnitTestCase {
   protected $routeProvider;
 
   /**
+   * The config entity type used for testing.
+   *
+   * @var \Drupal\Core\Config\Entity\ConfigEntityType|\PHPUnit_Framework_MockObject_MockObject
+   */
+  protected $entityType;
+
+  /**
    * {@inheritdoc}
    */
   public static function getInfo() {
@@ -93,6 +100,8 @@ public function setUp() {
       $this->getStringTranslationStub(),
       $this->entityManager
     );
+
+    $this->entityType = $this->getMock('Drupal\Core\Config\Entity\ConfigEntityTypeInterface');
   }
 
   /**
@@ -105,12 +114,11 @@ public function testSetEntity() {
       ->with()
       ->will($this->returnValue('entity_id'));
 
-    $entity_type = $this->getMock('Drupal\Core\Entity\EntityTypeInterface');
     $this->entityManager
       ->expects($this->once())
       ->method('getDefinition')
       ->with('language_entity')
-      ->will($this->returnValue($entity_type));
+      ->will($this->returnValue($this->entityType));
 
     $result = $this->configEntityMapper->setEntity($this->entity);
     $this->assertTrue($result);
@@ -124,12 +132,11 @@ public function testSetEntity() {
    * Tests ConfigEntityMapper::getOverviewRouteParameters().
    */
   public function testGetOverviewRouteParameters() {
-    $entity_type = $this->getMock('Drupal\Core\Entity\EntityTypeInterface');
     $this->entityManager
       ->expects($this->once())
       ->method('getDefinition')
       ->with('language_entity')
-      ->will($this->returnValue($entity_type));
+      ->will($this->returnValue($this->entityType));
     $this->configEntityMapper->setEntity($this->entity);
 
     $this->entity
@@ -155,15 +162,14 @@ public function testGetType() {
    * Tests ConfigEntityMapper::getTypeName().
    */
   public function testGetTypeName() {
-    $entity_type = $this->getMock('Drupal\Core\Entity\EntityTypeInterface');
-    $entity_type->expects($this->once())
+    $this->entityType->expects($this->once())
       ->method('getLabel')
       ->will($this->returnValue('test'));
     $this->entityManager
       ->expects($this->once())
       ->method('getDefinition')
       ->with('language_entity')
-      ->will($this->returnValue($entity_type));
+      ->will($this->returnValue($this->entityType));
 
     $result = $this->configEntityMapper->getTypeName();
     $this->assertSame('test', $result);
@@ -173,15 +179,14 @@ public function testGetTypeName() {
    * Tests ConfigEntityMapper::getTypeLabel().
    */
   public function testGetTypeLabel() {
-    $entity_type = $this->getMock('Drupal\Core\Entity\EntityTypeInterface');
-    $entity_type->expects($this->once())
+    $this->entityType->expects($this->once())
       ->method('getLabel')
       ->will($this->returnValue('test'));
     $this->entityManager
       ->expects($this->once())
       ->method('getDefinition')
       ->with('language_entity')
-      ->will($this->returnValue($entity_type));
+      ->will($this->returnValue($this->entityType));
 
     $result = $this->configEntityMapper->getTypeLabel();
     $this->assertSame('test', $result);
diff --git a/core/tests/Drupal/Tests/Core/Config/Entity/ConfigEntityTypeTest.php b/core/tests/Drupal/Tests/Core/Config/Entity/ConfigEntityTypeTest.php
index 3db843a..9b8ca98 100644
--- a/core/tests/Drupal/Tests/Core/Config/Entity/ConfigEntityTypeTest.php
+++ b/core/tests/Drupal/Tests/Core/Config/Entity/ConfigEntityTypeTest.php
@@ -34,11 +34,11 @@ public static function getInfo() {
    * Sets up a ConfigEntityType object for a given set of values.
    *
    * @param array $definition
-   *   An array of values to use for the ConfigEntityType.
+   *   (optional) An array of values to use for the ConfigEntityType.
    *
-   * @return \Drupal\Core\Entity\EntityTypeInterface
+   * @return \Drupal\Core\Config\Entity\ConfigEntityTypeInterface
    */
-  protected function setUpConfigEntityType($definition) {
+  protected function setUpConfigEntityType($definition = array()) {
     if (!isset($definition['id'])) {
       $definition += array(
         'id' => 'example_config_entity_type',
@@ -88,4 +88,77 @@ public function testConfigPrefixLengthValid() {
     $this->assertEquals($expected_prefix, $config_entity->getConfigPrefix());
   }
 
+  /**
+   * Tests the getConfigPrefix() method.
+   *
+   * @dataProvider providerTestGetConfigPrefix
+   *
+   * @covers ::getConfigPrefix()
+   */
+  public function testGetConfigPrefix($definition, $expected) {
+    $entity_type = $this->setUpConfigEntityType($definition);
+    $this->assertSame($expected, $entity_type->getConfigPrefix());
+  }
+
+  /**
+   * Provides test data.
+   */
+  public function providerTestGetConfigPrefix() {
+    return array(
+      array(array('provider' => 'node', 'id' => 'node_type', 'config_prefix' => 'type'), 'node.type'),
+      array(array('provider' => 'views', 'id' => 'view'), 'views.view'),
+    );
+  }
+
+  /**
+   * Tests the getControllerClasses() method.
+   *
+   * @covers ::getControllerClasses()
+   */
+  public function testGetControllerClasses() {
+    $entity_type = $this->setUpConfigEntityType();
+    $controllers = $entity_type->getControllerClasses();
+    $this->assertEquals('Drupal\Core\Config\Entity\ConfigEntityStorage', $controllers['storage']);
+  }
+
+  /**
+   * Tests the getBaseTable() method.
+   *
+   * @covers ::getBaseTable()
+   */
+  public function testGetBaseTable() {
+    $entity_type = $this->setUpConfigEntityType();
+    $this->assertFalse($entity_type->getBaseTable());
+  }
+
+  /**
+   * Tests the getRevisionDataTable() method.
+   *
+   * @covers ::getRevisionDataTable()
+   */
+  public function testGetRevisionDataTable() {
+    $entity_type = $this->setUpConfigEntityType();
+    $this->assertFalse($entity_type->getRevisionDataTable());
+  }
+
+  /**
+   * Tests the getRevisionTable() method.
+   *
+   * @covers ::getRevisionTable()
+   */
+  public function testGetRevisionTable() {
+    $entity_type = $this->setUpConfigEntityType();
+    $this->assertFalse($entity_type->getRevisionTable());
+  }
+
+  /**
+   * Tests the getDataTable() method.
+   *
+   * @covers ::getDataTable()
+   */
+  public function testGetDataTable() {
+    $entity_type = $this->setUpConfigEntityType();
+    $this->assertFalse($entity_type->getDataTable());
+  }
+
 }
