diff --git a/core/modules/shortcut/lib/Drupal/shortcut/Form/SetCustomize.php b/core/modules/shortcut/lib/Drupal/shortcut/Form/SetCustomize.php
new file mode 100644
index 0000000..e8808ae
--- /dev/null
+++ b/core/modules/shortcut/lib/Drupal/shortcut/Form/SetCustomize.php
@@ -0,0 +1,125 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\shortcut\Form\SetCustomize.
+ */
+
+namespace Drupal\shortcut\Form;
+
+use Drupal\Core\Controller\ControllerInterface;
+use Drupal\Core\Form\FormInterface;
+use Drupal\menu_link\MenuLinkStorageController;
+use Drupal\shortcut\Plugin\Core\Entity\Shortcut;
+use Symfony\Component\DependencyInjection\ContainerInterface;
+
+/**
+ * Builds the shortcut set customize form.
+ */
+class SetCustomize implements FormInterface, ControllerInterface {
+
+  /**
+   * The entity storage controller for menu links.
+   *
+   * @var \Drupal\menu_link\MenuLinkStorageController
+   */
+  protected $storageController;
+
+  /**
+   * Constructs a SetCustomize object.
+   *
+   * @param \Drupal\menu_link\MenuLinkStorageController $storage_controller
+   *   The entity manager.
+   */
+  public function __construct(MenuLinkStorageController $storage_controller) {
+    $this->storageController = $storage_controller;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function create(ContainerInterface $container) {
+    return new static(
+      $container->get('plugin.manager.entity')->getStorageController('menu_link')
+    );
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getFormID() {
+    return 'shortcut_set_customize';
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function buildForm(array $form, array &$form_state, Shortcut $shortcut = NULL) {
+    $form['#shortcut_set_name'] = $shortcut->id();
+    $form['shortcuts'] = array(
+      '#tree' => TRUE,
+      '#weight' => -20,
+      'links' => array(),
+    );
+
+    foreach ($shortcut->links as $link) {
+      $mlid = $link->id();
+      $form['shortcuts']['links'][$mlid]['name']['#markup'] = l($link->link_title, $link->link_path);
+      $form['shortcuts']['links'][$mlid]['weight'] = array(
+        '#type' => 'weight',
+        '#title' => t('Weight for @title', array('@title' => $link->link_title)),
+        '#title_display' => 'invisible',
+        '#delta' => 50,
+        '#default_value' => $link['weight'],
+        '#attributes' => array('class' => array('shortcut-weight')),
+      );
+
+      $links['edit'] = array(
+        'title' => t('Edit'),
+        'href' => "admin/config/user-interface/shortcut/link/$mlid",
+      );
+      $links['delete'] = array(
+        'title' => t('Delete'),
+        'href' => "admin/config/user-interface/shortcut/link/$mlid/delete",
+      );
+      $form['shortcuts']['links'][$mlid]['operations'] = array(
+        '#type' => 'operations',
+        '#links' => $links,
+      );
+    }
+
+    $form['actions'] = array(
+      '#type' => 'actions',
+      '#access' => !empty($shortcut->links),
+    );
+    $form['actions']['submit'] = array(
+      '#type' => 'submit',
+      '#value' => t('Save changes'),
+    );
+
+    return $form;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function validateForm(array &$form, array &$form_state) {
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function submitForm(array &$form, array &$form_state) {
+    $mlids = array_keys($form_state['values']['shortcuts']['links']);
+    $menu_links = $this->storageController->load($mlids);
+    foreach ($form_state['values']['shortcuts']['links'] as $mlid => $data) {
+      $link = $menu_links[$mlid];
+      debug($mlid);
+      debug($data['weight']);
+      $link->weight = $data['weight'];
+      $this->storageController->save($link);
+    }
+    drupal_set_message(t('The shortcut set has been updated.'));
+  }
+
+}
diff --git a/core/modules/shortcut/lib/Drupal/shortcut/ShortcutAccessController.php b/core/modules/shortcut/lib/Drupal/shortcut/ShortcutAccessController.php
index d5a143d..2451da3 100644
--- a/core/modules/shortcut/lib/Drupal/shortcut/ShortcutAccessController.php
+++ b/core/modules/shortcut/lib/Drupal/shortcut/ShortcutAccessController.php
@@ -22,6 +22,7 @@ class ShortcutAccessController extends EntityAccessController {
   protected function checkAccess(EntityInterface $entity, $operation, $langcode, AccountInterface $account) {
     switch ($operation) {
       case 'edit':
+      case 'customize':
         if (user_access('administer shortcuts', $account)) {
           return TRUE;
         }
@@ -30,12 +31,14 @@ protected function checkAccess(EntityInterface $entity, $operation, $langcode, A
         }
         return FALSE;
         break;
+
       case 'delete':
         if (!user_access('administer shortcuts', $account)) {
           return FALSE;
         }
         return $entity->id() != 'default';
         break;
+
     }
   }
 
diff --git a/core/modules/shortcut/shortcut.admin.inc b/core/modules/shortcut/shortcut.admin.inc
index 5e1d1a1..5976f53 100644
--- a/core/modules/shortcut/shortcut.admin.inc
+++ b/core/modules/shortcut/shortcut.admin.inc
@@ -180,80 +180,6 @@ function shortcut_set_add() {
 }
 
 /**
- * Form callback: builds the form for customizing shortcut sets.
- *
- * @param $form
- *   An associative array containing the structure of the form.
- * @param $form_state
- *   An associative array containing the current state of the form.
- * @param $shortcut_set Drupal\shortcut\Plugin\Core\Entity\Shortcut
- *   An object representing the shortcut set which is being edited.
- *
- * @return
- *   An array representing the form definition.
- *
- * @ingroup forms
- * @see shortcut_set_customize_submit()
- */
-function shortcut_set_customize($form, &$form_state, $shortcut_set) {
-  $form['#shortcut_set_name'] = $shortcut_set->id();
-  $form['shortcuts'] = array(
-    '#tree' => TRUE,
-    '#weight' => -20,
-    'links' => array(),
-  );
-
-  foreach ($shortcut_set->links as $uuid => $link) {
-    $mlid = $link['mlid'];
-    $form['shortcuts']['links'][$mlid]['name']['#markup'] = l($link['link_title'], $link['link_path']);
-    $form['shortcuts']['links'][$mlid]['weight'] = array(
-      '#type' => 'weight',
-      '#title' => t('Weight for @title', array('@title' => $link['link_title'])),
-      '#title_display' => 'invisible',
-      '#delta' => 50,
-      '#default_value' => $link['weight'],
-      '#attributes' => array('class' => array('shortcut-weight')),
-    );
-
-    $links['edit'] = array(
-      'title' => t('Edit'),
-      'href' => "admin/config/user-interface/shortcut/link/$mlid",
-    );
-    $links['delete'] = array(
-      'title' => t('Delete'),
-      'href' => "admin/config/user-interface/shortcut/link/$mlid/delete",
-    );
-    $form['shortcuts']['links'][$mlid]['operations'] = array(
-      '#type' => 'operations',
-      '#links' => $links,
-    );
-  }
-
-  $form['actions'] = array(
-    '#type' => 'actions',
-    '#access' => !empty($shortcut_set->links),
-  );
-  $form['actions']['submit'] = array(
-    '#type' => 'submit',
-    '#value' => t('Save changes'),
-  );
-
-  return $form;
-}
-
-/**
- * Submit handler for shortcut_set_customize().
- */
-function shortcut_set_customize_submit($form, &$form_state) {
-  foreach ($form_state['values']['shortcuts']['links'] as $mlid => $data) {
-    $link = menu_link_load($mlid);
-    $link['weight'] = $data['weight'];
-    menu_link_save($link);
-  }
-  drupal_set_message(t('The shortcut set has been updated.'));
-}
-
-/**
  * Returns HTML for a shortcut set customization form.
  *
  * @param $variables
diff --git a/core/modules/shortcut/shortcut.module b/core/modules/shortcut/shortcut.module
index a14a3e7..7cba21b 100644
--- a/core/modules/shortcut/shortcut.module
+++ b/core/modules/shortcut/shortcut.module
@@ -98,13 +98,7 @@ function shortcut_menu() {
   );
   $items['admin/config/user-interface/shortcut/manage/%shortcut_set'] = array(
     'title' => 'Edit shortcuts',
-    'page callback' => 'drupal_get_form',
-    'page arguments' => array('shortcut_set_customize', 5),
-    'title callback' => 'entity_page_label',
-    'title arguments' => array(5),
-    'access callback' => 'shortcut_set_edit_access',
-    'access arguments' => array(5),
-    'file' => 'shortcut.admin.inc',
+    'route_name' => 'shortcut_set_customize',
   );
   $items['admin/config/user-interface/shortcut/manage/%shortcut_set/links'] = array(
     'title' => 'List links',
diff --git a/core/modules/shortcut/shortcut.routing.yml b/core/modules/shortcut/shortcut.routing.yml
index f4925c3..cb0ad1f 100644
--- a/core/modules/shortcut/shortcut.routing.yml
+++ b/core/modules/shortcut/shortcut.routing.yml
@@ -25,3 +25,10 @@ shortcut_set_edit:
     _entity_form: 'shortcut.edit'
   requirements:
     _entity_access: 'shortcut.edit'
+
+shortcut_set_customize:
+  pattern: '/admin/config/user-interface/shortcut/manage/{shortcut}'
+  defaults:
+    _form: 'Drupal\shortcut\Form\SetCustomize'
+  requirements:
+    _entity_access: 'shortcut.customize'
