diff --git a/core/lib/Drupal/Core/ImageToolkit/ImageToolkitBase.php b/core/lib/Drupal/Core/ImageToolkit/ImageToolkitBase.php
index 793768c..b685ba8 100644
--- a/core/lib/Drupal/Core/ImageToolkit/ImageToolkitBase.php
+++ b/core/lib/Drupal/Core/ImageToolkit/ImageToolkitBase.php
@@ -8,6 +8,7 @@
 namespace Drupal\Core\ImageToolkit;
 
 use Drupal\Component\Plugin\Exception\PluginNotFoundException;
+use Drupal\Core\Form\FormStateInterface;
 use Drupal\Core\Image\ImageInterface;
 use Drupal\Core\Plugin\PluginBase;
 use Psr\Log\LoggerInterface;
@@ -118,5 +119,7 @@ public function apply($operation, array $arguments = array()) {
       return FALSE;
     }
   }
+  public function validateConfigurationForm(array &$form, FormStateInterface $form_state) {
+  }
 
 }
diff --git a/core/lib/Drupal/Core/ImageToolkit/ImageToolkitInterface.php b/core/lib/Drupal/Core/ImageToolkit/ImageToolkitInterface.php
index b198af8..fe47fad 100644
--- a/core/lib/Drupal/Core/ImageToolkit/ImageToolkitInterface.php
+++ b/core/lib/Drupal/Core/ImageToolkit/ImageToolkitInterface.php
@@ -8,8 +8,8 @@
 namespace Drupal\Core\ImageToolkit;
 
 use Drupal\Component\Plugin\PluginInspectionInterface;
-use Drupal\Core\Form\FormStateInterface;
 use Drupal\Core\Image\ImageInterface;
+use Drupal\Core\Plugin\PluginFormInterface;
 
 /**
  * @defgroup image Image toolkits
@@ -49,21 +49,7 @@
  * @see \Drupal\Core\ImageToolkit\ImageToolkitManager
  * @see plugin_api
  */
