diff --git a/core/modules/editor/editor.module b/core/modules/editor/editor.module
index 8df1f04..1db3039 100644
--- a/core/modules/editor/editor.module
+++ b/core/modules/editor/editor.module
@@ -6,6 +6,7 @@
  */
 
 use Drupal\Component\Utility\Html;
+use Drupal\Core\Form\SubformState;
 use Drupal\editor\Entity\Editor;
 use Drupal\Core\Entity\FieldableEntityInterface;
 use Drupal\Core\Field\FieldDefinitionInterface;
@@ -170,11 +171,11 @@ function editor_form_filter_format_form_alter(&$form, FormStateInterface $form_s
   if ($editor) {
     /** @var $plugin \Drupal\editor\Plugin\EditorPluginInterface */
     $plugin = $manager->createInstance($editor->getEditor());
-    $settings_form = array();
-    $settings_form['#element_validate'][] = array($plugin, 'validateConfigurationForm');
-    $form['editor']['settings']['subform'] = $plugin->buildConfigurationForm($settings_form, $form_state);
+    $form_state->set('editor_plugin', $plugin);
+    $form['editor']['settings']['subform'] = [];
+    $subform_state = SubformState::createForSubform($form['editor']['settings']['subform'], $form, $form_state);
+    $form['editor']['settings']['subform'] = $plugin->buildConfigurationForm($form['editor']['settings']['subform'], $subform_state);
     $form['editor']['settings']['subform']['#parents'] = array('editor', 'settings');
-    $form['actions']['submit']['#submit'][] = array($plugin, 'submitConfigurationForm');
   }
 
   $form['#validate'][] = 'editor_form_filter_admin_format_validate';
@@ -214,6 +215,11 @@ function editor_form_filter_admin_form_ajax($form, FormStateInterface $form_stat
  * Additional validate handler for filter_format_form().
  */
 function editor_form_filter_admin_format_validate($form, FormStateInterface $form_state) {
+  if ($editor_plugin = $form_state->get('editor_plugin')) {
+    $subform_state = SubformState::createForSubform($form['editor']['settings']['subform'], $form, $form_state);
+    $editor_plugin->validateConfigurationForm($form['editor']['settings']['subform'], $subform_state);
+  }
+
   // This validate handler is not applicable when using the 'Configure' button.
   if ($form_state->getTriggeringElement()['#name'] === 'editor_configure') {
     return;
@@ -240,6 +246,11 @@ function editor_form_filter_admin_format_submit($form, FormStateInterface $form_
     $original_editor->delete();
   }
 
+  if ($editor_plugin = $form_state->get('editor_plugin')) {
+    $subform_state = SubformState::createForSubform($form['editor']['settings']['subform'], $form, $form_state);
+    $editor_plugin->submitConfigurationForm($form['editor']['settings']['subform'], $subform_state);
+  }
+
   // Create a new editor or update the existing editor.
   if ($editor = $form_state->get('editor')) {
     // Ensure the text format is set: when creating a new text format, this
