diff --git a/core/modules/forum/forum.module b/core/modules/forum/forum.module
index 8d4a9f4..1cc8031 100644
--- a/core/modules/forum/forum.module
+++ b/core/modules/forum/forum.module
@@ -107,8 +107,10 @@ function forum_entity_type_build(array &$entity_types) {
   /** @var $entity_types \Drupal\Core\Entity\EntityTypeInterface[] */
   // Register forum specific forms.
   $entity_types['taxonomy_term']
-    ->setFormClass('forum', 'Drupal\forum\Form\ForumForm')
-    ->setFormClass('container', 'Drupal\forum\Form\ContainerForm')
+    ->setFormClass('forum_add', 'Drupal\forum\Form\ForumAddForm')
+    ->setFormClass('forum_edit', 'Drupal\forum\Form\ForumEditForm')
+    ->setFormClass('container_add', 'Drupal\forum\Form\ContainerAddForm')
+    ->setFormClass('container_edit', 'Drupal\forum\Form\ContainerEditForm')
     ->setLinkTemplate('forum-edit-container-form', '/admin/structure/forum/edit/container/{taxonomy_term}')
     ->setLinkTemplate('forum-delete-form', '/admin/structure/forum/delete/forum/{taxonomy_term}')
     ->setLinkTemplate('forum-edit-form', '/admin/structure/forum/edit/forum/{taxonomy_term}');
diff --git a/core/modules/forum/forum.routing.yml b/core/modules/forum/forum.routing.yml
index 14e55e2..f1d14f1 100644
--- a/core/modules/forum/forum.routing.yml
+++ b/core/modules/forum/forum.routing.yml
@@ -49,7 +49,7 @@ forum.add_forum:
 entity.taxonomy_term.forum_edit_container_form:
   path: '/admin/structure/forum/edit/container/{taxonomy_term}'
   defaults:
-    _entity_form: 'taxonomy_term.container'
+    _entity_form: 'taxonomy_term.container_edit'
     _title: 'Edit container'
   requirements:
     _permission: 'administer forums'
@@ -57,7 +57,7 @@ entity.taxonomy_term.forum_edit_container_form:
 entity.taxonomy_term.forum_edit_form:
   path: '/admin/structure/forum/edit/forum/{taxonomy_term}'
   defaults:
-    _entity_form: 'taxonomy_term.forum'
+    _entity_form: 'taxonomy_term.forum_edit'
     _title: 'Edit forum'
   requirements:
     _permission: 'administer forums'
diff --git a/core/modules/forum/src/Controller/ForumController.php b/core/modules/forum/src/Controller/ForumController.php
index 0e3d995..a174965 100644
--- a/core/modules/forum/src/Controller/ForumController.php
+++ b/core/modules/forum/src/Controller/ForumController.php
@@ -256,7 +256,7 @@ public function addForum() {
       'vid' => $vid,
       'forum_controller' => 0,
     ));
