diff --git a/core/lib/Drupal/Core/Condition/ConditionPluginBase.php b/core/lib/Drupal/Core/Condition/ConditionPluginBase.php
index 2f250ba..a982f1c 100644
--- a/core/lib/Drupal/Core/Condition/ConditionPluginBase.php
+++ b/core/lib/Drupal/Core/Condition/ConditionPluginBase.php
@@ -33,7 +33,7 @@ public function isNegated() {
   /**
    * {@inheritdoc}
    */
-  public function buildConfigurationForm(array $form, array &$form_state) {
+  public function buildConfigurationForm(array $form, array &$form_state, array $parents) {
     $form['negate'] = array(
       '#type' => 'checkbox',
       '#title' => $this->t('Negate the condition.'),
diff --git a/core/lib/Drupal/Core/Plugin/PluginFormInterface.php b/core/lib/Drupal/Core/Plugin/PluginFormInterface.php
index 9ca47e0..631727d 100644
--- a/core/lib/Drupal/Core/Plugin/PluginFormInterface.php
+++ b/core/lib/Drupal/Core/Plugin/PluginFormInterface.php
@@ -19,11 +19,16 @@
    *   An associative array containing the structure of the form.
    * @param array $form_state
    *   An associative array containing the current state of the form.
+   * @param array $parents
+   *   An array identifying parent form elements. Since plugin forms are usually
+   *   embedded within a parent form, usage of #states or #parents will need to
+   *   know the correct parents. See
+   *   https://api.drupal.org/api/drupal/developer%21topics%21forms_api_reference.html/8#parents
    *
    * @return array
    *   The form structure.
    */
-  public function buildConfigurationForm(array $form, array &$form_state);
+  public function buildConfigurationForm(array $form, array &$form_state, array $parents);
 
   /**
    * Form validation handler.
diff --git a/core/modules/action/src/ActionFormBase.php b/core/modules/action/src/ActionFormBase.php
index c2cbee3..ffcb2a4 100644
--- a/core/modules/action/src/ActionFormBase.php
+++ b/core/modules/action/src/ActionFormBase.php
@@ -90,7 +90,7 @@ public function form(array $form, array &$form_state) {
     );
 
     if ($this->plugin instanceof PluginFormInterface) {
-      $form += $this->plugin->buildConfigurationForm($form, $form_state);
+      $form += $this->plugin->buildConfigurationForm($form, $form_state, array());
     }
 
     return parent::form($form, $form_state);
diff --git a/core/modules/action/src/Plugin/Action/EmailAction.php b/core/modules/action/src/Plugin/Action/EmailAction.php
index 3342fc3..d431e13 100644
--- a/core/modules/action/src/Plugin/Action/EmailAction.php
+++ b/core/modules/action/src/Plugin/Action/EmailAction.php
@@ -114,7 +114,7 @@ public function defaultConfiguration() {
   /**
    * {@inheritdoc}
    */
-  public function buildConfigurationForm(array $form, array &$form_state) {
+  public function buildConfigurationForm(array $form, array &$form_state, array $parents) {
     $form['recipient'] = array(
       '#type' => 'textfield',
       '#title' => t('Recipient'),
diff --git a/core/modules/action/src/Plugin/Action/GotoAction.php b/core/modules/action/src/Plugin/Action/GotoAction.php
index e08d91f..201b1b9 100644
--- a/core/modules/action/src/Plugin/Action/GotoAction.php
+++ b/core/modules/action/src/Plugin/Action/GotoAction.php
@@ -94,7 +94,7 @@ public function defaultConfiguration() {
   /**
    * {@inheritdoc}
    */
-  public function buildConfigurationForm(array $form, array &$form_state) {
+  public function buildConfigurationForm(array $form, array &$form_state, array $parents) {
     $form['url'] = array(
       '#type' => 'textfield',
       '#title' => t('URL'),
diff --git a/core/modules/action/src/Plugin/Action/MessageAction.php b/core/modules/action/src/Plugin/Action/MessageAction.php
index cc15650..18513aa 100644
--- a/core/modules/action/src/Plugin/Action/MessageAction.php
+++ b/core/modules/action/src/Plugin/Action/MessageAction.php
@@ -68,7 +68,7 @@ public function defaultConfiguration() {
   /**
    * {@inheritdoc}
    */
-  public function buildConfigurationForm(array $form, array &$form_state) {
+  public function buildConfigurationForm(array $form, array &$form_state, array $parents) {
     $form['message'] = array(
       '#type' => 'textarea',
       '#title' => t('Message'),
diff --git a/core/modules/aggregator/src/Form/SettingsForm.php b/core/modules/aggregator/src/Form/SettingsForm.php
index 075b614..73c098e 100644
--- a/core/modules/aggregator/src/Form/SettingsForm.php
+++ b/core/modules/aggregator/src/Form/SettingsForm.php
@@ -156,7 +156,7 @@ public function buildForm(array $form, array &$form_state) {
       if (array_key_exists($active, $this->definitions[$type])) {
         $instance = $this->managers[$type]->createInstance($active);
         if ($instance instanceof PluginFormInterface) {
-          $form = $instance->buildConfigurationForm($form, $form_state);
+          $form = $instance->buildConfigurationForm($form, $form_state, array());
           // Store the instance for validate and submit handlers.
           // Keying by ID would bring conflicts, because two instances of a
           // different type could have the same ID.
@@ -172,7 +172,7 @@ public function buildForm(array $form, array &$form_state) {
       if (in_array($id, $config->get('processors'))) {
         $instance = $this->managers['processor']->createInstance($id);
         if ($instance instanceof PluginFormInterface) {
-          $form = $instance->buildConfigurationForm($form, $form_state);
+          $form = $instance->buildConfigurationForm($form, $form_state, array());
           // Store the instance for validate and submit handlers.
           // Keying by ID would bring conflicts, because two instances of a
           // different type could have the same ID.
diff --git a/core/modules/aggregator/src/Plugin/Block/AggregatorFeedBlock.php b/core/modules/aggregator/src/Plugin/Block/AggregatorFeedBlock.php
index 5fdc33a..862be51 100644
--- a/core/modules/aggregator/src/Plugin/Block/AggregatorFeedBlock.php
+++ b/core/modules/aggregator/src/Plugin/Block/AggregatorFeedBlock.php
@@ -108,7 +108,7 @@ public function access(AccountInterface $account) {
   /**
    * Overrides \Drupal\block\BlockBase::blockForm().
    */
-  public function blockForm($form, &$form_state) {
+  public function blockForm($form, &$form_state, array $parents) {
     $feeds = $this->feedStorage->loadMultiple();
     $options = array();
     foreach ($feeds as $feed) {
diff --git a/core/modules/aggregator/src/Plugin/aggregator/processor/DefaultProcessor.php b/core/modules/aggregator/src/Plugin/aggregator/processor/DefaultProcessor.php
index 058ba18..090cfc2 100644
--- a/core/modules/aggregator/src/Plugin/aggregator/processor/DefaultProcessor.php
+++ b/core/modules/aggregator/src/Plugin/aggregator/processor/DefaultProcessor.php
@@ -93,7 +93,7 @@ public static function create(ContainerInterface $container, array $configuratio
   /**
    * {@inheritdoc}
    */
-  public function buildConfigurationForm(array $form, array &$form_state) {
+  public function buildConfigurationForm(array $form, array &$form_state, array $parents) {
     $processors = $this->configuration['processors'];
     $info = $this->getPluginDefinition();
     $counts = array(3, 5, 10, 15, 20, 25);
diff --git a/core/modules/aggregator/tests/modules/aggregator_test/src/Plugin/aggregator/processor/TestProcessor.php b/core/modules/aggregator/tests/modules/aggregator_test/src/Plugin/aggregator/processor/TestProcessor.php
index 9b76fc9..297654b 100644
--- a/core/modules/aggregator/tests/modules/aggregator_test/src/Plugin/aggregator/processor/TestProcessor.php
+++ b/core/modules/aggregator/tests/modules/aggregator_test/src/Plugin/aggregator/processor/TestProcessor.php
@@ -66,7 +66,7 @@ public function __construct(array $configuration, $plugin_id, $plugin_definition
   /**
    * {@inheritdoc}
    */
-  public function buildConfigurationForm(array $form, array &$form_state) {
+  public function buildConfigurationForm(array $form, array &$form_state, array $parents) {
     $processors = $this->configFactory->get('aggregator.settings')->get('processors');
     $info = $this->getPluginDefinition();
 
diff --git a/core/modules/block/custom_block/src/Plugin/Block/CustomBlockBlock.php b/core/modules/block/custom_block/src/Plugin/Block/CustomBlockBlock.php
index 5ef3ec2..24bce59 100644
--- a/core/modules/block/custom_block/src/Plugin/Block/CustomBlockBlock.php
+++ b/core/modules/block/custom_block/src/Plugin/Block/CustomBlockBlock.php
@@ -120,7 +120,7 @@ public function defaultConfiguration() {
    *
    * Adds body and description fields to the block configuration form.
    */
-  public function blockForm($form, &$form_state) {
+  public function blockForm($form, &$form_state, array $parents) {
     $form['custom_block']['view_mode'] = array(
       '#type' => 'select',
       '#options' => $this->entityManager->getViewModeOptions('custom_block'),
diff --git a/core/modules/block/src/BlockBase.php b/core/modules/block/src/BlockBase.php
index df3507c..ce4e069 100644
--- a/core/modules/block/src/BlockBase.php
+++ b/core/modules/block/src/BlockBase.php
@@ -127,7 +127,7 @@ public function access(AccountInterface $account) {
    *
    * @see \Drupal\block\BlockBase::blockForm()
    */
-  public function buildConfigurationForm(array $form, array &$form_state) {
+  public function buildConfigurationForm(array $form, array &$form_state, array $parents) {
     $definition = $this->getPluginDefinition();
     $form['provider'] = array(
       '#type' => 'value',
@@ -198,14 +198,14 @@ public function buildConfigurationForm(array $form, array &$form_state) {
     }
 
     // Add plugin-specific settings for this block type.
-    $form += $this->blockForm($form, $form_state);
+    $form += $this->blockForm($form, $form_state, $parents);
     return $form;
   }
 
   /**
    * {@inheritdoc}
    */
-  public function blockForm($form, &$form_state) {
+  public function blockForm($form, &$form_state, array $parents) {
     return array();
   }
 
diff --git a/core/modules/block/src/BlockForm.php b/core/modules/block/src/BlockForm.php
index 1249dab..f611889 100644
--- a/core/modules/block/src/BlockForm.php
+++ b/core/modules/block/src/BlockForm.php
@@ -77,7 +77,7 @@ public function form(array $form, array &$form_state) {
     $form_state['block_theme'] = $theme;
 
     $form['#tree'] = TRUE;
-    $form['settings'] = $entity->getPlugin()->buildConfigurationForm(array(), $form_state);
+    $form['settings'] = $entity->getPlugin()->buildConfigurationForm(array(), $form_state, array('settings'));
 
     // If creating a new block, calculate a safe default machine name.
     $form['id'] = array(
diff --git a/core/modules/block/src/BlockPluginInterface.php b/core/modules/block/src/BlockPluginInterface.php
index f45ecc5..1b9db9d 100644
--- a/core/modules/block/src/BlockPluginInterface.php
+++ b/core/modules/block/src/BlockPluginInterface.php
@@ -88,11 +88,14 @@ public function setConfigurationValue($key, $value);
    *   The form definition array for the block configuration form.
    * @param array $form_state
    *   An array containing the current state of the configuration form.
+   * @param array $parents
+   *   An array identifying parent form elements. See
+   *   \Drupal\Core\Plugin\PluginFormInterface::buildConfigurationForm().
    *
    * @return array $form
    *   The renderable form array representing the entire configuration form.
    */
-  public function blockForm($form, &$form_state);
+  public function blockForm($form, &$form_state, array $parents);
 
   /**
    * Adds block type-specific validation for the block form.
diff --git a/core/modules/block/src/Tests/BlockInterfaceTest.php b/core/modules/block/src/Tests/BlockInterfaceTest.php
index 0b71146..d4b609b 100644
--- a/core/modules/block/src/Tests/BlockInterfaceTest.php
+++ b/core/modules/block/src/Tests/BlockInterfaceTest.php
@@ -124,7 +124,7 @@ public function testBlockInterface() {
     );
     $form_state = array();
     // Ensure there are no form elements that do not belong to the plugin.
-    $this->assertIdentical($display_block->buildConfigurationForm(array(), $form_state), $expected_form, 'Only the expected form elements were present.');
+    $this->assertIdentical($display_block->buildConfigurationForm(array(), $form_state, array('settings')), $expected_form, 'Only the expected form elements were present.');
 
     $expected_build = array(
       '#children' => 'My custom display message.',
diff --git a/core/modules/block/src/Tests/BlockUiTest.php b/core/modules/block/src/Tests/BlockUiTest.php
index d842401..7c719e1 100644
--- a/core/modules/block/src/Tests/BlockUiTest.php
+++ b/core/modules/block/src/Tests/BlockUiTest.php
@@ -195,4 +195,38 @@ public function testBlockPlacementIndicator() {
     $this->assertUrl('admin/structure/block/list/stark');
   }
 
+  /**
+   * Test block forms.
+   */
+  function testBlockForm() {
+    $block_name = 'test_form_parents';
+    $id = strtolower($this->randomName(8));
+    $edit = array(
+      'id' => $id,
+      'region' => 'sidebar_first',
+      'settings[label]' => $this->randomName(),
+    );
+    $this->drupalPostForm('admin/structure/block/add/' . $block_name, $edit, t('Save block'));
+    $this->assertText('The block configuration has been saved.', 'Block was saved');
+
+    // Check that the block output uses the default value.
+    $this->drupalGet('user');
+    $this->assertText('Foo');
+
+    // Change the option.
+    $edit = array(
+      'settings[foo]' => 'bar',
+    );
+    $this->drupalPostForm('admin/structure/block/manage/' . $id, $edit, t('Save block'));
+    $this->assertText('The block configuration has been saved.', 'Block was saved');
+
+    // Ensure the option is selected.
+    $this->drupalGet('admin/structure/block/manage/' . $id);
+    $this->assertOptionSelected('edit-settings-foo', 'bar');
+
+    // Check that the block output uses the selected value.
+    $this->drupalGet('user');
+    $this->assertText('Bar');
+  }
+
 }
diff --git a/core/modules/block/tests/modules/block_test/src/Plugin/Block/TestBlockInstantiation.php b/core/modules/block/tests/modules/block_test/src/Plugin/Block/TestBlockInstantiation.php
index 85856a3..49dff13 100644
--- a/core/modules/block/tests/modules/block_test/src/Plugin/Block/TestBlockInstantiation.php
+++ b/core/modules/block/tests/modules/block_test/src/Plugin/Block/TestBlockInstantiation.php
@@ -39,7 +39,7 @@ public function access(AccountInterface $account) {
   /**
    * {@inheritdoc}
    */
-  public function blockForm($form, &$form_state) {
+  public function blockForm($form, &$form_state, array $parents) {
     $form['display_message'] = array(
       '#type' => 'textfield',
       '#title' => t('Display message'),
diff --git a/core/modules/block/tests/modules/block_test/src/Plugin/Block/TestFormParentsBlock.php b/core/modules/block/tests/modules/block_test/src/Plugin/Block/TestFormParentsBlock.php
new file mode 100644
index 0000000..380e557
--- /dev/null
+++ b/core/modules/block/tests/modules/block_test/src/Plugin/Block/TestFormParentsBlock.php
@@ -0,0 +1,78 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\block_test\Plugin\Block\TestFormParentsBlock.
+ */
+
+namespace Drupal\block_test\Plugin\Block;
+
+use Drupal\block\BlockBase;
+
+/**
+ * @todo.
+ *
+ * @Block(
+ *   id = "test_form_parents",
+ *   admin_label = @Translation("Form Parents")
+ * )
+ */
+class TestFormParentsBlock extends BlockBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  public function defaultConfiguration() {
+    return array('foo' => 'foo');
+  }
+
+  /**
+   * Provides the options for this block.
+   *
+   * @return array
+   *   An array of options.
+   */
+  protected function fooOptions() {
+    return array(
+      'foo' => $this->t('Foo'),
+      'bar' => $this->t('Bar'),
+    );
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function blockForm($form, &$form_state, array $parents) {
+    $form['foo_wrapper'] = array(
+      '#type' => 'fieldgroup',
+      '#title' => $this->t('Foo settings'),
+    );
+    // Nest the element inside a fieldgroup.
+    $form['foo_wrapper']['foo'] = array(
+      '#type' => 'select',
+      '#title' => $this->t('Foo'),
+      '#options' => $this->fooOptions(),
+      '#default_value' => $this->configuration['foo'],
+      // Specify the parents to ignore the fieldgroup.
+      '#parents' => array_merge($parents, array('foo')),
+    );
+    return $form;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function blockSubmit($form, &$form_state) {
+    $this->configuration['foo'] = $form_state['values']['foo'];
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function build() {
+    return array(
+      '#markup' => $this->fooOptions()[$this->configuration['foo']],
+    );
+  }
+
+}
diff --git a/core/modules/book/src/Plugin/Block/BookNavigationBlock.php b/core/modules/book/src/Plugin/Block/BookNavigationBlock.php
index b36beff..a47abdb 100644
--- a/core/modules/book/src/Plugin/Block/BookNavigationBlock.php
+++ b/core/modules/book/src/Plugin/Block/BookNavigationBlock.php
@@ -84,7 +84,7 @@ public function defaultConfiguration() {
   /**
    * Overrides \Drupal\block\BlockBase::blockForm()
    */
-  function blockForm($form, &$form_state) {
+  function blockForm($form, &$form_state, array $parents) {
     $options = array(
       'all pages' => t('Show block on all pages'),
       'book pages' => t('Show block only on book pages'),
diff --git a/core/modules/comment/src/Plugin/Action/UnpublishByKeywordComment.php b/core/modules/comment/src/Plugin/Action/UnpublishByKeywordComment.php
index ad59c96..fc49877 100644
--- a/core/modules/comment/src/Plugin/Action/UnpublishByKeywordComment.php
+++ b/core/modules/comment/src/Plugin/Action/UnpublishByKeywordComment.php
@@ -49,7 +49,7 @@ public function defaultConfiguration() {
   /**
    * {@inheritdoc}
    */
-  public function buildConfigurationForm(array $form, array &$form_state) {
+  public function buildConfigurationForm(array $form, array &$form_state, array $parents) {
     $form['keywords'] = array(
       '#title' => t('Keywords'),
       '#type' => 'textarea',
diff --git a/core/modules/forum/src/Plugin/Block/ForumBlockBase.php b/core/modules/forum/src/Plugin/Block/ForumBlockBase.php
index d7dfc31..de42057 100644
--- a/core/modules/forum/src/Plugin/Block/ForumBlockBase.php
+++ b/core/modules/forum/src/Plugin/Block/ForumBlockBase.php
@@ -63,7 +63,7 @@ public function access(AccountInterface $account) {
   /**
    * Overrides \Drupal\block\BlockBase::blockForm().
    */
-  public function blockForm($form, &$form_state) {
+  public function blockForm($form, &$form_state, array $parents) {
     $range = range(2, 20);
     $form['block_count'] = array(
       '#type' => 'select',
diff --git a/core/modules/language/src/Plugin/Condition/Language.php b/core/modules/language/src/Plugin/Condition/Language.php
index 3f12a06..2ac2992 100644
--- a/core/modules/language/src/Plugin/Condition/Language.php
+++ b/core/modules/language/src/Plugin/Condition/Language.php
@@ -28,8 +28,8 @@ class Language extends ConditionPluginBase {
   /**
    * {@inheritdoc}
    */
-  public function buildConfigurationForm(array $form, array &$form_state) {
-    $form = parent::buildConfigurationForm($form, $form_state);
+  public function buildConfigurationForm(array $form, array &$form_state, array $parents) {
+    $form = parent::buildConfigurationForm($form, $form_state, $parents);
     if (\Drupal::languageManager()->isMultilingual()) {
       // Fetch languages.
       $languages = language_list(Lang::STATE_ALL);
diff --git a/core/modules/node/src/Plugin/Action/AssignOwnerNode.php b/core/modules/node/src/Plugin/Action/AssignOwnerNode.php
index 7823ccb..f36397b 100644
--- a/core/modules/node/src/Plugin/Action/AssignOwnerNode.php
+++ b/core/modules/node/src/Plugin/Action/AssignOwnerNode.php
@@ -77,7 +77,7 @@ public function defaultConfiguration() {
   /**
    * {@inheritdoc}
    */
-  public function buildConfigurationForm(array $form, array &$form_state) {
+  public function buildConfigurationForm(array $form, array &$form_state, array $parents) {
     $description = t('The username of the user to which you would like to assign ownership.');
     $count = $this->connection->query("SELECT COUNT(*) FROM {users}")->fetchField();
     $owner_name = '';
diff --git a/core/modules/node/src/Plugin/Action/UnpublishByKeywordNode.php b/core/modules/node/src/Plugin/Action/UnpublishByKeywordNode.php
index 6fb4674..2b0c0f7 100644
--- a/core/modules/node/src/Plugin/Action/UnpublishByKeywordNode.php
+++ b/core/modules/node/src/Plugin/Action/UnpublishByKeywordNode.php
@@ -47,7 +47,7 @@ public function defaultConfiguration() {
   /**
    * {@inheritdoc}
    */
-  public function buildConfigurationForm(array $form, array &$form_state) {
+  public function buildConfigurationForm(array $form, array &$form_state, array $parents) {
     $form['keywords'] = array(
       '#title' => t('Keywords'),
       '#type' => 'textarea',
diff --git a/core/modules/node/src/Plugin/Block/SyndicateBlock.php b/core/modules/node/src/Plugin/Block/SyndicateBlock.php
index efc1bdf..a247671 100644
--- a/core/modules/node/src/Plugin/Block/SyndicateBlock.php
+++ b/core/modules/node/src/Plugin/Block/SyndicateBlock.php
@@ -50,8 +50,8 @@ public function build() {
   /**
    * {@inheritdoc}
    */
-  public function buildConfigurationForm(array $form, array &$form_state) {
-    $form = parent::buildConfigurationForm($form, $form_state);
+  public function buildConfigurationForm(array $form, array &$form_state, array $parents) {
+    $form = parent::buildConfigurationForm($form, $form_state, $parents);
 
     // @see ::isCacheable()
     $form['cache']['#disabled'] = TRUE;
diff --git a/core/modules/node/src/Plugin/Condition/NodeType.php b/core/modules/node/src/Plugin/Condition/NodeType.php
index 74cdf5d..747fdc3 100644
--- a/core/modules/node/src/Plugin/Condition/NodeType.php
+++ b/core/modules/node/src/Plugin/Condition/NodeType.php
@@ -27,8 +27,8 @@ class NodeType extends ConditionPluginBase {
   /**
    * {@inheritdoc}
    */
-  public function buildConfigurationForm(array $form, array &$form_state) {
-    $form = parent::buildConfigurationForm($form, $form_state);
+  public function buildConfigurationForm(array $form, array &$form_state, array $parents) {
+    $form = parent::buildConfigurationForm($form, $form_state, $parents);
     $options = array();
     foreach (node_type_get_types() as $type) {
       $options[$type->type] = $type->name;
diff --git a/core/modules/node/src/Plugin/Search/NodeSearch.php b/core/modules/node/src/Plugin/Search/NodeSearch.php
index 1bcd79b..d68ac7d 100644
--- a/core/modules/node/src/Plugin/Search/NodeSearch.php
+++ b/core/modules/node/src/Plugin/Search/NodeSearch.php
@@ -556,7 +556,7 @@ public function defaultConfiguration() {
   /**
    * {@inheritdoc}
    */
-  public function buildConfigurationForm(array $form, array &$form_state) {
+  public function buildConfigurationForm(array $form, array &$form_state, array $parents) {
     // Output form for defining rank factor weights.
     $form['content_ranking'] = array(
       '#type' => 'details',
diff --git a/core/modules/search/src/Form/SearchPageFormBase.php b/core/modules/search/src/Form/SearchPageFormBase.php
index 45e5cd4..62a4b1c 100644
--- a/core/modules/search/src/Form/SearchPageFormBase.php
+++ b/core/modules/search/src/Form/SearchPageFormBase.php
@@ -118,7 +118,7 @@ public function form(array $form, array &$form_state) {
     );
 
     if ($this->plugin instanceof PluginFormInterface) {
-      $form += $this->plugin->buildConfigurationForm($form, $form_state);
+      $form += $this->plugin->buildConfigurationForm($form, $form_state, array());
     }
 
     return parent::form($form, $form_state);
diff --git a/core/modules/search/tests/modules/search_extra_type/src/Plugin/Search/SearchExtraTypeSearch.php b/core/modules/search/tests/modules/search_extra_type/src/Plugin/Search/SearchExtraTypeSearch.php
index 5caea64..48fdb0e 100644
--- a/core/modules/search/tests/modules/search_extra_type/src/Plugin/Search/SearchExtraTypeSearch.php
+++ b/core/modules/search/tests/modules/search_extra_type/src/Plugin/Search/SearchExtraTypeSearch.php
@@ -88,7 +88,7 @@ public function buildResults() {
   /**
    * {@inheritdoc}
    */
-  public function buildConfigurationForm(array $form, array &$form_state) {
+  public function buildConfigurationForm(array $form, array &$form_state, array $parents) {
     // Output form for defining rank factor weights.
     $form['extra_type_settings'] = array(
       '#type' => 'fieldset',
diff --git a/core/modules/statistics/src/Plugin/Block/StatisticsPopularBlock.php b/core/modules/statistics/src/Plugin/Block/StatisticsPopularBlock.php
index 1a19761..da232b5 100644
--- a/core/modules/statistics/src/Plugin/Block/StatisticsPopularBlock.php
+++ b/core/modules/statistics/src/Plugin/Block/StatisticsPopularBlock.php
@@ -77,7 +77,7 @@ public function access(AccountInterface $account) {
   /**
    * Overrides \Drupal\block\BlockBase::blockForm().
    */
-  public function blockForm($form, &$form_state) {
+  public function blockForm($form, &$form_state, array $parents) {
     // Popular content block settings.
     $numbers = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 15, 20, 25, 30, 40);
     $numbers = array('0' => t('Disabled')) + array_combine($numbers, $numbers);
diff --git a/core/modules/system/src/Plugin/Block/SystemBrandingBlock.php b/core/modules/system/src/Plugin/Block/SystemBrandingBlock.php
index 13e1b7f..160a9f4 100644
--- a/core/modules/system/src/Plugin/Block/SystemBrandingBlock.php
+++ b/core/modules/system/src/Plugin/Block/SystemBrandingBlock.php
@@ -105,7 +105,7 @@ public function defaultConfiguration() {
   /**
    * {@inheritdoc}
    */
-  public function blockForm($form, &$form_state) {
+  public function blockForm($form, &$form_state, array $parents) {
     // Get the theme.
     $theme = $form_state['block_theme'];
 
diff --git a/core/modules/system/src/Plugin/Block/SystemMainBlock.php b/core/modules/system/src/Plugin/Block/SystemMainBlock.php
index 666b515..4ce12b0 100644
--- a/core/modules/system/src/Plugin/Block/SystemMainBlock.php
+++ b/core/modules/system/src/Plugin/Block/SystemMainBlock.php
@@ -31,8 +31,8 @@ public function build() {
   /**
    * {@inheritdoc}
    */
-  public function buildConfigurationForm(array $form, array &$form_state) {
-    $form = parent::buildConfigurationForm($form, $form_state);
+  public function buildConfigurationForm(array $form, array &$form_state, array $parents) {
+    $form = parent::buildConfigurationForm($form, $form_state, $parents);
 
     // The main content block is never cacheable, because it may be dynamic.
     $form['cache']['#disabled'] = TRUE;
diff --git a/core/modules/system/src/Plugin/Block/SystemPoweredByBlock.php b/core/modules/system/src/Plugin/Block/SystemPoweredByBlock.php
index b0878f8..19daa06 100644
--- a/core/modules/system/src/Plugin/Block/SystemPoweredByBlock.php
+++ b/core/modules/system/src/Plugin/Block/SystemPoweredByBlock.php
@@ -27,12 +27,11 @@ public function build() {
     return array('#markup' => '<span>' . t('Powered by <a href="@poweredby">Drupal</a>', array('@poweredby' => 'http://drupal.org')) . '</span>');
   }
 
-
   /**
    * {@inheritdoc}
    */
-  public function buildConfigurationForm(array $form, array &$form_state) {
-    $form = parent::buildConfigurationForm($form, $form_state);
+  public function buildConfigurationForm(array $form, array &$form_state, array $parents) {
+    $form = parent::buildConfigurationForm($form, $form_state, $parents);
 
     // The 'Powered by Drupal' block is permanently cacheable, because its
     // contents can never change.
diff --git a/core/modules/system/src/Plugin/Condition/RequestPath.php b/core/modules/system/src/Plugin/Condition/RequestPath.php
index b29e46c..bca530f 100644
--- a/core/modules/system/src/Plugin/Condition/RequestPath.php
+++ b/core/modules/system/src/Plugin/Condition/RequestPath.php
@@ -81,7 +81,7 @@ public function defaultConfiguration() {
   /**
    * {@inheritdoc}
    */
-  public function buildConfigurationForm(array $form, array &$form_state) {
+  public function buildConfigurationForm(array $form, array &$form_state, array $parents) {
     $form['pages'] = array(
       '#type' => 'textarea',
       '#title' => $this->t('Pages'),
@@ -92,7 +92,7 @@ public function buildConfigurationForm(array $form, array &$form_state) {
         '%front' => '<front>',
       )),
     );
-    return parent::buildConfigurationForm($form, $form_state);
+    return parent::buildConfigurationForm($form, $form_state, $parents);
   }
 
   /**
diff --git a/core/modules/system/tests/modules/condition_test/src/FormController.php b/core/modules/system/tests/modules/condition_test/src/FormController.php
index d783ecd..f7de807 100644
--- a/core/modules/system/tests/modules/condition_test/src/FormController.php
+++ b/core/modules/system/tests/modules/condition_test/src/FormController.php
@@ -41,7 +41,7 @@ public function __construct() {
    * Implements \Drupal\Core\Form\FormInterface::buildForm().
    */
   public function buildForm(array $form, array &$form_state) {
-    $form = $this->condition->buildConfigurationForm($form, $form_state);
+    $form = $this->condition->buildConfigurationForm($form, $form_state, array());
     $form['actions']['submit'] = array(
       '#type' => 'submit',
       '#value' => t('Submit'),
diff --git a/core/modules/user/src/Plugin/Action/ChangeUserRoleBase.php b/core/modules/user/src/Plugin/Action/ChangeUserRoleBase.php
index f844743..fb2ec18 100644
--- a/core/modules/user/src/Plugin/Action/ChangeUserRoleBase.php
+++ b/core/modules/user/src/Plugin/Action/ChangeUserRoleBase.php
@@ -59,7 +59,7 @@ public function defaultConfiguration() {
   /**
    * {@inheritdoc}
    */
-  public function buildConfigurationForm(array $form, array &$form_state) {
+  public function buildConfigurationForm(array $form, array &$form_state, array $parents) {
     $roles = user_role_names(TRUE);
     unset($roles[DRUPAL_AUTHENTICATED_RID]);
     $form['rid'] = array(
diff --git a/core/modules/user/src/Plugin/Condition/UserRole.php b/core/modules/user/src/Plugin/Condition/UserRole.php
index 8724489..9e67acc 100644
--- a/core/modules/user/src/Plugin/Condition/UserRole.php
+++ b/core/modules/user/src/Plugin/Condition/UserRole.php
@@ -27,8 +27,8 @@ class UserRole extends ConditionPluginBase {
   /**
    * {@inheritdoc}
    */
-  public function buildConfigurationForm(array $form, array &$form_state) {
-    $form = parent::buildConfigurationForm($form, $form_state);
+  public function buildConfigurationForm(array $form, array &$form_state, array $parents) {
+    $form = parent::buildConfigurationForm($form, $form_state, $parents);
     $form['roles'] = array(
       '#type' => 'checkboxes',
       '#title' => $this->t('When the user has the following roles'),
diff --git a/core/modules/views/src/Plugin/Block/ViewsBlock.php b/core/modules/views/src/Plugin/Block/ViewsBlock.php
index 2648919..ca0ae5c 100644
--- a/core/modules/views/src/Plugin/Block/ViewsBlock.php
+++ b/core/modules/views/src/Plugin/Block/ViewsBlock.php
@@ -78,7 +78,7 @@ public function defaultConfiguration() {
   /**
    * {@inheritdoc}
    */
-  public function blockForm($form, &$form_state) {
+  public function blockForm($form, &$form_state, array $parents) {
     if ($this->displaySet) {
       return $this->view->display_handler->blockForm($this, $form, $form_state);
     }
diff --git a/core/modules/views/src/Plugin/Block/ViewsBlockBase.php b/core/modules/views/src/Plugin/Block/ViewsBlockBase.php
index b0bfdba..ec1bc2a 100644
--- a/core/modules/views/src/Plugin/Block/ViewsBlockBase.php
+++ b/core/modules/views/src/Plugin/Block/ViewsBlockBase.php
@@ -105,8 +105,8 @@ public function defaultConfiguration() {
   /**
    * {@inheritdoc}
    */
-  public function buildConfigurationForm(array $form, array &$form_state) {
-    $form = parent::buildConfigurationForm($form, $form_state);
+  public function buildConfigurationForm(array $form, array &$form_state, array $parents) {
+    $form = parent::buildConfigurationForm($form, $form_state, $parents);
 
     // Set the default label to '' so the views internal title is used.
     $form['label']['#default_value'] = '';
