diff --git a/core/modules/menu/lib/Drupal/menu/Tests/MenuTest.php b/core/modules/menu/lib/Drupal/menu/Tests/MenuTest.php
index 654a005..653b5e9 100644
--- a/core/modules/menu/lib/Drupal/menu/Tests/MenuTest.php
+++ b/core/modules/menu/lib/Drupal/menu/Tests/MenuTest.php
@@ -239,7 +239,7 @@ function doMenuTests($menu_name) {
     $this->assertMenuLink($item3['mlid'], array('depth' => 4, 'has_children' => 0, 'p1' => $item4['mlid'], 'p2' => $item5['mlid'], 'p3' => $item2['mlid'], 'p4' => $item3['mlid'], 'p5' => 0));
 
     // Add 102 menu links with increasing weights, then make sure the last-added
-    // item's weight doesn't get changed because of the old hardcoded delta=50
+    // item's weight doesn't change because of the old hardcoded delta = 50.
     $items = array();
     for ($i = -50; $i <= 51; $i++) {
       $items[$i] = $this->addMenuLink(0, 'node/' . $node1->nid, $menu_name, TRUE, strval($i));
diff --git a/core/modules/menu/menu.admin.inc b/core/modules/menu/menu.admin.inc
index 9ac32e2..e6fad31 100644
--- a/core/modules/menu/menu.admin.inc
+++ b/core/modules/menu/menu.admin.inc
@@ -120,7 +120,7 @@ function menu_overview_form($form, &$form_state) {
  * @param $tree
  *   The menu_tree retrieved by menu_tree_data.
  * @param $delta
- *   The default number of menu items used in the menu weight selector is 50.
+ *   The number of menu items used in the menu weight selector; defaults to 50.
  */
 function _menu_overview_tree_form($tree, $delta = 50) {
   $form = &drupal_static(__FUNCTION__, array('#tree' => TRUE));
diff --git a/core/modules/menu/menu.module b/core/modules/menu/menu.module
index a4a6718..d7ce25f 100644
--- a/core/modules/menu/menu.module
+++ b/core/modules/menu/menu.module
@@ -625,8 +625,8 @@ function menu_form_node_form_alter(&$form, $form_state) {
     '#attributes' => array('class' => array('menu-parent-select')),
   );
 
-  // Get number of items in menu so the weight selector is sized appropriately.
-  $delta = entity_get_controller('menu_link')->countMenuLinks($link->menu_name);
+  // Get the needed range in menu so the weight selector is sized appropriately.
+  $delta = entity_get_controller('menu_link')->menuLinksRange($link->menu_name);
   if ($delta < 50) {
     // Old hardcoded value
     $delta = 50;
diff --git a/core/modules/menu_link/lib/Drupal/menu_link/MenuLinkFormController.php b/core/modules/menu_link/lib/Drupal/menu_link/MenuLinkFormController.php
index 9506602..fb37f01 100644
--- a/core/modules/menu_link/lib/Drupal/menu_link/MenuLinkFormController.php
+++ b/core/modules/menu_link/lib/Drupal/menu_link/MenuLinkFormController.php
@@ -109,9 +109,10 @@ public function form(array $form, array &$form_state, EntityInterface $menu_link
       '#attributes' => array('class' => array('menu-title-select')),
     );
 
-    // Get number of items in menu so the weight selector is sized appropriately.
+    // Get the needed range in menu so the weight selector is sized
+    // appropriately.
     $delta = drupal_container()->get('plugin.manager.entity')
-      ->getStorageController('menu_link')->countMenuLinks($menu_link->menu_name);
+      ->getStorageController('menu_link')->menuLinksRange($menu_link->menu_name);
     $form['weight'] = array(
       '#type' => 'weight',
       '#title' => t('Weight'),
diff --git a/core/modules/menu_link/lib/Drupal/menu_link/MenuLinkStorageController.php b/core/modules/menu_link/lib/Drupal/menu_link/MenuLinkStorageController.php
index 5180b3e..29e15f7 100644
--- a/core/modules/menu_link/lib/Drupal/menu_link/MenuLinkStorageController.php
+++ b/core/modules/menu_link/lib/Drupal/menu_link/MenuLinkStorageController.php
@@ -567,6 +567,9 @@ protected function moveChildren(EntityInterface $entity) {
    *
    * @param string $menu_name
    *   The unique name of a menu.
+   *
+   * @return int
+   *   Returns the total number.
    */
   public function countMenuLinks($menu_name) {
     $query = entity_query($this->entityType);
@@ -575,4 +578,23 @@ public function countMenuLinks($menu_name) {
       ->count();
     return $query->execute();
   }
+
+  /**
+   * Returns the maximum range in weights for a given menu..
+   *
+   * @param string $menu_name
+   *   The unique name of a menu.
+   *
+   * @return int
+   *   Returns the needed range.
+   */
+  public function menuLinksRange($menu_name) {
+    $query = entity_query_aggregate($this->entityType)
+      ->aggregate('weight', 'MAX')
+      ->aggregate('weight', 'MIN')
+      ->condition('menu_name', $menu_name);
+    $result = $query->execute();
+    $item = reset($result);
+    return max(abs($item['weight_min']), abs($item['weight_max'])) + 1;
+  }
 }
