diff --git a/src/Tests/Wizard/CToolsWizardTest.php b/src/Tests/Wizard/CToolsWizardTest.php
index 39bfd10..50e0387 100644
--- a/src/Tests/Wizard/CToolsWizardTest.php
+++ b/src/Tests/Wizard/CToolsWizardTest.php
@@ -23,17 +23,22 @@ class CToolsWizardTest extends WebTestBase {
     $this->drupalGet('ctools/wizard');
     $this->assertText('Form One');
     $this->dumpHeaders = TRUE;
+    // Check that $operations['one']['values'] worked.
+    $this->assertText('Xylophone');
+    // Submit first step in the wizard.
     $edit = [
       'one' => 'test',
     ];
-    // First step in the wizard.
     $this->drupalPostForm('ctools/wizard', $edit, t('Next'));
     // Redirected to the second step.
     $this->assertText('Form Two');
+    // Check that $operations['two']['values'] worked.
+    $this->assertText('Zebra');
     // Hit previous to make sure our form value are preserved.
     $this->drupalPostForm(NULL, [], t('Previous'));
     // Check the known form values.
     $this->assertFieldByName('one', 'test');
+    $this->assertText('Xylophone');
     // Goto next step again and finish this wizard.
     $this->drupalPostForm(NULL, [], t('Next'));
     $edit = [
diff --git a/src/Wizard/FormWizardBase.php b/src/Wizard/FormWizardBase.php
index a9ded76..55eb4d6 100644
--- a/src/Wizard/FormWizardBase.php
+++ b/src/Wizard/FormWizardBase.php
@@ -247,6 +247,12 @@ abstract class FormWizardBase extends FormBase implements FormWizardInterface {
     $form = $this->customizeForm($form, $form_state);
     /* @var $formClass \Drupal\Core\Form\FormInterface */
     $formClass = $this->classResolver->getInstanceFromDefinition($operation['form']);
+    // Pass include any custom values for this operation.
+    if (!empty($operation['values'])) {
+      $cached_values = array_merge($cached_values, $operation['values']);
+      $form_state->setTemporaryValue('wizard', $cached_values);
+    }
+    // Build the form.
     $form = $formClass->buildForm($form, $form_state);
     if (isset($operation['title'])) {
       $form['#title'] = $operation['title'];
diff --git a/src/Wizard/FormWizardInterface.php b/src/Wizard/FormWizardInterface.php
index 5685c45..f632853 100644
--- a/src/Wizard/FormWizardInterface.php
+++ b/src/Wizard/FormWizardInterface.php
@@ -78,6 +78,8 @@ interface FormWizardInterface extends FormInterface {
    *   following keys:
    *   - title (string): Human-readable title of the step.
    *   - form (string): Fully-qualified class name of the form for this step.
+   *   - values (array): Optional array of cached values to override when on
+   *     this step.
    */
   public function getOperations($cached_values);
 
diff --git a/tests/modules/ctools_wizard_test/src/Form/OneForm.php b/tests/modules/ctools_wizard_test/src/Form/OneForm.php
index ca07146..3e6b8d1 100644
--- a/tests/modules/ctools_wizard_test/src/Form/OneForm.php
+++ b/tests/modules/ctools_wizard_test/src/Form/OneForm.php
@@ -39,11 +39,16 @@ class OneForm extends FormBase {
    */
   public function buildForm(array $form, FormStateInterface $form_state) {
     $cached_values = $form_state->getTemporaryValue('wizard');
-    $form['one'] = array(
-      '#title' => t('One'),
+    $form['one'] = [
+      '#title' => $this->t('One'),
       '#type' => 'textfield',
       '#default_value' => !empty($cached_values['one']) ? $cached_values['one'] : '',
-    );
+    ];
+    $form['dynamic'] = [
+      '#title' => $this->t('Dynamic value'),
+      '#type' => 'item',
+      '#markup' => !empty($cached_values['dynamic']) ? $cached_values['dynamic'] : '',
+    ];
     return $form;
   }
 
diff --git a/tests/modules/ctools_wizard_test/src/Form/TwoForm.php b/tests/modules/ctools_wizard_test/src/Form/TwoForm.php
index 505a855..f9f7e8d 100644
--- a/tests/modules/ctools_wizard_test/src/Form/TwoForm.php
+++ b/tests/modules/ctools_wizard_test/src/Form/TwoForm.php
@@ -39,11 +39,16 @@ class TwoForm extends FormBase {
    */
   public function buildForm(array $form, FormStateInterface $form_state) {
     $cached_values = $form_state->getTemporaryValue('wizard');
-    $form['two'] = array(
-      '#title' => t('Two'),
+    $form['two'] = [
+      '#title' => $this->t('Two'),
       '#type' => 'textfield',
       '#default_value' => !empty($cached_values['two']) ? $cached_values['two'] : '',
-    );
+    ];
+    $form['dynamic'] = [
+      '#title' => $this->t('Dynamic value'),
+      '#type' => 'item',
+      '#markup' => !empty($cached_values['dynamic']) ? $cached_values['dynamic'] : '',
+    ];
     return $form;
   }
 
diff --git a/tests/modules/ctools_wizard_test/src/Wizard/WizardTest.php b/tests/modules/ctools_wizard_test/src/Wizard/WizardTest.php
index 99a87bd..0ba79f3 100644
--- a/tests/modules/ctools_wizard_test/src/Wizard/WizardTest.php
+++ b/tests/modules/ctools_wizard_test/src/Wizard/WizardTest.php
@@ -35,10 +35,12 @@ class WizardTest extends FormWizardBase {
       'one' => [
         'form' => 'Drupal\ctools_wizard_test\Form\OneForm',
         'title' => $this->t('Form One'),
+        'values' => ['dynamic' => 'Xylophone'],
       ],
       'two' => [
         'form' => 'Drupal\ctools_wizard_test\Form\TwoForm',
         'title' => $this->t('Form Two'),
+        'values' => ['dynamic' => 'Zebra'],
       ],
     );
   }
