diff --git a/modules/ui_patterns_ds/src/FieldTemplateProcessor.php b/modules/ui_patterns_ds/src/FieldTemplateProcessor.php
index 85d6551367d8c3776cd37c9fe849322d1ca1bd24..3f946791ae61b2445e761aebc2b055852709d985 100644
--- a/modules/ui_patterns_ds/src/FieldTemplateProcessor.php
+++ b/modules/ui_patterns_ds/src/FieldTemplateProcessor.php
@@ -34,6 +34,7 @@ class FieldTemplateProcessor implements FieldTemplateProcessorInterface {
       $content['pattern_' . $delta] = [
         '#type' => 'pattern',
         '#id' => $this->getPatternId(),
+        '#variant' => $this->getVariant(),
         '#fields' => $fields,
         '#context' => $this->getContext(),
         '#multiple_sources' => TRUE,
@@ -81,17 +82,42 @@ class FieldTemplateProcessor implements FieldTemplateProcessorInterface {
    *   Pattern ID.
    */
   protected function getPatternId() {
-    return $this->variables['ds-config']['settings']['pattern'];
+    return $this->getSetting('pattern');
   }
 
   /**
    * Get mapping settings.
    *
-   * @return mixed
+   * @return array
    *   Mapping settings.
    */
   protected function getMapping() {
-    return $this->variables['ds-config']['settings']['pattern_mapping'];
+    return $this->getSetting('pattern_mapping', []);
+  }
+
+  /**
+   * Get mapping settings.
+   *
+   * @return string
+   *   Mapping settings.
+   */
+  protected function getVariant() {
+    return $this->getSetting('pattern_variant');
+  }
+
+  /**
+   * Get setting value or default to given value if none set.
+   *
+   * @param string $name
+   *   Setting name.
+   * @param string $default
+   *   Setting default value.
+   *
+   * @return mixed
+   *   Setting value.
+   */
+  protected function getSetting($name, $default = '') {
+    return isset($this->variables['ds-config']['settings'][$name]) ? $this->variables['ds-config']['settings'][$name] : $default;
   }
 
   /**
diff --git a/modules/ui_patterns_ds/src/Plugin/DsFieldTemplate/Pattern.php b/modules/ui_patterns_ds/src/Plugin/DsFieldTemplate/Pattern.php
index 741159b5c9b24589035845bccbd9b55d5238a649..c0d3c31ba88ea8fae3c45234df4803661e848f8c 100644
--- a/modules/ui_patterns_ds/src/Plugin/DsFieldTemplate/Pattern.php
+++ b/modules/ui_patterns_ds/src/Plugin/DsFieldTemplate/Pattern.php
@@ -131,7 +131,8 @@ class Pattern extends DsFieldTemplateBase implements ContainerFactoryPluginInter
   public function defaultConfiguration() {
     return [
       'pattern' => '',
-      'pattern_mapping' => '',
+      'pattern_variant' => '',
+      'pattern_mapping' => [],
     ];
   }
 
diff --git a/src/Form/PatternDisplayFormTrait.php b/src/Form/PatternDisplayFormTrait.php
index d433774886f495dbfcd209323c8004a967023c5d..6e3522080dba362558b3a9a294609d1b2414e2d9 100644
--- a/src/Form/PatternDisplayFormTrait.php
+++ b/src/Form/PatternDisplayFormTrait.php
@@ -43,10 +43,11 @@ trait PatternDisplayFormTrait {
     /** @var \Drupal\ui_patterns\Definition\PatternDefinition $definition */
     foreach ($this->patternsManager->getDefinitions() as $pattern_id => $definition) {
       if ($definition->hasVariants()) {
-        $form['pattern_variants'] = [
+        $form['pattern_variant'] = [
           '#type' => 'select',
-          '#title' => $this->t('Variants'),
+          '#title' => $this->t('Variant'),
           '#options' => $definition->getVariantsAsOptions(),
+          '#default_value' => isset($configuration['pattern_variant']) ? $configuration['pattern_variant'] : NULL,
           '#weight' => 0,
           '#states' => [
             'visible' => [