diff --git a/src/Entity/PathautoPattern.php b/src/Entity/PathautoPattern.php
index f7619e8..2ca877f 100644
--- a/src/Entity/PathautoPattern.php
+++ b/src/Entity/PathautoPattern.php
@@ -110,9 +110,9 @@ class PathautoPattern extends ConfigEntityBase implements PathautoPatternInterfa
   protected $weight = 0;
 
   /**
-   * @var \Drupal\Core\Plugin\Context\ContextInterface[]
+   * @var \Drupal\Core\Plugin\Context\ContextInterface[]|NULL
    */
-  protected $contexts = [];
+  protected $contexts = NULL;
 
   /**
    * @var array
@@ -140,13 +140,14 @@ class PathautoPattern extends ConfigEntityBase implements PathautoPatternInterfa
     }
     $this->selection_criteria = $criteria;
 
+    // Call getContexts to insure all contexts are properly instantiated.
+    // getContexts() returns contexts we know about from the Alias already, and
+    // we don't care about those, but it also populates $this->contexts with
+    // the context objects we DO care about.
     /** @var \Drupal\Core\Plugin\Context\ContextInterface[] $contexts */
-    $contexts = $this->getContexts();
-    foreach ($this->getAliasType()->getContexts() as $plugin_context_id => $plugin_context) {
-      unset($contexts[$plugin_context_id]);
-    }
+    $this->getContexts();
     $this->context_definitions = [];
-    foreach ($contexts as $context_id => $context) {
+    foreach ($this->contexts as $context_id => $context) {
       $this->context_definitions[] = [
         'id' => $context_id,
         'label' => $context->getContextDefinition()->getLabel()
@@ -160,31 +161,6 @@ class PathautoPattern extends ConfigEntityBase implements PathautoPatternInterfa
   /**
    * {@inheritdoc}
    */
-  public static function postLoad(EntityStorageInterface $storage, array &$entities) {
-    /** @var \Drupal\ctools\TypedDataResolver $resolver */
-    $resolver = \Drupal::service('ctools.typed_data.resolver');
-    /** @var \Drupal\pathauto\Entity\PathautoPattern $entity */
-    foreach ($entities as $entity) {
-      foreach ($entity->getContextDefinitions() as $definition) {
-        $context = $resolver->convertTokenToContext($definition['id'], $entity->getContexts());
-        $new_definition = new ContextDefinition(
-          $context->getContextDefinition()->getDataType(),
-          $definition['label'],
-          $context->getContextDefinition()->isRequired(),
-          $context->getContextDefinition()->isMultiple(),
-          $context->getContextDefinition()->getDescription(),
-          $context->getContextDefinition()->getDefaultValue()
-        );
-        $new_context = new Context($new_definition, $context->hasContextValue() ? $context->getContextValue() : NULL);
-        $entity->addContext($definition['id'], $new_context);
-      }
-    }
-    parent::postLoad($storage, $entities);
-  }
-
-  /**
-   * {@inheritdoc}
-   */
   public static function postDelete(EntityStorageInterface $storage, array $entities) {
     parent::postDelete($storage, $entities);
     // Invalidate the static caches.
@@ -257,8 +233,7 @@ class PathautoPattern extends ConfigEntityBase implements PathautoPatternInterfa
    * {@inheritdoc}
    */
   public function hasContext($token) {
-    $contexts = $this->getAliasType()->getContexts();
-    $contexts += $this->contexts;
+    $contexts = $this->getContexts();
     return !empty($contexts[$token]);
   }
 
@@ -266,8 +241,7 @@ class PathautoPattern extends ConfigEntityBase implements PathautoPatternInterfa
    * {@inheritdoc}
    */
   public function getContext($token) {
-    $contexts = $this->getAliasType()->getContexts();
-    $contexts += $this->contexts;
+    $contexts = $this->getContexts();
     return $contexts[$token];
   }
 
@@ -276,8 +250,21 @@ class PathautoPattern extends ConfigEntityBase implements PathautoPatternInterfa
    */
   public function getContexts() {
     $contexts = $this->getAliasType()->getContexts();
-    $contexts += $this->contexts;
-    return $contexts;
+    if (is_null($this->contexts)) {
+      foreach ($this->getContextDefinitions() as $definition) {
+        /** @var \Drupal\ctools\TypedDataResolver $resolver */
+        $resolver = \Drupal::service('ctools.typed_data.resolver');
+        /** @var \Drupal\pathauto\Entity\PathautoPattern $entity */
+        $context = $resolver->convertTokenToContext($definition['id'], $contexts);
+        $context_definition = $context->getContextDefinition();
+        $context_definition->setLabel($definition['label']);
+        $contexts[$definition['id']] = new Context($context_definition, $context->getContextValue());
+        $this->contexts[$definition['id']] = $contexts[$definition['id']];
+      }
+      // set this to an appropriate array if it's still NULL.
+      $this->contexts = is_null($this->contexts) ? [] : $this->contexts;
+    }
+    return $contexts += $this->contexts;
   }
 
   /**
