diff --git a/core/lib/Drupal/Core/Entity/ContentEntityConfirmFormBase.php b/core/lib/Drupal/Core/Entity/ContentEntityConfirmFormBase.php
deleted file mode 100644
index 887fcae..0000000
--- a/core/lib/Drupal/Core/Entity/ContentEntityConfirmFormBase.php
+++ /dev/null
@@ -1,129 +0,0 @@
-<?php
-
-/**
- * @file
- * Contains \Drupal\Core\Entity\ContentEntityConfirmFormBase.
- */
-
-namespace Drupal\Core\Entity;
-
-use Drupal\Core\Form\ConfirmFormHelper;
-use Drupal\Core\Form\ConfirmFormInterface;
-use Drupal\Core\Form\FormStateInterface;
-
-/**
- * Provides a generic base class for an entity-based confirmation form.
- */
-abstract class ContentEntityConfirmFormBase extends ContentEntityForm implements ConfirmFormInterface {
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getBaseFormId() {
-    return $this->entity->getEntityTypeId() . '_confirm_form';
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getDescription() {
-    return $this->t('This action cannot be undone.');
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getConfirmText() {
-    return $this->t('Confirm');
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getCancelText() {
-    return $this->t('Cancel');
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getFormName() {
-    return 'confirm';
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function buildForm(array $form, FormStateInterface $form_state) {
-    $form = parent::buildForm($form, $form_state);
-
-    $form['#title'] = $this->getQuestion();
-
-    $form['#attributes']['class'][] = 'confirmation';
-    $form['description'] = array('#markup' => $this->getDescription());
-    $form[$this->getFormName()] = array('#type' => 'hidden', '#value' => 1);
-
-    // By default, render the form using theme_confirm_form().
-    if (!isset($form['#theme'])) {
-      $form['#theme'] = 'confirm_form';
-    }
-    return $form;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function form(array $form, FormStateInterface $form_state) {
-    // Do not attach fields to the confirm form.
-    return $form;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  protected function actions(array $form, FormStateInterface $form_state) {
-    return array(
-      'submit' => array(
-        '#type' => 'submit',
-        '#value' => $this->getConfirmText(),
-        '#validate' => array(
-          array($this, 'validate'),
-        ),
-        '#submit' => array(
-          array($this, 'submitForm'),
-        ),
-      ),
-      'cancel' => ConfirmFormHelper::buildCancelLink($this, $this->getRequest()),
-    );
-  }
-
-  /**
-   * {@inheritdoc}
-   *
-   * The save() method is not used in ContentEntityConfirmFormBase. 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 ContentEntityConfirmFormBase. 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) {}
-
-  /**
-   * {@inheritdoc}
-   */
-  public function validate(array $form, FormStateInterface $form_state) {
-    // Override the default validation implementation as it is not necessary
-    // nor possible to validate an entity in a confirmation form.
-  }
-
-}
diff --git a/core/lib/Drupal/Core/Entity/ContentEntityDeleteForm.php b/core/lib/Drupal/Core/Entity/ContentEntityDeleteForm.php
index 48c3801..6e466bb 100644
--- a/core/lib/Drupal/Core/Entity/ContentEntityDeleteForm.php
+++ b/core/lib/Drupal/Core/Entity/ContentEntityDeleteForm.php
@@ -11,18 +11,8 @@
 
 /**
  * Provides a generic base class for a content entity deletion form.
- *
- * @todo Re-evaluate and streamline the entity deletion form class hierarchy in
- *   https://www.drupal.org/node/2491057.
  */
-class ContentEntityDeleteForm extends ContentEntityConfirmFormBase {
-
-  use EntityDeleteFormTrait {
-    getQuestion as traitGetQuestion;
-    logDeletionMessage as traitLogDeletionMessage;
-    getDeletionMessage as traitGetDeletionMessage;
-    getCancelUrl as traitGetCancelUrl;
-  }
+class ContentEntityDeleteForm extends EntityDeleteForm {
 
   /**
    * {@inheritdoc}
@@ -83,10 +73,38 @@ public function submitForm(array &$form, FormStateInterface $form_state) {
   /**
    * {@inheritdoc}
    */
+  public function getQuestion() {
+    /** @var \Drupal\Core\Entity\ContentEntityInterface $entity */
+    $entity = $this->getEntity();
+
+    if (!$entity->isDefaultTranslation()) {
+      return $this->t('Are you sure you want to delete the @language translation of the @entity-type %label?', array(
+        '@language' => $entity->language()->getName(),
+        '@entity-type' => $this->getEntity()->getEntityType()->getLowercaseLabel(),
+        '%label' => $this->getEntity()->label(),
+      ));
+    }
+
+    return $this->t('Are you sure you want to delete the @entity-type %label?', array(
+      '@entity-type' => $this->getEntity()->getEntityType()->getLowercaseLabel(),
+      '%label' => $this->getEntity()->label(),
+    ));
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getConfirmText() {
+    return $this->t('Delete');
+  }
+
+  /**
+   * {@inheritdoc}
+   */
   public function getCancelUrl() {
     /** @var \Drupal\Core\Entity\ContentEntityInterface $entity */
     $entity = $this->getEntity();
-    return $entity->isDefaultTranslation() ? $this->traitGetCancelUrl() : $entity->urlInfo('canonical');
+    return $entity->isDefaultTranslation() ? $this->getCancelUrl() : $entity->urlInfo('canonical');
   }
 
   /**
@@ -104,7 +122,7 @@ protected function getDeletionMessage() {
       ]);
     }
 
-    return $this->traitGetDeletionMessage();
+    return $this->getDeletionMessage();
   }
 
   /**
@@ -122,26 +140,8 @@ protected function logDeletionMessage() {
       ]);
     }
     else {
-      $this->traitLogDeletionMessage();
-    }
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getQuestion() {
-    /** @var \Drupal\Core\Entity\ContentEntityInterface $entity */
-    $entity = $this->getEntity();
-
-    if (!$entity->isDefaultTranslation()) {
-      return $this->t('Are you sure you want to delete the @language translation of the @entity-type %label?', array(
-        '@language' => $entity->language()->getName(),
-        '@entity-type' => $this->getEntity()->getEntityType()->getLowercaseLabel(),
-        '%label' => $this->getEntity()->label(),
-      ));
+      $this->logDeletionMessage();
     }
-
-    return $this->traitGetQuestion();
   }
 
 }
diff --git a/core/lib/Drupal/Core/Entity/EntityConfirmFormBase.php b/core/lib/Drupal/Core/Entity/EntityConfirmFormBase.php
index a11e27f..e090658 100644
--- a/core/lib/Drupal/Core/Entity/EntityConfirmFormBase.php
+++ b/core/lib/Drupal/Core/Entity/EntityConfirmFormBase.php
@@ -113,4 +113,17 @@ public function save(array $form, FormStateInterface $form_state) {}
    */
   public function delete(array $form, FormStateInterface $form_state) {}
 
+  /**
+   * {@inheritdoc}
+   */
+  public function validate(array $form, FormStateInterface $form_state) {
+    // It is not necessary nor possible to validate a content entity in a
+    // confirmation form.
+    if ($this->getEntity() instanceof ContentEntityInterface) {
+      return;
+    }
+
+    parent::validate($form, $form_state);
+  }
+
 }
diff --git a/core/lib/Drupal/Core/Entity/EntityDeleteForm.php b/core/lib/Drupal/Core/Entity/EntityDeleteForm.php
index dc2bad0..96dea18 100644
--- a/core/lib/Drupal/Core/Entity/EntityDeleteForm.php
+++ b/core/lib/Drupal/Core/Entity/EntityDeleteForm.php
@@ -7,8 +7,10 @@
 
 namespace Drupal\Core\Entity;
 
+use Drupal\Core\Config\Entity\ConfigDependencyDeleteFormTrait;
 use Drupal\Core\Config\Entity\ConfigEntityInterface;
 use Drupal\Core\Form\FormStateInterface;
+use Drupal\Core\Url;
 
 /**
  * Provides a generic base class for an entity deletion form.
@@ -17,7 +19,14 @@
  */
 class EntityDeleteForm extends EntityConfirmFormBase {
 
-  use EntityDeleteFormTrait;
+  use ConfigDependencyDeleteFormTrait;
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getBaseFormId() {
+    return $this->entity->getEntityTypeId() . '_delete_form';
+  }
 
   /**
    * {@inheritdoc}
@@ -40,6 +49,91 @@ public function buildForm(array $form, FormStateInterface $form_state) {
   }
 
   /**
+   * {@inheritdoc}
+   */
+  public function submitForm(array &$form, FormStateInterface $form_state) {
+    $this->getEntity()->delete();
+    drupal_set_message($this->getDeletionMessage());
+    $form_state->setRedirectUrl($this->getCancelUrl());
+    $this->logDeletionMessage();
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getQuestion() {
+    return $this->t('Are you sure you want to delete the @entity-type %label?', array(
+      '@entity-type' => $this->getEntity()->getEntityType()->getLowercaseLabel(),
+      '%label' => $this->getEntity()->label(),
+    ));
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getConfirmText() {
+    return $this->t('Delete');
+  }
+
+  /**
+   * Gets the message to display to the user after deleting the entity.
+   *
+   * @return string
+   *   The translated string of the deletion message.
+   */
+  protected function getDeletionMessage() {
+    $entity = $this->getEntity();
+    return $this->t('The @entity-type %label has been deleted.', array(
+      '@entity-type' => $entity->getEntityType()->getLowercaseLabel(),
+      '%label' => $entity->label(),
+    ));
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getCancelUrl() {
+    $entity = $this->getEntity();
+    if ($entity->hasLinkTemplate('collection')) {
+      // If available, return the collection URL.
+      return $entity->urlInfo('collection');
+    }
+    else {
+      // Otherwise fall back to the default link template.
+      return $entity->urlInfo();
+    }
+  }
+
+  /**
+   * Returns the URL where the user should be redirected after deletion.
+   *
+   * @return \Drupal\Core\Url
+   *   The redirect URL.
+   */
+  protected function getRedirectUrl() {
+    $entity = $this->getEntity();
+    if ($entity->hasLinkTemplate('collection')) {
+      // If available, return the collection URL.
+      return $entity->urlInfo('collection');
+    }
+    else {
+      // Otherwise fall back to the front page.
+      return Url::fromRoute('<front>');
+    }
+  }
+
+  /**
+   * Logs a message about the deleted entity.
+   */
+  protected function logDeletionMessage() {
+    $entity = $this->getEntity();
+    $this->logger($entity->getEntityType()->getProvider())->notice('The @entity-type %label has been deleted.', array(
+      '@entity-type' => $entity->getEntityType()->getLowercaseLabel(),
+      '%label' => $entity->label(),
+    ));
+  }
+
+  /**
    * Gets the configuration manager.
    *
    * @return \Drupal\Core\Config\ConfigManager
diff --git a/core/lib/Drupal/Core/Entity/EntityDeleteFormTrait.php b/core/lib/Drupal/Core/Entity/EntityDeleteFormTrait.php
deleted file mode 100644
index 8b9fc0e..0000000
--- a/core/lib/Drupal/Core/Entity/EntityDeleteFormTrait.php
+++ /dev/null
@@ -1,133 +0,0 @@
-<?php
-
-/**
- * @file
- * Contains \Drupal\Core\Entity\EntityDeleteFormTrait.
- */
-
-namespace Drupal\Core\Entity;
-
-use Drupal\Core\Config\Entity\ConfigDependencyDeleteFormTrait;
-use Drupal\Core\Form\FormStateInterface;
-use Drupal\Core\Url;
-
-/**
- * Provides a trait for an entity deletion form.
- *
- * This trait relies on the StringTranslationTrait and the logger method added
- * by FormBase.
- *
- * @ingroup entity_api
- */
-trait EntityDeleteFormTrait {
-  use ConfigDependencyDeleteFormTrait;
-
-  /**
-   * Gets the entity of this form.
-   *
-   * Provided by \Drupal\Core\Entity\EntityForm.
-   *
-   * @return \Drupal\Core\Entity\EntityInterface
-   *   The entity.
-   */
-  abstract public function getEntity();
-
-  /**
-   * Gets the logger for a specific channel.
-   *
-   * Provided by \Drupal\Core\Form\FormBase.
-   *
-   * @param string $channel
-   *   The name of the channel.
-   *
-   * @return \Psr\Log\LoggerInterface
-   *   The logger for this channel.
-   */
-  abstract protected function logger($channel);
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getQuestion() {
-    return $this->t('Are you sure you want to delete the @entity-type %label?', array(
-      '@entity-type' => $this->getEntity()->getEntityType()->getLowercaseLabel(),
-      '%label' => $this->getEntity()->label(),
-    ));
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getConfirmText() {
-    return $this->t('Delete');
-  }
-
-  /**
-   * Gets the message to display to the user after deleting the entity.
-   *
-   * @return string
-   *   The translated string of the deletion message.
-   */
-  protected function getDeletionMessage() {
-    $entity = $this->getEntity();
-    return $this->t('The @entity-type %label has been deleted.', array(
-      '@entity-type' => $entity->getEntityType()->getLowercaseLabel(),
-      '%label' => $entity->label(),
-    ));
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getCancelUrl() {
-    $entity = $this->getEntity();
-    if ($entity->hasLinkTemplate('collection')) {
-      // If available, return the collection URL.
-      return $entity->urlInfo('collection');
-    }
-    else {
-      // Otherwise fall back to the default link template.
-      return $entity->urlInfo();
-    }
-  }
-
-  /**
-   * Returns the URL where the user should be redirected after deletion.
-   *
-   * @return \Drupal\Core\Url
-   *   The redirect URL.
-   */
-  protected function getRedirectUrl() {
-    $entity = $this->getEntity();
-    if ($entity->hasLinkTemplate('collection')) {
-      // If available, return the collection URL.
-      return $entity->urlInfo('collection');
-    }
-    else {
-      // Otherwise fall back to the front page.
-      return Url::fromRoute('<front>');
-    }
-  }
-
-  /**
-   * Logs a message about the deleted entity.
-   */
-  protected function logDeletionMessage() {
-    $entity = $this->getEntity();
-    $this->logger($entity->getEntityType()->getProvider())->notice('The @entity-type %label has been deleted.', array(
-      '@entity-type' => $entity->getEntityType()->getLowercaseLabel(),
-      '%label' => $entity->label(),
-    ));
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function submitForm(array &$form, FormStateInterface $form_state) {
-    $this->getEntity()->delete();
-    drupal_set_message($this->getDeletionMessage());
-    $form_state->setRedirectUrl($this->getCancelUrl());
-    $this->logDeletionMessage();
-  }
-
-}
diff --git a/core/modules/aggregator/src/Form/FeedItemsDeleteForm.php b/core/modules/aggregator/src/Form/FeedItemsDeleteForm.php
index 494ae8f..3354edf 100644
--- a/core/modules/aggregator/src/Form/FeedItemsDeleteForm.php
+++ b/core/modules/aggregator/src/Form/FeedItemsDeleteForm.php
@@ -7,14 +7,14 @@
 
 namespace Drupal\aggregator\Form;
 
-use Drupal\Core\Entity\ContentEntityConfirmFormBase;
+use Drupal\Core\Entity\EntityConfirmFormBase;
 use Drupal\Core\Form\FormStateInterface;
 use Drupal\Core\Url;
 
 /**
  * Provides a deletion confirmation form for items that belong to a feed.
  */
-class FeedItemsDeleteForm extends ContentEntityConfirmFormBase {
+class FeedItemsDeleteForm extends EntityConfirmFormBase {
 
   /**
    * {@inheritdoc}
diff --git a/core/modules/shortcut/src/Form/ShortcutDeleteForm.php b/core/modules/shortcut/src/Form/ShortcutDeleteForm.php
index b3864cd..aa6836e 100644
--- a/core/modules/shortcut/src/Form/ShortcutDeleteForm.php
+++ b/core/modules/shortcut/src/Form/ShortcutDeleteForm.php
@@ -18,13 +18,6 @@ class ShortcutDeleteForm extends ContentEntityDeleteForm {
   /**
    * {@inheritdoc}
    */
-  public function getFormId() {
-    return 'shortcut_confirm_delete';
-  }
-
-  /**
-   * {@inheritdoc}
-   */
   public function getCancelUrl() {
     return new Url('entity.shortcut_set.customize_form', array(
       'shortcut_set' => $this->entity->bundle(),
diff --git a/core/modules/user/src/Form/UserCancelForm.php b/core/modules/user/src/Form/UserCancelForm.php
index 13ce339..d375a19 100644
--- a/core/modules/user/src/Form/UserCancelForm.php
+++ b/core/modules/user/src/Form/UserCancelForm.php
@@ -7,13 +7,13 @@
 
 namespace Drupal\user\Form;
 
-use Drupal\Core\Entity\ContentEntityConfirmFormBase;
+use Drupal\Core\Entity\EntityConfirmFormBase;
 use Drupal\Core\Form\FormStateInterface;
 
 /**
  * Provides a confirmation form for cancelling user account.
  */
-class UserCancelForm extends ContentEntityConfirmFormBase {
+class UserCancelForm extends EntityConfirmFormBase {
 
   /**
    * Available account cancellation methods.
