diff --git a/core/lib/Drupal/Core/Entity/ContentEntityConfirmFormBase.php b/core/lib/Drupal/Core/Entity/ContentEntityConfirmFormBase.php
index bc0bdf3..fd3cdf3 100644
--- a/core/lib/Drupal/Core/Entity/ContentEntityConfirmFormBase.php
+++ b/core/lib/Drupal/Core/Entity/ContentEntityConfirmFormBase.php
@@ -8,6 +8,15 @@
 
 /**
  * Provides a generic base class for an entity-based confirmation form.
+ *
+ * @deprecated Class "ContentEntityConfirmFormBase" in Drupal 8.4.0 and
+ * will be removed before Drupal 9.0.0. use
+ * \Drupal\Core\Entity\EntityConfirmFormBase instead. See
+ * https://www.drupal.org/node/2491057 . As the internal API
+ * \Drupal\Core\Entity\ContentEntityConfirmFormBase may also be removed in a
+ * minor release.
+ *
+ * @internal
  */
 abstract class ContentEntityConfirmFormBase extends ContentEntityForm implements ConfirmFormInterface {
 
diff --git a/core/lib/Drupal/Core/Entity/ContentEntityDeleteForm.php b/core/lib/Drupal/Core/Entity/ContentEntityDeleteForm.php
index 9a70ef5..3754621 100644
--- a/core/lib/Drupal/Core/Entity/ContentEntityDeleteForm.php
+++ b/core/lib/Drupal/Core/Entity/ContentEntityDeleteForm.php
@@ -10,14 +10,7 @@
  * @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}
@@ -78,10 +71,37 @@ 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?', [
+              '@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?', [
+     '@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 +119,7 @@ protected function getDeletionMessage() {
       ]);
     }
 
-    return $this->traitGetDeletionMessage();
+    return $this->getDeletionMessage();
   }
 
   /**
@@ -117,26 +137,8 @@ protected function logDeletionMessage() {
       ]);
     }
     else {
-      $this->traitLogDeletionMessage();
+      $this->logDeletionMessage();
     }
   }
 
-  /**
-   * {@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(),
-      ]);
-    }
-
-    return $this->traitGetQuestion();
-  }
-
 }
diff --git a/core/lib/Drupal/Core/Entity/EntityConfirmFormBase.php b/core/lib/Drupal/Core/Entity/EntityConfirmFormBase.php
index d8c39e4..fe1948b 100644
--- a/core/lib/Drupal/Core/Entity/EntityConfirmFormBase.php
+++ b/core/lib/Drupal/Core/Entity/EntityConfirmFormBase.php
@@ -104,4 +104,20 @@ 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::validateForm($form, $form_state);
+  }
+
 }
diff --git a/core/lib/Drupal/Core/Entity/EntityDeleteForm.php b/core/lib/Drupal/Core/Entity/EntityDeleteForm.php
index b7a66e3..20a58e1 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,89 @@ 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?', [
+      '@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(),
+    ]);
+  }
+
+  /**
    * 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
index 2faf45c..08dd848 100644
--- a/core/lib/Drupal/Core/Entity/EntityDeleteFormTrait.php
+++ b/core/lib/Drupal/Core/Entity/EntityDeleteFormTrait.php
@@ -12,6 +12,15 @@
  * This trait relies on the StringTranslationTrait and the logger method added
  * by FormBase.
  *
+ * @deprecated trait "EntityDeleteFormTrait" in Drupal 8.4.0 and
+ * will be removed before Drupal 9.0.0. use
+ * \Drupal\Core\Entity\EntityDeleteFormTrait instead. See
+ * https://www.drupal.org/node/2491057 . As the internal API
+ * \Drupal\Core\Entity\EntityDeleteFormTrait may also be removed in a
+ * minor release.
+ *
+ * @internal
+ *
  * @ingroup entity_api
  */
 trait EntityDeleteFormTrait {
diff --git a/core/modules/aggregator/src/Form/FeedItemsDeleteForm.php b/core/modules/aggregator/src/Form/FeedItemsDeleteForm.php
index 48c83dc..403ac55 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}
@@ -36,7 +36,7 @@ public function getConfirmText() {
    * {@inheritdoc}
    */
   public function submitForm(array &$form, FormStateInterface $form_state) {
-    $this->entity->deleteItems();
+    $this->entity->delete();
 
     $form_state->setRedirectUrl($this->getCancelUrl());
   }
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.
