diff --git a/core/core.services.yml b/core/core.services.yml
index 5c38b4b2ebcc9a784c812acf0b5135f62180dd3b..f00c4502e3f443fdff025c71ffb7cefe5d74782d 100644
--- a/core/core.services.yml
+++ b/core/core.services.yml
@@ -519,10 +519,6 @@ services:
     tags:
       - { name: event_subscriber }
     arguments: ['@module_handler']
-  config_global_override_subscriber:
-    class: Drupal\Core\EventSubscriber\ConfigGlobalOverrideSubscriber
-    tags:
-      - { name: event_subscriber }
   config_import_subscriber:
     class: Drupal\Core\EventSubscriber\ConfigImportSubscriber
     tags:
diff --git a/core/includes/install.core.inc b/core/includes/install.core.inc
index 0259cec80db4979c2d772d492f5d06c25c34c2fd..24d3269407c5f7365fec742e6a4bc5260c8cf05e 100644
--- a/core/includes/install.core.inc
+++ b/core/includes/install.core.inc
@@ -482,7 +482,7 @@ function install_begin_request(&$install_state) {
     // ConfigFactory to try to load language override configuration which is not
     // supported by \Drupal\Core\Config\InstallStorage since loading a
     // non-existing file would throw an exception.
-    $container->get('config.factory')->disableOverrides();
+    $container->get('config.factory')->setOverrideState(FALSE);
   }
 
   // Set the request in the kernel to the new created Request above
