diff --git a/core/lib/Drupal/Core/Config/Entity/ConfigDeleteFormBase.php b/core/lib/Drupal/Core/Config/Entity/ConfigDeleteFormBase.php
new file mode 100644
index 0000000..b2979de
--- /dev/null
+++ b/core/lib/Drupal/Core/Config/Entity/ConfigDeleteFormBase.php
@@ -0,0 +1,60 @@
+<?php
+/**
+ * @file
+ * Contains \Drupal\Core\Config\Entity\ConfigDeleteFormBase.
+ */
+
+namespace Drupal\Core\Config\Entity;
+
+use Drupal\Component\Utility\String;
+use Drupal\Core\Entity\EntityConfirmFormBase;
+
+/**
+ * Delete confirmation form for config_test entities.
+ */
+class ConfigDeleteFormBase extends EntityConfirmFormBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getQuestion() {
+    return t('Are you sure you want to delete %label', array('%label' => $this->entity->label()));
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getConfirmText() {
+    return t('Delete');
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getCancelRoute() {
+    $info = $this->entity->entityInfo();
+    return array(
+      'route_name' => $info['module'] . '.' . $this->entity->entityType() . '_list',
+    );
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function submit(array $form, array &$form_state) {
+    $this->entity->delete();
+    drupal_set_message(String::format('%label configuration has been deleted.', array('%label' => $this->entity->label())));
+    $info = $this->entity->entityInfo();
+    watchdog($info['module'], '@type %label has been deleted.', array(
+      '@type' => $info['label'],
+      '%label' => $this->entity->label(),
+    ), WATCHDOG_NOTICE);
+    if (!empty($info['admin_path'])) {
+      $form_state['redirect'] = $info['admin_path'];
+    }
+    else {
+      throw new \Exception("Entity types using ConfigDeleteFormBase as their delete form controller must define the 'admin_path' property.");
+    }
+  }
+
+}
diff --git a/core/modules/contact/contact.module b/core/modules/contact/contact.module
index 18180f8..95ec73a 100644
--- a/core/modules/contact/contact.module
+++ b/core/modules/contact/contact.module
@@ -79,7 +79,7 @@ function contact_menu() {
   );
   $items['admin/structure/contact/manage/%contact_category/delete'] = array(
     'title' => 'Delete',
-    'route_name' => 'contact.category_delete',
+    'route_name' => 'contact.contact_category_delete',
     'type' => MENU_LOCAL_TASK,
     'weight' => 10,
   );
diff --git a/core/modules/contact/contact.routing.yml b/core/modules/contact/contact.routing.yml
index 8c85b36..f46f699 100644
--- a/core/modules/contact/contact.routing.yml
+++ b/core/modules/contact/contact.routing.yml
@@ -1,4 +1,4 @@
-contact.category_delete:
+contact.contact_category_delete:
   path: 'admin/structure/contact/manage/{contact_category}/delete'
   defaults:
     _entity_form: contact_category.delete
diff --git a/core/modules/contact/lib/Drupal/contact/Entity/Category.php b/core/modules/contact/lib/Drupal/contact/Entity/Category.php
index 7f633fc..dd5143a 100644
--- a/core/modules/contact/lib/Drupal/contact/Entity/Category.php
+++ b/core/modules/contact/lib/Drupal/contact/Entity/Category.php
@@ -27,10 +27,12 @@
  *     "form" = {
  *       "add" = "Drupal\contact\CategoryFormController",
  *       "edit" = "Drupal\contact\CategoryFormController",
- *       "delete" = "Drupal\contact\Form\CategoryDeleteForm"
+ *       "delete" = "Drupal\Core\Config\Entity\ConfigDeleteFormBase"
  *     }
  *   },
  *   uri_callback = "contact_category_uri",
+ *   admin_path = "admin/structure/contact",
+ *   admin_permission = "administer contact forms",
  *   config_prefix = "contact.category",
  *   bundle_of = "contact_message",
  *   entity_keys = {
diff --git a/core/modules/contact/lib/Drupal/contact/Form/CategoryDeleteForm.php b/core/modules/contact/lib/Drupal/contact/Form/CategoryDeleteForm.php
deleted file mode 100644
index 9b74947..0000000
--- a/core/modules/contact/lib/Drupal/contact/Form/CategoryDeleteForm.php
+++ /dev/null
@@ -1,50 +0,0 @@
-<?php
-
-/**
- * @file
- * Contains \Drupal\contact\Form\CategoryDeleteForm.
- */
-
-namespace Drupal\contact\Form;
-
-use Drupal\Core\Entity\EntityConfirmFormBase;
-
-/**
- * Builds the form to delete a contact category.
- */
-class CategoryDeleteForm extends EntityConfirmFormBase {
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getQuestion() {
-    return t('Are you sure you want to delete %name?', array('%name' => $this->entity->label()));
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getCancelRoute() {
-    return array(
-      'route_name' => 'contact.category_list',
-    );
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getConfirmText() {
-    return t('Delete');
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function submit(array $form, array &$form_state) {
-    $this->entity->delete();
-    drupal_set_message(t('Category %label has been deleted.', array('%label' => $this->entity->label())));
-    watchdog('contact', 'Category %label has been deleted.', array('%label' => $this->entity->label()), WATCHDOG_NOTICE);
-    $form_state['redirect'] = 'admin/structure/contact';
-  }
-
-}