-    return $this->entityFormBuilder()->getForm($taxonomy_term, 'forum');
+    return $this->entityFormBuilder()->getForm($taxonomy_term, 'forum_add');
   }
 
   /**
@@ -271,7 +271,7 @@ public function addContainer() {
       'vid' => $vid,
       'forum_container' => 1,
     ));
-    return $this->entityFormBuilder()->getForm($taxonomy_term, 'container');
+    return $this->entityFormBuilder()->getForm($taxonomy_term, 'container_add');
   }
 
   /**
diff --git a/core/modules/forum/src/Form/ContainerAddForm.php b/core/modules/forum/src/Form/ContainerAddForm.php
new file mode 100644
index 0000000..0613f66
--- /dev/null
+++ b/core/modules/forum/src/Form/ContainerAddForm.php
@@ -0,0 +1,23 @@
+<?php
+
+namespace Drupal\forum\Form;
+
+use Drupal\Core\Form\FormStateInterface;
+use Drupal\Core\Url;
+
+/**
+ * Add form for container terms.
+ */
+class ContainerAddForm extends ContainerFormBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  public function save(array $form, FormStateInterface $form_state) {
+    $term = parent::save($form, $form_state);
+    $form_state->setValue('tid', $term->id());
+    drupal_set_message($this->t('Created new @type %term.', array('%term' => $term->getName(), '@type' => $this->forumFormType)));
+    $this->logger('forum')->notice('Created new @type %term.', array('%term' => $term->getName(), '@type' => $this->forumFormType, 'link' => \Drupal::l($this->t('Edit'), new Url('entity.taxonomy_term.forum_edit_form', array('taxonomy_term' => $term->id())))));
+  }
+
+}
diff --git a/core/modules/forum/src/Form/ContainerEditForm.php b/core/modules/forum/src/Form/ContainerEditForm.php
new file mode 100644
index 0000000..c296516
--- /dev/null
+++ b/core/modules/forum/src/Form/ContainerEditForm.php
@@ -0,0 +1,22 @@
+<?php
+
+namespace Drupal\forum\Form;
+
+use Drupal\Core\Form\FormStateInterface;
+use Drupal\Core\Url;
+
+/**
+ * Edit form for container terms.
+ */
+class ContainerEditForm extends ContainerFormBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  public function save(array $form, FormStateInterface $form_state) {
+    $term = parent::save($form, $form_state);
+    drupal_set_message($this->t('The @type %term has been updated.', array('%term' => $term->getName(), '@type' => $this->forumFormType)));
+    $this->logger('forum')->notice('Updated @type %term.', array('%term' => $term->getName(), '@type' => $this->forumFormType, 'link' => \Drupal::l($this->t('Edit'), new Url('entity.taxonomy_term.forum_edit_form', array('taxonomy_term' => $term->id())))));
+  }
+
+}
diff --git a/core/modules/forum/src/Form/ContainerForm.php b/core/modules/forum/src/Form/ContainerFormBase.php
similarity index 92%
rename from core/modules/forum/src/Form/ContainerForm.php
rename to core/modules/forum/src/Form/ContainerFormBase.php
index d12d098..220633b 100644
--- a/core/modules/forum/src/Form/ContainerForm.php
+++ b/core/modules/forum/src/Form/ContainerFormBase.php
@@ -5,9 +5,9 @@
 use Drupal\Core\Form\FormStateInterface;
 
 /**
- * Base form for container term edit forms.
+ * Base class for container term edit forms.
  */
-class ContainerForm extends ForumForm {
+abstract class ContainerFormBase extends ForumFormBase {
 
   /**
    * Reusable url stub to use in watchdog messages.
diff --git a/core/modules/forum/src/Form/ForumAddForm.php b/core/modules/forum/src/Form/ForumAddForm.php
new file mode 100644
index 0000000..6168e7c
--- /dev/null
+++ b/core/modules/forum/src/Form/ForumAddForm.php
@@ -0,0 +1,37 @@
+<?php
+
+namespace Drupal\forum\Form;
+
+use Drupal\Core\Form\FormStateInterface;
+use Drupal\Core\Url;
+
+/**
+ * Form for adding forum terms.
+ */
+class ForumAddForm extends ForumFormBase {
+
+  /**
+   * Reusable type field to use in status messages.
+   *
+   * @var string
+   */
+  protected $forumFormType;
+
+  /**
+   * Reusable url stub to use in watchdog messages.
+   *
+   * @var string
+   */
+  protected $urlStub = 'forum';
+
+  /**
+   * {@inheritdoc}
+   */
+  public function save(array $form, FormStateInterface $form_state) {
+    $term = parent::save($form, $form_state);
+    drupal_set_message($this->t('Created new @type %term.', array('%term' => $term->getName(), '@type' => $this->forumFormType)));
+    $this->logger('forum')->notice('Created new @type %term.', array('%term' => $term->getName(), '@type' => $this->forumFormType, 'link' => \Drupal::l($this->t('Edit'), new Url('entity.taxonomy_term.forum_edit_form', array('taxonomy_term' => $term->id())))));
+    $form_state->setValue('tid', $term->id());
+  }
+
+}
diff --git a/core/modules/forum/src/Form/ForumEditForm.php b/core/modules/forum/src/Form/ForumEditForm.php
new file mode 100644
index 0000000..f0c6d98
--- /dev/null
+++ b/core/modules/forum/src/Form/ForumEditForm.php
@@ -0,0 +1,55 @@
+<?php
+
+namespace Drupal\forum\Form;
+
+use Drupal\Core\Form\FormStateInterface;
+use Drupal\Core\Url;
+
+/**
+ * Form for editing forum terms.
+ */
+class ForumEditForm extends ForumFormBase {
+
+  /**
+   * Reusable type field to use in status messages.
+   *
+   * @var string
+   */
+  protected $forumFormType;
+
+  /**
+   * Reusable url stub to use in watchdog messages.
+   *
+   * @var string
+   */
+  protected $urlStub = 'forum';
+
+  /**
+   * {@inheritdoc}
+   */
+  public function save(array $form, FormStateInterface $form_state) {
+    $term = parent::save($form, $form_state);
+    drupal_set_message($this->t('The @type %term has been updated.', array('%term' => $term->getName(), '@type' => $this->forumFormType)));
+    $this->logger('forum')->notice('Updated @type %term.', array('%term' => $term->getName(), '@type' => $this->forumFormType, 'link' => \Drupal::l($this->t('Edit'), new Url('entity.taxonomy_term.forum_edit_form', array('taxonomy_term' => $term->id())))));
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function actions(array $form, FormStateInterface $form_state) {
+    $actions = parent::actions($form, $form_state);
+
+    if (!$this->entity->isNew() && $this->entity->hasLinkTemplate('forum-delete-form')) {
+      $route_info = $this->entity->urlInfo('forum-delete-form');
+      $actions['delete']['#options'] = $route_info->getOptions();
+      $actions['delete']['#route_name'] = $route_info->getRouteName();
+      $actions['delete']['#route_parameters'] = $route_info->getRouteParameters();
+    }
+    else {
+      unset($actions['delete']);
+    }
+
+    return $actions;
+  }
+
+}
diff --git a/core/modules/forum/src/Form/ForumForm.php b/core/modules/forum/src/Form/ForumFormBase.php
similarity index 72%
rename from core/modules/forum/src/Form/ForumForm.php
rename to core/modules/forum/src/Form/ForumFormBase.php
index 30f0cf1..3f7dbc2 100644
--- a/core/modules/forum/src/Form/ForumForm.php
+++ b/core/modules/forum/src/Form/ForumFormBase.php
@@ -2,28 +2,25 @@
 
 namespace Drupal\forum\Form;
 
-use Drupal\Core\Form\FormStateInterface;
-use Drupal\Core\Url;
 use Drupal\taxonomy\TermForm;
+use Drupal\Core\Form\FormStateInterface;
 
 /**
- * Base form for forum term edit forms.
+ * Base form for forum forms.
  */
-class ForumForm extends TermForm {
+abstract class ForumFormBase extends TermForm {
 
   /**
-   * Reusable type field to use in status messages.
-   *
-   * @var string
+   * {@inheritdoc}
    */
-  protected $forumFormType;
+  public function buildEntity(array $form, FormStateInterface $form_state) {
+    $term = parent::buildEntity($form, $form_state);
 
-  /**
-   * Reusable url stub to use in watchdog messages.
-   *
-   * @var string
-   */
-  protected $urlStub = 'forum';
+    // Assign parents from forum parent select field.
+    $term->parent = array($form_state->getValue(array('parent', 0)));
+
+    return $term;
+  }
 
   /**
    * {@inheritdoc}
@@ -58,40 +55,10 @@ public function form(array $form, FormStateInterface $form_state) {
   /**
    * {@inheritdoc}
    */
-  public function buildEntity(array $form, FormStateInterface $form_state) {
-    $term = parent::buildEntity($form, $form_state);
-
-    // Assign parents from forum parent select field.
-    $term->parent = array($form_state->getValue(array('parent', 0)));
-
-    return $term;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
   public function save(array $form, FormStateInterface $form_state) {
     $term = $this->entity;
     $term_storage = $this->entityManager->getStorage('taxonomy_term');
-    $status = $term_storage->save($term);
-
-    $route_name = $this->urlStub == 'container' ? 'entity.taxonomy_term.forum_edit_container_form' : 'entity.taxonomy_term.forum_edit_form';
-    $route_parameters  = ['taxonomy_term' => $term->id()];
-    $link = $this->l($this->t('Edit'), new Url($route_name, $route_parameters));
-    $view_link = $term->link($term->getName());
-    switch ($status) {
-      case SAVED_NEW:
-        drupal_set_message($this->t('Created new @type %term.', array('%term' => $view_link, '@type' => $this->forumFormType)));
-        $this->logger('forum')->notice('Created new @type %term.', array('%term' => $term->getName(), '@type' => $this->forumFormType, 'link' => $link));
-        $form_state->setValue('tid', $term->id());
-        break;
-
-      case SAVED_UPDATED:
-        drupal_set_message($this->t('The @type %term has been updated.', array('%term' => $term->getName(), '@type' => $this->forumFormType)));
-        $this->logger('forum')->notice('Updated @type %term.', array('%term' => $term->getName(), '@type' => $this->forumFormType, 'link' => $link));
-        break;
-    }
-
+    $term_storage->save($term);
     $form_state->setRedirect('forum.overview');
     return $term;
   }
@@ -164,5 +131,4 @@ protected function forumParentSelect($tid, $title) {
       '#required' => TRUE,
     );
   }
-
 }
