diff --git a/core/modules/system/tests/modules/form_test/form_test.module b/core/modules/system/tests/modules/form_test/form_test.module
index 8b46c83..5b34e1b 100644
--- a/core/modules/system/tests/modules/form_test/form_test.module
+++ b/core/modules/system/tests/modules/form_test/form_test.module
@@ -277,17 +277,6 @@ function form_test_menu() {
     'type' => MENU_CALLBACK,
   );
 
-  if (module_exists('node')) {
-    $items['form-test/two-instances-of-same-form'] = array(
-      'title' => 'AJAX test with two form instances',
-      'page callback' => 'form_test_two_instances',
-      'access callback' => 'node_access',
-      'access arguments' => array('create', 'page'),
-      'file path' => drupal_get_path('module', 'node'),
-      'file' => 'node.pages.inc',
-      'type' => MENU_CALLBACK,
-    );
-  }
   $items['form-test/double-form'] = array(
     'title' => 'Double form test',
     'page callback' => 'form_test_double_form',
@@ -2270,23 +2259,6 @@ function form_test_user_register_form_rebuild($form, &$form_state) {
 }
 
 /**
- * Menu callback that returns two instances of the node form.
- */
-function form_test_two_instances() {
-  $user = Drupal::currentUser();
-  $node1 = entity_create('node', array(
-    'uid' => $user->id(),
-    'name' => $user->getUsername(),
-    'type' => 'page',
-    'langcode' => Language::LANGCODE_NOT_SPECIFIED,
-  ));
-  $node2 = clone($node1);
-  $return['node_form_1'] = Drupal::entityManager()->getForm($node1);
-  $return['node_form_2'] = Drupal::entityManager()->getForm($node2);
-  return $return;
-}
-
-/**
  * Menu callback for testing custom form includes.
  */
 function form_test_load_include_custom($form, &$form_state) {
diff --git a/core/modules/system/tests/modules/form_test/form_test.services.yml b/core/modules/system/tests/modules/form_test/form_test.services.yml
index 0201650..e658fca 100644
--- a/core/modules/system/tests/modules/form_test/form_test.services.yml
+++ b/core/modules/system/tests/modules/form_test/form_test.services.yml
@@ -3,5 +3,6 @@ services:
     class: Drupal\form_test\FormTestServiceObject
   form_test.event_subscriber:
     class: Drupal\form_test\EventSubscriber\FormTestEventSubscriber
+    arguments: ['@module_handler']
     tags:
       - { name: event_subscriber }
diff --git a/core/modules/system/tests/modules/form_test/lib/Drupal/form_test/Controller/FormTestController.php b/core/modules/system/tests/modules/form_test/lib/Drupal/form_test/Controller/FormTestController.php
new file mode 100644
index 0000000..ff94a9a
--- /dev/null
+++ b/core/modules/system/tests/modules/form_test/lib/Drupal/form_test/Controller/FormTestController.php
@@ -0,0 +1,38 @@
+<?php
+/**
+* @file
+* Contains \Drupal\form_test\Controller\FormTestController.
+*/
+
+namespace Drupal\form_test\Controller;
+
+use Drupal\Core\Controller\ControllerBase;
+use Drupal\Core\Language\Language;
+
+/**
+* Controller routines for form_test routes.
+*/
+class FormTestController extends ControllerBase {
+
+  /**
+   * Returns two instances of the node form.
+   *
+   * @return string
+   *   A HTML-formatted string with the double node form page content.
+   */
+  public function twoFormInstances() {
+    $user = $this->currentUser();
+    $values = array(
+      'uid' => $user->id(),
+      'name' => $user->getUsername(),
+      'type' => 'page',
+      'langcode' => Language::LANGCODE_NOT_SPECIFIED,
+    );
+    $node1 = entity_create('node', $values);
+    $node2 = clone($node1);
+    $return['node_form_1'] = $this->entityManager()->getForm($node1);
+    $return['node_form_2'] = $this->entityManager()->getForm($node2);
+    return $return;
+  }
+
+}
diff --git a/core/modules/system/tests/modules/form_test/lib/Drupal/form_test/EventSubscriber/FormTestEventSubscriber.php b/core/modules/system/tests/modules/form_test/lib/Drupal/form_test/EventSubscriber/FormTestEventSubscriber.php
index 7769bec..d2edb47 100644
--- a/core/modules/system/tests/modules/form_test/lib/Drupal/form_test/EventSubscriber/FormTestEventSubscriber.php
+++ b/core/modules/system/tests/modules/form_test/lib/Drupal/form_test/EventSubscriber/FormTestEventSubscriber.php
@@ -7,6 +7,10 @@
 
 namespace Drupal\form_test\EventSubscriber;
 
+use Drupal\Core\Routing\RouteBuildEvent;
+use Drupal\Core\Routing\RoutingEvents;
+use Drupal\Core\Extension\ModuleHandlerInterface;
+use Symfony\Component\Routing\Route;
 use Symfony\Component\EventDispatcher\EventSubscriberInterface;
 use Symfony\Component\HttpKernel\Event\GetResponseEvent;
 use Symfony\Component\HttpKernel\KernelEvents;
@@ -17,6 +21,20 @@
 class FormTestEventSubscriber implements EventSubscriberInterface {
 
   /**
+   * The module handler.
+   *
+   * @var \Drupal\Core\Extension\ModuleHandlerInterface
+   */
+  protected $moduleHandler;
+
+  /**
+   * Constructs a FormTestController object.
+   */
+  public function __construct(ModuleHandlerInterface $moduleHandler) {
+    $this->moduleHandler = $moduleHandler;
+  }
+
+  /**
    * Adds custom attributes to the request object.
    *
    * @param \Symfony\Component\HttpKernel\Event\GetResponseEvent $event
@@ -33,8 +51,26 @@ public function onKernelRequest(GetResponseEvent $event) {
    */
   public static function getSubscribedEvents() {
     $events[KernelEvents::REQUEST][] = array('onKernelRequest');
+    $events[RoutingEvents::DYNAMIC] = 'routes';
 
     return $events;
   }
 
+  /**
+   * Adds routes for the Form Tests.
+   */
+  public function routes(RouteBuildEvent $event) {
+    $collection = $event->getRouteCollection();
+    $defaults = array();
+
+    if ($this->moduleHandler->moduleExists('node')) {
+      $route = new Route(
+        "form-test/two-instances-of-same-form",
+        array('_content' => '\Drupal\form_test\Controller\FormTestController::twoFormInstances'),
+        array('_entity_create_access' => 'node')
+      );
+      $collection->add("form_test.two_instances", $route);
+    }
+  }
+
 }
