diff --git a/core/core.services.yml b/core/core.services.yml
index 6abd05c..738b059 100644
--- a/core/core.services.yml
+++ b/core/core.services.yml
@@ -84,6 +84,10 @@ services:
   config.installer:
     class: Drupal\Core\Config\ConfigInstaller
     arguments: ['@config.factory', '@config.storage', '@config.typed', '@entity.manager', '@event_dispatcher']
+  config.preload_subscriber:
+    class: Drupal\Core\Config\ConfigPreloadSubscriber
+    tags:
+      - { name: event_subscriber }
   config.storage.staging:
     class: Drupal\Core\Config\FileStorage
     factory_class: Drupal\Core\Config\FileStorageFactory
diff --git a/core/lib/Drupal/Core/Config/ConfigFactory.php b/core/lib/Drupal/Core/Config/ConfigFactory.php
index 8aeb301..97ab555 100644
--- a/core/lib/Drupal/Core/Config/ConfigFactory.php
+++ b/core/lib/Drupal/Core/Config/ConfigFactory.php
@@ -8,6 +8,8 @@
 namespace Drupal\Core\Config;
 
 use Drupal\Core\Language\Language;
+use Drupal\Core\Config\ConfigPreloadEvent;
+use Drupal\Core\Config\ConfigModuleOverridesEvent;
 use Symfony\Component\EventDispatcher\EventDispatcher;
 use Symfony\Component\EventDispatcher\EventSubscriberInterface;
 
@@ -74,6 +76,13 @@ class ConfigFactory implements EventSubscriberInterface {
   protected $typedConfigManager;
 
   /**
+   * Whether or not the preload event has fired yet.
+   *
+   * @var boolean
+   */
+  protected $preloadEventFired;
+
+  /**
    * Constructs the Config factory.
    *
    * @param \Drupal\Core\Config\StorageInterface $storage
@@ -92,6 +101,7 @@ public function __construct(StorageInterface $storage, EventDispatcher $event_di
     $this->eventDispatcher = $event_dispatcher;
     $this->typedConfigManager = $typed_config;
     $this->language = $language;
+    $this->preloadEventFired = FALSE;
   }
 
   /**
@@ -184,6 +194,11 @@ public function get($name) {
   public function loadMultiple(array $names) {
     global $conf;
 
+    if (!$this->preloadEventFired) {
+      $this->preloadEventFired = TRUE;
+      $names = array_unique($names + $this->getPreloadNames());
+    }
+
     $list = array();
 
     foreach ($names as $key => $name) {
@@ -262,6 +277,18 @@ protected function loadModuleOverrides(array $names) {
   }
 
   /**
+   * Get a list of configuration object names to preload.
+   *
+   * @return array
+   *   An array of configuration object names to preload.
+   */
+  protected function getPreloadNames() {
+    $config_preload_event = new ConfigPreloadEvent();
+    $this->eventDispatcher->dispatch('config.preload.names', $config_preload_event);
+    return $config_preload_event->getNames();
+  }
+
+  /**
    * Resets and re-initializes configuration objects. Internal use only.
    *
    * @param string $name
diff --git a/core/lib/Drupal/Core/Config/ConfigPreloadEvent.php b/core/lib/Drupal/Core/Config/ConfigPreloadEvent.php
new file mode 100644
index 0000000..e314786
--- /dev/null
+++ b/core/lib/Drupal/Core/Config/ConfigPreloadEvent.php
@@ -0,0 +1,65 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\Core\Config\ConfigPreloadEvent.
+ */
+
+namespace Drupal\Core\Config;
+
+use Drupal\Core\Language\Language;
+use Symfony\Component\EventDispatcher\Event;
+
+/**
+ * Event object to allow configuration to be preloaded.
+ */
+class ConfigPreloadEvent extends Event {
+
+  /**
+   * Configuration names.
+   *
+   * @var array
+   */
+  protected $names = array();
+
+  /**
+   * Gets configuration names.
+   *
+   * @return array
+   *   The list of configuration names that can be overridden.
+   */
+  public function getNames() {
+    return $this->names;
+  }
+
+  /**
+   * Adds configuration object names to preload.
+   *
+   * @param array $names
+   *   The configuration object names to preload.
+   *
+   * @return self
+   *   The ConfigPreloadEvent object.
+   */
+  public function addNames(array $names) {
+    $this->names += $names;
+    $this->names = array_unique($this->names);
+    return $this;
+  }
+
+  /**
+   * Removes configuration object names to preload.
+   *
+   * @param array $names_to_remove
+   *   The configuration object names remove preload.
+   *
+   * @return self
+   *   The ConfigPreloadEvent object.
+   */
+  public function removeNames(array $names_to_remove) {
+    $this->names = array_diff($this->names, $names_to_remove);
+    return $this;
+  }
+
+}
+
diff --git a/core/lib/Drupal/Core/Config/ConfigPreloadSubscriber.php b/core/lib/Drupal/Core/Config/ConfigPreloadSubscriber.php
new file mode 100644
index 0000000..959d568
--- /dev/null
+++ b/core/lib/Drupal/Core/Config/ConfigPreloadSubscriber.php
@@ -0,0 +1,40 @@
+<?php
+/**
+ * @file
+ * Contains \Drupal\Core\Config\ConfigPreloadSubscriber.
+ */
+
+namespace Drupal\Core\Config;
+
+use Drupal\Component\Utility\Settings;
+use Drupal\Core\Config\ConfigPreloadEvent;
+use Symfony\Component\HttpKernel\KernelEvents;
+use Symfony\Component\EventDispatcher\EventSubscriberInterface;
+
+/**
+ * Core configuration preload subscriber.
+ */
+class ConfigPreloadSubscriber implements EventSubscriberInterface {
+
+  /**
+   * Returns the names of any configuration objects in Settings.
+   *
+   * @param \Drupal\Core\Config\ConfigPreloadEvent $event
+   *   Configuration preload event to respond to.
+   */
+  public function onConfigPreloadNamesGetSettingsNames(ConfigPreloadEvent $event) {
+    $settings_config_names = Settings::getSingleton()->get('config_preload_names', array());
+    if ($settings_config_names) {
+      $event->addNames($settings_config_names);
+    }
+  }
+
+  /**
+   * Implements EventSubscriberInterface::getSubscribedEvents().
+   */
+  static function getSubscribedEvents() {
+    $events['config.preload.names'][] = array('onConfigPreloadNamesGetSettingsNames', 48);
+    return $events;
+  }
+}
+
diff --git a/sites/default/default.settings.php b/sites/default/default.settings.php
index 5a46b12..6773432 100644
--- a/sites/default/default.settings.php
+++ b/sites/default/default.settings.php
@@ -278,6 +278,14 @@
 $settings['update_free_access'] = FALSE;
 
 /**
+ * Configuration preload.
+ *
+ * The core configuration system will preload any configuration objects named
+ * in this array.
+ */
+#$settings['config_preload_names'] = array();
+
+/**
  * Twig debugging:
  *
  * When debugging is enabled:
