diff --git a/modules/plugin_test_helper/src/Plugin/PluginTestHelper/MockConfigurablePlugin.php b/modules/plugin_test_helper/src/Plugin/PluginTestHelper/MockConfigurablePlugin.php
index 34c0333..433a6d2 100644
--- a/modules/plugin_test_helper/src/Plugin/PluginTestHelper/MockConfigurablePlugin.php
+++ b/modules/plugin_test_helper/src/Plugin/PluginTestHelper/MockConfigurablePlugin.php
@@ -8,7 +8,6 @@
 namespace Drupal\plugin_test_helper\Plugin\PluginTestHelper;
 
 use Drupal\Component\Plugin\ConfigurablePluginInterface;
-use Drupal\Component\Utility\NestedArray;
 use Drupal\Core\Form\FormStateInterface;
 use Drupal\Core\Plugin\PluginBase;
 use Drupal\Core\Plugin\PluginFormInterface;
@@ -85,8 +84,7 @@ class MockConfigurablePlugin extends PluginBase implements ConfigurablePluginInt
    * {@inheritdoc}
    */
   public function submitConfigurationForm(array &$form, FormStateInterface $form_state) {
-    $values = NestedArray::getValue($form_state->getValues(), $form['#parents']);
-    $this->configuration['foo'] = $values['foo'];
+    $this->configuration['foo'] = $form_state->getValue('foo');
   }
 
 }
diff --git a/src/Plugin/Plugin/PluginSelector/AdvancedPluginSelectorBase.php b/src/Plugin/Plugin/PluginSelector/AdvancedPluginSelectorBase.php
index eb245d0..e5a8727 100644
--- a/src/Plugin/Plugin/PluginSelector/AdvancedPluginSelectorBase.php
+++ b/src/Plugin/Plugin/PluginSelector/AdvancedPluginSelectorBase.php
@@ -13,6 +13,7 @@ use Drupal\Core\Ajax\AjaxResponse;
 use Drupal\Core\Ajax\ReplaceCommand;
 use Drupal\Core\Cache\CacheableMetadata;
 use Drupal\Core\Form\FormStateInterface;
+use Drupal\Core\Form\SubFormState;
 use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
 use Drupal\Core\Plugin\PluginFormInterface;
 use Drupal\Core\StringTranslation\TranslationInterface;
@@ -160,7 +161,9 @@ abstract class AdvancedPluginSelectorBase extends PluginSelectorBase implements
     }
     // If no (different) plugin was chosen, delegate validation to the plugin.
     elseif ($this->getCollectPluginConfiguration() && $selected_plugin instanceof PluginFormInterface) {
-      $selected_plugin->validateConfigurationForm($form['container']['plugin_form'], $form_state);
+      $subform = &$form['container']['plugin_form'];
+      $subform_state = SubFormState::createForSubform($subform, $form, $form_state);
+      $selected_plugin->validateConfigurationForm($subform, $subform_state);
     }
   }
 
@@ -168,9 +171,11 @@ abstract class AdvancedPluginSelectorBase extends PluginSelectorBase implements
    * {@inheritdoc}
    */
   public function submitSelectorForm(array &$form, FormStateInterface $form_state) {
-    $selectedPlugin = $this->getSelectedPlugin();
-    if ($this->getCollectPluginConfiguration() && $selectedPlugin instanceof PluginFormInterface) {
-      $selectedPlugin->submitConfigurationForm($form['container']['plugin_form'], $form_state);
+    $selected_plugin = $this->getSelectedPlugin();
+    if ($this->getCollectPluginConfiguration() && $selected_plugin instanceof PluginFormInterface) {
+      $subform = &$form['container']['plugin_form'];
+      $subform_state = SubFormState::createForSubform($subform, $form, $form_state);
+      $selected_plugin->submitConfigurationForm($subform, $subform_state);
     }
   }
 
@@ -211,7 +216,9 @@ abstract class AdvancedPluginSelectorBase extends PluginSelectorBase implements
     );
     $selectedPlugin = $this->getSelectedPlugin();
     if ($this->getCollectPluginConfiguration() && $selectedPlugin instanceof PluginFormInterface) {
-      $element += $selectedPlugin->buildConfigurationForm([], $form_state);
+      $subform = [];
+      $subform_state = SubFormState::createForSubform($subform, $form, $form_state);
+      $element += $selectedPlugin->buildConfigurationForm($subform, $subform_state);
     }
 
     return $element;
diff --git a/tests/src/Unit/Plugin/PluginSelector/PluginSelector/AdvancedPluginSelectorBaseTest.php b/tests/src/Unit/Plugin/PluginSelector/PluginSelector/AdvancedPluginSelectorBaseTest.php
index 5150566..d2ba51e 100644
--- a/tests/src/Unit/Plugin/PluginSelector/PluginSelector/AdvancedPluginSelectorBaseTest.php
+++ b/tests/src/Unit/Plugin/PluginSelector/PluginSelector/AdvancedPluginSelectorBaseTest.php
@@ -92,7 +92,7 @@ class AdvancedPluginSelectorBaseTest extends PluginSelectorBaseTestBase {
     $plugin = $this->getMockForAbstractClass(AdvancedPluginSelectorBaseUnitTestPluginFormPluginInterface::class);
     $plugin->expects($this->once())
       ->method('buildConfigurationForm')
-      ->with([], $form_state)
+      ->with([], $this->isInstanceOf(FormStateInterface::class))
       ->willReturn($plugin_form);
 
 
@@ -321,7 +321,7 @@ class AdvancedPluginSelectorBaseTest extends PluginSelectorBaseTestBase {
     $plugin = $this->getMockForAbstractClass(AdvancedPluginSelectorBaseUnitTestPluginFormPluginInterface::class);
     $plugin->expects($this->once())
       ->method('submitConfigurationForm')
-      ->with($form['container']['plugin_form'], $form_state);
+      ->with($form['container']['plugin_form'], $this->isInstanceOf(FormStateInterface::class));
 
     $this->sut->submitSelectorForm($form, $form_state);
     $this->sut->setSelectedPlugin($plugin);
@@ -408,7 +408,7 @@ class AdvancedPluginSelectorBaseTest extends PluginSelectorBaseTestBase {
       ->method('setRebuild');
     $plugin_a->expects($this->once())
       ->method('validateConfigurationForm')
-      ->with($form['container']['plugin_form'], $form_state);
+      ->with($form['container']['plugin_form'], $this->isInstanceOf(FormStateInterface::class));
     $this->sut->validateSelectorForm($form, $form_state);
     $this->assertSame($plugin_a, $this->sut->getSelectedPlugin());
 
