diff --git a/core/modules/shortcut/shortcut.module b/core/modules/shortcut/shortcut.module
index 5f1966c..dfab91e 100644
--- a/core/modules/shortcut/shortcut.module
+++ b/core/modules/shortcut/shortcut.module
@@ -251,10 +251,8 @@ function shortcut_renderable_links($shortcut_set = NULL) {
     $shortcut_set = shortcut_current_displayed_set();
   }
 
-  /** @var \Drupal\shortcut\ShortcutInterface[] $shortcuts  */
-  $shortcuts = \Drupal::entityManager()->getStorage('shortcut')->loadByProperties(array('shortcut_set' => $shortcut_set->id()));
   $cache_tags = array();
-  foreach ($shortcuts as $shortcut) {
+  foreach ($shortcut_set->getShortcuts() as $shortcut) {
     $shortcut = \Drupal::entityManager()->getTranslationFromContext($shortcut);
     $links[$shortcut->id()] = array(
       'type' => 'link',
diff --git a/core/modules/shortcut/src/Entity/Shortcut.php b/core/modules/shortcut/src/Entity/Shortcut.php
index 1a0765d..ad8f61c 100644
--- a/core/modules/shortcut/src/Entity/Shortcut.php
+++ b/core/modules/shortcut/src/Entity/Shortcut.php
@@ -183,4 +183,21 @@ public function getCacheTags() {
     return $this->shortcut_set->entity->getCacheTags();
   }
 
+  /**
+   * Sort shortcut objects.
+   *
+   * @param \Drupal\shortcut\ShortcutInterface[] $shortcuts
+   *   The array of shortcut objects to sort.
+   */
+  public static function sort(array &$shortcuts) {
+    uasort($shortcuts, function (ShortcutInterface $a, ShortcutInterface $b) {
+      $a_weight = $a->getWeight();
+      $b_weight = $b->getWeight();
+      if ($a_weight == $b_weight) {
+        return strnatcasecmp($a->getTitle(), $b->getTitle());
+      }
+      return ($a_weight < $b_weight) ? -1 : 1;
+    });
+  }
+
 }
diff --git a/core/modules/shortcut/src/Entity/ShortcutSet.php b/core/modules/shortcut/src/Entity/ShortcutSet.php
index aa0ccfc..abf953b 100644
--- a/core/modules/shortcut/src/Entity/ShortcutSet.php
+++ b/core/modules/shortcut/src/Entity/ShortcutSet.php
@@ -117,7 +117,9 @@ public function resetLinkWeights() {
    * {@inheritdoc}
    */
   public function getShortcuts() {
-    return \Drupal::entityManager()->getStorage('shortcut')->loadByProperties(array('shortcut_set' => $this->id()));
+    $shortcuts = \Drupal::entityManager()->getStorage('shortcut')->loadByProperties(array('shortcut_set' => $this->id()));
+    Shortcut::sort($shortcuts);
+    return $shortcuts;
   }
 
 }
diff --git a/core/modules/shortcut/src/Form/SetCustomize.php b/core/modules/shortcut/src/Form/SetCustomize.php
index e0cf262..4c0a268 100644
--- a/core/modules/shortcut/src/Form/SetCustomize.php
+++ b/core/modules/shortcut/src/Form/SetCustomize.php
@@ -79,8 +79,6 @@ public function form(array $form, FormStateInterface $form_state) {
         '#links' => $links,
       );
     }
-    // Sort the list so the output is ordered by weight.
-    uasort($form['shortcuts']['links'], array('\Drupal\Component\Utility\SortArray', 'sortByWeightProperty'));
     return $form;
   }
 
diff --git a/core/modules/shortcut/src/ShortcutSetInterface.php b/core/modules/shortcut/src/ShortcutSetInterface.php
index 21cc4f3..9d2f941 100644
--- a/core/modules/shortcut/src/ShortcutSetInterface.php
+++ b/core/modules/shortcut/src/ShortcutSetInterface.php
@@ -27,7 +27,7 @@
   public function resetLinkWeights();
 
   /**
-   * Returns all the shortcuts from a shortcut set.
+   * Returns all the shortcuts from a shortcut set sorted correctly.
    *
    * @return \Drupal\shortcut\ShortcutInterface[]
    *   An array of shortcut entities.
diff --git a/core/modules/shortcut/src/Tests/ShortcutLinksTest.php b/core/modules/shortcut/src/Tests/ShortcutLinksTest.php
index 27202ba..9397168 100644
--- a/core/modules/shortcut/src/Tests/ShortcutLinksTest.php
+++ b/core/modules/shortcut/src/Tests/ShortcutLinksTest.php
@@ -262,6 +262,24 @@ public function testAccessShortcutsPermission() {
   }
 
   /**
+   * Tests the shortcuts are correctly ordered by weight in the toolbar.
+   */
+  public function testShortcutLinkOrder() {
+    $this->drupalLogin($this->drupalCreateUser(array('access toolbar', 'access shortcuts')));
+    $this->drupalGet(Url::fromRoute('<front>'));
+    $shortcuts = $this->cssSelect('#toolbar-item-shortcuts-tray .menu a');
+    $this->assertEqual((string) $shortcuts[0], 'Add content');
+    $this->assertEqual((string) $shortcuts[1], 'All content');
+    foreach($this->set->getShortcuts() as $shortcut) {
+      $shortcut->setWeight($shortcut->getWeight() * -1)->save();
+    }
+    $this->drupalGet(Url::fromRoute('<front>'));
+    $shortcuts = $this->cssSelect('#toolbar-item-shortcuts-tray .menu a');
+    $this->assertEqual((string) $shortcuts[0], 'All content');
+    $this->assertEqual((string) $shortcuts[1], 'Add content');
+  }
+
+  /**
    * Tests that the 'access shortcuts' permission is required for shortcut set
    * administration page access.
    */
diff --git a/core/modules/shortcut/src/Tests/ShortcutSetsTest.php b/core/modules/shortcut/src/Tests/ShortcutSetsTest.php
index 34f394d..c321bc4 100644
--- a/core/modules/shortcut/src/Tests/ShortcutSetsTest.php
+++ b/core/modules/shortcut/src/Tests/ShortcutSetsTest.php
@@ -79,9 +79,10 @@ function testShortcutSetEdit() {
     $this->drupalPostForm(NULL, $edit, t('Save changes'));
     $this->assertRaw(t('The shortcut set has been updated.'));
 
-    // Check to ensure that the shortcut weights have changed.
-    $weights = $this->getShortcutInformation($set, 'weight');
-    $this->assertEqual($weights, array(2, 1));
+    \Drupal::entityManager()->getStorage('shortcut')->resetCache();
+    // Check to ensure that the shortcut weights have changed and that
+    // ShortcutSet::.getShortcuts() returns shortcuts in the new order.
+    $this->assertIdentical(array_reverse(array_keys($shortcuts)), array_keys($set->getShortcuts()));
   }
 
   /**
