diff --git a/src/Plugin/DisplayVariant/PanelsDisplayVariant.php b/src/Plugin/DisplayVariant/PanelsDisplayVariant.php
index aa34cf2..d48452f 100644
--- a/src/Plugin/DisplayVariant/PanelsDisplayVariant.php
+++ b/src/Plugin/DisplayVariant/PanelsDisplayVariant.php
@@ -19,11 +19,16 @@ use Drupal\Core\Session\AccountInterface;
 use Drupal\Core\Utility\Token;
 use Drupal\ctools\Plugin\BlockPluginCollection;
 use Drupal\ctools\Plugin\DisplayVariant\BlockDisplayVariant;
+use Drupal\ctools\Plugin\PluginWizardInterface;
+use Drupal\ctools_wizard_test\Form\OneForm;
 use Drupal\layout_plugin\Layout;
 use Drupal\layout_plugin\Plugin\Layout\LayoutInterface;
 use Drupal\layout_plugin\Plugin\Layout\LayoutPluginManagerInterface;
+use Drupal\panels\Form\LayoutEditPluginSelector;
+use Drupal\panels\Form\LayoutPluginSelector;
 use Drupal\panels\Plugin\DisplayBuilder\DisplayBuilderInterface;
 use Drupal\panels\Plugin\DisplayBuilder\DisplayBuilderManagerInterface;
+use Drupal\panels\Wizard\PanelsEditLayoutWizard;
 use Symfony\Component\DependencyInjection\ContainerInterface;
 
 /**
@@ -34,7 +39,7 @@ use Symfony\Component\DependencyInjection\ContainerInterface;
  *   admin_label = @Translation("Panels")
  * )
  */
-class PanelsDisplayVariant extends BlockDisplayVariant {
+class PanelsDisplayVariant extends BlockDisplayVariant implements PluginWizardInterface {
 
   /**
    * The module handler.
@@ -290,7 +295,8 @@ class PanelsDisplayVariant extends BlockDisplayVariant {
   /**
    * {@inheritdoc}
    */
-  public function buildConfigurationForm(array $form, FormStateInterface $form_state) {
+  public function buildConfigurationForm(array $form, FormStateInterface $form_state)
+  {
     // Don't call VariantBase::buildConfigurationForm() on purpose, because it
     // adds a 'Label' field that we don't actually want to use - we store the
     // label on the page variant entity.
@@ -323,79 +329,10 @@ class PanelsDisplayVariant extends BlockDisplayVariant {
       ];
     }
 
-    $form['layout'] = [
-      '#title' => $this->t('Layout'),
-      '#type' => 'select',
-      '#options' => Layout::getLayoutOptions(['group_by_category' => TRUE]),
-      '#default_value' => $this->configuration['layout'] ?: NULL,
-    ];
-
-    if (!empty($this->configuration['layout'])) {
-      $form['layout']['#ajax'] = [
-        'callback' => [$this, 'layoutSettingsAjaxCallback'],
-        'wrapper' => 'layout-settings-wrapper',
-        'effect' => 'fade',
-      ];
-
-      // If a layout is already selected, show the layout settings.
-      $form['layout_settings_wrapper'] = [
-        '#type' => 'fieldset',
-        '#title' => $this->t('Layout settings'),
-        '#prefix' => '<div id="layout-settings-wrapper">',
-        '#suffix' => '</div>',
-      ];
-      $form['layout_settings_wrapper']['layout_settings'] = [];
-
-      // Process callback to configure #parents correctly on settings, since
-      // we don't know where in the form hierarchy our settings appear.
-      $form['#process'][] = [$this, 'layoutSettingsProcessCallback'];
-    }
-
     return $form;
   }
 
   /**
-   * Render API callback: builds the layout settings elements.
-   */
-  public function layoutSettingsProcessCallback(array &$element, FormStateInterface $form_state, array &$complete_form) {
-    $parents_base = $element['#parents'];
-    $layout_parent = array_merge($parents_base, ['layout']);
-    $layout_settings_parent = array_merge($parents_base, ['layout_settings']);
-
-    $settings_element =& $element['layout_settings_wrapper']['layout_settings'];
-
-    // Set the #parents on the layout_settings so they end up as a sibling of
-    // layout.
-    $layout_settings_parents = array_merge($element['#parents'], ['layout_settings']);
-    $settings_element['#parents'] = $layout_settings_parents;
-    $settings_element['#tree'] = TRUE;
-
-    // Get the layout name in a way that works regardless of whether we're
-    // getting the value via AJAX or not.
-    $layout_name = NestedArray::getValue($form_state->getUserInput(), $layout_parent) ?: $element['layout']['#default_value'];
-
-    // Place the layout settings on the form if a layout is selected.
-    if ($layout_name) {
-      $layout = Layout::layoutPluginManager()->createInstance($layout_name, $form_state->getValue($layout_settings_parent, $this->configuration['layout_settings'] ?: []));
-      $settings_element = $layout->buildConfigurationForm($settings_element, $form_state);
-    }
-
-    // Store the array parents for our element so that we can use it to pull out
-    // the layout settings in the validate and submit functions.
-    $complete_form['#variant_array_parents'] = $element['#array_parents'];
-
-    return $element;
-  }
-
-  /**
-   * Render API callback: gets the layout settings elements.
-   */
-  public function layoutSettingsAjaxCallback(array $form, FormStateInterface $form_state) {
-    $variant_array_parents = $form['#variant_array_parents'];
-    return NestedArray::getValue($form, array_merge($variant_array_parents, ['layout_settings_wrapper']));
-  }
-
-  /**
    * Extracts the layout settings form and form state from the full form.
    *
    * @param array $form
@@ -547,4 +484,22 @@ class PanelsDisplayVariant extends BlockDisplayVariant {
     return $data;
   }
 
+  /**
+   * {@inheritdoc}
+   */
+  public function getWizardOperations($cached_values) {
+    return [
+      'edit_layout' => [
+        'title' => $this->t('Layout'),
+        'form' => LayoutEditPluginSelector::class,
+        'op' => 'edit',
+      ],
+      'add_layout' => [
+        'title' => $this->t('Layout'),
+        'form' => LayoutPluginSelector::class,
+        'op' => 'add',
+      ],
+    ];
+  }
+
 }
