diff --git a/modules/webform_access/src/WebformAccessGroupDeleteForm.php b/modules/webform_access/src/WebformAccessGroupDeleteForm.php
index 14fcece9..c51b26a6 100644
--- a/modules/webform_access/src/WebformAccessGroupDeleteForm.php
+++ b/modules/webform_access/src/WebformAccessGroupDeleteForm.php
@@ -2,31 +2,34 @@
 
 namespace Drupal\webform_access;
 
-use Drupal\Core\Entity\EntityDeleteForm;
-use Drupal\Core\Form\FormStateInterface;
-use Drupal\Core\Url;
-use Drupal\webform\Form\WebformDialogFormTrait;
+use Drupal\webform\Form\WebformConfigEntityDeleteFormBase;
 
 /**
  * Provides a delete webform access group form.
  */
-class WebformAccessGroupDeleteForm extends EntityDeleteForm {
-
-  use WebformDialogFormTrait;
+class WebformAccessGroupDeleteForm extends WebformConfigEntityDeleteFormBase {
 
   /**
    * {@inheritdoc}
    */
-  public function buildForm(array $form, FormStateInterface $form_state) {
-    $form = parent::buildForm($form, $form_state);
-    return $this->buildDialogConfirmForm($form, $form_state);
-  }
+  protected $confirmCheckbox = FALSE;
 
   /**
    * {@inheritdoc}
    */
-  public function getRedirectUrl() {
-    return Url::fromRoute('entity.webform_access_group.collection');
+  public function getDescription() {
+    return [
+      'title' => [
+        '#markup' => $this->t('This action will…'),
+      ],
+      'list' => [
+        '#theme' => 'item_list',
+        '#items' => [
+          $this->t('Remove configuration'),
+          $this->t('Affect any fields which use this access group'),
+        ],
+      ],
+    ];
   }
 
 }
diff --git a/modules/webform_access/src/WebformAccessTypeDeleteForm.php b/modules/webform_access/src/WebformAccessTypeDeleteForm.php
index 70ed5193..f11367e5 100644
--- a/modules/webform_access/src/WebformAccessTypeDeleteForm.php
+++ b/modules/webform_access/src/WebformAccessTypeDeleteForm.php
@@ -2,31 +2,34 @@
 
 namespace Drupal\webform_access;
 
-use Drupal\Core\Entity\EntityDeleteForm;
-use Drupal\Core\Form\FormStateInterface;
-use Drupal\Core\Url;
-use Drupal\webform\Form\WebformDialogFormTrait;
+use Drupal\webform\Form\WebformConfigEntityDeleteFormBase;
 
 /**
  * Provides a delete webform access type form.
  */
-class WebformAccessTypeDeleteForm extends EntityDeleteForm {
-
-  use WebformDialogFormTrait;
+class WebformAccessTypeDeleteForm extends WebformConfigEntityDeleteFormBase {
 
   /**
    * {@inheritdoc}
    */
-  public function buildForm(array $form, FormStateInterface $form_state) {
-    $form = parent::buildForm($form, $form_state);
-    return $this->buildDialogConfirmForm($form, $form_state);
-  }
+  protected $confirmCheckbox = FALSE;
 
   /**
    * {@inheritdoc}
    */
-  public function getRedirectUrl() {
-    return Url::fromRoute('entity.webform_access_type.collection');
+  public function getDescription() {
+    return [
+      'title' => [
+        '#markup' => $this->t('This action will…'),
+      ],
+      'list' => [
+        '#theme' => 'item_list',
+        '#items' => [
+          $this->t('Remove configuration'),
+          $this->t('Affect any access groups which use this type'),
+        ],
+      ],
+    ];
   }
 
 }
diff --git a/modules/webform_image_select/src/WebformImageSelectImagesDeleteForm.php b/modules/webform_image_select/src/WebformImageSelectImagesDeleteForm.php
index 85458cc3..b777008b 100644
--- a/modules/webform_image_select/src/WebformImageSelectImagesDeleteForm.php
+++ b/modules/webform_image_select/src/WebformImageSelectImagesDeleteForm.php
@@ -2,60 +2,68 @@
 
 namespace Drupal\webform_image_select;
 
-use Drupal\Core\Entity\EntityDeleteForm;
-use Drupal\Core\Form\FormStateInterface;
-use Drupal\Core\Url;
-use Drupal\webform\Form\WebformDialogFormTrait;
+use Drupal\webform\Form\WebformConfigEntityDeleteFormBase;
 
 /**
  * Provides a delete webform images select images form.
  */
-class WebformImageSelectImagesDeleteForm extends EntityDeleteForm {
-
-  use WebformDialogFormTrait;
+class WebformImageSelectImagesDeleteForm extends WebformConfigEntityDeleteFormBase {
 
   /**
    * {@inheritdoc}
    */
-  public function buildForm(array $form, FormStateInterface $form_state) {
-    $form = parent::buildForm($form, $form_state);
+  public function getDescription() {
+    return [
+      'title' => [
+        '#markup' => $this->t('This action will…'),
+      ],
+      'list' => [
+        '#theme' => 'item_list',
+        '#items' => [
+          $this->t('Remove configuration'),
+          $this->t('Affect any elements which use these images'),
+        ],
+      ],
+    ];
+  }
 
+  /**
+   * {@inheritdoc}
+   */
+  public function getDetails() {
     /** @var \Drupal\webform\WebformOptionsInterface $webform_options */
     $webform_options = $this->entity;
 
     /** @var \Drupal\webform_image_select\WebformImageSelectImagesStorageInterface $webform_images_storage */
     $webform_images_storage = $this->entityTypeManager->getStorage('webform_image_select_images');
 
-    // Display warning that options is used by webforms.
-    $t_args = ['%title' => $webform_options->label()];
+    $t_args = [
+      '%label' => $this->getEntity()->label(),
+      '@entity-type' => $this->getEntity()->getEntityType()->getLowercaseLabel(),
+    ];
+
+    $details = [];
     if ($used_by_webforms = $webform_images_storage->getUsedByWebforms($webform_options)) {
-      $form['used_by_composite_elements'] = [
-        '#type' => 'webform_message',
-        '#message_message' => [
+      $details['used_by_composite_elements'] = [
+        'title' => [
+          '#markup' => $this->t('%label is used by the below webform(s).', $t_args),
+        ],
+        'list' => [
           '#theme' => 'item_list',
-          '#title' => $this->t('%title is used by the below webform(s).', $t_args),
           '#items' => $used_by_webforms,
         ],
-        '#message_type' => 'warning',
-        '#weight' => -100,
       ];
     }
 
-    $form['confirm'] = [
-      '#type' => 'checkbox',
-      '#title' => $this->t('Yes, I want to delete these webform images.'),
-      '#required' => TRUE,
-      '#weight' => 10,
-    ];
-
-    return $this->buildDialogConfirmForm($form, $form_state);
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getRedirectUrl() {
-    return Url::fromRoute('entity.webform_image_select_images.collection');
+    if ($details) {
+      return [
+        '#type' => 'details',
+        '#title' => $this->t('Webforms affected'),
+      ] + $details;
+    }
+    else {
+      return [];
+    }
   }
 
 }
diff --git a/modules/webform_node/src/Tests/WebformNodeResultsTest.php b/modules/webform_node/src/Tests/WebformNodeResultsTest.php
index bb951838..586f88f6 100644
--- a/modules/webform_node/src/Tests/WebformNodeResultsTest.php
+++ b/modules/webform_node/src/Tests/WebformNodeResultsTest.php
@@ -207,7 +207,7 @@ class WebformNodeResultsTest extends WebformNodeTestBase {
     $this->assertResponse(200);
 
     // Check deleting webform node results.
-    $this->drupalPostForm('node/' . $node->id() . '/webform/results/clear', [], t('Clear'));
+    $this->drupalPostForm('node/' . $node->id() . '/webform/results/clear', ['confirm' => TRUE], t('Clear'));
     $this->assertEqual($submission_storage->getTotal($webform, $node), 0);
     $this->assertEqual($submission_storage->getTotal($webform), 3);
   }
diff --git a/modules/webform_ui/src/Form/WebformUiElementDeleteForm.php b/modules/webform_ui/src/Form/WebformUiElementDeleteForm.php
index 252b64ed..c5d87c5b 100644
--- a/modules/webform_ui/src/Form/WebformUiElementDeleteForm.php
+++ b/modules/webform_ui/src/Form/WebformUiElementDeleteForm.php
@@ -3,10 +3,9 @@
 namespace Drupal\webform_ui\Form;
 
 use Drupal\Component\Render\FormattableMarkup;
-use Drupal\Core\Form\ConfirmFormBase;
 use Drupal\Core\Form\FormStateInterface;
 use Drupal\Core\Render\RendererInterface;
-use Drupal\webform\Form\WebformDialogFormTrait;
+use Drupal\webform\Form\WebformDeleteFormBase;
 use Drupal\webform\Plugin\WebformElementManagerInterface;
 use Drupal\webform\WebformEntityElementsValidatorInterface;
 use Drupal\webform\WebformInterface;
@@ -16,14 +15,7 @@ use Symfony\Component\DependencyInjection\ContainerInterface;
 /**
  * Webform for deleting a webform element.
  */
-class WebformUiElementDeleteForm extends ConfirmFormBase {
-
-  use WebformDialogFormTrait;
-
-  /**
-   * {@inheritdoc}
-   */
-  protected $operation = 'delete';
+class WebformUiElementDeleteForm extends WebformDeleteFormBase {
 
   /**
    * The renderer.
@@ -101,84 +93,80 @@ class WebformUiElementDeleteForm extends ConfirmFormBase {
     );
   }
 
+  /****************************************************************************/
+  // Delete form.
+  /****************************************************************************/
+
   /**
    * {@inheritdoc}
    */
-  public function getDescription() {
-    $t_args = [
-      '%element' => $this->getElementTitle(),
-      '%webform' => $this->webform->label(),
-    ];
-
-    $build = [];
-    $element_plugin = $this->getWebformElementPlugin();
-    if ($element_plugin->isContainer($this->element)) {
-      $build['warning'] = [
-        '#markup' => $this->t('This will immediately delete the %element container and all nested elements within %element from the %webform webform. This cannot be undone.', $t_args),
-      ];
+  public function getQuestion() {
+    $t_args = ['%webform' => $this->webform->label(), '%title' => $this->getElementTitle()];
+    if ($this->isDialog()) {
+      return $this->t('Delete the %title element?', $t_args);
     }
     else {
-      $build['warning'] = [
-        '#markup' => $this->t('This will immediately delete the %element element from the %webform webform. This cannot be undone.', $t_args),
-      ];
-    }
-
-    if ($this->element['#webform_children']) {
-      $build['elements'] = $this->getDeletedElementsItemList($this->element['#webform_children']);
-      $build['elements']['#title'] = t('The below nested elements will be also deleted.');
+      return $this->t('Delete the %title element from the %webform webform?', $t_args);
     }
+  }
 
-    return $this->renderer->renderPlain($build);
+  /**
+   * {@inheritdoc}
+   */
+  public function getWarning() {
+    $t_args = ['%title' => $this->getElementTitle()];
+    return [
+      '#type' => 'webform_message',
+      '#message_type' => 'warning',
+      '#message_message' => $this->t('Are you sure you want to delete the %title element?', $t_args) . '<br/>' .
+        '<strong>' . $this->t('This action cannot be undone.') . '</strong>',
+    ];
   }
 
   /**
-   * Get deleted elements as item list.
-   *
-   * @param array $children
-   *   An array child key.
-   *
-   * @return array
-   *   A render array representing an item list of elements.
+   * {@inheritdoc}
    */
-  protected function getDeletedElementsItemList(array $children) {
-    if (empty($children)) {
-      return [];
-    }
+  public function getDescription() {
+    $element_plugin = $this->getWebformElementPlugin();
 
     $items = [];
-    foreach ($children as $key) {
-      $element = $this->webform->getElement($key);
-      if (isset($element['#title'])) {
-        $title = new FormattableMarkup('@title (@key)', ['@title' => $element['#title'], '@key' => $key]);
-      }
-      else {
-        $title = $key;
-      }
-      $items[$key]['title'] = ['#markup' => $title];
-      if ($element['#webform_children']) {
-        $items[$key]['items'] = $this->getDeletedElementsItemList($element['#webform_children']);
-      }
+    $items[] = $this->t('Remove this element');
+    $items[] = $this->t('Delete any submission data associated with this element');
+    if ($element_plugin->isContainer($this->element)) {
+      $items[] = $this->t('Delete all child elements');
     }
 
     return [
-      '#theme' => 'item_list',
-      '#items' => $items,
+      'title' => [
+        '#markup' => $this->t('This action will…'),
+      ],
+      'list' => [
+        '#theme' => 'item_list',
+        '#items' => $items,
+      ],
     ];
   }
 
   /**
    * {@inheritdoc}
    */
-  public function getQuestion() {
-    return $this->t('Are you sure you want to delete the %title element from the %webform webform?', ['%webform' => $this->webform->label(), '%title' => $this->getElementTitle()]);
+  public function getDetails() {
+    $elements = $this->getDeletedElementsItemList($this->element['#webform_children']);
+    if ($elements) {
+      return [
+        '#type' => 'details',
+        '#title' => $this->t('Nested elements being deleted'),
+        'elements' => $elements,
+      ];
+    }
+    else {
+      return [];
+    }
   }
 
-  /**
-   * {@inheritdoc}
-   */
-  public function getConfirmText() {
-    return $this->t('Delete');
-  }
+  /****************************************************************************/
+  // Form methods.
+  /****************************************************************************/
 
   /**
    * {@inheritdoc}
@@ -222,6 +210,45 @@ class WebformUiElementDeleteForm extends ConfirmFormBase {
     $form_state->setRedirectUrl($this->webform->toUrl('edit-form'));
   }
 
+  /****************************************************************************/
+  // Helper methods.
+  /****************************************************************************/
+
+  /**
+   * Get deleted elements as item list.
+   *
+   * @param array $children
+   *   An array child key.
+   *
+   * @return array
+   *   A render array representing an item list of elements.
+   */
+  protected function getDeletedElementsItemList(array $children) {
+    if (empty($children)) {
+      return [];
+    }
+
+    $items = [];
+    foreach ($children as $key) {
+      $element = $this->webform->getElement($key);
+      if (isset($element['#title'])) {
+        $title = new FormattableMarkup('@title (@key)', ['@title' => $element['#title'], '@key' => $key]);
+      }
+      else {
+        $title = $key;
+      }
+      $items[$key]['title'] = ['#markup' => $title];
+      if ($element['#webform_children']) {
+        $items[$key]['items'] = $this->getDeletedElementsItemList($element['#webform_children']);
+      }
+    }
+
+    return [
+      '#theme' => 'item_list',
+      '#items' => $items,
+    ];
+  }
+
   /**
    * Get the webform element's title or key.
    *
diff --git a/modules/webform_ui/src/Form/WebformUiElementTypeSelectForm.php b/modules/webform_ui/src/Form/WebformUiElementTypeSelectForm.php
index a1787455..baadbbb6 100644
--- a/modules/webform_ui/src/Form/WebformUiElementTypeSelectForm.php
+++ b/modules/webform_ui/src/Form/WebformUiElementTypeSelectForm.php
@@ -27,7 +27,7 @@ class WebformUiElementTypeSelectForm extends WebformUiElementTypeFormBase {
     if ($parent) {
       $parent_element = $webform->getElement($parent);
       $t_args = ['@parent' => $parent_element['#admin_title'] ?: $parent_element['#title'] ?: $parent_element['#webform_key']];
-      $form['#title'] = t('Select an element to add to "@parent"', $t_args);
+      $form['#title'] = $this->t('Select an element to add to "@parent"', $t_args);
     }
 
     $elements = $this->elementManager->getInstances();
diff --git a/src/Form/AdminConfig/WebformAdminConfigExportersForm.php b/src/Form/AdminConfig/WebformAdminConfigExportersForm.php
index c7a49abd..cbee6cec 100644
--- a/src/Form/AdminConfig/WebformAdminConfigExportersForm.php
+++ b/src/Form/AdminConfig/WebformAdminConfigExportersForm.php
@@ -127,10 +127,10 @@ class WebformAdminConfigExportersForm extends WebformAdminConfigBaseForm {
     // Copied from: system_check_directory().
     $temp_directory = $form_state->getValue('temp_directory');
     if (!is_dir($temp_directory) && !$this->fileSystem->mkdir($temp_directory, NULL, TRUE)) {
-      $form_state->setErrorByName('temp_directory', t('The directory %directory does not exist and could not be created.', ['%directory' => $temp_directory]));
+      $form_state->setErrorByName('temp_directory', $this->t('The directory %directory does not exist and could not be created.', ['%directory' => $temp_directory]));
     }
     if (is_dir($temp_directory) && !is_writable($temp_directory) && !$this->fileSystem->chmod($temp_directory)) {
-      $form_state->setErrorByName('temp_directory', t('The directory %directory exists but is not writable and could not be made writable.', ['%directory' => $temp_directory]));
+      $form_state->setErrorByName('temp_directory', $this->t('The directory %directory exists but is not writable and could not be made writable.', ['%directory' => $temp_directory]));
     }
     parent::validateForm($form, $form_state);
   }
diff --git a/src/Form/WebformConfigEntityDeleteFormBase.php b/src/Form/WebformConfigEntityDeleteFormBase.php
new file mode 100644
index 00000000..fcfe4984
--- /dev/null
+++ b/src/Form/WebformConfigEntityDeleteFormBase.php
@@ -0,0 +1,190 @@
+<?php
+
+namespace Drupal\webform\Form;
+
+use Drupal\Core\Entity\EntityDeleteFormTrait;
+use Drupal\Core\Entity\EntityForm;
+use Drupal\Core\Form\ConfirmFormHelper;
+use Drupal\Core\Form\FormStateInterface;
+
+/**
+ * Provides a generic base class for a webform entity deletion form.
+ *
+ * Copied from: \Drupal\Core\Entity\EntityConfirmFormBase
+ */
+abstract class WebformConfigEntityDeleteFormBase extends EntityForm implements WebformDeleteFormInterface {
+
+  use EntityDeleteFormTrait;
+  use WebformDialogFormTrait;
+
+  /**
+   * Display confirmation checkbox.
+   *
+   * @var bool
+   */
+  protected $confirmCheckbox = TRUE;
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getBaseFormId() {
+    return $this->entity->getEntityTypeId() . '_confirm_form';
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getQuestion() {
+    $t_args = [
+      '@entity-type' => $this->getEntity()->getEntityType()->getLowercaseLabel(),
+      '%label' => $this->getEntity()->label(),
+    ];
+    return $this->t('Delete %label @entity-type?', $t_args);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getWarning() {
+    $t_args = [
+      '@entity-type' => $this->getEntity()->getEntityType()->getLowercaseLabel(),
+      '%label' => $this->getEntity()->label(),
+    ];
+
+    return [
+      '#type' => 'webform_message',
+      '#message_type' => 'warning',
+      '#message_message' => $this->t('Are you sure you want to delete the %label @entity-type?', $t_args) . '<br/>' .
+        '<strong>' . $this->t('This action cannot be undone.') . '</strong>',
+    ];
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getDescription() {
+    return [];
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getDetails() {
+    return [];
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getConfirmInput() {
+    $t_args = [
+      '@entity-type' => $this->getEntity()->getEntityType()->getLowercaseLabel(),
+      '%label' => $this->getEntity()->label(),
+    ];
+
+    if ($this->confirmCheckbox) {
+      return [
+        '#type' => 'checkbox',
+        '#title' => $this->t('Yes, I want to delete the %label @entity-type', $t_args),
+        '#required' => TRUE,
+      ];
+    }
+    else {
+      return [];
+    }
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getConfirmText() {
+    return $this->t('Delete');
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getCancelText() {
+    return $this->t('Cancel');
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getFormName() {
+    return 'webform_config_entity_delete';
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function buildForm(array $form, FormStateInterface $form_state) {
+    $form = parent::buildForm($form, $form_state);
+    $form['#attributes']['class'][] = 'confirmation';
+    $form['#theme'] = 'confirm_form';
+    $form[$this->getFormName()] = ['#type' => 'hidden', '#value' => 1];
+
+    // Title.
+    $form['#title'] = $this->getQuestion();
+
+    // Warning.
+    $form['warning'] = $this->getWarning();
+
+    // Description.
+    $form['description'] = $this->getDescription();
+
+    // Details and confirm input.
+    $details = $this->getDetails();
+    $confirm_input = $this->getConfirmInput();
+    if ($details) {
+      $form['details'] = $details;
+    }
+    if (!$details && $confirm_input) {
+      $form['hr'] = ['#markup' => '<p><hr/></p>'];
+    }
+    if ($confirm_input) {
+      $form['confirm'] = $confirm_input;
+    }
+
+    // Dialog.
+    return $this->buildDialogConfirmForm($form, $form_state);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function actions(array $form, FormStateInterface $form_state) {
+    return [
+      'submit' => [
+        '#type' => 'submit',
+        '#value' => $this->getConfirmText(),
+        '#submit' => [
+          [$this, 'submitForm'],
+        ],
+      ],
+      'cancel' => ConfirmFormHelper::buildCancelLink($this, $this->getRequest()),
+    ];
+  }
+
+  /**
+   * {@inheritdoc}
+   *
+   * The save() method is not used in EntityConfirmFormBase. This overrides the
+   * default implementation that saves the entity.
+   *
+   * Confirmation forms should override submitForm() instead for their logic.
+   */
+  public function save(array $form, FormStateInterface $form_state) {}
+
+  /**
+   * {@inheritdoc}
+   *
+   * The delete() method is not used in EntityConfirmFormBase. This overrides
+   * the default implementation that redirects to the delete-form confirmation
+   * form.
+   *
+   * Confirmation forms should override submitForm() instead for their logic.
+   */
+  public function delete(array $form, FormStateInterface $form_state) {}
+
+}
diff --git a/src/Form/WebformDeleteFormBase.php b/src/Form/WebformDeleteFormBase.php
new file mode 100644
index 00000000..c4f36934
--- /dev/null
+++ b/src/Form/WebformDeleteFormBase.php
@@ -0,0 +1,105 @@
+<?php
+
+namespace Drupal\webform\Form;
+
+use Drupal\Core\Form\ConfirmFormBase;
+use Drupal\Core\Form\ConfirmFormHelper;
+use Drupal\Core\Form\FormStateInterface;
+
+/**
+ * Provides a generic base class for a webform deletion form.
+ */
+abstract class WebformDeleteFormBase extends ConfirmFormBase implements WebformDeleteFormInterface {
+
+  use WebformDialogFormTrait;
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getFormName() {
+    return 'webform_delete';
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function buildForm(array $form, FormStateInterface $form_state) {
+    $form['#attributes']['class'][] = 'confirmation';
+    $form['#theme'] = 'confirm_form';
+    $form[$this->getFormName()] = ['#type' => 'hidden', '#value' => 1];
+
+    // Title.
+    $form['#title'] = $this->getQuestion();
+
+    // Warning.
+    $form['warning'] = $this->getWarning();
+
+    // Description.
+    $form['description'] = $this->getDescription();
+
+    // Details and confirm input.
+    $details = $this->getDetails();
+    $confirm_input = $this->getConfirmInput();
+    if ($details) {
+      $form['details'] = $details;
+    }
+    if (!$details && $confirm_input) {
+      $form['hr'] = ['#markup' => '<p><hr/></p>'];
+    }
+    if ($confirm_input) {
+      $form['confirm'] = $confirm_input;
+    }
+
+    // Actions.
+    $form['actions'] = ['#type' => 'actions'];
+    $form['actions']['submit'] = [
+      '#type' => 'submit',
+      '#value' => $this->getConfirmText(),
+      '#button_type' => 'primary',
+    ];
+    $form['actions']['cancel'] = ConfirmFormHelper::buildCancelLink($this, $this->getRequest());
+
+    return $this->buildDialogConfirmForm($form, $form_state);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getWarning() {
+    return [
+      '#type' => 'webform_message',
+      '#message_type' => 'warning',
+      '#message_message' => $this->t('Are you sure you want to delete this?') . '<br/>' .
+        '<strong>' . $this->t('This action cannot be undone.') . '</strong>',
+    ];
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getDescription() {
+    return [];
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getDetails() {
+    return [];
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getConfirmInput() {
+    return [];
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getConfirmText() {
+    return $this->t('Delete');
+  }
+
+}
diff --git a/src/Form/WebformDeleteFormInterface.php b/src/Form/WebformDeleteFormInterface.php
new file mode 100644
index 00000000..844e0f71
--- /dev/null
+++ b/src/Form/WebformDeleteFormInterface.php
@@ -0,0 +1,39 @@
+<?php
+
+namespace Drupal\webform\Form;
+
+use Drupal\Core\Form\ConfirmFormInterface;
+
+/**
+ * Defines an interface for webform delete forms.
+ */
+interface WebformDeleteFormInterface extends ConfirmFormInterface {
+
+  /**
+   * Returns warning message to display.
+   *
+   * @return array
+   *   A renderable array containing a warning message.
+   */
+  public function getWarning();
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getDescription();
+  /**
+   * Returns details to display.
+   *
+   * @return array
+   *   A renderable array containing details.
+   */
+  public function getDetails();
+
+  /**
+   * Returns confirm input to display.
+   *
+   * @return array
+   *   A renderable array containing confirm input.
+   */
+  public function getConfirmInput();
+}
diff --git a/src/Form/WebformHandlerDeleteForm.php b/src/Form/WebformHandlerDeleteForm.php
index 6a35b714..b5ae08e6 100644
--- a/src/Form/WebformHandlerDeleteForm.php
+++ b/src/Form/WebformHandlerDeleteForm.php
@@ -2,16 +2,13 @@
 
 namespace Drupal\webform\Form;
 
-use Drupal\Core\Form\ConfirmFormBase;
 use Drupal\Core\Form\FormStateInterface;
 use Drupal\webform\WebformInterface;
 
 /**
  * Form for deleting a webform handler.
  */
-class WebformHandlerDeleteForm extends ConfirmFormBase {
-
-  use WebformDialogFormTrait;
+class WebformHandlerDeleteForm extends WebformDeleteFormBase {
 
   /**
    * The webform containing the webform handler to be deleted.
@@ -31,16 +28,50 @@ class WebformHandlerDeleteForm extends ConfirmFormBase {
    * {@inheritdoc}
    */
   public function getQuestion() {
-    return $this->t('Are you sure you want to delete the @handler handler from the %webform webform?', ['%webform' => $this->webform->label(), '@handler' => $this->webformHandler->label()]);
+    $t_args = ['%webform' => $this->webform->label(), '%title' => $this->webformHandler->label()];
+    if ($this->isDialog()) {
+      return $this->t('Delete the %title handler?', $t_args);
+    }
+    else {
+      return $this->t('Delete the %title handler from the %webform webform?', $t_args);
+    }
   }
 
   /**
    * {@inheritdoc}
    */
-  public function getConfirmText() {
-    return $this->t('Delete');
+  public function getWarning() {
+    $t_args = ['%title' => $this->webformHandler->label()];
+    return [
+      '#type' => 'webform_message',
+      '#message_type' => 'warning',
+      '#message_message' => $this->t('Are you sure you want to delete the %title handler?', $t_args) . '<br/>' .
+        '<strong>' . $this->t('This action cannot be undone.') . '</strong>',
+    ];
   }
 
+  /**
+   * {@inheritdoc}
+   */
+  public function getDescription() {
+    return [
+      'title' => [
+        '#markup' => $this->t('This action will…'),
+      ],
+      'list' => [
+        '#theme' => 'item_list',
+        '#items' => [
+          $this->t('Remove this handler'),
+          $this->t('Cancel all pending actions')
+        ],
+      ],
+    ];
+  }
+
+  /****************************************************************************/
+  // Form methods.
+  /****************************************************************************/
+
   /**
    * {@inheritdoc}
    */
@@ -62,9 +93,7 @@ class WebformHandlerDeleteForm extends ConfirmFormBase {
     $this->webform = $webform;
     $this->webformHandler = $this->webform->getHandler($webform_handler);
 
-    $form = parent::buildForm($form, $form_state);
-    $this->buildDialogConfirmForm($form, $form_state);
-    return $form;
+    return parent::buildForm($form, $form_state);
   }
 
   /**
diff --git a/src/Form/WebformResultsClearForm.php b/src/Form/WebformResultsClearForm.php
index 8043fad3..c1a4f779 100644
--- a/src/Form/WebformResultsClearForm.php
+++ b/src/Form/WebformResultsClearForm.php
@@ -2,6 +2,8 @@
 
 namespace Drupal\webform\Form;
 
+use Drupal\Core\Form\FormStateInterface;
+
 /**
  * Webform for webform results clear webform.
  */
@@ -18,13 +20,78 @@ class WebformResultsClearForm extends WebformSubmissionsDeleteFormBase {
    * {@inheritdoc}
    */
   public function getQuestion() {
-    if ($this->sourceEntity) {
-      $t_args = ['%title' => $this->sourceEntity->label()];
+    $t_args = ['%label' => $this->getLabel()];
+    return $this->t('Clear all %label submissions?', $t_args);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function buildForm(array $form, FormStateInterface $form_state) {
+    $submission_total = $this->submissionStorage->getTotal($this->webform, $this->sourceEntity);
+    if ($submission_total) {
+      return parent::buildForm($form, $form_state);
     }
     else {
-      $t_args = ['%title' => $this->webform->label()];
+      $t_args = ['%label' => $this->getLabel()];
+      $form['message'] =  [
+        '#type' => 'webform_message',
+        '#message_type' => 'error',
+        '#message_message' => $this->t('There are no %label submissions.', $t_args),
+      ];
+      return $form;
     }
-    return $this->t('Are you sure you want to delete all submissions to the %title webform?', $t_args);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getWarning() {
+    $t_args = ['%label' => $this->getLabel()];
+    return [
+      '#type' => 'webform_message',
+      '#message_type' => 'warning',
+      '#message_message' => $this->t('Are you sure you want to clear all %label submissions?', $t_args) . '<br/>' .
+        '<strong>' . $this->t('This action cannot be undone.') . '</strong>',
+    ];
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getDescription() {
+    $submission_total = $this->submissionStorage->getTotal($this->webform, $this->sourceEntity);
+
+    $t_args = [
+      '%label' => $this->getLabel(),
+      '@total' => $submission_total,
+      '@submissions' => $this->formatPlural($submission_total, 'submission', 'submissions'),
+    ];
+
+    return [
+      'title' => [
+        '#markup' => $this->t('This action will…'),
+      ],
+      'list' => [
+        '#theme' => 'item_list',
+        '#items' => [
+          $this->t('Remove @total %label @submissions', $t_args),
+          ['#markup' => '<em>' . $this->t('May take a few minutes to complete') . '</em>'],
+        ],
+      ],
+    ];
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getConfirmInput() {
+    $t_args = ['%label' => $this->getLabel()];
+    return [
+      '#type' => 'checkbox',
+      '#title' => $this->t('Yes, I want to clear all %label submissions', $t_args),
+      '#required' => TRUE,
+    ];
   }
 
   /**
@@ -38,13 +105,8 @@ class WebformResultsClearForm extends WebformSubmissionsDeleteFormBase {
    * {@inheritdoc}
    */
   public function getMessage() {
-    if ($this->sourceEntity) {
-      $t_args = ['%title' => $this->sourceEntity->label()];
-    }
-    else {
-      $t_args = ['%title' => $this->webform->label()];
-    }
-    $this->t('Webform %title submissions cleared.', $t_args);
+    $t_args = ['%label' => $this->getLabel()];
+    $this->t('Webform %label submissions cleared.', $t_args);
   }
 
 }
diff --git a/src/Form/WebformSubmissionDeleteForm.php b/src/Form/WebformSubmissionDeleteForm.php
index d39ba796..b12b0bb4 100644
--- a/src/Form/WebformSubmissionDeleteForm.php
+++ b/src/Form/WebformSubmissionDeleteForm.php
@@ -11,7 +11,7 @@ use Symfony\Component\DependencyInjection\ContainerInterface;
 /**
  * Provides a confirmation webform for deleting a webform submission.
  */
-class WebformSubmissionDeleteForm extends ContentEntityDeleteForm {
+class WebformSubmissionDeleteForm extends ContentEntityDeleteForm implements WebformDeleteFormInterface {
 
   /**
    * The webform entity.
@@ -20,7 +20,6 @@ class WebformSubmissionDeleteForm extends ContentEntityDeleteForm {
    */
   protected $webform;
 
-
   /**
    * The webform submission entity.
    *
@@ -71,7 +70,12 @@ class WebformSubmissionDeleteForm extends ContentEntityDeleteForm {
   public function buildForm(array $form, FormStateInterface $form_state) {
     list($this->webformSubmission, $this->sourceEntity) = $this->requestHandler->getWebformSubmissionEntities();
     $this->webform = $this->webformSubmission->getWebform();
-    return parent::buildForm($form, $form_state);
+
+    $form['warning'] = $this->getWarning();
+    $form = parent::buildForm($form, $form_state);
+    $form['description'] = $this->getDescription();
+
+    return $form;
   }
 
   /**
@@ -101,14 +105,67 @@ class WebformSubmissionDeleteForm extends ContentEntityDeleteForm {
    * {@inheritdoc}
    */
   public function getQuestion() {
-    return $this->t('Are you sure you want to delete @title?', ['@title' => $this->webformSubmission->label()]);
+    $t_args = [
+      '%label' => $this->getEntity()->label(),
+    ];
+    return $this->t('Delete %label?', $t_args);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getWarning() {
+    $t_args = [
+      '@entity-type' => $this->getEntity()->getEntityType()->getLowercaseLabel(),
+      '%label' => $this->getEntity()->label(),
+    ];
+
+    return [
+      '#type' => 'webform_message',
+      '#message_type' => 'warning',
+      '#message_message' => $this->t('Are you sure you want to delete the %label @entity-type?', $t_args) . '<br/>' .
+        '<strong>' . $this->t('This action cannot be undone.') . '</strong>',
+    ];
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getDescription() {
+    return [
+      'title' => [
+        '#markup' => $this->t('This action will…'),
+      ],
+      'list' => [
+        '#theme' => 'item_list',
+        '#items' => [
+          $this->t('Remove records from the database'),
+          $this->t('Delete any uploaded files'),
+          $this->t('Cancel all pending actions'),
+        ],
+      ],
+    ];
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getDetails() {
+    return [];
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getConfirmInput() {
+    return [];
   }
 
   /**
    * {@inheritdoc}
    */
   protected function getDeletionMessage() {
-    return $this->t('@title has been deleted.', ['@title' => $this->webformSubmission->label()]);
+    return $this->t('%label has been deleted.', ['%label' => $this->webformSubmission->label()]);
   }
 
   /**
diff --git a/src/Form/WebformSubmissionsDeleteFormBase.php b/src/Form/WebformSubmissionsDeleteFormBase.php
index 85fa859f..e026385a 100644
--- a/src/Form/WebformSubmissionsDeleteFormBase.php
+++ b/src/Form/WebformSubmissionsDeleteFormBase.php
@@ -4,7 +4,6 @@ namespace Drupal\webform\Form;
 
 use Drupal\Core\Entity\EntityInterface;
 use Drupal\Core\Entity\EntityTypeManagerInterface;
-use Drupal\Core\Form\ConfirmFormBase;
 use Drupal\Core\Form\FormStateInterface;
 use Drupal\webform\WebformInterface;
 use Drupal\webform\WebformRequestInterface;
@@ -13,7 +12,7 @@ use Symfony\Component\DependencyInjection\ContainerInterface;
 /**
  * Base webform for deleting webform submission.
  */
-abstract class WebformSubmissionsDeleteFormBase extends ConfirmFormBase {
+abstract class WebformSubmissionsDeleteFormBase extends WebformDeleteFormBase {
 
   /**
    * Default number of submission to be deleted during batch processing.
@@ -61,6 +60,8 @@ abstract class WebformSubmissionsDeleteFormBase extends ConfirmFormBase {
   public function __construct(EntityTypeManagerInterface $entity_type_manager, WebformRequestInterface $request_handler) {
     $this->submissionStorage = $entity_type_manager->getStorage('webform_submission');
     $this->requestHandler = $request_handler;
+
+    list($this->webform, $this->sourceEntity) = $this->requestHandler->getWebformEntities();
   }
 
   /**
@@ -80,14 +81,6 @@ abstract class WebformSubmissionsDeleteFormBase extends ConfirmFormBase {
     return $this->t('Clear');
   }
 
-  /**
-   * {@inheritdoc}
-   */
-  public function buildForm(array $form, FormStateInterface $form_state) {
-    list($this->webform, $this->sourceEntity) = $this->requestHandler->getWebformEntities();
-    return parent::buildForm($form, $form_state);
-  }
-
   /**
    * {@inheritdoc}
    */
@@ -102,6 +95,24 @@ abstract class WebformSubmissionsDeleteFormBase extends ConfirmFormBase {
     }
   }
 
+  /**
+   * Get webform or source entity label.
+   *
+   * @return null|string
+   *   Webform or source entity label.
+   */
+  public function getLabel() {
+    if ($this->sourceEntity) {
+      return $this->sourceEntity->label();
+    }
+    elseif ($this->webform->label()) {
+      return $this->webform->label();
+    }
+    else {
+      return '';
+    }
+  }
+
   /**
    * Message to displayed after submissions are deleted.
    *
@@ -112,6 +123,10 @@ abstract class WebformSubmissionsDeleteFormBase extends ConfirmFormBase {
     return $this->t('Webform submissions cleared.');
   }
 
+  /****************************************************************************/
+  // Batch API.
+  /****************************************************************************/
+
   /**
    * Batch API; Initialize batch operations.
    *
diff --git a/src/Form/WebformSubmissionsPurgeForm.php b/src/Form/WebformSubmissionsPurgeForm.php
index 040c7650..b2178ecf 100644
--- a/src/Form/WebformSubmissionsPurgeForm.php
+++ b/src/Form/WebformSubmissionsPurgeForm.php
@@ -21,36 +21,43 @@ class WebformSubmissionsPurgeForm extends WebformSubmissionsDeleteFormBase {
    * {@inheritdoc}
    */
   public function getQuestion() {
-    return $this->t('Are you sure you want to delete all submissions?');
+    return $this->t('Purge all submissions?');
   }
 
   /**
    * {@inheritdoc}
    */
-  public function getConfirmText() {
-    return $this->t('Purge');
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getCancelUrl() {
-    return new Url('entity.webform_submission.collection');
+  public function buildForm(array $form, FormStateInterface $form_state) {
+    $submission_total = \Drupal::entityQuery('webform_submission')->count()->execute();
+    if ($submission_total) {
+      return parent::buildForm($form, $form_state);
+    }
+    else {
+      $form['message'] =  [
+        '#type' => 'webform_message',
+        '#message_type' => 'error',
+        '#message_message' => $this->t('There are no webform submissions.'),
+      ];
+      return $form;
+    }
   }
 
   /**
    * {@inheritdoc}
    */
-  public function getFinishedMessage() {
-    return $this->t('Webform submissions purged.');
+  public function getWarning() {
+    return [
+      '#type' => 'webform_message',
+      '#message_type' => 'warning',
+      '#message_message' => $this->t('Are you sure you want to purge all submissions?') . '<br/>' .
+        '<strong>' . $this->t('This action cannot be undone.') . '</strong>',
+    ];
   }
 
   /**
    * {@inheritdoc}
    */
-  public function buildForm(array $form, FormStateInterface $form_state) {
-    $form = parent::buildForm($form, $form_state);
-
+  public function getDescription() {
     $submission_total = \Drupal::entityQuery('webform_submission')->count()->execute();
     $form_total = \Drupal::entityQuery('webform')->count()->execute();
 
@@ -61,14 +68,50 @@ class WebformSubmissionsPurgeForm extends WebformSubmissionsDeleteFormBase {
       '@forms' => $this->formatPlural($form_total, 'webform', 'webforms'),
     ];
 
-    $form['confirm'] = [
+    return [
+      'title' => [
+        '#markup' => $this->t('This action will…'),
+      ],
+      'list' => [
+        '#theme' => 'item_list',
+        '#items' => [
+          $this->t('Remove @submission_total @submissions in @form_total @forms', $t_args),
+          ['#markup' => '<em>' . $this->t('May take a few minutes to complete') . '</em>'],
+        ],
+      ],
+    ];
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getConfirmInput() {
+    return [
       '#type' => 'checkbox',
-      '#title' => $this->t('Are you sure you want to delete @submission_total @submissions in @form_total @forms?', $t_args),
+      '#title' => $this->t('Yes, I want to purge all submissions'),
       '#required' => TRUE,
-      '#weight' => -10,
     ];
+  }
 
-    return $form;
+  /**
+   * {@inheritdoc}
+   */
+  public function getConfirmText() {
+    return $this->t('Purge');
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getCancelUrl() {
+    return new Url('entity.webform_submission.collection');
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getFinishedMessage() {
+    return $this->t('Webform submissions purged.');
   }
 
 }
diff --git a/src/Tests/Element/WebformElementPluginTest.php b/src/Tests/Element/WebformElementPluginTest.php
index 29d7ba16..27a72467 100644
--- a/src/Tests/Element/WebformElementPluginTest.php
+++ b/src/Tests/Element/WebformElementPluginTest.php
@@ -100,7 +100,7 @@ class WebformElementPluginTest extends WebformElementTestBase {
     $this->drupalPostForm('/admin/structure/webform/manage/test_element_plugin/submission/' . $sid . '/delete', [], t('Delete'));
     $this->assertRaw('Invoked: Drupal\webform_test_element\Plugin\WebformElement\WebformTestElement:preDelete');
     $this->assertRaw('Invoked: Drupal\webform_test_element\Plugin\WebformElement\WebformTestElement:postDelete');
-    $this->assertRaw('Test: Element: Test (plugin): Submission #' . $webform_submission->serial() . ' has been deleted.');
+    $this->assertRaw('<em class="placeholder">Test: Element: Test (plugin): Submission #' . $webform_submission->serial() . '</em> has been deleted.');
   }
 
 }
diff --git a/src/Tests/Handler/WebformHandlerTest.php b/src/Tests/Handler/WebformHandlerTest.php
index 05a2a6bb..baaf568c 100644
--- a/src/Tests/Handler/WebformHandlerTest.php
+++ b/src/Tests/Handler/WebformHandlerTest.php
@@ -101,7 +101,7 @@ class WebformHandlerTest extends WebformTestBase {
     $this->assertRaw('Invoked test: Drupal\webform_test_handler\Plugin\WebformHandler\TestWebformHandler:postLoad');
     $this->assertRaw('Invoked test: Drupal\webform_test_handler\Plugin\WebformHandler\TestWebformHandler:preDelete');
     $this->assertRaw('Invoked test: Drupal\webform_test_handler\Plugin\WebformHandler\TestWebformHandler:postDelete');
-    $this->assertRaw('Submission #' . $webform_submission->serial() . ' has been deleted.');
+    $this->assertRaw('<em class="placeholder">Test: Handler: Test invoke methods: Submission #' . $webform_submission->serial() . '</em> has been deleted.');
 
     // Check configuration settings.
     $this->drupalPostForm('admin/structure/webform/manage/test_handler_test/handlers/test/edit', ['settings[message]' => '{message}'], t('Save'));
diff --git a/src/WebformEntityDeleteForm.php b/src/WebformEntityDeleteForm.php
index 7bb560e2..3f07353e 100644
--- a/src/WebformEntityDeleteForm.php
+++ b/src/WebformEntityDeleteForm.php
@@ -2,38 +2,30 @@
 
 namespace Drupal\webform;
 
-use Drupal\Core\Entity\EntityDeleteForm;
-use Drupal\Core\Form\FormStateInterface;
-use Drupal\Core\Url;
-use Drupal\webform\Form\WebformDialogFormTrait;
+use Drupal\webform\Form\WebformConfigEntityDeleteFormBase;
 
 /**
  * Provides a delete webform form.
  */
-class WebformEntityDeleteForm extends EntityDeleteForm {
-
-  use WebformDialogFormTrait;
+class WebformEntityDeleteForm extends WebformConfigEntityDeleteFormBase {
 
   /**
    * {@inheritdoc}
    */
-  public function buildForm(array $form, FormStateInterface $form_state) {
-    $form = parent::buildForm($form, $form_state);
-    $form['confirm'] = [
-      '#type' => 'checkbox',
-      '#title' => $this->t('Yes, I want to delete this webform.'),
-      '#required' => TRUE,
-      '#weight' => 10,
+  public function getDescription() {
+    return [
+      'title' => [
+        '#markup' => $this->t('This action will…'),
+      ],
+      'list' => [
+        '#theme' => 'item_list',
+        '#items' => [
+          $this->t('Remove configuration'),
+          $this->t('Delete all related submissions'),
+          $this->t('Affect any fields or nodes which reference this webform'),
+        ],
+      ],
     ];
-
-    return $this->buildDialogConfirmForm($form, $form_state);
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getRedirectUrl() {
-    return Url::fromRoute('entity.webform.collection');
   }
 
 }
diff --git a/src/WebformHelpManager.php b/src/WebformHelpManager.php
index 0443c4c0..b58effad 100644
--- a/src/WebformHelpManager.php
+++ b/src/WebformHelpManager.php
@@ -1732,18 +1732,6 @@ class WebformHelpManager implements WebformHelpManagerInterface {
       ],
     ];
 
-    // Submissions: Purge.
-    $help['submissions_purge'] = [
-      'group' => 'submissions',
-      'title' => $this->t('Submissions: Purge'),
-      'content' => $this->t('The <strong>Submissions purge</strong> page allows all submissions across all webforms to be deleted. <strong>PLEASE NOTE: THIS ACTION CANNOT BE UNDONE.</strong>'),
-      'message_type' => 'warning',
-      'routes' => [
-        // @see /admin/structure/webform/results/purge
-        'entity.webform_submission.collection_purge',
-      ],
-    ];
-
     // Submissions: Log.
     $help['submissions_log'] = [
       'group' => 'submissions',
@@ -1755,7 +1743,6 @@ class WebformHelpManager implements WebformHelpManagerInterface {
       ],
     ];
 
-
     // Results.
     $help['results'] = [
       'group' => 'submissions',
@@ -1791,17 +1778,6 @@ class WebformHelpManager implements WebformHelpManagerInterface {
       ],
     ];
 
-    // Results: Clear.
-    $help['results_clear'] = [
-      'group' => 'submissions',
-      'title' => $this->t('Results: Clear'),
-      'content' => $this->t("The <strong>Clear</strong> page allows all submissions to a webform to be deleted."),
-      'routes' => [
-        // @see /admin/structure/webform/manage/{webform}/results/clear
-        'entity.webform.results_clear',
-      ],
-    ];
-
     /**************************************************************************/
     // Submission.
     /**************************************************************************/
@@ -2004,15 +1980,6 @@ class WebformHelpManager implements WebformHelpManagerInterface {
         'entity.node.webform.results_export',
       ],
     ];
-    $help['webform_node_results_clear'] = [
-      'group' => 'webform_nodes',
-      'title' => $this->t('Webform Node: Results: Clear'),
-      'content' => $this->t("The <strong>Clear</strong> page allows all submissions to a webform node to be deleted."),
-      'routes' => [
-        // @see /node/{node}/webform/results/clear
-        'entity.node.webform.results_clear',
-      ],
-    ];
 
     // Webform Block.
     $help['webform_block'] = [
diff --git a/src/WebformOptionsDeleteForm.php b/src/WebformOptionsDeleteForm.php
index 5215faf5..e9ce67db 100644
--- a/src/WebformOptionsDeleteForm.php
+++ b/src/WebformOptionsDeleteForm.php
@@ -2,72 +2,79 @@
 
 namespace Drupal\webform;
 
-use Drupal\Core\Entity\EntityDeleteForm;
-use Drupal\Core\Form\FormStateInterface;
-use Drupal\Core\Url;
-use Drupal\webform\Form\WebformDialogFormTrait;
+use Drupal\webform\Form\WebformConfigEntityDeleteFormBase;
 
 /**
  * Provides a delete webform options form.
  */
-class WebformOptionsDeleteForm extends EntityDeleteForm {
-
-  use WebformDialogFormTrait;
+class WebformOptionsDeleteForm extends WebformConfigEntityDeleteFormBase {
 
   /**
    * {@inheritdoc}
    */
-  public function buildForm(array $form, FormStateInterface $form_state) {
-    $form = parent::buildForm($form, $form_state);
+  public function getDescription() {
+    return [
+      'title' => [
+        '#markup' => $this->t('This action will…'),
+      ],
+      'list' => [
+        '#theme' => 'item_list',
+        '#items' => [
+          $this->t('Remove configuration'),
+          $this->t('Affect any elements which use these options'),
+        ],
+      ],
+    ];
+  }
 
+  /**
+   * {@inheritdoc}
+   */
+  public function getDetails() {
     /** @var \Drupal\webform\WebformOptionsInterface $webform_options */
     $webform_options = $this->entity;
 
     /** @var \Drupal\webform\WebformOptionsStorageInterface $webform_options_storage */
     $webform_options_storage = $this->entityTypeManager->getStorage('webform_options');
 
-    // Display warning that options is used by composite elements
-    // and/or webforms.
-    $t_args = ['%title' => $webform_options->label()];
-    $message = [];
+    $t_args = [
+      '%label' => $this->getEntity()->label(),
+      '@entity-type' => $this->getEntity()->getEntityType()->getLowercaseLabel(),
+    ];
+
+    $details = [];
     if ($used_by_elements = $webform_options_storage->getUsedByCompositeElements($webform_options)) {
-      $message['elements'] = [
-        '#theme' => 'item_list',
-        '#title' => $this->t('%title is used by the below composite element(s).', $t_args),
-        '#items' => $used_by_elements,
+      $details['elements'] = [
+        'title' => [
+          '#markup' => $this->t('%label is used by the below composite element(s).', $t_args),
+        ],
+        'list' => [
+          '#theme' => 'item_list',
+          '#items' => $used_by_elements,
+        ],
       ];
     }
     if ($used_by_webforms = $webform_options_storage->getUsedByWebforms($webform_options)) {
-      $message['webform'] = [
-        '#theme' => 'item_list',
-        '#title' => $this->t('%title is used by the below webform(s).', $t_args),
-        '#items' => $used_by_webforms,
+      $details['webform'] = [
+        'title' => [
+          '#markup' => $this->t('%label is used by the below webform(s).', $t_args),
+        ],
+        'list' => [
+          '#theme' => 'item_list',
+          '#items' => $used_by_webforms,
+        ],
       ];
     }
-    if ($message) {
-      $form['used_by_composite_elements'] = [
-        '#type' => 'webform_message',
-        '#message_message' => $message,
-        '#message_type' => 'warning',
-        '#weight' => -100,
-      ];
-    }
-
-    $form['confirm'] = [
-      '#type' => 'checkbox',
-      '#title' => $this->t('Yes, I want to delete these webform options.'),
-      '#required' => TRUE,
-      '#weight' => 10,
-    ];
-
-    return $this->buildDialogConfirmForm($form, $form_state);
-  }
 
-  /**
-   * {@inheritdoc}
-   */
-  public function getRedirectUrl() {
-    return Url::fromRoute('entity.webform_options.collection');
+    if ($details) {
+      return [
+        '#type' => 'details',
+        '#title' => $this->t('Webforms affected'),
+      ] + $details;
+    }
+    else {
+      return [];
+    }
   }
 
 }
