diff --git a/core/modules/layout/tests/layout_test.module b/core/modules/layout/tests/layout_test.module
index 0e84a95..b7a7073 100644
--- a/core/modules/layout/tests/layout_test.module
+++ b/core/modules/layout/tests/layout_test.module
@@ -6,43 +6,6 @@
  */
 
 /**
- * Implementation of hook_menu().
- */
-function layout_test_menu() {
-  $items = array();
-  $items['layout-test'] = array(
-    'title' => 'Layout test',
-    'page callback' => 'layout_test_page',
-    'access callback' => TRUE,
-  );
-  return $items;
-}
-
-/**
- * Page callback for layout testing.
- */
-function layout_test_page() {
-  // Hack to enable and apply the theme to this page and manually invoke its
-  // layout plugin and render it.
-  global $theme;
-  $theme = 'layout_test_theme';
-  theme_enable(array($theme));
-
-  $display = entity_load('display', 'test_twocol');
-  $layout = $display->getLayoutInstance();
-
-  // @todo This tests that the layout can render its regions, but does not test
-  //   block rendering: http://drupal.org/node/1812720.
-  // Add sample content in the regions that is looked for in the tests.
-  $regions = $layout->getRegions();
-  foreach ($regions as $region => $info) {
-    $regions[$region] = '<h3>' . $info['label'] . '</h3>';
-  }
-
-  return $layout->renderLayout(FALSE, $regions);
-}
-
-/**
  * Implements hook_system_theme_info().
  */
 function layout_test_system_theme_info() {
diff --git a/core/modules/layout/tests/layout_test.routing.yml b/core/modules/layout/tests/layout_test.routing.yml
new file mode 100644
index 0000000..636e13f
--- /dev/null
+++ b/core/modules/layout/tests/layout_test.routing.yml
@@ -0,0 +1,6 @@
+layout_test_page:
+  pattern: '/layout-test'
+  defaults:
+    _content: '\Drupal\layout_test\Controller\LayoutTestController::layoutTestPage'
+  requirements:
+    _access: 'TRUE'
diff --git a/core/modules/layout/tests/lib/Drupal/layout_test/Controller/LayoutTestController.php b/core/modules/layout/tests/lib/Drupal/layout_test/Controller/LayoutTestController.php
new file mode 100644
index 0000000..7db2816
--- /dev/null
+++ b/core/modules/layout/tests/lib/Drupal/layout_test/Controller/LayoutTestController.php
@@ -0,0 +1,70 @@
+<?php
+/**
+ * @file
+ * Contains \Drupal\layout_test\Controller\LayoutTestController.
+ */
+
+namespace Drupal\layout_test\Controller;
+
+use Drupal\Core\ControllerInterface;
+use Drupal\Core\Entity\EntityStorageControllerInterface;
+use Symfony\Component\DependencyInjection\ContainerInterface;
+
+/**
+ * Controller routines for layout_test routes.
+ */
+class LayoutTestController implements ControllerInterface{
+
+  /**
+   * Stores the entity storage controller.
+   *
+   * @var \Drupal\Core\Entity\EntityStorageControllerInterface
+   */
+  protected $entityStorageController;
+
+  /**
+   * Constructs a \Drupal\layout_test\Controller\LayoutTestController object.
+   *
+   * @param \Drupal\Core\Entity\EntityStorageControllerInterface $entity_storage_controller
+   *   The entity storage controller.
+   */
+  function __construct(EntityStorageControllerInterface $entity_storage_controller) {
+    $this->entityStorageController = $entity_storage_controller;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function create(ContainerInterface $container) {
+    return new static($container->get('plugin.manager.entity')->getStorageController('display'));
+  }
+
+  /**
+   * Page callback for layout testing.
+   *
+   * @return string
+   *   An HTML string representing the contents of layout_test page.
+   */
+  public function layoutTestPage() {
+    // Hack to enable and apply the theme to this page and manually invoke its
+    // layout plugin and render it.
+    global $theme;
+    $theme = 'layout_test_theme';
+    theme_enable(array($theme));
+
+    $displays = $this->entityStorageController->load(array('test_twocol'));
+    $display = reset($displays);
+    $layout = $display->getLayoutInstance();
+
+    // @todo This tests that the layout can render its regions, but does not test
+    //   block rendering: http://drupal.org/node/1812720.
+    // Add sample content in the regions that is looked for in the tests.
+    $regions = $layout->getRegions();
+    foreach ($regions as $region => $info) {
+      $regions[$region] = '<h3>' . $info['label'] . '</h3>';
+    }
+
+    return $layout->renderLayout(FALSE, $regions);
+  }
+
+}
