diff --git a/core/lib/Drupal/Core/Condition/ConditionPluginBase.php b/core/lib/Drupal/Core/Condition/ConditionPluginBase.php
index ece4e20..4b4a07b 100644
--- a/core/lib/Drupal/Core/Condition/ConditionPluginBase.php
+++ b/core/lib/Drupal/Core/Condition/ConditionPluginBase.php
@@ -44,8 +44,7 @@ public function isNegated() {
    * {@inheritdoc}
    */
   public function buildConfigurationForm(array $form, FormStateInterface $form_state) {
-    $temporary = $form_state->getTemporary();
-    $contexts = isset($temporary['gathered_contexts']) ? $temporary['gathered_contexts'] : [];
+    $contexts = $form_state->getTemporaryValue('gathered_contexts') ?: [];
     $form['context_mapping'] = $this->addContextAssignmentElement($this, $contexts);
     $form['negate'] = array(
       '#type' => 'checkbox',
diff --git a/core/lib/Drupal/Core/Form/FormState.php b/core/lib/Drupal/Core/Form/FormState.php
index b204d77..971be2a 100644
--- a/core/lib/Drupal/Core/Form/FormState.php
+++ b/core/lib/Drupal/Core/Form/FormState.php
@@ -714,6 +714,31 @@ public function getTemporary() {
   /**
    * {@inheritdoc}
    */
+  public function &getTemporaryValue($key) {
+    $value = &NestedArray::getValue($this->temporary, (array) $key);
+    return $value;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setTemporaryValue($key, $value) {
+    NestedArray::setValue($this->temporary, (array) $key, $value, TRUE);
+    return $this;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function hasTemporaryValue($key) {
+    $exists = NULL;
+    NestedArray::getValue($this->temporary, (array) $key, $exists);
+    return $exists;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
   public function setTriggeringElement($triggering_element) {
     $this->triggering_element = $triggering_element;
     return $this;
diff --git a/core/lib/Drupal/Core/Form/FormStateInterface.php b/core/lib/Drupal/Core/Form/FormStateInterface.php
index 8a544df..8b6a02a 100644
--- a/core/lib/Drupal/Core/Form/FormStateInterface.php
+++ b/core/lib/Drupal/Core/Form/FormStateInterface.php
@@ -934,6 +934,47 @@ public function setTemporary(array $temporary);
   public function getTemporary();
 
   /**
+   * Gets an arbitrary value from temporary storage.
+   *
+   * @param string|array $key
+   *   Properties are often stored as multi-dimensional associative arrays. If
+   *   $key is a string, it will return $temporary[$key]. If $key is an array,
+   *   each element of the array will be used as a nested key. If
+   *   $key = ['foo', 'bar'] it will return $temporary['foo']['bar'].
+   *
+   * @return mixed
+   *   A reference to the value for that key, or NULL if the property does
+   *   not exist.
+   */
+  public function &getTemporaryValue($key);
+
+  /**
+   * Sets an arbitrary value in temporary storage.
+   *
+   * @param string|array $key
+   *   Properties are often stored as multi-dimensional associative arrays. If
+   *   $key is a string, it will use $temporary[$key] = $value. If $key is an
+   *   array, each element of the array will be used as a nested key. If
+   *   $key = ['foo', 'bar'] it will use $temporary['foo']['bar'] = $value.
+   * @param mixed $value
+   *   The value to set.
+   *
+   * @return $this
+   */
+  public function setTemporaryValue($key, $value);
+
+  /**
+   * Determines if a temporary value is present.
+   *
+   * @param string $key
+   *   Properties are often stored as multi-dimensional associative arrays. If
+   *   $key is a string, it will return isset($temporary[$key]). If $key is an
+   *   array, each element of the array will be used as a nested key. If
+   *   $key = ['foo', 'bar'] it will return isset($temporary['foo']['bar']).
+   */
+  public function hasTemporaryValue($key);
+
+  /**
    * Sets the form element that triggered submission.
    *
    * @param array|null $triggering_element
diff --git a/core/modules/block/src/BlockForm.php b/core/modules/block/src/BlockForm.php
index d2dc42f..932734f 100644
--- a/core/modules/block/src/BlockForm.php
+++ b/core/modules/block/src/BlockForm.php
@@ -104,9 +104,7 @@ public function form(array $form, FormStateInterface $form_state) {
 
     // Store the gathered contexts in the form state for other objects to use
     // during form building.
-    $temporary = $form_state->getTemporary();
-    $temporary['gathered_contexts'] = $this->dispatcher->dispatch(BlockEvents::ADMINISTRATIVE_CONTEXT, new BlockContextEvent())->getContexts();
-    $form_state->setTemporary($temporary);
+    $form_state->setTemporaryValue('gathered_contexts', $this->dispatcher->dispatch(BlockEvents::ADMINISTRATIVE_CONTEXT, new BlockContextEvent())->getContexts());
 
     $form['#tree'] = TRUE;
     $form['settings'] = $entity->getPlugin()->buildConfigurationForm(array(), $form_state);
diff --git a/core/tests/Drupal/Tests/Core/Form/FormStateTest.php b/core/tests/Drupal/Tests/Core/Form/FormStateTest.php
index 83e2518..2313e5c 100644
--- a/core/tests/Drupal/Tests/Core/Form/FormStateTest.php
+++ b/core/tests/Drupal/Tests/Core/Form/FormStateTest.php
@@ -514,6 +514,23 @@ public function providerTestIsMethodType() {
     return $data;
   }
 
+  /**
+   * @covers ::getTemporaryValue
+   * @covers ::hasTemporaryValue
+   * @covers ::setTemporaryValue
+   */
+  public function testTemporaryValue() {
+    $form_state = New FormState();
+    $form_state->setTemporary(array());
+    $this->assertFalse($form_state->hasTemporaryValue('rainbow_sparkles'));
+    $form_state->setTemporaryValue('rainbow_sparkles', 'yes please');
+    $this->assertSame($form_state->getTemporaryValue('rainbow_sparkles'), 'yes please');
+    $this->assertTrue($form_state->hasTemporaryValue('rainbow_sparkles'), TRUE);
+    $form_state->setTemporaryValue(array('rainbow_sparkles', 'magic_ponies'), 'yes please');
+    $this->assertSame($form_state->getTemporaryValue(array('rainbow_sparkles', 'magic_ponies')), 'yes please');
+    $this->assertTrue($form_state->hasTemporaryValue(array('rainbow_sparkles', 'magic_ponies')), TRUE);
+  }
+
 }
 
 /**
