diff --git a/domain/src/DomainNegotiator.php b/domain/src/DomainNegotiator.php
index 950787b9..600caef4 100644
--- a/domain/src/DomainNegotiator.php
+++ b/domain/src/DomainNegotiator.php
@@ -36,7 +36,7 @@ class DomainNegotiator implements DomainNegotiatorInterface {
   /**
    * The domain storage class.
    *
-   * @var \Drupal\domain\DomainStorageInterface
+   * @var \Drupal\domain\DomainStorageInterface|null
    */
   protected $domainStorage;
 
@@ -85,7 +85,6 @@ public function __construct(RequestStack $requestStack, ModuleHandlerInterface $
     $this->requestStack = $requestStack;
     $this->moduleHandler = $module_handler;
     $this->entityTypeManager = $entity_type_manager;
-    $this->domainStorage = $this->entityTypeManager->getStorage('domain');
     $this->configFactory = $config_factory;
   }
 
@@ -96,7 +95,7 @@ public function setRequestDomain($httpHost, $reset = FALSE) {
     // @TODO: Investigate caching methods.
     $this->setHttpHost($httpHost);
     // Try to load a direct match.
-    if ($domain = $this->domainStorage->loadByHostname($httpHost)) {
+    if ($domain = $this->domainStorage()->loadByHostname($httpHost)) {
       // If the load worked, set an exact match flag for the hook.
       $domain->setMatchType(self::DOMAIN_MATCH_EXACT);
     }
@@ -105,7 +104,7 @@ public function setRequestDomain($httpHost, $reset = FALSE) {
     else {
       $values = array('hostname' => $httpHost);
       /** @var \Drupal\domain\Entity\DomainInterface $domain */
-      $domain = $this->domainStorage->create($values);
+      $domain = $this->domainStorage()->create($values);
       $domain->setMatchType(self::DOMAIN_MATCH_NONE);
     }
 
@@ -124,7 +123,7 @@ public function setRequestDomain($httpHost, $reset = FALSE) {
       $this->setActiveDomain($domain);
     }
     // Fallback to default domain if no match.
-    elseif ($domain = $this->domainStorage->loadDefaultDomain()) {
+    elseif ($domain = $this->domainStorage()->loadDefaultDomain()) {
       $this->moduleHandler->alter('domain_request', $domain);
       $domain->setMatchType(self::DOMAIN_MATCH_NONE);
       if (!empty($domain->id())) {
@@ -178,7 +177,7 @@ public function negotiateActiveHostname() {
       $httpHost = $_SERVER['HTTP_HOST'];
     }
     $hostname = !empty($httpHost) ? $httpHost : 'localhost';
-    return $this->domainStorage->prepareHostname($hostname);
+    return $this->domainStorage()->prepareHostname($hostname);
   }
 
   /**
@@ -200,13 +199,13 @@ public function getHttpHost() {
    */
   public function isRegisteredDomain($hostname) {
     // Direct hostname match always passes.
-    if ($domain = $this->domainStorage->loadByHostname($hostname)) {
+    if ($domain = $this->domainStorage()->loadByHostname($hostname)) {
       return TRUE;
     }
     // Check for registered alias matches.
     $values = array('hostname' => $hostname);
     /** @var \Drupal\domain\Entity\DomainInterface $domain */
-    $domain = $this->domainStorage->create($values);
+    $domain = $this->domainStorage()->create($values);
     $domain->setMatchType(self::DOMAIN_MATCH_NONE);
 
     // Now check with modules (like Domain Alias) that register alternate
@@ -220,4 +219,17 @@ public function isRegisteredDomain($hostname) {
     return FALSE;
   }
 
+  /**
+   * Retrieves the domain storage handler.
+   *
+   * @return \Drupal\domain\DomainStorageInterface
+   *   The domain storage handler.
+   */
+  protected function domainStorage() {
+    if (!$this->domainStorage) {
+      $this->domainStorage = $this->entityTypeManager->getStorage('domain');
+    }
+    return $this->domainStorage;
+  }
+
 }
diff --git a/domain_source/src/HttpKernel/DomainSourcePathProcessor.php b/domain_source/src/HttpKernel/DomainSourcePathProcessor.php
index 06fba8c1..799ececd 100644
--- a/domain_source/src/HttpKernel/DomainSourcePathProcessor.php
+++ b/domain_source/src/HttpKernel/DomainSourcePathProcessor.php
@@ -76,7 +76,7 @@ class DomainSourcePathProcessor implements OutboundPathProcessorInterface {
   /**
    * The domain storage.
    *
-   * @var \Drupal\domain\DomainStorageInterface
+   * @var \Drupal\domain\DomainStorageInterface|null
    */
   protected $domainStorage;
 
@@ -100,7 +100,6 @@ public function __construct(DomainNegotiatorInterface $negotiator, ModuleHandler
     $this->entityTypeManager = $entity_type_manager;
     $this->aliasManager = $alias_manager;
     $this->configFactory = $config_factory;
-    $this->domainStorage = $entity_type_manager->getStorage('domain');
   }
 
   /**
@@ -159,7 +158,7 @@ public function processOutbound($path, &$options = [], Request $request = NULL,
         $target_id = domain_source_get($entity);
       }
       if (!empty($target_id)) {
-        $source = $this->domainStorage->load($target_id);
+        $source = $this->domainStorage()->load($target_id);
       }
       $options['entity'] = $entity;
       $options['entity_type'] = $entity->getEntityTypeId();
@@ -169,7 +168,7 @@ public function processOutbound($path, &$options = [], Request $request = NULL,
     else {
       if (isset($options['domain_target_id'])) {
         $target_id = $options['domain_target_id'];
-        $source = $this->domainStorage->load($target_id);
+        $source = $this->domainStorage()->load($target_id);
       }
       $this->moduleHandler->alter('domain_source_path', $source, $path, $options);
     }
@@ -279,4 +278,17 @@ public function getActiveDomain() {
     return $this->activeDomain;
   }
 
+  /**
+   * Retrieves the domain storage handler.
+   *
+   * @return \Drupal\domain\DomainStorageInterface
+   *   The domain storage handler.
+   */
+  protected function domainStorage() {
+    if (!$this->domainStorage) {
+      $this->domainStorage = $this->entityTypeManager->getStorage('domain');
+    }
+    return $this->domainStorage;
+  }
+
 }