diff --git a/core/modules/forum/forum.admin.inc b/core/modules/forum/forum.admin.inc
index 5171850..1d7b870 100644
--- a/core/modules/forum/forum.admin.inc
+++ b/core/modules/forum/forum.admin.inc
@@ -231,51 +231,6 @@ function forum_confirm_delete_submit($form, &$form_state) {
 }
 
 /**
- * Form constructor for the forum settings page.
- *
- * @see forum_menu()
- * @see system_settings_form()
- * @ingroup forms
- */
-function forum_admin_settings($form, &$form_state) {
-  $config = config('forum.settings');
-  $number = drupal_map_assoc(array(5, 10, 15, 20, 25, 30, 35, 40, 50, 60, 80, 100, 150, 200, 250, 300, 350, 400, 500));
-  $form['forum_hot_topic'] = array('#type' => 'select',
-    '#title' => t('Hot topic threshold'),
-    '#default_value' => $config->get('topics.hot_threshold'),
-    '#options' => $number,
-    '#description' => t('The number of replies a topic must have to be considered "hot".'),
-  );
-  $number = drupal_map_assoc(array(10, 25, 50, 75, 100));
-  $form['forum_per_page'] = array('#type' => 'select',
-    '#title' => t('Topics per page'),
-    '#default_value' => $config->get('topics.page_limit'),
-    '#options' => $number,
-    '#description' => t('Default number of forum topics displayed per page.'),
-  );
-  $forder = array(1 => t('Date - newest first'), 2 => t('Date - oldest first'), 3 => t('Posts - most active first'), 4 => t('Posts - least active first'));
-  $form['forum_order'] = array('#type' => 'radios',
-    '#title' => t('Default order'),
-    '#default_value' => $config->get('topics.order'),
-    '#options' => $forder,
-    '#description' => t('Default display order for topics.'),
-  );
-  return system_config_form($form, $form_state);
-}
-
-
-/**
- * Form submission handler for forum_admin_settings().
- */
-function forum_admin_settings_submit($form, &$form_state) {
-  config('forum.settings')
-    ->set('topics.hot_threshold', $form_state['values']['forum_hot_topic'])
-    ->set('topics.page_limit', $form_state['values']['forum_per_page'])
-    ->set('topics.order', $form_state['values']['forum_order'])
-    ->save();
-}
-
-/**
  * Form constructor for the forum overview form.
  *
  * Returns a form for controlling the hierarchy of existing forums and
diff --git a/core/modules/forum/forum.module b/core/modules/forum/forum.module
index 8b35c3e..213fcee 100644
--- a/core/modules/forum/forum.module
+++ b/core/modules/forum/forum.module
@@ -139,8 +139,7 @@ function forum_menu() {
   );
   $items['admin/structure/forum/settings'] = array(
     'title' => 'Settings',
-    'page callback' => 'drupal_get_form',
-    'page arguments' => array('forum_admin_settings'),
+    'page callback' => 'NOT_USED',
     'access arguments' => array('administer forums'),
     'weight' => 100,
     'type' => MENU_LOCAL_TASK,
diff --git a/core/modules/forum/forum.routing.yml b/core/modules/forum/forum.routing.yml
new file mode 100644
index 0000000..5f05543
--- /dev/null
+++ b/core/modules/forum/forum.routing.yml
@@ -0,0 +1,6 @@
+forum_settings:
+  pattern: '/admin/structure/forum/settings'
+  defaults:
+    _controller: 'forum.form.settings:getForm'
+  requirements:
+    _permission: 'administer forums'
\ No newline at end of file
diff --git a/core/modules/forum/lib/Drupal/forum/ForumBundle.php b/core/modules/forum/lib/Drupal/forum/ForumBundle.php
new file mode 100644
index 0000000..236cfce
--- /dev/null
+++ b/core/modules/forum/lib/Drupal/forum/ForumBundle.php
@@ -0,0 +1,27 @@
+<?php
+
+/**
+ * @file
+ * Contains Drupal\forum\ForumBundle.
+ */
+
+namespace Drupal\forum;
+
+use Symfony\Component\DependencyInjection\ContainerBuilder;
+use Symfony\Component\DependencyInjection\Reference;
+use Symfony\Component\HttpKernel\Bundle\Bundle;
+
+/**
+ * Forum dependency injection container.
+ */
+class ForumBundle extends Bundle {
+
+  /**
+   * Overrides Symfony\Component\HttpKernel\Bundle\Bundle::build().
+   */
+  public function build(ContainerBuilder $container) {
+    $container->register('forum.form.settings', 'Drupal\forum\ForumSettingsForm')
+      ->addArgument(new Reference('config.factory'));
+  }
+
+}
diff --git a/core/modules/forum/lib/Drupal/forum/ForumSettingsForm.php b/core/modules/forum/lib/Drupal/forum/ForumSettingsForm.php
new file mode 100644
index 0000000..21412f3
--- /dev/null
+++ b/core/modules/forum/lib/Drupal/forum/ForumSettingsForm.php
@@ -0,0 +1,101 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\forum\ForumSettingsForm.
+ */
+
+namespace Drupal\forum;
+
+use Drupal\system\SystemConfigFormBase;
+use Drupal\Core\Config\ConfigFactory;
+
+/**
+ * Configure forum settings for this site.
+ */
+class ForumSettingsForm extends SystemConfigFormBase {
+
+  /**
+   * Stores the configuration factory.
+   *
+   * @var \Drupal\Core\Config\ConfigFactory
+   */
+  protected $configFactory;
+
+  /**
+   * Constructs a \Drupal\forum\ForumSettingsForm object.
+   *
+   * @param \Drupal\Core\Config\ConfigFactory $config_factory
+   *   The factory for configuration objects.
+   */
+  public function __construct(ConfigFactory $config_factory) {
+    $this->configFactory = $config_factory;
+  }
+
+  /**
+   * Returns an instance of this form.
+   */
+  public function getForm() {
+    return drupal_get_form($this);
+  }
+
+  /**
+   * Implements \Drupal\Core\Form\FormInterface::getFormID().
+   */
+  public function getFormID() {
+    return 'forum_admin_settings';
+  }
+
+  /**
+   * Implements \Drupal\Core\Form\FormInterface::buildForm().
+   */
+  public function buildForm(array $form, array &$form_state) {
+    $config = $this->configFactory->get('forum.settings');
+
+    $number = drupal_map_assoc(array(5, 10, 15, 20, 25, 30, 35, 40, 50, 60, 80, 100, 150, 200, 250, 300, 350, 400, 500));
+    $form['forum_hot_topic'] = array(
+      '#type' => 'select',
+      '#title' => t('Hot topic threshold'),
+      '#default_value' => $config->get('topics.hot_threshold'),
+      '#options' => $number,
+      '#description' => t('The number of replies a topic must have to be considered "hot".'),
+    );
+    $number = drupal_map_assoc(array(10, 25, 50, 75, 100));
+    $form['forum_per_page'] = array(
+      '#type' => 'select',
+      '#title' => t('Topics per page'),
+      '#default_value' => $config->get('topics.page_limit'),
+      '#options' => $number,
+      '#description' => t('Default number of forum topics displayed per page.'),
+    );
+    $forder = array(
+      1 => t('Date - newest first'),
+      2 => t('Date - oldest first'),
+      3 => t('Posts - most active first'),
+      4 => t('Posts - least active first')
+    );
+    $form['forum_order'] = array(
+      '#type' => 'radios',
+      '#title' => t('Default order'),
+      '#default_value' => $config->get('topics.order'),
+      '#options' => $forder,
+      '#description' => t('Default display order for topics.'),
+    );
+
+    return parent::buildForm($form, $form_state);
+  }
+
+  /**
+   * Implements \Drupal\Core\Form\FormInterface::submitForm().
+   */
+  public function submitForm(array &$form, array &$form_state) {
+    $this->configFactory->get('forum.settings')
+      ->set('topics.hot_threshold', $form_state['values']['forum_hot_topic'])
+      ->set('topics.page_limit', $form_state['values']['forum_per_page'])
+      ->set('topics.order', $form_state['values']['forum_order'])
+      ->save();
+
+    parent::submitForm($form, $form_state);
+  }
+
+}
