diff --git a/core/lib/Drupal/Core/Entity/ContentEntityConfirmFormBase.php b/core/lib/Drupal/Core/Entity/ContentEntityConfirmFormBase.php
deleted file mode 100644
index bc0bdf3..0000000
--- a/core/lib/Drupal/Core/Entity/ContentEntityConfirmFormBase.php
+++ /dev/null
@@ -1,122 +0,0 @@
-<?php
-
-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'] = ['#markup' => $this->getDescription()];
-    $form[$this->getFormName()] = ['#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 [
-      'submit' => [
-        '#type' => 'submit',
-        '#value' => $this->getConfirmText(),
-        '#submit' => [
-          [$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 validateForm(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.
-    return $this->entity;
-  }
-
-}
diff --git a/core/lib/Drupal/Core/Entity/ContentEntityDeleteForm.php b/core/lib/Drupal/Core/Entity/ContentEntityDeleteForm.php
index 9a70ef5..196c168 100644
--- a/core/lib/Drupal/Core/Entity/ContentEntityDeleteForm.php
+++ b/core/lib/Drupal/Core/Entity/ContentEntityDeleteForm.php
@@ -6,18 +6,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}
@@ -34,19 +24,19 @@ public function buildForm(array $form, FormStateInterface $form_state) {
           $languages[] = $language->getName();
         }
 
-        $form['deleted_translations'] = [
+        $form['deleted_translations'] = array(
           '#theme' => 'item_list',
           '#title' => $this->t('The following @entity-type translations will be deleted:', [
             '@entity-type' => $entity->getEntityType()->getLowercaseLabel()
           ]),
           '#items' => $languages,
-        ];
+        );
 
         $form['actions']['submit']['#value'] = $this->t('Delete all translations');
       }
     }
     else {
-      $form['actions']['submit']['#value'] = $this->t('Delete @language translation', ['@language' => $entity->language()->getName()]);
+      $form['actions']['submit']['#value'] = $this->t('Delete @language translation', array('@language' => $entity->language()->getName()));
     }
 
     return $form;
@@ -78,10 +68,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');
   }
 
   /**
@@ -99,7 +117,7 @@ protected function getDeletionMessage() {
       ]);
     }
 
-    return $this->traitGetDeletionMessage();
+    return $this->getDeletionMessage();
   }
 
   /**
@@ -108,7 +126,7 @@ protected function getDeletionMessage() {
   protected function logDeletionMessage() {
     /** @var \Drupal\Core\Entity\ContentEntityInterface $entity */
     $entity = $this->getEntity();
-
+
     if (!$entity->isDefaultTranslation()) {
       $this->logger($entity->getEntityType()->getProvider())->notice('The @entity-type %label @language translation has been deleted.', [
         '@entity-type' => $entity->getEntityType()->getLowercaseLabel(),
@@ -117,26 +135,6 @@ 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?', [
-        '@language' => $entity->language()->getName(),
-        '@entity-type' => $this->getEntity()->getEntityType()->getLowercaseLabel(),
-        '%label' => $this->getEntity()->label(),
-      ]);
+      $this->logDeletionMessage();
     }
-
-    return $this->traitGetQuestion();
-  }
-
-}
+  }
\ No newline at end of file
diff --git a/core/lib/Drupal/Core/Entity/EntityConfirmFormBase.php b/core/lib/Drupal/Core/Entity/EntityConfirmFormBase.php
index d8c39e4..0cb6ce7 100644
--- a/core/lib/Drupal/Core/Entity/EntityConfirmFormBase.php
+++ b/core/lib/Drupal/Core/Entity/EntityConfirmFormBase.php
@@ -102,6 +102,21 @@ public function save(array $form, FormStateInterface $form_state) {}
    *
    * Confirmation forms should override submitForm() instead for their logic.
    */
-  public function delete(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 b7a66e3..2a48d10 100644
--- a/core/lib/Drupal/Core/Entity/EntityDeleteForm.php
+++ b/core/lib/Drupal/Core/Entity/EntityDeleteForm.php
@@ -2,8 +2,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.
@@ -12,7 +14,14 @@
  */
 class EntityDeleteForm extends EntityConfirmFormBase {
 
-  use EntityDeleteFormTrait;
+  use ConfigDependencyDeleteFormTrait;
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getBaseFormId() {
+    return $this->entity->getEntityTypeId() . '_delete_form';
+  }
 
   /**
    * {@inheritdoc}
@@ -35,6 +44,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 2faf45c..0000000
--- a/core/lib/Drupal/Core/Entity/EntityDeleteFormTrait.php
+++ /dev/null
@@ -1,128 +0,0 @@
-<?php
-
-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?', [
-      '@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.', [
-      '@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.', [
-      '@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 48c83dc..9a6fd5e 100644
--- a/core/modules/aggregator/src/Form/FeedItemsDeleteForm.php
+++ b/core/modules/aggregator/src/Form/FeedItemsDeleteForm.php
@@ -2,14 +2,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 fcabeec..39b54d8 100644
--- a/core/modules/shortcut/src/Form/ShortcutDeleteForm.php
+++ b/core/modules/shortcut/src/Form/ShortcutDeleteForm.php
@@ -13,13 +13,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', [
       'shortcut_set' => $this->entity->bundle(),
diff --git a/core/modules/user/src/Form/UserCancelForm.php b/core/modules/user/src/Form/UserCancelForm.php
index 14c553c..88cc42e 100644
--- a/core/modules/user/src/Form/UserCancelForm.php
+++ b/core/modules/user/src/Form/UserCancelForm.php
@@ -2,13 +2,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.
