diff --git a/core/modules/layout/layout.admin.inc b/core/modules/layout/layout.admin.inc
deleted file mode 100644
index 797c4c7..0000000
--- a/core/modules/layout/layout.admin.inc
+++ /dev/null
@@ -1,35 +0,0 @@
-<?php
-
-/**
- * @file
- * Administration functions for layouts.
- */
-
-/**
- * Page callback: Demonstrates a layout template.
- *
- * @param string $key
- *   The key of the page layout being requested.
- *
- * @return array
- *   An array as expected by drupal_render().
- *
- * @see layout_menu()
- */
-function layout_page_view($key) {
-  $layout = layout_manager()->getDefinition($key);
-  drupal_set_title(t('View template %name', array('%name' => $layout['title'])), PASS_THROUGH);
-
-  // Render the layout in an admin context with region demonstrations.
-  $instance = layout_manager()->createInstance($key, array());
-  $regions = $instance->getRegions();
-  foreach ($regions as $region => $info) {
-    $regions[$region] = '<div class="layout-region-demonstration">' . check_plain($info['label']) . '</div>';
-  }
-  $build['demonstration'] = array(
-    '#type' => 'markup',
-    '#markup' => $instance->renderLayout(TRUE, $regions),
-  );
-  $build['#attached']['css'][] = drupal_get_path('module', 'layout') . '/layout.admin.css';
-  return $build;
-}
diff --git a/core/modules/layout/layout.module b/core/modules/layout/layout.module
index 17acc6d..8e81e18 100644
--- a/core/modules/layout/layout.module
+++ b/core/modules/layout/layout.module
@@ -16,11 +16,7 @@ function layout_menu() {
   );
   $items['admin/structure/templates/manage/%'] = array(
     'title' => 'View template',
-    'page callback' => 'layout_page_view',
-    'page arguments' => array(4),
-    'access callback' => 'layout_user_access',
-    'access arguments' => array(4),
-    'file' => 'layout.admin.inc',
+    'route_name' => 'layout_page_view',
   );
   return $items;
 }
diff --git a/core/modules/layout/layout.routing.yml b/core/modules/layout/layout.routing.yml
index d1cd540..3ca0b99 100644
--- a/core/modules/layout/layout.routing.yml
+++ b/core/modules/layout/layout.routing.yml
@@ -4,3 +4,9 @@ layout_page_list:
     _content: '\Drupal\layout\Controller\LayoutController::layoutPageList'
   requirements:
     _permission: 'administer layouts'
+layout_page_view:
+  pattern: '/admin/structure/templates/manage/{node}'
+  defaults:
+    _content: '\Drupal\layout\Controller\LayoutController::layoutPageView'
+  requirements:
+    layout_user_access: TRUE
diff --git a/core/modules/layout/lib/Drupal/layout/Controller/LayoutController.php b/core/modules/layout/lib/Drupal/layout/Controller/LayoutController.php
index 848ec02..28e7cf5 100644
--- a/core/modules/layout/lib/Drupal/layout/Controller/LayoutController.php
+++ b/core/modules/layout/lib/Drupal/layout/Controller/LayoutController.php
@@ -76,4 +76,22 @@ public function layoutPageList() {
     t('module');
     t('theme');
   }
+
+  public function layoutPageView($key) {
+    $layout = layout_manager()->getDefinition($key);
+    drupal_set_title(t('View template %name', array('%name' => $layout['title'])), PASS_THROUGH);
+
+    // Render the layout in an admin context with region demonstrations.
+    $instance = layout_manager()->createInstance($key, array());
+    $regions = $instance->getRegions(); 
+    foreach ($regions as $region => $info) {
+      $regions[$region] = '<div class="layout-region-demonstration">' . check_plain($info['label']) . '</div>';
+    }
+    $build['demonstration'] = array(
+      '#type' => 'markup',
+      '#markup' => $instance->renderLayout(TRUE, $regions),
+    );
+    $build['#attached']['css'][] = drupal_get_path('module', 'layout') . '/layout.admin.css';
+    return $build;
+  }
 }
