diff --git a/modules/promotion/src/Plugin/Commerce/PromotionCondition/OrderTotalPrice.php b/modules/promotion/src/Plugin/Commerce/PromotionCondition/OrderTotalPrice.php
index 0dc134b..d3df14c 100644
--- a/modules/promotion/src/Plugin/Commerce/PromotionCondition/OrderTotalPrice.php
+++ b/modules/promotion/src/Plugin/Commerce/PromotionCondition/OrderTotalPrice.php
@@ -52,6 +52,15 @@ class OrderTotalPrice extends PromotionConditionBase {
   /**
    * {@inheritdoc}
    */
+  public function submitConfigurationForm(array &$form, FormStateInterface $form_state) {
+    $values = $form_state->getValue($form['#parents']);
+    $this->configuration['amount'] = $values['amount'];
+    parent::submitConfigurationForm($form, $form_state);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
   public function evaluate() {
     $amount = $this->configuration['amount'];
     if (empty($amount)) {
diff --git a/modules/promotion/src/Plugin/Commerce/PromotionCondition/PromotionConditionBase.php b/modules/promotion/src/Plugin/Commerce/PromotionCondition/PromotionConditionBase.php
index ccabb33..e7480bd 100644
--- a/modules/promotion/src/Plugin/Commerce/PromotionCondition/PromotionConditionBase.php
+++ b/modules/promotion/src/Plugin/Commerce/PromotionCondition/PromotionConditionBase.php
@@ -3,6 +3,8 @@
 namespace Drupal\commerce_promotion\Plugin\Commerce\PromotionCondition;
 
 use Drupal\Core\Condition\ConditionPluginBase;
+use Drupal\Core\Form\FormStateInterface;
+use Drupal\Core\Form\SubformState;
 
 /**
  * Base class for Promotion Condition plugins.
@@ -31,4 +33,12 @@ abstract class PromotionConditionBase extends ConditionPluginBase implements Pro
     return $this->isNegated() ? !$result : $result;
   }
 
+  /**
+   * {@inheritdoc}
+   */
+  public function submitConfigurationForm(array &$form, FormStateInterface $form_state) {
+    // @todo Update plugin_select to pass subform state automatically.
+    return parent::submitConfigurationForm($form, SubformState::createForSubform($form, $form_state->getCompleteForm(), $form_state));
+  }
+
 }
diff --git a/modules/promotion/tests/src/FunctionalJavascript/PromotionTest.php b/modules/promotion/tests/src/FunctionalJavascript/PromotionTest.php
index a743eb4..5411fbc 100644
--- a/modules/promotion/tests/src/FunctionalJavascript/PromotionTest.php
+++ b/modules/promotion/tests/src/FunctionalJavascript/PromotionTest.php
@@ -55,6 +55,7 @@ class PromotionTest extends CommerceBrowserTestBase {
     $this->getSession()->wait(2000, "jQuery('.ajax-progress').length === 0");
 
     $edit['conditions[0][target_plugin_configuration][amount][number]'] = '50.00';
+    $edit['conditions[0][target_plugin_configuration][negate]'] = 1;
 
     $this->submitForm($edit, t('Save'));
     $this->assertSession()->pageTextContains("Saved the $name promotion.");
@@ -64,6 +65,11 @@ class PromotionTest extends CommerceBrowserTestBase {
     /** @var \Drupal\commerce\Plugin\Field\FieldType\PluginItem $offer_field */
     $offer_field = Promotion::load(1)->get('offer')->first();
     $this->assertEquals('0.10', $offer_field->target_plugin_configuration['amount']);
+
+    /** @var \Drupal\commerce\Plugin\Field\FieldType\PluginItem $condition_field */
+    $condition_field = Promotion::load(1)->get('conditions')->first();
+    $this->assertEquals('50.00', $condition_field->target_plugin_configuration['amount']['number']);
+    $this->assertEquals(TRUE, $condition_field->target_plugin_configuration['negate']);
   }
 
   /**
diff --git a/src/Element/PluginSelect.php b/src/Element/PluginSelect.php
index 5146fc4..2fa1eb9 100644
--- a/src/Element/PluginSelect.php
+++ b/src/Element/PluginSelect.php
@@ -83,7 +83,6 @@ class PluginSelect extends CommerceElementBase {
         'wrapper' => $ajax_wrapper_id,
       ],
       '#default_value' => $target_plugin_id,
-      '#ajax_array_parents' => $element['#array_parents'],
       '#required' => $element['#required'],
     ];
     // Add a "_none" option if the element is not required.
@@ -126,6 +125,9 @@ class PluginSelect extends CommerceElementBase {
       /** @var \Drupal\Core\Executable\ExecutableInterface $plugin */
       $plugin = $plugin_manager->createInstance($target_plugin_id, $values['target_plugin_configuration']);
       if ($plugin instanceof PluginFormInterface) {
+        $element['target_plugin_configuration'] = [
+          '#tree' => TRUE,
+        ];
         $element['target_plugin_configuration'] = $plugin->buildConfigurationForm($element['target_plugin_configuration'], $form_state);
       }
     }
@@ -137,14 +139,9 @@ class PluginSelect extends CommerceElementBase {
    * Ajax callback.
    */
   public static function pluginFormAjax(&$form, FormStateInterface $form_state, Request $request) {
-    $triggering_element = $form_state->getTriggeringElement();
-    while (!isset($triggering_element['#ajax_array_parents'])) {
-      array_pop($triggering_element['#array_parents']);
-      $triggering_element = NestedArray::getValue($form, $triggering_element['#array_parents']);
-    }
-    $element = NestedArray::getValue($form, $triggering_element['#ajax_array_parents']);
-
-    return $element;
+    $target_plugin_id_element = $form_state->getTriggeringElement();
+    $plugin_select_element = NestedArray::getValue($form, array_slice($target_plugin_id_element['#array_parents'], 0, -1));
+    return $plugin_select_element;
   }
 
   /**
@@ -180,8 +177,9 @@ class PluginSelect extends CommerceElementBase {
     // If a plugin was selected, create an instance and pass the configuration
     // values to its configuration form validation method.
     if ($target_plugin_id != '_none') {
+      /** @var \Drupal\Component\Plugin\PluginManagerInterface $plugin_manager */
       $plugin_manager = \Drupal::service('plugin.manager.' . $element['#plugin_type']);
-      $plugin = $plugin_manager->createInstance($target_plugin_id, $values['target_plugin_configuration']);
+      $plugin = $plugin_manager->createInstance($target_plugin_id);
       if ($plugin instanceof PluginFormInterface) {
         $plugin->validateConfigurationForm($element['target_plugin_configuration'], $form_state);
       }
@@ -202,8 +200,9 @@ class PluginSelect extends CommerceElementBase {
     // If a plugin was selected, create an instance and pass the configuration
     // values to its configuration form submission method.
     if ($target_plugin_id != '_none') {
+      /** @var \Drupal\Component\Plugin\PluginManagerInterface $plugin_manager */
       $plugin_manager = \Drupal::service('plugin.manager.' . $element['#plugin_type']);
-      $plugin = $plugin_manager->createInstance($target_plugin_id, $values['target_plugin_configuration']);
+      $plugin = $plugin_manager->createInstance($target_plugin_id);
       if ($plugin instanceof PluginFormInterface) {
         /** @var \Drupal\Component\Plugin\ConfigurablePluginInterface $plugin */
         $plugin->submitConfigurationForm($element['target_plugin_configuration'], $form_state);