diff --git a/core/includes/menu.inc b/core/includes/menu.inc
index c3a2162dfbc6e753b28e10ff099a86a009f6ac97..d54fe068cf1ae4514f18de8ca92adb5208716a77 100644
--- a/core/includes/menu.inc
+++ b/core/includes/menu.inc
@@ -2556,7 +2556,8 @@ function menu_router_rebuild() {
 function menu_router_build($save = FALSE) {
   // Ensure that all configuration used to build the menu items are loaded
   // without overrides.
-  \Drupal::configFactory()->disableOverrides();
+  $old_state = \Drupal::configFactory()->getOverrideState();
+  \Drupal::configFactory()->setOverrideState(FALSE);
   // We need to manually call each module so that we can know which module
   // a given item came from.
   $callbacks = array();
@@ -2571,8 +2572,7 @@ function menu_router_build($save = FALSE) {
   }
   // Alter the menu as defined in modules, keys are like user/%user.
   drupal_alter('menu', $callbacks);
-  // Re-enable configuration overrides.
-  \Drupal::configFactory()->enableOverrides();
+  \Drupal::configFactory()->setOverrideState($old_state);
   foreach ($callbacks as $path => $router_item) {
     // If the menu item is a default local task and incorrectly references a
     // route, remove it.
diff --git a/core/lib/Drupal/Core/Config/ConfigFactory.php b/core/lib/Drupal/Core/Config/ConfigFactory.php
index 9e0c3ffa1b66b7a9bb2be32bb836028a587e9e6e..1fca06558e012758d0b0e6c1bc9d98ab3c05e224 100644
--- a/core/lib/Drupal/Core/Config/ConfigFactory.php
+++ b/core/lib/Drupal/Core/Config/ConfigFactory.php
@@ -92,25 +92,27 @@ public function __construct(StorageInterface $storage, EventDispatcherInterface
   }
 
   /**
-   * Disable overrides when loading configuration objects.
+   * Set the override state.
+   *
+   * @param bool $state
+   *   TRUE if overrides should be applied, FALSE otherwise.
    *
    * @return \Drupal\Core\Config\ConfigFactory
    *   The config factory object.
    */
-  public function disableOverrides() {
-    $this->useOverrides = FALSE;
+  public function setOverrideState($state) {
+    $this->useOverrides = $state;
     return $this;
   }
 
   /**
-   * Enable overrides when loading configuration objects.
+   * Get the override state.
    *
-   * @return \Drupal\Core\Config\ConfigFactory
-   *   The config factory object.
+   * @return bool
+   *   TRUE if overrides are applied, FALSE otherwise.
    */
-  public function enableOverrides() {
-    $this->useOverrides = TRUE;
-    return $this;
+  public function getOverrideState() {
+    return $this->useOverrides;
   }
 
   /**
diff --git a/core/lib/Drupal/Core/Config/ConfigInstaller.php b/core/lib/Drupal/Core/Config/ConfigInstaller.php
index dc4f3b928cd8ddc5b40eec67e13ad59d489bd4a7..20d45fa4a2ed57b07e2b44ae2cec1770a03fee93 100644
--- a/core/lib/Drupal/Core/Config/ConfigInstaller.php
+++ b/core/lib/Drupal/Core/Config/ConfigInstaller.php
@@ -101,7 +101,8 @@ public function installDefaultConfig($type, $name) {
     }
 
     if (!empty($config_to_install)) {
-      $this->configFactory->disableOverrides();
+      $old_state = $this->configFactory->getOverrideState();
+      $this->configFactory->setOverrideState(FALSE);
       foreach ($config_to_install as $name) {
         // Only import new config.
         if ($this->activeStorage->exists($name)) {
@@ -123,7 +124,7 @@ public function installDefaultConfig($type, $name) {
           $new_config->save();
         }
       }
-      $this->configFactory->enableOverrides();
+      $this->configFactory->setOverrideState($old_state);
     }
   }
 
diff --git a/core/lib/Drupal/Core/EventSubscriber/ConfigGlobalOverrideSubscriber.php b/core/lib/Drupal/Core/EventSubscriber/ConfigGlobalOverrideSubscriber.php
deleted file mode 100644
index 02bf2cbfad7894f1a75488eeab562e2ef8984f63..0000000000000000000000000000000000000000
--- a/core/lib/Drupal/Core/EventSubscriber/ConfigGlobalOverrideSubscriber.php
+++ /dev/null
@@ -1,42 +0,0 @@
-<?php
-
-/**
- * @file
- * Contains \Drupal\Core\EventSubscriber\ConfigGlobalOverrideSubscriber.
- */
-
-namespace Drupal\Core\EventSubscriber;
-
-use Drupal\Core\Config\Config;
-use Drupal\Core\Config\ConfigEvent;
-use Symfony\Component\EventDispatcher\EventSubscriberInterface;
-
-/**
- * Defines a configuration global override for contexts.
- */
-class ConfigGlobalOverrideSubscriber implements EventSubscriberInterface {
-
-  /**
-   * Overrides configuration values with values in global $conf variable.
-   *
-   * @param \Drupal\Core\Config\ConfigEvent $event
-   *   The Event to process.
-   */
-  public function configInit(ConfigEvent $event) {
-    global $conf;
-
-    $config = $event->getConfig();
-    if (isset($conf[$config->getName()])) {
-      $config->setOverride($conf[$config->getName()]);
-    }
-  }
-
-  /**
-   * Implements EventSubscriberInterface::getSubscribedEvents().
-   */
-  static function getSubscribedEvents() {
-    $events['config.init'][] = array('configInit', 30);
-    return $events;
-  }
-
-}
diff --git a/core/lib/Drupal/Core/Form/ConfigFormBase.php b/core/lib/Drupal/Core/Form/ConfigFormBase.php
index 91a91d5d54baaec355d9417dc17018893764f0c4..5a4abb22a07f7961d2f7b6dd23e911a7fc55360f 100644
--- a/core/lib/Drupal/Core/Form/ConfigFormBase.php
+++ b/core/lib/Drupal/Core/Form/ConfigFormBase.php
@@ -74,9 +74,10 @@ public function submitForm(array &$form, array &$form_state) {
    * configuration.
    */
   protected function config($name) {
-    $this->configFactory->disableOverrides();
+    $old_state = $this->configFactory->getOverrideState();
+    $this->configFactory->setOverrideState(FALSE);
     $config = $this->configFactory->get($name);
-    $this->configFactory->enableOverrides();
+    $this->configFactory->setOverrideState($old_state);
     return $config;
   }
 }
diff --git a/core/modules/config/lib/Drupal/config/Tests/ConfigLanguageOverride.php b/core/modules/config/lib/Drupal/config/Tests/ConfigLanguageOverride.php
index 2f939507ae8f48516c7414537610b0d4e64857e9..12ff3cd2d9ee78638e167a2f30370aae1d097eda 100644
--- a/core/modules/config/lib/Drupal/config/Tests/ConfigLanguageOverride.php
+++ b/core/modules/config/lib/Drupal/config/Tests/ConfigLanguageOverride.php
@@ -82,10 +82,11 @@ function testConfigLanguageOverride() {
     $config = \Drupal::config('config_test.new');
     $this->assertTrue($config->isNew(), 'The configuration object config_test.new is new');
     $this->assertIdentical($config->get('language'), 'override');
-    \Drupal::configFactory()->disableOverrides();
+    $old_state = \Drupal::configFactory()->getOverrideState();
+    \Drupal::configFactory()->setOverrideState(FALSE);
     $config = \Drupal::config('config_test.new');
     $this->assertIdentical($config->get('language'), NULL);
-    \Drupal::configFactory()->enableOverrides();
+    \Drupal::configFactory()->setOverrideState($old_state);
 
     // Ensure that language configuration overrides can not be overridden.
     global $conf;
diff --git a/core/modules/config/lib/Drupal/config/Tests/ConfigModuleOverridesTest.php b/core/modules/config/lib/Drupal/config/Tests/ConfigModuleOverridesTest.php
index 0d4569374b8365588dadaa937932ce7a1d52cd33..c5c7190c378887e3d05b740c838bdcb242ee402a 100644
--- a/core/modules/config/lib/Drupal/config/Tests/ConfigModuleOverridesTest.php
+++ b/core/modules/config/lib/Drupal/config/Tests/ConfigModuleOverridesTest.php
@@ -38,25 +38,31 @@ public function testSimpleModuleOverrides() {
       ->set('slogan', $non_overridden_slogan)
       ->save();
 
-    $config_factory->disableOverrides();
+    $this->assertTrue($config_factory->getOverrideState(), 'By default ConfigFactory has overrides enabled.');
+
+    $old_state = $config_factory->getOverrideState();
+
+    $config_factory->setOverrideState(FALSE);
+    $this->assertFalse($config_factory->getOverrideState(), 'ConfigFactory can disable overrides.');
     $this->assertEqual($non_overridden_name, $config_factory->get('system.site')->get('name'));
     $this->assertEqual($non_overridden_slogan, $config_factory->get('system.site')->get('slogan'));
 
-    $config_factory->enableOverrides();
+    $config_factory->setOverrideState(TRUE);
+    $this->assertTrue($config_factory->getOverrideState(), 'ConfigFactory can enable overrides.');
     $this->assertEqual($overridden_name, $config_factory->get('system.site')->get('name'));
     $this->assertEqual($overridden_slogan, $config_factory->get('system.site')->get('slogan'));
 
     // Test overrides of completely new configuration objects. In normal runtime
     // this should only happen for configuration entities as we should not be
     // creating simple configuration objects on the fly.
-    $config = \Drupal::config('config_override.new');
+    $config = $config_factory->get('config_override.new');
     $this->assertTrue($config->isNew(), 'The configuration object config_override.new is new');
     $this->assertIdentical($config->get('module'), 'override');
-    \Drupal::configFactory()->disableOverrides();
+    $config_factory->setOverrideState(FALSE);
     $config = \Drupal::config('config_override.new');
     $this->assertIdentical($config->get('module'), NULL);
-    \Drupal::configFactory()->enableOverrides();
 
+    $config_factory->setOverrideState($old_state);
     unset($GLOBALS['config_test_run_module_overrides']);
   }
 }
diff --git a/core/modules/config/lib/Drupal/config/Tests/ConfigOverrideTest.php b/core/modules/config/lib/Drupal/config/Tests/ConfigOverrideTest.php
index f6f3f46c79e3cd493f00bfe3e12b89b27d75dd13..a5356514535215793b768bd121cd617d829e7a6f 100644
--- a/core/modules/config/lib/Drupal/config/Tests/ConfigOverrideTest.php
+++ b/core/modules/config/lib/Drupal/config/Tests/ConfigOverrideTest.php
@@ -122,14 +122,15 @@ function testConfOverride() {
     $config = \Drupal::config('config_test.new');
     $this->assertTrue($config->isNew(), 'The configuration object config_test.new is new');
     $this->assertIdentical($config->get('key'), 'override');
-    \Drupal::configFactory()->disableOverrides();
+    $old_state = \Drupal::configFactory()->getOverrideState();
+    \Drupal::configFactory()->setOverrideState(FALSE);
     $config_raw = \Drupal::config('config_test.new');
     $this->assertIdentical($config_raw->get('key'), NULL);
     $config_raw
       ->set('key', 'raw')
       ->set('new_key', 'new_value')
       ->save();
-    \Drupal::configFactory()->enableOverrides();
+    \Drupal::configFactory()->setOverrideState($old_state);
     // Ensure override is preserved but all other data has been updated
     // accordingly.
     $this->assertIdentical($config->get('key'), 'override');
diff --git a/core/modules/config/lib/Drupal/config/Tests/ConfigOverridesPriorityTest.php b/core/modules/config/lib/Drupal/config/Tests/ConfigOverridesPriorityTest.php
index 76573765d32c56f308c17d982290dfe661ebb1ec..b0567311252d4fa6a6aed0356e5a30ba014cadf5 100644
--- a/core/modules/config/lib/Drupal/config/Tests/ConfigOverridesPriorityTest.php
+++ b/core/modules/config/lib/Drupal/config/Tests/ConfigOverridesPriorityTest.php
@@ -92,11 +92,13 @@ public function testOverridePriorities() {
     $this->assertEqual($language_overridden_mail, $config_factory->get('system.site')->get('mail'));
     $this->assertEqual(50, $config_factory->get('system.site')->get('weight_select_max'));
 
-    $config_factory->disableOverrides();
+    $old_state = $config_factory->getOverrideState();
+    $config_factory->setOverrideState(FALSE);
     $this->assertEqual($non_overridden_name, $config_factory->get('system.site')->get('name'));
     $this->assertEqual($non_overridden_slogan, $config_factory->get('system.site')->get('slogan'));
     $this->assertEqual($non_overridden_mail, $config_factory->get('system.site')->get('mail'));
     $this->assertEqual(50, $config_factory->get('system.site')->get('weight_select_max'));
+    $config_factory->setOverrideState($old_state);
 
     unset($GLOBALS['config_test_run_module_overrides']);
   }
diff --git a/core/modules/config_translation/lib/Drupal/config_translation/Form/ConfigTranslationFormBase.php b/core/modules/config_translation/lib/Drupal/config_translation/Form/ConfigTranslationFormBase.php
index 9295b81af4a480ae44c275244eb9d522acfbb602..30413add05c8af422b8c3704d40ada5801c7aff8 100644
--- a/core/modules/config_translation/lib/Drupal/config_translation/Form/ConfigTranslationFormBase.php
+++ b/core/modules/config_translation/lib/Drupal/config_translation/Form/ConfigTranslationFormBase.php
@@ -163,12 +163,13 @@ public function buildForm(array $form, array &$form_state, Request $request = NU
     $this->language = $language;
     $this->sourceLanguage = $this->mapper->getLanguageWithFallback();
 
-    // Get base language configuration to display in the form before entering
-    // into the language context for the form. This avoids repetitively going
-    // in and out of the language context to get original values later.
-    $this->configFactory->disableOverrides();
+    // Get base language configuration to display in the form before setting the
+    // language to use for the form. This avoids repetitively settings and
+    // resetting the language to get original values later.
+    $old_state = $this->configFactory->getOverrideState();
+    $this->configFactory->setOverrideState(FALSE);
     $this->baseConfigData = $this->mapper->getConfigData();
-    $this->configFactory->enableOverrides();
+    $this->configFactory->setOverrideState($old_state);
 
     // Set the translation target language on the configuration factory.
     $original_language = $this->configFactory->getLanguage();
@@ -210,7 +211,9 @@ public function submitForm(array &$form, array &$form_state) {
     $form_values = $form_state['values']['config_names'];
 
     // For the form submission handling, use the raw data.
-    $this->configFactory->disableOverrides();
+    $old_state = $this->configFactory->getOverrideState();
+    $this->configFactory->setOverrideState(FALSE);
+
     foreach ($this->mapper->getConfigNames() as $name) {
       // Set configuration values based on form submission and source values.
       $base_config = $this->config($name);
@@ -229,7 +232,7 @@ public function submitForm(array &$form, array &$form_state) {
         $translation_config->save();
       }
     }
-    $this->configFactory->enableOverrides();
+    $this->configFactory->setOverrideState($old_state);
 
     $form_state['redirect_route'] = array(
       'route_name' => $this->mapper->getOverviewRoute(),
diff --git a/core/modules/locale/lib/Drupal/locale/ParamConverter/LocaleAdminPathConfigEntityConverter.php b/core/modules/locale/lib/Drupal/locale/ParamConverter/LocaleAdminPathConfigEntityConverter.php
index 6488eb4733b278d9341d1d805008f0bd4645e1c6..2eca5dda759fd68fd14abb253ae6e74e06a23fb6 100644
--- a/core/modules/locale/lib/Drupal/locale/ParamConverter/LocaleAdminPathConfigEntityConverter.php
+++ b/core/modules/locale/lib/Drupal/locale/ParamConverter/LocaleAdminPathConfigEntityConverter.php
@@ -55,9 +55,10 @@ public function convert($value, $definition, $name, array $defaults, Request $re
     $entity_type = substr($definition['type'], strlen('entity:'));
     if ($storage = $this->entityManager->getStorageController($entity_type)) {
       // Make sure no overrides are loaded.
-      $this->configFactory->disableOverrides();
+      $old_state = $this->configFactory->getOverrideState();
+      $this->configFactory->setOverrideState(FALSE);
       $entity = $storage->load($value);
-      $this->configFactory->enableOverrides();
+      $this->configFactory->setOverrideState($old_state);
       return $entity;
     }
   }
diff --git a/core/modules/migrate_drupal/lib/Drupal/migrate_drupal/Tests/d6/MigrateSystemConfigsTest.php b/core/modules/migrate_drupal/lib/Drupal/migrate_drupal/Tests/d6/MigrateSystemConfigsTest.php
index 36b0fa628d8c3ba5605a106542b882643a582a33..0764d72adb0458f00accf2c570233224c42a15dc 100644
--- a/core/modules/migrate_drupal/lib/Drupal/migrate_drupal/Tests/d6/MigrateSystemConfigsTest.php
+++ b/core/modules/migrate_drupal/lib/Drupal/migrate_drupal/Tests/d6/MigrateSystemConfigsTest.php
@@ -181,11 +181,12 @@ public function testSystemFile() {
     $this->prepare($migration, $dumps);
     $executable = new MigrateExecutable($migration, new MigrateMessage());
     $executable->import();
-    \Drupal::configFactory()->disableOverrides();
+    $old_state = \Drupal::configFactory()->getOverrideState();
+    \Drupal::configFactory()->setOverrideState(FALSE);
     $config = \Drupal::config('system.file');
     $this->assertIdentical($config->get('path.private'), 'files/test');
     $this->assertIdentical($config->get('path.temporary'), 'files/temp');
-    \Drupal::configFactory()->enableOverrides();
+    \Drupal::configFactory()->setOverrideState($old_state);
   }
 
 }
diff --git a/core/modules/search/lib/Drupal/search/SearchPageListController.php b/core/modules/search/lib/Drupal/search/SearchPageListController.php
index e7a7d8b2bd4acbdea98c341bb2f47bbe10270037..4586a6b954e03625945ad8a41544466aaf93a41c 100644
--- a/core/modules/search/lib/Drupal/search/SearchPageListController.php
+++ b/core/modules/search/lib/Drupal/search/SearchPageListController.php
@@ -138,8 +138,9 @@ public function buildRow(EntityInterface $entity) {
    */
   public function buildForm(array $form, array &$form_state) {
     $form = parent::buildForm($form, $form_state);
-    $search_settings = $this->configFactory->disableOverrides()->get('search.settings');
-    $this->configFactory->enableOverrides();
+    $old_state = $this->configFactory->getOverrideState();
+    $search_settings = $this->configFactory->setOverrideState(FALSE)->get('search.settings');
+    $this->configFactory->setOverrideState($old_state);
     // Collect some stats.
     $remaining = 0;
     $total = 0;