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);