-interface ImageToolkitInterface extends PluginInspectionInterface {
-
-  /**
-   * Retrieves the toolkit's settings form.
-   *
-   * @see system_image_toolkit_settings()
-   */
-  public function settingsForm();
-
-  /**
-   * Handles submissions for toolkit's settings form.
-   *
-   * @see system_image_toolkit_settings_submit()
-   */
-  public function settingsFormSubmit($form, FormStateInterface $form_state);
+interface ImageToolkitInterface extends PluginInspectionInterface, PluginFormInterface {
 
   /**
    * Sets the image object that this toolkit instance is tied to.
diff --git a/core/modules/ckeditor/js/ckeditor.admin.js b/core/modules/ckeditor/js/ckeditor.admin.js
index 05ac592..34484e2 100644
--- a/core/modules/ckeditor/js/ckeditor.admin.js
+++ b/core/modules/ckeditor/js/ckeditor.admin.js
@@ -237,7 +237,7 @@
         };
 
         // Create hidden CKEditor with all features enabled, retrieve metadata.
-        // @see \Drupal\ckeditor\Plugin\Editor\CKEditor::settingsForm.
+        // @see \Drupal\ckeditor\Plugin\Editor\CKEditor::buildConfigurationForm.
         var hiddenCKEditorID = 'ckeditor-hidden';
         if (CKEDITOR.instances[hiddenCKEditorID]) {
           CKEDITOR.instances[hiddenCKEditorID].destroy(true);
diff --git a/core/modules/ckeditor/src/Plugin/CKEditorPlugin/DrupalImage.php b/core/modules/ckeditor/src/Plugin/CKEditorPlugin/DrupalImage.php
index 23f9c1c..3be8fed 100644
--- a/core/modules/ckeditor/src/Plugin/CKEditorPlugin/DrupalImage.php
+++ b/core/modules/ckeditor/src/Plugin/CKEditorPlugin/DrupalImage.php
@@ -76,7 +76,7 @@ public function settingsForm(array $form, FormStateInterface $form_state, Editor
   }
 
   /**
-   * #element_validate handler for the "image_upload" element in settingsForm().
+   * #element_validate handler for the "image_upload" element in buildConfigurationForm().
    *
    * Moves the text editor's image upload settings from the DrupalImage plugin's
    * own settings into $editor->image_upload.
diff --git a/core/modules/ckeditor/src/Plugin/CKEditorPlugin/StylesCombo.php b/core/modules/ckeditor/src/Plugin/CKEditorPlugin/StylesCombo.php
index 963436d..0aed4b1 100644
--- a/core/modules/ckeditor/src/Plugin/CKEditorPlugin/StylesCombo.php
+++ b/core/modules/ckeditor/src/Plugin/CKEditorPlugin/StylesCombo.php
@@ -65,7 +65,7 @@ public function getButtons() {
   }
 
   /**
-   * Implements \Drupal\ckeditor\Plugin\CKEditorPluginConfigurableInterface::settingsForm().
+   * Implements \Drupal\ckeditor\Plugin\CKEditorPluginConfigurableInterface::buildConfigurationForm().
    */
   public function settingsForm(array $form, FormStateInterface $form_state, Editor $editor) {
     // Defaults.
@@ -93,7 +93,7 @@ public function settingsForm(array $form, FormStateInterface $form_state, Editor
   }
 
   /**
-   * #element_validate handler for the "styles" element in settingsForm().
+   * #element_validate handler for the "styles" element in buildConfigurationForm().
    */
   public function validateStylesValue(array $element, FormStateInterface $form_state) {
     if ($this->generateStylesSetSetting($element['#value']) === FALSE) {
diff --git a/core/modules/ckeditor/src/Plugin/Editor/CKEditor.php b/core/modules/ckeditor/src/Plugin/Editor/CKEditor.php
index 6d92f98..e382844 100644
--- a/core/modules/ckeditor/src/Plugin/Editor/CKEditor.php
+++ b/core/modules/ckeditor/src/Plugin/Editor/CKEditor.php
@@ -128,7 +128,7 @@ public function getDefaultSettings() {
   /**
    * {@inheritdoc}
    */
-  public function settingsForm(array $form, FormStateInterface $form_state, EditorEntity $editor) {
+  public function buildConfigurationForm(array $form, FormStateInterface $form_state, EditorEntity $editor = NULL) {
     $settings = $editor->getSettings();
 
     $ckeditor_settings_toolbar = array(
@@ -235,7 +235,7 @@ public function settingsForm(array $form, FormStateInterface $form_state, Editor
   /**
    * {@inheritdoc}
    */
-  public function settingsFormSubmit(array $form, FormStateInterface $form_state) {
+  public function submitConfigurationForm(array &$form, FormStateInterface $form_state) {
     // Modify the toolbar settings by reference. The values in
     // $form_state->getValue(array('editor', 'settings')) will be saved directly
     // by editor_form_filter_admin_format_submit().
diff --git a/core/modules/ckeditor/tests/modules/src/Plugin/CKEditorPlugin/LlamaContextualAndButton.php b/core/modules/ckeditor/tests/modules/src/Plugin/CKEditorPlugin/LlamaContextualAndButton.php
index 4c43cb7..b48fd7e 100644
--- a/core/modules/ckeditor/tests/modules/src/Plugin/CKEditorPlugin/LlamaContextualAndButton.php
+++ b/core/modules/ckeditor/tests/modules/src/Plugin/CKEditorPlugin/LlamaContextualAndButton.php
@@ -60,7 +60,7 @@ function getFile() {
   }
 
   /**
-   * Implements \Drupal\ckeditor\Plugin\CKEditorPluginConfigurableInterface::settingsForm().
+   * Implements \Drupal\ckeditor\Plugin\CKEditorPluginConfigurableInterface::buildConfigurationForm().
    */
   function settingsForm(array $form, FormStateInterface $form_state, Editor $editor) {
     // Defaults.
diff --git a/core/modules/editor/editor.module b/core/modules/editor/editor.module
index ce3b9fa..f783f2c 100644
--- a/core/modules/editor/editor.module
+++ b/core/modules/editor/editor.module
@@ -156,10 +156,10 @@ function editor_form_filter_format_form_alter(&$form, FormStateInterface $form_s
   if ($editor) {
     $plugin = $manager->createInstance($editor->getEditor());
     $settings_form = array();
-    $settings_form['#element_validate'][] = array($plugin, 'settingsFormValidate');
+    $settings_form['#element_validate'][] = array($plugin, 'validateConfigurationForm');
     $form['editor']['settings']['subform'] = $plugin->settingsForm($settings_form, $form_state, $editor);
     $form['editor']['settings']['subform']['#parents'] = array('editor', 'settings');
-    $form['actions']['submit']['#submit'][] = array($plugin, 'settingsFormSubmit');
+    $form['actions']['submit']['#submit'][] = array($plugin, 'submitConfigurationForm');
   }
 
   $form['#validate'][] = 'editor_form_filter_admin_format_validate';
diff --git a/core/modules/editor/src/Plugin/EditorBase.php b/core/modules/editor/src/Plugin/EditorBase.php
index eafe673..56c682a 100644
--- a/core/modules/editor/src/Plugin/EditorBase.php
+++ b/core/modules/editor/src/Plugin/EditorBase.php
@@ -60,20 +60,20 @@ public function getDefaultSettings() {
   /**
    * {@inheritdoc}
    */
-  public function settingsForm(array $form, FormStateInterface $form_state, Editor $editor) {
+  public function buildConfigurationForm(array $form, FormStateInterface $form_state, Editor $editor = NULL) {
     return $form;
   }
 
   /**
    * {@inheritdoc}
    */
-  public function settingsFormValidate(array $form, FormStateInterface $form_state) {
+  public function validateConfigurationForm(array &$form, FormStateInterface $form_state) {
   }
 
   /**
    * {@inheritdoc}
    */
-  public function settingsFormSubmit(array $form, FormStateInterface $form_state) {
+  public function submitConfigurationForm(array &$form, FormStateInterface $form_state) {
   }
 
 }
diff --git a/core/modules/editor/src/Plugin/EditorPluginInterface.php b/core/modules/editor/src/Plugin/EditorPluginInterface.php
index 26300ce..b184d11 100644
--- a/core/modules/editor/src/Plugin/EditorPluginInterface.php
+++ b/core/modules/editor/src/Plugin/EditorPluginInterface.php
@@ -8,7 +8,7 @@
 namespace Drupal\editor\Plugin;
 
 use Drupal\Component\Plugin\PluginInspectionInterface;
-use Drupal\Core\Form\FormStateInterface;
+use Drupal\Core\Plugin\PluginFormInterface;
 use Drupal\editor\Entity\Editor;
 
 /**
@@ -22,7 +22,7 @@
  * @see \Drupal\editor\Plugin\EditorManager
  * @see plugin_api
  */
-interface EditorPluginInterface extends PluginInspectionInterface {
+interface EditorPluginInterface extends PluginInspectionInterface, PluginFormInterface {
 
   /**
    * Returns the default settings for this configurable text editor.
@@ -34,53 +34,6 @@
   public function getDefaultSettings();
 
   /**
-   * Returns a settings form to configure this text editor.
-   *
-   * If the editor's behavior depends on extensive options and/or external data,
-   * then the implementing module can choose to provide a separate, global
-   * configuration page rather than per-text-format settings. In that case, this
-   * form should provide a link to the separate settings page.
-   *
-   * @param array $form
-   *   An empty form array to be populated with a configuration form, if any.
-   * @param \Drupal\Core\Form\FormStateInterface $form_state
-   *   The state of the entire filter administration form.
-   * @param \Drupal\editor\Entity\Editor $editor
-   *   A configured text editor object.
-   *
-   * @return array
-   *   A render array for the settings form.
-   */
-  public function settingsForm(array $form, FormStateInterface $form_state, Editor $editor);
-
-  /**
-   * Validates the settings form for an editor.
-   *
-   * The contents of the editor settings are located in
-   * $form_state->getValue(array('editor', 'settings')). Calls to form_error()
-   * should reflect this location in the settings form.
-   *
-   * @param array $form
-   *   An associative array containing the structure of the form.
-   * @param \Drupal\Core\Form\FormStateInterface $form_state
-   *   The current state of the form.
-   */
-  public function settingsFormValidate(array $form, FormStateInterface $form_state);
-
-  /**
-   * Modifies any values in the form state to prepare them for saving.
-   *
-   * Values in $form_state->getValue(array('editor', 'settings')) are saved by
-   * Editor module in editor_form_filter_admin_format_submit().
-   *
-   * @param array $form
-   *   An associative array containing the structure of the form.
-   * @param \Drupal\Core\Form\FormStateInterface $form_state
-   *   The current state of the form.
-   */
-  public function settingsFormSubmit(array $form, FormStateInterface $form_state);
-
-  /**
    * Returns JavaScript settings to be attached.
    *
    * Most text editors use JavaScript to provide a WYSIWYG or toolbar on the
diff --git a/core/modules/editor/tests/modules/src/Plugin/Editor/UnicornEditor.php b/core/modules/editor/tests/modules/src/Plugin/Editor/UnicornEditor.php
index 6937fb2..d49755f 100644
--- a/core/modules/editor/tests/modules/src/Plugin/Editor/UnicornEditor.php
+++ b/core/modules/editor/tests/modules/src/Plugin/Editor/UnicornEditor.php
@@ -34,7 +34,7 @@ function getDefaultSettings() {
   /**
    * {@inheritdoc}
    */
-  function settingsForm(array $form, FormStateInterface $form_state, EditorEntity $editor) {
+  function buildConfigurationForm(array $form, FormStateInterface $form_state, EditorEntity $editor = NULL) {
     $form['foo'] = array(
       '#title' => t('Foo'),
       '#type' => 'textfield',
diff --git a/core/modules/system/src/Form/ImageToolkitForm.php b/core/modules/system/src/Form/ImageToolkitForm.php
index 69032f6..513c622 100644
--- a/core/modules/system/src/Form/ImageToolkitForm.php
+++ b/core/modules/system/src/Form/ImageToolkitForm.php
@@ -21,7 +21,7 @@ class ImageToolkitForm extends ConfigFormBase {
   /**
    * An array containing currently available toolkits.
    *
-   * @var array
+   * @var \Drupal\Core\ImageToolkit\ImageToolkitInterface[]
    */
   protected $availableToolkits = array();
 
@@ -87,7 +87,7 @@ public function buildForm(array $form, FormStateInterface $form_state) {
           ),
         ),
       );
-      $form['image_toolkit_settings'][$id] += $toolkit->settingsForm();
+      $form['image_toolkit_settings'][$id] += $toolkit->buildConfigurationForm(array(), $form_state);
     }
 
     return parent::buildForm($form, $form_state);
@@ -103,7 +103,7 @@ public function submitForm(array &$form, FormStateInterface $form_state) {
 
     // Call the form submit handler for each of the toolkits.
     foreach ($this->availableToolkits as $toolkit) {
-      $toolkit->settingsFormSubmit($form, $form_state);
+      $toolkit->submitConfigurationForm($form, $form_state);
     }
 
     parent::submitForm($form, $form_state);
diff --git a/core/modules/system/src/Plugin/ImageToolkit/GDToolkit.php b/core/modules/system/src/Plugin/ImageToolkit/GDToolkit.php
index 1fd0c77..beacb7d 100644
--- a/core/modules/system/src/Plugin/ImageToolkit/GDToolkit.php
+++ b/core/modules/system/src/Plugin/ImageToolkit/GDToolkit.php
@@ -61,7 +61,7 @@ public function getResource() {
   /**
    * {@inheritdoc}
    */
-  public function settingsForm() {
+  public function buildConfigurationForm(array $form, FormStateInterface $form_state) {
     $form['image_jpeg_quality'] = array(
       '#type' => 'number',
       '#title' => t('JPEG quality'),
@@ -77,7 +77,7 @@ public function settingsForm() {
   /**
    * {@inheritdoc}
    */
-  public function settingsFormSubmit($form, FormStateInterface $form_state) {
+  public function submitConfigurationForm(array &$form, FormStateInterface $form_state) {
     \Drupal::config('system.image.gd')
       ->set('jpeg_quality', $form_state->getValue(array('gd', 'image_jpeg_quality')))
       ->save();
diff --git a/core/modules/system/tests/modules/image_test/src/Plugin/ImageToolkit/TestToolkit.php b/core/modules/system/tests/modules/image_test/src/Plugin/ImageToolkit/TestToolkit.php
index 3c1ceec..2b37f14 100644
--- a/core/modules/system/tests/modules/image_test/src/Plugin/ImageToolkit/TestToolkit.php
+++ b/core/modules/system/tests/modules/image_test/src/Plugin/ImageToolkit/TestToolkit.php
@@ -45,7 +45,7 @@ class TestToolkit extends ImageToolkitBase {
   /**
    * {@inheritdoc}
    */
-  public function settingsForm() {
+  public function buildConfigurationForm(array $form, FormStateInterface $form_state) {
     $this->logCall('settings', func_get_args());
     $form['test_parameter'] = array(
       '#type' => 'number',
@@ -61,7 +61,7 @@ public function settingsForm() {
   /**
    * {@inheritdoc}
    */
-  public function settingsFormSubmit($form, FormStateInterface $form_state) {
+  public function submitConfigurationForm(array &$form, FormStateInterface $form_state) {
     \Drupal::config('system.image.test_toolkit')
       ->set('test_parameter', $form_state->getValue(array('test', 'test_parameter')))
       ->save();
diff --git a/core/modules/views/src/Plugin/entity_reference/selection/ViewsSelection.php b/core/modules/views/src/Plugin/entity_reference/selection/ViewsSelection.php
index aa8294a..91b29fb 100644
--- a/core/modules/views/src/Plugin/entity_reference/selection/ViewsSelection.php
+++ b/core/modules/views/src/Plugin/entity_reference/selection/ViewsSelection.php
@@ -80,7 +80,7 @@ public static function settingsForm(FieldDefinitionInterface $field_definition)
     // we massage the data at validate time on the wrapping element (not
     // ideal).
     $plugin = new static($field_definition);
-    $form['view']['#element_validate'] = array(array($plugin, 'settingsFormValidate'));
+    $form['view']['#element_validate'] = array(array($plugin, 'validateConfigurationForm'));
 
     if ($options) {
       $default = !empty($view_settings['view_name']) ? $view_settings['view_name'] . ':' . $view_settings['display_name'] : NULL;
