diff --git a/core/modules/forum/forum.admin.inc b/core/modules/forum/forum.admin.inc
index e5e798f..7998201 100644
--- a/core/modules/forum/forum.admin.inc
+++ b/core/modules/forum/forum.admin.inc
@@ -221,55 +221,6 @@ function forum_forum_delete($form, &$form_state) {
 }
 
 /**
- * Form constructor for the forum overview form.
- *
- * Returns a form for controlling the hierarchy of existing forums and
- * containers.
- *
- * @see forum_menu()
- * @ingroup forms
- */
-function forum_overview($form, &$form_state) {
-  module_load_include('inc', 'taxonomy', 'taxonomy.admin');
-  $config = config('forum.settings');
-
-  $vid = $config->get('vocabulary');
-  $vocabulary = taxonomy_vocabulary_load($vid);
-  $form = taxonomy_overview_terms($form, $form_state, $vocabulary);
-
-  foreach (element_children($form) as $key) {
-    if (isset($form[$key]['#term'])) {
-      $term = $form[$key]['#term'];
-      $form[$key]['view']['#href'] = 'forum/' . $term['tid'];
-      unset($form[$key]['operations']['#links']['delete']);
-      if (in_array($form[$key]['#term']['tid'], $config->get('containers'))) {
-        $form[$key]['operations']['#links']['edit']['title'] = t('edit container');
-        $form[$key]['operations']['#links']['edit']['href'] = 'admin/structure/forum/edit/container/' . $term['tid'];
-        // We don't want the redirect from the link so we can redirect the
-        // delete action.
-        unset($form[$key]['operations']['#links']['edit']['query']['destination']);
-      }
-      else {
-        $form[$key]['operations']['#links']['edit']['title'] = t('edit forum');
-        $form[$key]['operations']['#links']['edit']['href'] = 'admin/structure/forum/edit/forum/' . $term['tid'];
-        // We don't want the redirect from the link so we can redirect the
-        // delete action.
-        unset($form[$key]['operations']['#links']['edit']['query']['destination']);
-      }
-    }
-  }
-
-  // Remove the alphabetical reset.
-  unset($form['actions']['reset_alphabetical']);
-
-  // The form needs to have submit and validate handlers set explicitly.
-  $form['#theme'] = 'taxonomy_overview_terms';
-  $form['#submit'] = array('taxonomy_overview_terms_submit'); // Use the existing taxonomy overview submit handler.
-  $form['#empty_text'] = t('No containers or forums available. <a href="@container">Add container</a> or <a href="@forum">Add forum</a>.', array('@container' => url('admin/structure/forum/add/container'), '@forum' => url('admin/structure/forum/add/forum')));
-  return $form;
-}
-
-/**
  * Returns a select box for available parent terms.
  *
  * @param $tid
diff --git a/core/modules/forum/forum.module b/core/modules/forum/forum.module
index eb2c1ec..393df8e 100644
--- a/core/modules/forum/forum.module
+++ b/core/modules/forum/forum.module
@@ -109,10 +109,7 @@ function forum_menu() {
   $items['admin/structure/forum'] = array(
     'title' => 'Forums',
     'description' => 'Control forum hierarchy settings.',
-    'page callback' => 'drupal_get_form',
-    'page arguments' => array('forum_overview'),
-    'access arguments' => array('administer forums'),
-    'file' => 'forum.admin.inc',
+    'route_name' => 'forum_overview',
   );
   $items['admin/structure/forum/list'] = array(
     'title' => 'List',
diff --git a/core/modules/forum/forum.routing.yml b/core/modules/forum/forum.routing.yml
index f7d90f8..6e852d3 100644
--- a/core/modules/forum/forum.routing.yml
+++ b/core/modules/forum/forum.routing.yml
@@ -10,3 +10,9 @@ forum_settings:
     _form: '\Drupal\forum\ForumSettingsForm'
   requirements:
     _permission: 'administer forums'
+forum_overview:
+  pattern: 'admin/structure/forum'
+  defaults:
+    _form: 'Drupal\forum\Form\OverviewForm'
+  requirements:
+    _permission: 'administer forums'
diff --git a/core/modules/forum/lib/Drupal/forum/Form/OverviewForm.php b/core/modules/forum/lib/Drupal/forum/Form/OverviewForm.php
new file mode 100644
index 0000000..3a7d422
--- /dev/null
+++ b/core/modules/forum/lib/Drupal/forum/Form/OverviewForm.php
@@ -0,0 +1,115 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\forum\Form\OverviewForm.
+ */
+
+namespace Drupal\forum\Form;
+
+use Drupal\Core\Form\FormInterface;
+use Symfony\Component\DependencyInjection\ContainerInterface;
+use Drupal\Core\ControllerInterface;
+use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
+use Drupal\Core\Entity\EntityManager;
+use Drupal\Core\Config\ConfigFactory;
+
+class OverviewForm implements FormInterface, ControllerInterface {
+
+  /**
+   * Config object for forum.settings.
+   *
+   * @var \Drupal\Core\Config\Config
+   */
+  protected $config;
+
+  /**
+   * Constructs a \Drupal\forum\Form\OverviewForm object.
+   *
+   * @param \Drupal\Core\Config\ConfigFactory $config_factory
+   *   The factory for configuration objects.
+   * @param \Drupal\Core\Entity\EntityManager $entity_manager
+   *   The entity manager service.
+   */
+  public function __construct(ConfigFactory $config_factory, EntityManager $entity_manager) {
+    $this->config = $config_factory->get('forum.settings');
+    $this->entityManager = $entity_manager;
+  }
+
+  /**
+   * {@inheritdoc}.
+   */
+  public static function create(ContainerInterface $container) {
+    return new static(
+      $container->get('config.factory'),
+      $container->get('plugin.manager.entity')
+    );
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getFormID() {
+    return 'forum_overview';
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function buildForm(array $form, array &$form_state) {
+    module_load_include('inc', 'taxonomy', 'taxonomy.admin');
+
+    $vid = $this->config->get('vocabulary');
+    $vocabularies = $this->entityManager->getStorageController('taxonomy_vocabulary')->load(array($vid));
+    $vocabulary =  isset($vocabularies[$vid]) ? $vocabularies[$vid] : FALSE;
+    if (!$vocabulary) {
+      throw new NotFoundHttpException();
+    }
+
+    // Build base taxonomy term overview.
+    $form = taxonomy_overview_terms($form, $form_state, $vocabulary);
+
+    foreach (element_children($form) as $key) {
+      if (isset($form[$key]['#term'])) {
+        $term = $form[$key]['#term'];
+        $form[$key]['view']['#href'] = 'forum/' . $term['tid'];
+        unset($form[$key]['operations']['#links']['delete']);
+        if (in_array($form[$key]['#term']['tid'], $this->config->get('containers'))) {
+          $form[$key]['operations']['#links']['edit']['title'] = t('edit container');
+          $form[$key]['operations']['#links']['edit']['href'] = 'admin/structure/forum/edit/container/' . $term['tid'];
+          // We don't want the redirect from the link so we can redirect the
+          // delete action.
+          unset($form[$key]['operations']['#links']['edit']['query']['destination']);
+        }
+        else {
+          $form[$key]['operations']['#links']['edit']['title'] = t('edit forum');
+          $form[$key]['operations']['#links']['edit']['href'] = 'admin/structure/forum/edit/forum/' . $term['tid'];
+          // We don't want the redirect from the link so we can redirect the
+          // delete action.
+          unset($form[$key]['operations']['#links']['edit']['query']['destination']);
+        }
+      }
+    }
+
+    // Remove the alphabetical reset.
+    unset($form['actions']['reset_alphabetical']);
+
+    // The form needs to have submit and validate handlers set explicitly.
+    $form['#theme'] = 'taxonomy_overview_terms';
+    $form['#submit'] = array('taxonomy_overview_terms_submit'); // Use the existing taxonomy overview submit handler.
+    $form['#empty_text'] = t('No containers or forums available. <a href="@container">Add container</a> or <a href="@forum">Add forum</a>.', array('@container' => url('admin/structure/forum/add/container'), '@forum' => url('admin/structure/forum/add/forum')));
+    return $form;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function validateForm(array &$form, array &$form_state) {}
+
+  /**
+   * {@inheritdoc}
+   */
+  public function submitForm(array &$form, array &$form_state) {}
+
+}
+
