diff --git a/core/lib/Drupal/Core/Cache/CacheFactory.php b/core/lib/Drupal/Core/Cache/CacheFactory.php
index da42a26..a56562c 100644
--- a/core/lib/Drupal/Core/Cache/CacheFactory.php
+++ b/core/lib/Drupal/Core/Cache/CacheFactory.php
@@ -32,7 +32,13 @@ public static function get($bin) {
     // use the default 'cache' definition otherwise.
     $cache_backends = self::getBackends();
     $class = isset($cache_backends[$bin]) ? $cache_backends[$bin] : $cache_backends['cache'];
-    return new $class($bin);
+
+    $backend = new $class($bin);
+    if ($backend instanceof BackendChain) {
+      $backend->appendBackend(new MemoryBackend($bin));
+      $backend->appendBackend(new DatabaseBackend($bin));
+    }
+    return $backend;
   }
 
   /**
@@ -50,6 +56,8 @@ public static function getBackends() {
     $cache_backends = isset($conf['cache_classes']) ? $conf['cache_classes'] : array();
     // Ensure there is a default 'cache' bin definition.
     $cache_backends += array('cache' => 'Drupal\Core\Cache\DatabaseBackend');
+    // Add cache chain config for the config bin.
+    $cache_backends += array('config' => 'Drupal\Core\Cache\BackendChain');
     return $cache_backends;
   }
 
diff --git a/core/lib/Drupal/Core/Config/ConfigFactory.php b/core/lib/Drupal/Core/Config/ConfigFactory.php
index ca36ce7..9137ce2 100644
--- a/core/lib/Drupal/Core/Config/ConfigFactory.php
+++ b/core/lib/Drupal/Core/Config/ConfigFactory.php
@@ -38,6 +38,8 @@ class ConfigFactory {
    */
   protected $eventDispatcher;
 
+  protected $configs = array();
+
   /**
    * Constructs the Config factory.
    *
@@ -64,26 +66,15 @@ public function __construct(StorageInterface $storage, EventDispatcher $event_di
   public function get($name) {
     global $conf;
 
-    // @todo Caching the instantiated objects per name might cut off a fair
-    //   amount of CPU time and memory. Only the data within the configuration
-    //   object changes, so the additional cost of instantiating duplicate
-    //   objects could possibly be avoided. It is not uncommon for a
-    //   configuration object to be retrieved many times during a single
-    //   request; e.g., 'system.performance' alone is retrieved around 10-20
-    //   times within a single page request. Sub-requests via HttpKernel will
-    //   most likely only increase these counts.
-    // @todo Benchmarks were performed with a script that essentially retained
-    //   all instantiated configuration objects in memory until script execution
-    //   ended. A variant of that script called config() within a helper
-    //   function only, which inherently meant that PHP destroyed all
-    //   configuration objects after leaving the function. Consequently,
-    //   benchmark results looked entirely different. Profiling should probably
-    //   redone under more realistic conditions; e.g., actual HTTP requests.
+    if (isset($this->configs[$name])) {
+      return $this->configs[$name];
+    }
+
     // @todo The decrease of CPU time is interesting, since that means that
     //   ContainerBuilder involves plenty of function calls (which are known to
     //   be slow in PHP).
-    $config = new Config($name, $this->storage, $this->eventDispatcher);
-    return $config->init();
+    $this->configs[$name] = new Config($name, $this->storage, $this->eventDispatcher);
+    return $this->configs[$name]->init();
   }
 
 }
