diff --git a/core/lib/Drupal/Core/Config/ConfigManager.php b/core/lib/Drupal/Core/Config/ConfigManager.php
index 65a7846..b94b39f 100644
--- a/core/lib/Drupal/Core/Config/ConfigManager.php
+++ b/core/lib/Drupal/Core/Config/ConfigManager.php
@@ -7,6 +7,7 @@
 
 namespace Drupal\Core\Config;
 
+use Drupal\Core\Config\Entity\ConfigEntityTypeInterface;
 use Drupal\Core\Entity\EntityManagerInterface;
 use Drupal\Core\Entity\EntityTypeInterface;
 use Drupal\Core\StringTranslation\TranslationManager;
@@ -63,7 +64,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 e8f8088..ca021a9 100644
--- a/core/lib/Drupal/Core/Config/Entity/ConfigEntityType.php
+++ b/core/lib/Drupal/Core/Config/Entity/ConfigEntityType.php
@@ -12,10 +12,17 @@
 /**
  * Provides an implementation of a config entity type and its metadata.
  */
-class ConfigEntityType extends EntityType {
+class ConfigEntityType extends EntityType implements ConfigEntityTypeInterface {
 
   /**
-   * 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
    */
@@ -40,11 +47,6 @@ public function getConfigPrefix() {
     else {
       $config_prefix = $this->id();
     }
-    // Ensure that all configuration entities are prefixed by the module that
-    // provides the configuration entity type. This ensures that default
-    // configuration will be created as expected during module install and
-    // dependencies can be calculated without the modules that provide the
-    // entity types being installed.
     return $this->provider . '.' . $config_prefix;
   }
 
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..cecd63b
--- /dev/null
+++ b/core/lib/Drupal/Core/Config/Entity/ConfigEntityTypeInterface.php
@@ -0,0 +1,32 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\Core\Config\Entity\ConfigEntityTypeInterface.
+ */
+
+namespace Drupal\Core\Config\Entity;
+
+/**
+ * Provides an interface for a configuration entity type and its metadata.
+ *
+ * @see \Drupal\Core\Entity\EntityTypeInterface
+ */
+interface ConfigEntityTypeInterface {
+
+  /**
+   * 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 14f7ee2..1c2ccb2 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 4eae0df..a2001de 100644
--- a/core/lib/Drupal/Core/Entity/EntityType.php
+++ b/core/lib/Drupal/Core/Entity/EntityType.php
@@ -533,13 +533,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 857d3e7..79b4144 100644
--- a/core/lib/Drupal/Core/Entity/EntityTypeInterface.php
+++ b/core/lib/Drupal/Core/Entity/EntityTypeInterface.php
@@ -527,16 +527,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 FieldableDatabaseStorageController only.
diff --git a/core/modules/config/lib/Drupal/config/Form/ConfigSingleExportForm.php b/core/modules/config/lib/Drupal/config/Form/ConfigSingleExportForm.php
index 2f146c6..5fbc34d 100644
--- a/core/modules/config/lib/Drupal/config/Form/ConfigSingleExportForm.php
+++ b/core/modules/config/lib/Drupal/config/Form/ConfigSingleExportForm.php
@@ -8,6 +8,7 @@
 namespace Drupal\config\Form;
 
 use Drupal\Component\Utility\MapArray;
+use Drupal\Core\Config\Entity\ConfigEntityTypeInterface;
 use Drupal\Core\Config\StorageInterface;
 use Drupal\Core\Entity\EntityManagerInterface;
 use Drupal\Core\Entity\EntityTypeInterface;
@@ -75,7 +76,7 @@ public function getFormID() {
    */
   public function buildForm(array $form, array &$form_state, $config_type = NULL, $config_name = NULL) {
     foreach ($this->entityManager->getDefinitions() as $entity_type => $definition) {
-      if ($definition->getConfigPrefix() && $definition->hasKey('uuid')) {
+      if ($definition instanceof ConfigEntityTypeInterface && $definition->hasKey('uuid')) {
         $this->definitions[$entity_type] = $definition;
       }
     }
diff --git a/core/modules/config/lib/Drupal/config/Form/ConfigSingleImportForm.php b/core/modules/config/lib/Drupal/config/Form/ConfigSingleImportForm.php
index 8f0d076..95b30ed 100644
--- a/core/modules/config/lib/Drupal/config/Form/ConfigSingleImportForm.php
+++ b/core/modules/config/lib/Drupal/config/Form/ConfigSingleImportForm.php
@@ -7,6 +7,7 @@
 
 namespace Drupal\config\Form;
 
+use Drupal\Core\Config\Entity\ConfigEntityTypeInterface;
 use Drupal\Core\Config\StorageInterface;
 use Drupal\Core\Entity\EntityManagerInterface;
 use Drupal\Core\Form\ConfirmFormBase;
@@ -122,7 +123,7 @@ public function buildForm(array $form, array &$form_state) {
 
     $entity_types = array();
     foreach ($this->entityManager->getDefinitions() as $entity_type => $definition) {
-      if ($definition->getConfigPrefix() && $definition->hasKey('uuid')) {
+      if ($definition instanceof ConfigEntityTypeInterface && $definition->hasKey('uuid')) {
         $entity_types[$entity_type] = $definition->getLabel();
       }
     }
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..0c9db6a 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
@@ -48,6 +48,12 @@ class ConfigEntityMapperTest extends UnitTestCase {
   protected $routeProvider;
 
   /**
+   * The entity used for testing.
+   *
+   * @var \Drupal\Core\Config\Entity\ConfigEntityType|\PHPUnit_Framework_MockObject_MockObject
+   */
+
+  /**
    * {@inheritdoc}
    */
   public static function getInfo() {
@@ -93,6 +99,10 @@ public function setUp() {
       $this->getStringTranslationStub(),
       $this->entityManager
     );
+
+    $this->entityType = $this->getMockBuilder('Drupal\Core\Config\Entity\ConfigEntityType')
+      ->disableOriginalConstructor()
+      ->getMock();
   }
 
   /**
@@ -105,12 +115,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 +133,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 +163,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 +180,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/ConfigEntityTypeTest.php b/core/tests/Drupal/Tests/Core/Config/ConfigEntityTypeTest.php
new file mode 100644
index 0000000..b542999
--- /dev/null
+++ b/core/tests/Drupal/Tests/Core/Config/ConfigEntityTypeTest.php
@@ -0,0 +1,119 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\Tests\Core\Config\ConfigEntityTypeTest.
+ */
+
+namespace Drupal\Tests\Core\Config;
+
+use Drupal\Core\Config\Entity\ConfigEntityType;
+use Drupal\Tests\UnitTestCase;
+
+/**
+ * Tests the \Drupal\Core\Entity\EntityType class.
+ *
+ * @group Drupal
+ * @group Config
+ *
+ * @coversDefaultClass \Drupal\Core\Config\Entity\ConfigEntityType
+ */
+class ConfigEntityTypeTest extends UnitTestCase {
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function getInfo() {
+    return array(
+      'name' => 'Config entity type test',
+      'description' => 'Unit test config entity type.',
+      'group' => 'Config',
+    );
+  }
+
+  /**
+   * Sets up an ConfigEntityType object for a given set of values.
+   *
+   * @param array $definition
+   *   An array of values to use for the ConfigEntityType.
+   *
+   * @return \Drupal\Core\Config\Entity\ConfigEntityType
+   */
+  protected function setUpConfigEntityType($definition = array()) {
+    return new ConfigEntityType($definition);
+  }
+
+  /**
+   * 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\ConfigStorageController', $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());
+  }
+
+}
