diff --git a/domain.services.yml b/domain.services.yml
index 600c633..23fc7c9 100644
--- a/domain.services.yml
+++ b/domain.services.yml
@@ -3,5 +3,10 @@ services:
     class: Drupal\domain\EventSubscriber\DomainSubscriber
     tags:
       - { name: event_subscriber }
+  domain.config_subscriber:
+    class: Drupal\domain\EventSubscriber\DomainConfigSubscriber
+    tags:
+      - { name: event_subscriber }
+    arguments: ['@domain.manager', '@config.context']
   domain.manager:
     class: Drupal\domain\DomainManager
diff --git a/lib/Drupal/domain/EventSubscriber/DomainConfigSubscriber.php b/lib/Drupal/domain/EventSubscriber/DomainConfigSubscriber.php
new file mode 100644
index 0000000..be673aa
--- /dev/null
+++ b/lib/Drupal/domain/EventSubscriber/DomainConfigSubscriber.php
@@ -0,0 +1,118 @@
+<?php
+/**
+ * @file
+ * Definition of \Drupal\custom\DomainConfigSubscriber.
+ */
+
+namespace Drupal\domain\EventSubscriber;
+
+use Drupal\Core\Config\Context\ContextInterface;
+use Drupal\Core\Config\ConfigEvent;
+use Drupal\domain\DomainManager;
+use Drupal\domain\Plugin\Core\Entity\Domain;
+use Symfony\Component\HttpKernel\KernelEvents;
+use Symfony\Component\HttpKernel\Event\GetResponseEvent;
+use Symfony\Component\EventDispatcher\EventSubscriberInterface;
+
+/**
+ * Domain Config helper
+ */
+class DomainConfigSubscriber implements EventSubscriberInterface {
+  /**
+   * The language manager.
+   *
+   * @var \Drupal\domain\DomainManager
+   */
+  protected $domainManager;
+
+  /**
+   * The default configuration context.
+   *
+   * @var \Drupal\Core\Config\Context\ConfigContext
+   */
+  protected $defaultConfigContext;
+
+  /**
+   * Constructs a DomainConfigSubscriber object.
+   *
+   * @param \Drupal\domain\DomainManager $domain_manager
+   *   The language manager service.
+   * @param \Drupal\Core\Config\Context\ContextInterface $config_context
+   *   The config context service.
+   */
+  public function __construct(DomainManager $domain_manager, ContextInterface $config_context) {
+    $this->domainManager = $domain_manager;
+    $this->defaultConfigContext = $config_context;
+  }
+
+  /**
+   * Initialize configuration context with domain.
+   *
+   * @param \Drupal\Core\Config\ConfigEvent $event
+   *   The Event to process.
+   */
+  public function configContext(ConfigEvent $event) {
+    $context = $event->getContext();
+
+    // Add active domain to default context.
+    $context->set('domain.domain', $this->domainManager->getActiveDomain());
+  }
+
+  /**
+   * Override configuration values with domain-specific data.
+   *
+   * @param \Drupal\Core\Config\ConfigEvent $event
+   *   The Event to process.
+   */
+  public function configLoad(ConfigEvent $event) {
+    $context = $event->getContext();
+
+    if ($domain = $context->get('domain.domain')) {
+      $config = $event->getConfig();
+      $config_name = $this->getDomainConfigName($config->getName(), $domain);
+      // Check to see if the config storage has an appropriately named file
+      // containing override data.
+      if ($override = $event->getConfig()->getStorage()->read($config_name)) {
+        $config->setOverride($override);
+      }
+    }
+  }
+
+  /**
+   * Sets the active domain on the default configuration context.
+   *
+   * @param \Symfony\Component\HttpKernel\Event\GetResponseEvent $event
+   *   Kernel event to respond to.
+   */
+  public function onKernelRequestDomain(GetResponseEvent $event) {
+    $this->defaultConfigContext->init();
+  }
+
+  /**
+   * Get configuration name for this hostname.
+   *
+   * It will be the same name with a prefix depending on language code:
+   * domain.config.DOMAIN.MACHINE_NAME
+   *
+   * @param string $name
+   *   The name of the config object.
+   * @param \Drupal\domain\Plugin\Core\Entity\Domain $domain
+   *   The domain object.
+   *
+   * @return string
+   *   The domain-specific config name.
+   */
+  public function getDomainConfigName($name, Domain $domain) {
+    return 'domain.config.' . $domain->machine_name . '.' . $name;
+  }
+
+  /**
+   * Implements EventSubscriberInterface::getSubscribedEvents().
+   */
+  static function getSubscribedEvents() {
+    $events['config.context'][] = array('configContext', 20);
+    $events['config.load'][] = array('configLoad', 20);
+    $events[KernelEvents::REQUEST][] = array('onKernelRequestDomain', 20);
+    return $events;
+  }
+}
diff --git a/lib/Drupal/domain/EventSubscriber/DomainSubscriber.php b/lib/Drupal/domain/EventSubscriber/DomainSubscriber.php
index 380ee43..dc5c3ea 100644
--- a/lib/Drupal/domain/EventSubscriber/DomainSubscriber.php
+++ b/lib/Drupal/domain/EventSubscriber/DomainSubscriber.php
@@ -38,7 +38,7 @@ class DomainSubscriber implements EventSubscriberInterface {
    */
   static function getSubscribedEvents() {
     // Returns multiple times. Should be CONTROLLER?
-    $events[KernelEvents::REQUEST][] = array('onKernelRequestDomain');
+    $events[KernelEvents::REQUEST][] = array('onKernelRequestDomain', 9999);
     return $events;
   }
 
