diff --git a/config/schema/page_manager.schema.yml b/config/schema/page_manager.schema.yml
index 6b963d4..0cc98c5 100644
--- a/config/schema/page_manager.schema.yml
+++ b/config/schema/page_manager.schema.yml
@@ -29,6 +29,22 @@ page_manager.page.*:
       sequence:
         - type: condition.plugin.[id]
           label: 'Access Condition'
+    static_context:
+      type: sequence
+      label: Static context list
+      sequence:
+        - type: mapping
+          label: 'Static context'
+          mapping:
+            label:
+              type: label
+              label: 'Label of the context'
+            type:
+              type: string
+              label: 'Context type'
+            value:
+              type: string
+              label: 'Context value'
 
 page_manager.block_plugin.*:
   type: block.settings.[id]
diff --git a/page_manager.routing.yml b/page_manager.routing.yml
index 5bf8063..10f63c6 100644
--- a/page_manager.routing.yml
+++ b/page_manager.routing.yml
@@ -82,6 +82,32 @@ page_manager.access_condition_delete:
   requirements:
     _entity_access: page.update
 
+#### Static Contexts
+
+page_manager.static_context_add:
+  path: '/admin/structure/page_manager/manage/{page}/context/add'
+  defaults:
+    _form: '\Drupal\page_manager\Form\StaticContextAddForm'
+    _title: 'Add new static context'
+  requirements:
+    _entity_access: page.update
+
+page_manager.static_context_edit:
+  path: '/admin/structure/page_manager/manage/{page}/context/edit/{name}'
+  defaults:
+    _form: '\Drupal\page_manager\Form\StaticContextEditForm'
+    _title_callback: '\Drupal\page_manager\Controller\PageManagerController::editStaticContextTitle'
+  requirements:
+    _entity_access: page.update
+
+page_manager.static_context_delete:
+  path: '/admin/structure/page_manager/manage/{page}/context/delete/{name}'
+  defaults:
+    _form: '\Drupal\page_manager\Form\StaticContextDeleteForm'
+    _title: 'Delete static context'
+  requirements:
+    _entity_access: page.update
+
 #### Display variants
 
 page_manager.display_variant_select:
diff --git a/page_manager.services.yml b/page_manager.services.yml
index 62b4dad..f4b5c01 100644
--- a/page_manager.services.yml
+++ b/page_manager.services.yml
@@ -9,6 +9,11 @@ services:
     arguments: ['@router.route_provider', '@request_stack']
     tags:
       - { name: 'event_subscriber' }
+  page_manager.static_context:
+    class: Drupal\page_manager\EventSubscriber\StaticContext
+    arguments: ['@entity.manager']
+    tags:
+      - { name: 'event_subscriber' }
   page_manager.page_manager_routes:
     class: Drupal\page_manager\Routing\PageManagerRoutes
     arguments: ['@entity.manager']
