diff --git a/core/lib/Drupal/Core/Config/ConfigFactory.php b/core/lib/Drupal/Core/Config/ConfigFactory.php
index e277787..a919a1b 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 \Drupal\Core\Config\ConfigFactory.
  */
 
 namespace Drupal\Core\Config;
@@ -25,12 +25,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.
@@ -91,10 +86,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;
@@ -102,10 +94,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;
@@ -113,13 +102,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;
@@ -166,16 +149,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;
@@ -258,14 +232,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) {
@@ -286,15 +253,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);
@@ -310,13 +269,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);
@@ -329,13 +282,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) {
@@ -345,10 +292,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();
@@ -356,14 +300,7 @@ public function clearStaticCache() {
   }
 
   /**
-   * Sets 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;
@@ -371,15 +308,7 @@ public function setLanguage(Language $language = NULL) {
   }
 
   /**
-   * Sets the language for configuration overrides using the default language.
-   *
-   * @param \Drupal\Core\Language\LanguageDefault $language_default
-   *   The default language service. This sets the initial language on the
-   *   config factory to the site's default. The language can be used to
-   *   override configuration data if language overrides are available.
-   *
-   * @return \Drupal\Core\Config\ConfigFactory
-   *   The config factory object.
+   * {@inheritdoc}
    */
   public function setLanguageFromDefault(LanguageDefault $language_default) {
     $this->language = $language_default->get();
@@ -387,25 +316,14 @@ public function setLanguageFromDefault(LanguageDefault $language_default) {
   }
 
   /**
-   * 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();
@@ -420,19 +338,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..7e72ed6
--- /dev/null
+++ b/core/lib/Drupal/Core/Config/ConfigFactoryInterface.php
@@ -0,0 +1,182 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\Core\Config\ConfigFactoryInterface.
+ */
+
+namespace Drupal\Core\Config;
+
+use Drupal\Core\Language\Language;
+use Drupal\Core\Language\LanguageDefault;
+
+/**
+ * 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();
+
+  /**
+   * Sets 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);
+
+  /**
+   * Sets the language for configuration overrides using the default language.
+   *
+   * @param \Drupal\Core\Language\LanguageDefault $language_default
+   *   The default language service. This sets the initial language on the
+   *   config factory to the site's default. The language can be used to
+   *   override configuration data if language overrides are available.
+   *
+   * @return \Drupal\Core\Config\ConfigFactory
+   *   The config factory object.
+   */
+  public function setLanguageFromDefault(LanguageDefault $language_default);
+
+  /**
+   * 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);
+
+}
