diff --git a/core/lib/Drupal/Core/Config/ConfigFactory.php b/core/lib/Drupal/Core/Config/ConfigFactory.php
index 8aeb301..a651a1d 100644
--- a/core/lib/Drupal/Core/Config/ConfigFactory.php
+++ b/core/lib/Drupal/Core/Config/ConfigFactory.php
@@ -2,7 +2,7 @@
 
 /**
  * @file
- * Definition of Drupal\Core\Config\ConfigFactory.
+ * Contains of Drupal\Core\Config\ConfigFactory.
  */
 
 namespace Drupal\Core\Config;
@@ -24,12 +24,7 @@
  *
  * @see \Drupal\Core\Config\StorageInterface
  */
-class ConfigFactory implements EventSubscriberInterface {
-
-  /**
-   * Prefix for all language configuration files.
-   */
-  const LANGUAGE_CONFIG_PREFIX = 'language.config';
+class ConfigFactory implements ConfigFactoryInterface, EventSubscriberInterface {
 
   /**
    * A storage controller instance for reading and writing configuration data.
@@ -95,10 +90,7 @@ public function __construct(StorageInterface $storage, EventDispatcher $event_di
   }
 
   /**
-   * Disable overrides when loading configuration objects.
-   *
-   * @return \Drupal\Core\Config\ConfigFactory
-   *   The config factory object.
+   * {@inheritdoc}
    */
   public function disableOverrides() {
     $this->useOverrides = FALSE;
@@ -106,10 +98,7 @@ public function disableOverrides() {
   }
 
   /**
-   * Enable overrides when loading configuration objects.
-   *
-   * @return \Drupal\Core\Config\ConfigFactory
-   *   The config factory object.
+   * {@inheritdoc}
    */
   public function enableOverrides() {
     $this->useOverrides = TRUE;
@@ -117,13 +106,7 @@ public function enableOverrides() {
   }
 
   /**
-   * Returns a configuration object for a given name.
-   *
-   * @param string $name
-   *   The name of the configuration object to construct.
-   *
-   * @return \Drupal\Core\Config\Config
-   *   A configuration object.
+   * {@inheritdoc}
    */
   public function get($name) {
     global $conf;
@@ -170,16 +153,7 @@ public function get($name) {
   }
 
   /**
-   * Returns a list of configuration objects for the given names.
-   *
-   * This will pre-load all requested configuration objects does not create
-   * new configuration objects.
-   *
-   * @param array $names
-   *   List of names of configuration objects.
-   *
-   * @return array
-   *   List of successfully loaded configuration objects, keyed by name.
+   * {@inheritdoc}
    */
   public function loadMultiple(array $names) {
     global $conf;
@@ -262,14 +236,7 @@ protected function loadModuleOverrides(array $names) {
   }
 
   /**
-   * Resets and re-initializes configuration objects. Internal use only.
-   *
-   * @param string $name
-   *   (optional) The name of the configuration object to reset. If omitted, all
-   *   configuration objects are reset.
-   *
-   * @return \Drupal\Core\Config\ConfigFactory
-   *   The config factory object.
+   * {@inheritdoc}
    */
   public function reset($name = NULL) {
     if ($name) {
@@ -290,15 +257,7 @@ public function reset($name = NULL) {
   }
 
   /**
-   * Renames a configuration object using the storage controller.
-   *
-   * @param string $old_name
-   *   The old name of the configuration object.
-   * @param string $new_name
-   *   The new name of the configuration object.
-   *
-   * @return \Drupal\Core\Config\Config
-   *   The renamed config object.
+   * {@inheritdoc}
    */
   public function rename($old_name, $new_name) {
     $this->storage->rename($old_name, $new_name);
@@ -314,13 +273,7 @@ public function rename($old_name, $new_name) {
   }
 
   /**
-   * Gets the cache key for a given config name.
-   *
-   * @param string $name
-   *   The name of the configuration object.
-   *
-   * @return string
-   *   The cache key.
+   * {@inheritdoc}
    */
   public function getCacheKey($name) {
     $can_override = $this->canOverride($name);
@@ -333,13 +286,7 @@ public function getCacheKey($name) {
   }
 
   /**
-   * Gets all the cache keys that match the provided config name.
-   *
-   * @param string $name
-   *   The name of the configuration object.
-   *
-   * @return array
-   *   An array of cache keys that match the provided config name.
+   * {@inheritdoc}
    */
   public function getCacheKeys($name) {
     return array_filter(array_keys($this->cache), function($key) use ($name) {
@@ -349,10 +296,7 @@ public function getCacheKeys($name) {
   }
 
   /**
-   * Clears the config factory static cache.
-   *
-   * @return \Drupal\Core\Config\ConfigFactory
-   *   The config factory object.
+   * {@inheritdoc}
    */
   public function clearStaticCache() {
     $this->cache = array();
@@ -360,14 +304,7 @@ public function clearStaticCache() {
   }
 
   /**
-   * Set the language to be used in configuration overrides.
-   *
-   * @param \Drupal\Core\Language\Language $language
-   *   The language object to be set on the config factory. Used to override
-   *   configuration by language.
-   *
-   * @return \Drupal\Core\Config\ConfigFactory
-   *   The config factory object.
+   * {@inheritdoc}
    */
   public function setLanguage(Language $language = NULL) {
     $this->language = $language;
@@ -375,25 +312,14 @@ public function setLanguage(Language $language = NULL) {
   }
 
   /**
-   * Gets the language Used to override configuration.
-   *
-   * @return \Drupal\Core\Language\Language
+   * {@inheritdoc}
    */
   public function getLanguage() {
     return $this->language;
   }
 
   /**
-   * Gets configuration names for this language.
-   *
-   * It will be the same name with a prefix depending on language code:
-   * language.config.LANGCODE.NAME
-   *
-   * @param array $names
-   *   A list of configuration object names.
-   *
-   * @return array
-   *   The localized config names, keyed by configuration object name.
+   * {@inheritdoc}
    */
   public function getLanguageConfigNames(array $names) {
     $language_names = array();
@@ -408,19 +334,7 @@ public function getLanguageConfigNames(array $names) {
   }
 
   /**
-   * Gets configuration name for the provided language.
-   *
-   * The name will be the same name with a prefix depending on language code:
-   * language.config.LANGCODE.NAME
-   *
-   * @param string $langcode
-   *   The language code.
-   * @param string $name
-   *   The name of the configuration object.
-   *
-   * @return bool|string
-   *   The configuration name for configuration object providing overrides.
-   *   Returns false if the name already starts with the language config prefix.
+   * {@inheritdoc}
    */
   public function getLanguageConfigName($langcode, $name) {
     if (strpos($name, static::LANGUAGE_CONFIG_PREFIX) === 0) {
diff --git a/core/lib/Drupal/Core/Config/ConfigFactoryInterface.php b/core/lib/Drupal/Core/Config/ConfigFactoryInterface.php
new file mode 100644
index 0000000..b449528
--- /dev/null
+++ b/core/lib/Drupal/Core/Config/ConfigFactoryInterface.php
@@ -0,0 +1,168 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\Core\Config\ConfigFactoryInterface.
+ */
+
+namespace Drupal\Core\Config;
+
+use Drupal\Core\Language\Language;
+
+/**
+ * Defines the interface for a configuration object factory.
+ */
+interface ConfigFactoryInterface {
+
+  /**
+   * Prefix for all language configuration files.
+   */
+  const LANGUAGE_CONFIG_PREFIX = 'language.config';
+
+  /**
+   * Disable overrides when loading configuration objects.
+   *
+   * @return \Drupal\Core\Config\ConfigFactory
+   *   The config factory object.
+   */
+  public function disableOverrides();
+
+  /**
+   * Enable overrides when loading configuration objects.
+   *
+   * @return \Drupal\Core\Config\ConfigFactory
+   *   The config factory object.
+   */
+  public function enableOverrides();
+
+  /**
+   * Returns a configuration object for a given name.
+   *
+   * @param string $name
+   *   The name of the configuration object to construct.
+   *
+   * @return \Drupal\Core\Config\Config
+   *   A configuration object.
+   */
+  public function get($name);
+
+  /**
+   * Returns a list of configuration objects for the given names.
+   *
+   * This will pre-load all requested configuration objects does not create
+   * new configuration objects.
+   *
+   * @param array $names
+   *   List of names of configuration objects.
+   *
+   * @return array
+   *   List of successfully loaded configuration objects, keyed by name.
+   */
+  public function loadMultiple(array $names);
+
+  /**
+   * Resets and re-initializes configuration objects. Internal use only.
+   *
+   * @param string $name
+   *   (optional) The name of the configuration object to reset. If omitted, all
+   *   configuration objects are reset.
+   *
+   * @return \Drupal\Core\Config\ConfigFactory
+   *   The config factory object.
+   */
+  public function reset($name = NULL);
+
+  /**
+   * Renames a configuration object using the storage controller.
+   *
+   * @param string $old_name
+   *   The old name of the configuration object.
+   * @param string $new_name
+   *   The new name of the configuration object.
+   *
+   * @return \Drupal\Core\Config\Config
+   *   The renamed config object.
+   */
+  public function rename($old_name, $new_name);
+
+  /**
+   * Gets the cache key for a given config name.
+   *
+   * @param string $name
+   *   The name of the configuration object.
+   *
+   * @return string
+   *   The cache key.
+   */
+  public function getCacheKey($name);
+
+  /**
+   * Gets all the cache keys that match the provided config name.
+   *
+   * @param string $name
+   *   The name of the configuration object.
+   *
+   * @return array
+   *   An array of cache keys that match the provided config name.
+   */
+  public function getCacheKeys($name);
+
+  /**
+   * Clears the config factory static cache.
+   *
+   * @return \Drupal\Core\Config\ConfigFactory
+   *   The config factory object.
+   */
+  public function clearStaticCache();
+
+  /**
+   * Set the language to be used in configuration overrides.
+   *
+   * @param \Drupal\Core\Language\Language $language
+   *   The language object to be set on the config factory. Used to override
+   *   configuration by language.
+   *
+   * @return \Drupal\Core\Config\ConfigFactory
+   *   The config factory object.
+   */
+  public function setLanguage(Language $language = NULL);
+
+  /**
+   * Gets the language Used to override configuration.
+   *
+   * @return \Drupal\Core\Language\Language
+   */
+  public function getLanguage();
+
+  /**
+   * Gets configuration names for this language.
+   *
+   * It will be the same name with a prefix depending on language code:
+   * language.config.LANGCODE.NAME
+   *
+   * @param array $names
+   *   A list of configuration object names.
+   *
+   * @return array
+   *   The localized config names, keyed by configuration object name.
+   */
+  public function getLanguageConfigNames(array $names);
+
+  /**
+   * Gets configuration name for the provided language.
+   *
+   * The name will be the same name with a prefix depending on language code:
+   * language.config.LANGCODE.NAME
+   *
+   * @param string $langcode
+   *   The language code.
+   * @param string $name
+   *   The name of the configuration object.
+   *
+   * @return bool|string
+   *   The configuration name for configuration object providing overrides.
+   *   Returns false if the name already starts with the language config prefix.
+   */
+  public function getLanguageConfigName($langcode, $name);
+
+}