diff --git a/src/Context/EntityLazyLoadContext.php b/src/Context/EntityLazyLoadContext.php
new file mode 100644
index 0000000..43bfe98
--- /dev/null
+++ b/src/Context/EntityLazyLoadContext.php
@@ -0,0 +1,68 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\page_manager\Context\EntityLazyLoadContext.
+ */
+
+namespace Drupal\page_manager\Context;
+
+use Drupal\Core\Entity\EntityManagerInterface;
+use Drupal\Core\Plugin\Context\Context;
+use Drupal\Core\Plugin\Context\ContextDefinitionInterface;
+
+class EntityLazyLoadContext extends Context {
+
+  /**
+   * The entity UUID.
+   *
+   * @var string
+   */
+  protected $uuid;
+
+  /**
+   * The entity manager.
+   *
+   * @var \Drupal\Core\Entity\EntityManagerInterface
+   */
+  protected $entityManager;
+
+  /**
+   * Construct an EntityLazyLoadContext object.
+   *
+   * @param \Drupal\Core\Plugin\Context\ContextDefinitionInterface $context_definition
+   *   The context definition.
+   * @param \Drupal\Core\Entity\EntityManagerInterface $entity_manager
+   *   The entity manager.
+   * @param string $uuid
+   *   The UUID of the entity.
+   */
+  public function __construct(ContextDefinitionInterface $context_definition, EntityManagerInterface $entity_manager, $uuid) {
+    parent::__construct($context_definition);
+    $this->entityManager = $entity_manager;
+    $this->uuid = $uuid;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getContextValue() {
+    if (!$this->contextValue) {
+      $entity_type_id = substr($this->contextDefinition->getDataType(), 7);
+      $this->contextValue = $this->entityManager->loadEntityByUuid($entity_type_id, $this->uuid);
+    }
+    return $this->contextValue;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function hasContextValue() {
+    // Ensure that the entity is loaded before checking if it exists.
+    if (!$this->contextValue) {
+      $this->getContextValue();
+    }
+    return parent::hasContextValue();
+  }
+
+}
diff --git a/src/Controller/PageManagerController.php b/src/Controller/PageManagerController.php
index a22310a..be37df5 100644
--- a/src/Controller/PageManagerController.php
+++ b/src/Controller/PageManagerController.php
@@ -148,6 +148,22 @@ public function editSelectionConditionTitle(PageInterface $page, $display_varian
   }
 
   /**
+   * Route title callback.
+   *
+   * @param \Drupal\page_manager\PageInterface $page
+   *   The page entity.
+   * @param string $name
+   *   The static context name.
+   *
+   * @return string
+   *   The title for the static context edit form.
+   */
+  public function editStaticContextTitle(PageInterface $page, $name) {
+    $static_context = $page->getStaticContext($name);
+    return $this->t('Edit @label static context', ['@label' => $static_context['label']]);
+  }
+
+  /**
    * Enables or disables a Page.
    *
    * @param \Drupal\page_manager\PageInterface $page
diff --git a/src/Entity/Page.php b/src/Entity/Page.php
index e515628..b73ebc5 100644
--- a/src/Entity/Page.php
+++ b/src/Entity/Page.php
@@ -114,6 +114,15 @@ class Page extends ConfigEntityBase implements PageInterface {
   protected $use_admin_theme;
 
   /**
+   * Static context references.
+   *
+   * A list of arrays with the keys name, label, type and value.
+   *
+   * @var array[]
+   */
+  protected $static_context = [];
+
+  /**
    * Stores a reference to the executable version of this page.
    *
    * This is only used on runtime, and is not stored.
@@ -154,6 +163,7 @@ public function toArray() {
       'access_conditions',
       'access_logic',
       'use_admin_theme',
+      'static_context',
     ];
     foreach ($names as $name) {
       $properties[$name] = $this->get($name);
@@ -287,6 +297,39 @@ public function getAccessLogic() {
   /**
    * {@inheritdoc}
    */
+  public function getStaticContexts() {
+    return $this->static_context;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getStaticContext($name) {
+    if (isset($this->static_context[$name])) {
+      return $this->static_context[$name];
+    }
+    return [];
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setStaticContext($name, $configuration) {
+    $this->static_context[$name] = $configuration;
+    return $this;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function removeStaticContext($name) {
+    unset($this->static_context[$name]);
+    return $this;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
   public function getContexts() {
     return $this->getExecutable()->getContexts();
   }
diff --git a/src/EventSubscriber/StaticContext.php b/src/EventSubscriber/StaticContext.php
new file mode 100644
index 0000000..e8e55fa
--- /dev/null
+++ b/src/EventSubscriber/StaticContext.php
@@ -0,0 +1,67 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\page_manager\EventSubscriber\StaticContext.
+ */
+
+namespace Drupal\page_manager\EventSubscriber;
+
+use Drupal\Core\Entity\EntityManagerInterface;
+use Drupal\Core\Plugin\Context\ContextDefinition;
+use Drupal\page_manager\Context\EntityLazyLoadContext;
+use Drupal\page_manager\Event\PageManagerContextEvent;
+use Drupal\Core\StringTranslation\StringTranslationTrait;
+use Drupal\page_manager\Event\PageManagerEvents;
+use Symfony\Component\EventDispatcher\EventSubscriberInterface;
+
+/**
+ * Adds static context.
+ */
+class StaticContext implements EventSubscriberInterface {
+
+  use StringTranslationTrait;
+
+  /**
+   * The entity manager.
+   *
+   * @var \Drupal\Core\Entity\EntityManagerInterface
+   */
+  protected $entityManager;
+
+  /**
+   * Constructs a new StaticContext.
+   *
+   * @param \Drupal\Core\Entity\EntityManagerInterface $entity_manager
+   *   The entity manager.
+   */
+  public function __construct(EntityManagerInterface $entity_manager) {
+    $this->entityManager = $entity_manager;
+  }
+
+  /**
+   * Adds in the current user as a context.
+   *
+   * @param \Drupal\page_manager\Event\PageManagerContextEvent $event
+   *   The page entity context event.
+   */
+  public function onPageContext(PageManagerContextEvent $event) {
+    $executable = $event->getPageExecutable();
+    $static_contexts = $executable->getPage()->getStaticContexts();
+
+    foreach ($static_contexts as $name => $static_context) {
+      $context = new EntityLazyLoadContext(new ContextDefinition($static_context['type'], $static_context['label']), $this->entityManager, $static_context['value']);
+      $executable->addContext($name, $context);
+    }
+
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function getSubscribedEvents() {
+    $events[PageManagerEvents::PAGE_CONTEXT][] = 'onPageContext';
+    return $events;
+  }
+
+}
diff --git a/src/Form/PageEditForm.php b/src/Form/PageEditForm.php
index a730b4a..5e098d7 100644
--- a/src/Form/PageEditForm.php
+++ b/src/Form/PageEditForm.php
@@ -9,9 +9,11 @@
 
 use Drupal\Component\Serialization\Json;
 use Drupal\Component\Utility\NestedArray;
-use Drupal\Core\Entity\EntityInterface;
+use Drupal\Core\Entity\EntityManagerInterface;
+use Drupal\Core\Entity\Query\QueryFactory;
 use Drupal\Core\Form\FormStateInterface;
 use Drupal\Core\Url;
+use Symfony\Component\DependencyInjection\ContainerInterface;
 
 /**
  * Provides a form for editing a page entity.
@@ -44,6 +46,77 @@ public function form(array $form, FormStateInterface $form_state) {
       ]
     ]);
 
+    $form['context'] = [
+      '#type' => 'details',
+      '#title' => $this->t('Available context'),
+      '#open' => TRUE,
+    ];
+    $form['context']['add'] = [
+      '#type' => 'link',
+      '#title' => $this->t('Add new static context'),
+      '#url' => Url::fromRoute('page_manager.static_context_add', [
+        'page' => $this->entity->id(),
+      ]),
+      '#attributes' => $add_button_attributes,
+      '#attached' => [
+        'library' => [
+          'core/drupal.ajax',
+        ],
+      ],
+    ];
+    $form['context']['available_context'] = [
+      '#type' => 'table',
+      '#header' => [
+        $this->t('Label'),
+        $this->t('Name'),
+        $this->t('Type'),
+        $this->t('Operations'),
+      ],
+      '#empty' => $this->t('There is no available context.'),
+    ];
+    $contexts = $this->entity->getContexts();
+    foreach ($contexts as $name => $context) {
+      $context_definition = $context->getContextDefinition();
+
+      $row = [];
+      $row['label'] = [
+        '#markup' => $context_definition->getLabel(),
+      ];
+      $row['machine_name'] = [
+        '#markup' => $name,
+      ];
+      $row['type'] = [
+        '#markup' => $context_definition->getDataType(),
+      ];
+
+      // Add operation links if the context is a static context.
+      $operations = [];
+      if ($this->entity->getStaticContext($name)) {
+        $operations['edit'] = [
+          'title' => $this->t('Edit'),
+          'url' => Url::fromRoute('page_manager.static_context_edit', [
+            'page' => $this->entity->id(),
+            'name' => $name,
+          ]),
+          'attributes' => $attributes,
+        ];
+        $operations['delete'] = [
+          'title' => $this->t('Delete'),
+          'url' => Url::fromRoute('page_manager.static_context_delete', [
+            'page' => $this->entity->id(),
+            'name' => $name,
+          ]),
+          'attributes' => $attributes,
+        ];
+      }
+      $row['operations'] = [
+        '#type' => 'operations',
+        '#links' => $operations,
+      ];
+
+      $form['context']['available_context'][$name] = $row;
+    }
+
     $form['display_variant_section'] = [
       '#type' => 'details',
       '#title' => $this->t('Display variants'),
diff --git a/src/Form/StaticContextAddForm.php b/src/Form/StaticContextAddForm.php
new file mode 100644
index 0000000..91d5177
--- /dev/null
+++ b/src/Form/StaticContextAddForm.php
@@ -0,0 +1,39 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\page_manager\Form\StaticContextAddForm.
+ */
+
+namespace Drupal\page_manager\Form;
+
+use Drupal\Core\Condition\ConditionManager;
+use Symfony\Component\DependencyInjection\ContainerInterface;
+
+/**
+ * Provides a form for adding a new static context.
+ */
+class StaticContextAddForm extends StaticContextFormBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getFormId() {
+    return 'page_manager_static_context_add_form';
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function submitButtonText() {
+    return $this->t('Add Static Context');
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function submitMessageText() {
+    return $this->t('The %label static context has been added.', ['%label' => $this->staticContext['label']]);
+  }
+
+}
diff --git a/src/Form/StaticContextDeleteForm.php b/src/Form/StaticContextDeleteForm.php
new file mode 100644
index 0000000..425b699
--- /dev/null
+++ b/src/Form/StaticContextDeleteForm.php
@@ -0,0 +1,80 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\page_manager\Form\StaticContextDeleteForm.
+ */
+
+namespace Drupal\page_manager\Form;
+
+use Drupal\Core\Form\FormStateInterface;
+use Drupal\page_manager\PageInterface;
+use Drupal\Core\Form\ConfirmFormBase;
+
+/**
+ * Provides a form for deleting an access condition.
+ */
+class StaticContextDeleteForm extends ConfirmFormBase {
+
+  /**
+   * The page entity this selection condition belongs to.
+   *
+   * @var \Drupal\page_manager\PageInterface
+   */
+  protected $page;
+
+  /**
+   * The static context's machine name.
+   *
+   * @var array
+   */
+  protected $staticContext;
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getFormId() {
+    return 'page_manager_static_context_delete_form';
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getQuestion() {
+    return $this->t('Are you sure you want to delete the static context %label?', ['%label' => $this->page->getStaticContext($this->staticContext)['label']]);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getCancelUrl() {
+    return $this->page->urlInfo('edit-form');
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getConfirmText() {
+    return $this->t('Delete');
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function buildForm(array $form, FormStateInterface $form_state, PageInterface $page = NULL, $name = NULL) {
+    $this->page = $page;
+    $this->staticContext = $name;
+    return parent::buildForm($form, $form_state);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function submitForm(array &$form, FormStateInterface $form_state) {
+    drupal_set_message($this->t('The static context %label has been removed.', ['%label' => $this->page->getStaticContext($this->staticContext)['label']]));
+    $this->page->removeStaticContext($this->staticContext);
+    $this->page->save();
+    $form_state->setRedirectUrl($this->getCancelUrl());
+  }
+
+}
diff --git a/src/Form/StaticContextEditForm.php b/src/Form/StaticContextEditForm.php
new file mode 100644
index 0000000..8cf3a3b
--- /dev/null
+++ b/src/Form/StaticContextEditForm.php
@@ -0,0 +1,52 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\page_manager\Form\StaticContextEditForm.
+ */
+
+namespace Drupal\page_manager\Form;
+
+use Drupal\Core\Form\FormStateInterface;
+use Drupal\page_manager\PageInterface;
+
+/**
+ * Provides a form for adding a new static context.
+ */
+class StaticContextEditForm extends StaticContextFormBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getFormId() {
+    return 'page_manager_static_context_edit_form';
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function submitButtonText() {
+    return $this->t('Update Static Context');
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function submitMessageText() {
+    return $this->t('The %label static context has been updated.', ['%label' => $this->staticContext['label']]);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function buildForm(array $form, FormStateInterface $form_state, PageInterface $page = NULL, $name = '') {
+    $form = parent::buildForm($form, $form_state, $page, $name);
+    // The machine name of an existing context is read-only.
+    $form['machine_name'] = array(
+      '#type' => 'value',
+      '#value' => $name,
+    );
+    return $form;
+  }
+
+}
diff --git a/src/Form/StaticContextFormBase.php b/src/Form/StaticContextFormBase.php
new file mode 100644
index 0000000..9194fb2
--- /dev/null
+++ b/src/Form/StaticContextFormBase.php
@@ -0,0 +1,236 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\page_manager\Form\StaticContextFormBase.
+ */
+
+namespace Drupal\page_manager\Form;
+
+use Drupal\Core\Entity\EntityManagerInterface;
+use Drupal\Core\Entity\Entity;
+use Drupal\Core\Form\FormBase;
+use Drupal\Core\Form\FormStateInterface;
+use Drupal\page_manager\PageInterface;
+use Symfony\Component\DependencyInjection\ContainerInterface;
+
+/**
+ * Provides a base form for editing and adding an access condition.
+ */
+abstract class StaticContextFormBase extends FormBase {
+
+  /**
+   * The page entity this static context belongs to.
+   *
+   * @var \Drupal\page_manager\PageInterface
+   */
+  protected $page;
+
+  /**
+   * The entity manager.
+   *
+   * @var \Drupal\Core\Entity\EntityManagerInterface
+   */
+  protected $entityManager;
+
+  /**
+   * The static context configuration.
+   *
+   * @var array
+   */
+  protected $staticContext;
+
+  /**
+   * Construct a new StaticContextFormBase.
+   *
+   * @param \Drupal\Core\Entity\EntityManagerInterface $entity_manager
+   *   The entity manager.
+   */
+  public function __construct(EntityManagerInterface $entity_manager) {
+    $this->entityManager = $entity_manager;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function create(ContainerInterface $container) {
+    return new static(
+      $container->get('entity.manager')
+    );
+  }
+
+  /**
+   * Returns the text to use for the submit button.
+   *
+   * @return string
+   *   The submit button text.
+   */
+  abstract protected function submitButtonText();
+
+  /**
+   * Returns the text to use for the submit message.
+   *
+   * @return string
+   *   The submit message text.
+   */
+  abstract protected function submitMessageText();
+
+  /**
+   * {@inheritdoc}
+   */
+  public function buildForm(array $form, FormStateInterface $form_state, PageInterface $page = NULL, $name = '') {
+    $this->page = $page;
+    $this->staticContext = $this->page->getStaticContext($name);
+
+    // Allow the condition to add to the form.
+    $form['label'] = [
+      '#type' => 'textfield',
+      '#title' => $this->t('Label'),
+      '#default_value' => $this->staticContext['label'] ?: '',
+      '#required' => TRUE,
+    ];
+    $form['machine_name'] = [
+      '#type' => 'machine_name',
+      '#maxlength' => 64,
+      '#required' => TRUE,
+      '#machine_name' => [
+        'exists' => [$this, 'contextExists'],
+        'source' => ['label'],
+      ],
+      '#default_value' => $name,
+    ];
+    $form['entity_type'] = [
+      '#type' => 'select',
+      '#title' => $this->t('Entity type'),
+      '#options' => $this->entityManager->getEntityTypeLabels(TRUE),
+      '#limit_validation_errors' => array(array('entity_type')),
+      '#submit' => ['::rebuildSubmit'],
+      '#executes_submit_callback' => TRUE,
+      '#ajax' => array(
+        'callback' => '::updateEntityType',
+        'wrapper' => 'add-static-context-wrapper',
+        'method' => 'replace',
+      ),
+    ];
+
+    $entity = NULL;
+    if ($form_state->hasValue('entity_type')) {
+      $entity_type = $form_state->getValue('entity_type');
+      if ($this->staticContext['value']) {
+        $entity = $this->entityManager->loadEntityByUuid($entity_type, $this->staticContext['value']);
+      }
+    }
+    elseif (!empty($this->staticContext['type'])) {
+      list(, $entity_type) = explode(':', $this->staticContext['type']);
+      $entity = $this->entityManager->loadEntityByUuid($entity_type, $this->staticContext['value']);
+    }
+    elseif ($this->entityManager->hasDefinition('node')) {
+      $entity_type = 'node';
+    }
+    else {
+      $entity_type = 'user';
+    }
+
+    $form['entity_type']['#default_value'] = $entity_type;
+
+    $form['selection'] = [
+      '#type' => 'entity_autocomplete',
+      '#prefix' => '<div id="add-static-context-wrapper">',
+      '#suffix' => '</div>',
+      '#required' => TRUE,
+      '#target_type' => $entity_type,
+      '#default_value' => $entity,
+      '#title' => $this->t('Select entity'),
+    ];
+
+    $form['actions'] = ['#type' => 'actions'];
+    $form['actions']['submit'] = [
+      '#type' => 'submit',
+      '#value' => $this->submitButtonText(),
+      '#button_type' => 'primary',
+    ];
+
+    return $form;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function submitForm(array &$form, FormStateInterface $form_state) {
+    $selection = $form_state->getValue('selection');
+    $entity_type = $form_state->getValue('entity_type');
+    $entity = $this->getEntityFromSelection($entity_type, $selection);
+
+    $this->staticContext = [
+      'label' => $form_state->getValue('label'),
+      'type' => 'entity:' . $entity_type,
+      'value' => $entity->uuid(),
+    ];
+    $this->page->setStaticContext($form_state->getValue('machine_name'), $this->staticContext);
+    $this->page->save();
+
+    // Set the submission message.
+    drupal_set_message($this->submitMessageText());
+
+    $form_state->setRedirectUrl($this->page->urlInfo('edit-form'));
+  }
+
+  /**
+   * Get the entity from the selection.
+   *
+   * @param string $selection
+   *   The value from the selection box.
+   *
+   * @return \Drupal\Core\Entity\Entity|null
+   *   The entity reference in selection.
+   */
+  protected function getEntityFromSelection($entity_type, $selection) {
+    if (!isset($selection)) {
+      return NULL;
+    }
+    return $this->entityManager->getStorage($entity_type)->load($selection);
+  }
+
+  /**
+   * Determines if a context with that name already exists.
+   *
+   * @param string $name
+   *   The context name
+   *
+   * @return bool
+   *   TRUE if the format exists, FALSE otherwise.
+   */
+  public function contextExists($name) {
+    return isset($this->page->getContexts()[$name]);
+  }
+
+  /**
+   * Submit handler for the entity_type select field.
+   *
+   * @param array $form
+   *   The form array.
+   * @param \Drupal\Core\Form\FormStateInterface $form_state
+   *   The form state object.
+   *
+   * @return $this
+   */
+  public function rebuildSubmit($form, FormStateInterface $form_state) {
+    return $form_state->setRebuild();
+  }
+
+  /**
+   * AJAX callback for the entity_type select field.
+   *
+   * @param array $form
+   *   The form array.
+   * @param \Drupal\Core\Form\FormStateInterface $form_state
+   *   The form state object.
+   *
+   * @return array
+   *   The updated entity auto complete widget on the form.
+   */
+  public function updateEntityType($form, FormStateInterface $form_state) {
+    return $form['selection'];
+  }
+
+}
diff --git a/src/PageInterface.php b/src/PageInterface.php
index a7dd829..59bc383 100644
--- a/src/PageInterface.php
+++ b/src/PageInterface.php
@@ -96,6 +96,47 @@ public function removeAccessCondition($condition_id);
   public function getAccessLogic();
 
   /**
+   * Returns the static context configurations for this page entity.
+   *
+   * @return array[]
+   *   An array of static context configurations.
+   */
+  public function getStaticContexts();
+
+  /**
+   * Retrieves a specific static context.
+   *
+   * @param string $name
+   *   The static context unique name.
+   *
+   * @return array
+   *   The configuration array of the static context
+   */
+  public function getStaticContext($name);
+
+  /**
+   * Adds/updates a given static context.
+   *
+   * @param string $name
+   *   The static context unique machine name.
+   * @param array $configuration
+   *   A new array of configuration for the static context.
+   *
+   * @return $this
+   */
+  public function setStaticContext($name, $configuration);
+
+  /**
+   * Removes a specific static context.
+   *
+   * @param string $name
+   *   The static context unique name.
+   *
+   * @return $this
+   */
+  public function removeStaticContext($name);
+
+  /**
    * Gets the values for all defined contexts.
    *
    * @return \Drupal\Component\Plugin\Context\ContextInterface[]
diff --git a/src/Tests/StaticContextTest.php b/src/Tests/StaticContextTest.php
new file mode 100644
index 0000000..4065502
--- /dev/null
+++ b/src/Tests/StaticContextTest.php
@@ -0,0 +1,173 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\page_manager\Tests\StaticContextTest.
+ */
+
+namespace Drupal\page_manager\Tests;
+
+use Drupal\simpletest\WebTestBase;
+
+/**
+ * Tests static context for pages.
+ *
+ * @group page_manager
+ */
+class StaticContextTest extends WebTestBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  public static $modules = ['page_manager', 'node'];
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function setUp() {
+    parent::setUp();
+
+    $this->drupalCreateContentType(['type' => 'article', 'name' => 'Article']);
+    $this->drupalLogin($this->drupalCreateUser(['administer pages', 'create article content']));
+  }
+
+  /**
+   * Tests that a node bundle condition controls the node view page.
+   */
+  public function testStaticContext() {
+    // Create a node, and check its page.
+    $node = $this->drupalCreateNode(['type' => 'article']);
+    $node2 = $this->drupalCreateNode(['type' => 'article']);
+    $this->drupalGet('node/' . $node->id());
+    $this->assertResponse(200);
+    $this->assertText($node->label());
+    $this->assertTitle($node->label() . ' | Drupal');
+
+    // Create a new page entity.
+    $edit_page = [
+      'label' => 'Static node context',
+      'id' => 'static_node_context',
+      'path' => 'static-context',
+    ];
+    $this->drupalPostForm('admin/structure/page_manager/add', $edit_page, 'Save');
+
+    // Add a static context for each node to the page.
+    $contexts = array(
+      array(
+        'title' => 'Static Node',
+        'machine_name' => 'static_node',
+        'node' => $node,
+      ),
+      array(
+        'title' => 'Static Node 2',
+        'machine_name' => 'static_node_2',
+        'node' => $node2,
+      ),
+    );
+    foreach ($contexts as $context) {
+      $this->clickLink('Add new static context');
+      $edit = array(
+        'label' => $context['title'],
+        'machine_name' => $context['machine_name'],
+        'entity_type' => 'node',
+        'selection' => $context['node']->getTitle(),
+      );
+      $this->drupalPostForm(NULL, $edit, 'Add Static Context');
+      $this->assertText('The ' . $edit['label'] . ' static context has been added.');
+    }
+
+    // Add a new display variant.
+    $this->drupalGet('admin/structure/page_manager/manage/' . $edit_page['id']);
+    $this->clickLink('Add new display variant');
+    $this->clickLink('Block page');
+    $variant_edit = [
+      'display_variant[label]' => 'Static context blocks',
+      'display_variant[page_title]' => 'Static context test page',
+    ];
+    $this->drupalPostForm(NULL, $variant_edit, 'Add display variant');
+
+    // Add a block that renders the node from the first static context.
+    $this->clickLink('Add new block');
+    $this->clickLink('Entity view (Content)');
+    $edit = [
+      'settings[label]' => 'Static node view',
+      'settings[label_display]' => 1,
+      'settings[view_mode]' => 'default',
+      'region' => 'top',
+    ];
+    $this->drupalPostForm(NULL, $edit, 'Add block');
+    $this->assertText($edit['settings[label]']);
+
+    // Add a block that renders the node from the second static context.
+    $this->clickLink('Add new block');
+    $this->clickLink('Entity view (Content)');
+    $edit = [
+      'settings[label]' => 'Static node 2 view',
+      'settings[label_display]' => 1,
+      'settings[view_mode]' => 'default',
+      'region' => 'bottom',
+      'context_mapping[entity]' => $contexts[1]['machine_name'],
+    ];
+    $this->drupalPostForm(NULL, $edit, 'Add block');
+    $this->assertText($edit['settings[label]']);
+
+    // Open the page and verify that the node from the static context is there.
+    $this->drupalGet($edit_page['path']);
+    $this->assertText($node->label());
+    $this->assertText($node->get('body')->getValue()[0]['value']);
+    $this->assertText($node2->label());
+    $this->assertText($node2->get('body')->getValue()[0]['value']);
+
+    // Change the second static context to the first node.
+    $this->drupalGet('admin/structure/page_manager/manage/' . $edit_page['id']);
+    $this->clickLink(t('Edit'), 1);
+    $edit = array(
+      'label' => 'Static Node 2 edited',
+      'entity_type' => 'node',
+      'selection' => $node->getTitle(),
+    );
+    $this->drupalPostForm(NULL, $edit, t('Update Static Context'));
+    $this->assertText('The ' . $edit['label'] . ' static context has been updated.');
+
+    // Open the page and verify that the node from the static context is there.
+    $this->drupalGet($edit_page['path']);
+    $this->assertText($node->label());
+    $this->assertText($node->get('body')->getValue()[0]['value']);
+    // Also make sure the second node is NOT there.
+    $this->assertNoText($node2->label());
+    $this->assertNoText($node2->get('body')->getValue()[0]['value']);
+
+    // Change the first static context to the second node.
+    $this->drupalGet('admin/structure/page_manager/manage/' . $edit_page['id']);
+    $this->clickLink(t('Edit'));
+    $edit = array(
+      'label' => 'Static Node edited',
+      'entity_type' => 'node',
+      'selection' => $node2->getTitle(),
+    );
+    $this->drupalPostForm(NULL, $edit, t('Update Static Context'));
+    $this->assertText('The ' . $edit['label'] . ' static context has been updated.');
+
+    // Edit the page variant and remove one static context view block.
+    $this->clickLink(t('Edit'), 2);
+    // Remove the second static context view block from the display variant.
+    $this->clickLink(t('Delete'), 1);
+    $this->drupalPostForm(NULL, NULL, t('Delete'));
+
+    // Make sure only the second static context's node is rendered on the page.
+    $this->drupalGet($edit_page['path']);
+    $this->assertNoText($node->label());
+    $this->assertNoText($node->get('body')->getValue()[0]['value']);
+    $this->assertText($node2->label());
+    $this->assertText($node2->get('body')->getValue()[0]['value']);
+
+    // Delete a static context and verify that it was deleted.
+    $this->drupalGet('admin/structure/page_manager/manage/' . $edit_page['id']);
+    $this->clickLink(t('Delete'));
+    $this->drupalPostForm(NULL, NULL, t('Delete'));
+    $this->assertText('The static context ' . $edit['label'] . ' has been removed.');
+    $this->drupalGet('admin/structure/page_manager/manage/' . $edit_page['id']);
+    $this->assertNoText($edit['label']);
+  }
+
+}
