diff --git a/domain_config/domain_config.info.yml b/domain_config/domain_config.info.yml
new file mode 100644
index 0000000..f286a5c
--- /dev/null
+++ b/domain_config/domain_config.info.yml
@@ -0,0 +1,8 @@
+name: Domain Configuration
+description: 'Allows domain specific configuration.'
+type: module
+package: Domain
+version: VERSION
+core: 8.x
+dependencies:
+  - domain
diff --git a/domain_config/domain_config.services.yml b/domain_config/domain_config.services.yml
new file mode 100644
index 0000000..aee593b
--- /dev/null
+++ b/domain_config/domain_config.services.yml
@@ -0,0 +1,6 @@
+services:
+  domain_config.subscriber:
+    class: Drupal\domain_config\EventSubscriber\DomainConfigSubscriber
+    tags:
+      - { name: event_subscriber }
+    arguments: ['@domain.manager', '@config.context']
diff --git a/domain_config/lib/Drupal/EventSubscriber/DomainConfigSubscriber.php b/domain_config/lib/Drupal/EventSubscriber/DomainConfigSubscriber.php
new file mode 100644
index 0000000..2104099
--- /dev/null
+++ b/domain_config/lib/Drupal/EventSubscriber/DomainConfigSubscriber.php
@@ -0,0 +1,121 @@
+<?php
+/**
+ * @file
+ * Definition of \Drupal\domain_config\EventSubscriber.
+ */
+
+namespace Drupal\domain_config\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 {
+
+  const CONFIG_CONTEXT = 'domain_config.domain';
+
+  /**
+   * The domain 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 domain 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(self::CONFIG_CONTEXT, $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(self::CONFIG_CONTEXT)) {
+      $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 domain:
+   * 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..e178df5 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', 100);
     return $events;
   }
 
