diff --git a/core/includes/common.inc b/core/includes/common.inc
index 1bd8b19..71c80c2 100644
--- a/core/includes/common.inc
+++ b/core/includes/common.inc
@@ -4756,7 +4756,7 @@ function drupal_get_library($module, $name = NULL) {
  * In a situation where tree relationships are present, adding multiple
  * subgroups is not necessary, because the table will contain indentations that
  * provide enough information about the sibling and parent relationships.
- * See theme_menu_overview_form() for an example creating a table containing
+ * See theme_menu_edit_menu() for an example creating a table containing
  * parent relationships.
  *
  * Please note that this function should be called from the theme layer, such as
@@ -4796,7 +4796,7 @@ function drupal_get_library($module, $name = NULL) {
  * @param $limit
  *   (optional) Limit the maximum amount of parenting in this table.
  * @see block-admin-display-form.tpl.php
- * @see theme_menu_overview_form()
+ * @see theme_menu_edit_menu()
  */
 function drupal_add_tabledrag($table_id, $action, $relationship, $group, $subgroup = NULL, $source = NULL, $hidden = TRUE, $limit = 0) {
   $js_added = &drupal_static(__FUNCTION__, FALSE);
diff --git a/core/modules/book/book.admin.inc b/core/modules/book/book.admin.inc
index 08ec5ec..c1b4286 100644
--- a/core/modules/book/book.admin.inc
+++ b/core/modules/book/book.admin.inc
@@ -100,7 +100,7 @@ function book_admin_edit_validate($form, &$form_state) {
  * Saving menu items in the incorrect order can break the menu tree.
  *
  * @see book_admin_edit()
- * @see menu_overview_form_submit()
+ * @see menu_edit_menu_submit()
  */
 function book_admin_edit_submit($form, &$form_state) {
   // Save elements in the same order as defined in post rather than the form.
diff --git a/core/modules/forum/forum.test b/core/modules/forum/forum.test
index c7c3d9c..5d49cb5 100644
--- a/core/modules/forum/forum.test
+++ b/core/modules/forum/forum.test
@@ -217,7 +217,7 @@ class ForumTestCase extends DrupalWebTestCase {
 
     // Add forum to navigation menu.
     $edit = array();
-    $this->drupalPost('admin/structure/menu/manage/navigation', $edit, t('Save configuration'));
+    $this->drupalPost('admin/structure/menu/manage/navigation', $edit, t('Save'));
     $this->assertResponse(200);
 
     // Edit forum taxonomy.
diff --git a/core/modules/menu/menu.admin.inc b/core/modules/menu/menu.admin.inc
index f933feb..99338a5 100644
--- a/core/modules/menu/menu.admin.inc
+++ b/core/modules/menu/menu.admin.inc
@@ -10,12 +10,11 @@
  */
 function menu_overview_page() {
   $result = db_query("SELECT * FROM {menu_custom} ORDER BY title", array(), array('fetch' => PDO::FETCH_ASSOC));
-  $header = array(t('Title'), array('data' => t('Operations'), 'colspan' => '3'));
+  $header = array(t('Title'), array('data' => t('Operations'), 'colspan' => '2'));
   $rows = array();
   foreach ($result as $menu) {
     $row = array(theme('menu_admin_overview', array('title' => $menu['title'], 'name' => $menu['menu_name'], 'description' => $menu['description'])));
-    $row[] = array('data' => l(t('list links'), 'admin/structure/menu/manage/' . $menu['menu_name']));
-    $row[] = array('data' => l(t('edit menu'), 'admin/structure/menu/manage/' . $menu['menu_name'] . '/edit'));
+    $row[] = array('data' => l(t('edit menu'), 'admin/structure/menu/manage/' . $menu['menu_name']));
     $row[] = array('data' => l(t('add link'), 'admin/structure/menu/manage/' . $menu['menu_name'] . '/add'));
     $rows[] = $row;
   }
@@ -41,55 +40,12 @@ function theme_menu_admin_overview($variables) {
 }
 
 /**
- * Form for editing an entire menu tree at once.
- *
- * Shows for one menu the menu links accessible to the current user and
- * relevant operations.
- */
-function menu_overview_form($form, &$form_state, $menu) {
-  global $menu_admin;
-  $form['#attached']['css'] = array(drupal_get_path('module', 'menu') . '/menu.css');
-  $sql = "
-    SELECT m.load_functions, m.to_arg_functions, m.access_callback, m.access_arguments, m.page_callback, m.page_arguments, m.delivery_callback, m.title, m.title_callback, m.title_arguments, m.type, m.description, ml.*
-    FROM {menu_links} ml LEFT JOIN {menu_router} m ON m.path = ml.router_path
-    WHERE ml.menu_name = :menu
-    ORDER BY p1 ASC, p2 ASC, p3 ASC, p4 ASC, p5 ASC, p6 ASC, p7 ASC, p8 ASC, p9 ASC";
-  $result = db_query($sql, array(':menu' => $menu['menu_name']), array('fetch' => PDO::FETCH_ASSOC));
-  $links = array();
-  foreach ($result as $item) {
-    $links[] = $item;
-  }
-  $tree = menu_tree_data($links);
-  $node_links = array();
-  menu_tree_collect_node_links($tree, $node_links);
-  // We indicate that a menu administrator is running the menu access check.
-  $menu_admin = TRUE;
-  menu_tree_check_access($tree, $node_links);
-  $menu_admin = FALSE;
-
-  $form = array_merge($form, _menu_overview_tree_form($tree));
-  $form['#menu'] =  $menu;
-
-  if (element_children($form)) {
-    $form['actions'] = array('#type' => 'actions');
-    $form['actions']['submit'] = array(
-      '#type' => 'submit',
-      '#value' => t('Save configuration'),
-    );
-  }
-  else {
-    $form['#empty_text'] = t('There are no menu links yet. <a href="@link">Add link</a>.', array('@link' => url('admin/structure/menu/manage/'. $form['#menu']['menu_name'] .'/add')));
-  }
-  return $form;
-}
-
-/**
- * Recursive helper function for menu_overview_form().
+ * Recursive helper function for menu_edit_menu().
  *
  * @param $tree
  *   The menu_tree retrieved by menu_tree_data.
  */
-function _menu_overview_tree_form($tree) {
+function _menu_edit_tree_form($tree) {
   $form = &drupal_static(__FUNCTION__, array('#tree' => TRUE));
   foreach ($tree as $data) {
     $title = '';
@@ -136,60 +92,13 @@ function _menu_overview_tree_form($tree) {
     }
 
     if ($data['below']) {
-      _menu_overview_tree_form($data['below']);
+      _menu_edit_tree_form($data['below']);
     }
   }
   return $form;
 }
 
 /**
- * Submit handler for the menu overview form.
- *
- * This function takes great care in saving parent items first, then items
- * underneath them. Saving items in the incorrect order can break the menu tree.
- *
- * @see menu_overview_form()
- */
-function menu_overview_form_submit($form, &$form_state) {
-  // When dealing with saving menu items, the order in which these items are
-  // saved is critical. If a changed child item is saved before its parent,
-  // the child item could be saved with an invalid path past its immediate
-  // parent. To prevent this, save items in the form in the same order they
-  // are sent by $_POST, ensuring parents are saved first, then their children.
-  // See http://drupal.org/node/181126#comment-632270
-  $order = array_flip(array_keys($form_state['input'])); // Get the $_POST order.
-  $form = array_intersect_key(array_merge($order, $form), $form); // Update our original form with the new order.
-
-  $updated_items = array();
-  $fields = array('weight', 'plid');
-  foreach (element_children($form) as $mlid) {
-    if (isset($form[$mlid]['#item'])) {
-      $element = $form[$mlid];
-      // Update any fields that have changed in this menu item.
-      foreach ($fields as $field) {
-        if ($element[$field]['#value'] != $element[$field]['#default_value']) {
-          $element['#item'][$field] = $element[$field]['#value'];
-          $updated_items[$mlid] = $element['#item'];
-        }
-      }
-      // Hidden is a special case, the value needs to be reversed.
-      if ($element['hidden']['#value'] != $element['hidden']['#default_value']) {
-        // Convert to integer rather than boolean due to PDO cast to string.
-        $element['#item']['hidden'] = $element['hidden']['#value'] ? 0 : 1;
-        $updated_items[$mlid] = $element['#item'];
-      }
-    }
-  }
-
-  // Save all our changed items to the database.
-  foreach ($updated_items as $item) {
-    $item['customized'] = 1;
-    menu_link_save($item);
-  }
-  drupal_set_message(t('Your configuration has been saved.'));
-}
-
-/**
  * Returns HTML for the menu overview form into a table.
  *
  * @param $variables
@@ -198,56 +107,66 @@ function menu_overview_form_submit($form, &$form_state) {
  *
  * @ingroup themeable
  */
-function theme_menu_overview_form($variables) {
+function theme_menu_edit_menu($variables) {
   $form = $variables['form'];
 
-  drupal_add_tabledrag('menu-overview', 'match', 'parent', 'menu-plid', 'menu-plid', 'menu-mlid', TRUE, MENU_MAX_DEPTH - 1);
-  drupal_add_tabledrag('menu-overview', 'order', 'sibling', 'menu-weight');
+  $output = drupal_render($form['title']);
+  $output .= drupal_render($form['menu_name']);
+  $output .= drupal_render($form['description_toggle']);
+  $output .= drupal_render($form['description']);
+
+  if (!$form['#insert']) {
+    $header = array(
+      t('Menu link'),
+      array('data' => t('Enabled'), 'class' => array('checkbox')),
+      t('Weight'),
+      array('data' => t('Operations'), 'colspan' => '2'),
+    );
 
-  $header = array(
-    t('Menu link'),
-    array('data' => t('Enabled'), 'class' => array('checkbox')),
-    t('Weight'),
-    array('data' => t('Operations'), 'colspan' => '3'),
-  );
+    $rows = array();
+    foreach (element_children($form) as $mlid) {
+      if (isset($form[$mlid]['hidden'])) {
+        $element = &$form[$mlid];
+        // Build a list of operations.
+        $operations = array();
+        foreach (element_children($element['operations']) as $op) {
+          $operations[] = array('data' => drupal_render($element['operations'][$op]), 'class' => array('menu-operations'));
+        }
+        while (count($operations) < 2) {
+          $operations[] = array('data' => '', 'class' => array('menu-operations'));
+        }
 
-  $rows = array();
-  foreach (element_children($form) as $mlid) {
-    if (isset($form[$mlid]['hidden'])) {
-      $element = &$form[$mlid];
-      // Build a list of operations.
-      $operations = array();
-      foreach (element_children($element['operations']) as $op) {
-        $operations[] = array('data' => drupal_render($element['operations'][$op]), 'class' => array('menu-operations'));
-      }
-      while (count($operations) < 2) {
-        $operations[] = '';
-      }
+        // Add special classes to be used for tabledrag.js.
+        $element['plid']['#attributes']['class'] = array('menu-plid');
+        $element['mlid']['#attributes']['class'] = array('menu-mlid');
+        $element['weight']['#attributes']['class'] = array('menu-weight');
 
-      // Add special classes to be used for tabledrag.js.
-      $element['plid']['#attributes']['class'] = array('menu-plid');
-      $element['mlid']['#attributes']['class'] = array('menu-mlid');
-      $element['weight']['#attributes']['class'] = array('menu-weight');
+        // Change the parent field to a hidden. This allows any value but hides the field.
+        $element['plid']['#type'] = 'hidden';
 
-      // Change the parent field to a hidden. This allows any value but hides the field.
-      $element['plid']['#type'] = 'hidden';
+        $row = array();
+        $row[] = theme('indentation', array('size' => $element['#item']['depth'] - 1)) . drupal_render($element['title']);
+        $row[] = array('data' => drupal_render($element['hidden']), 'class' => array('checkbox', 'menu-enabled'));
+        $row[] = drupal_render($element['weight']) . drupal_render($element['plid']) . drupal_render($element['mlid']);
+        $row = array_merge($row, $operations);
 
-      $row = array();
-      $row[] = theme('indentation', array('size' => $element['#item']['depth'] - 1)) . drupal_render($element['title']);
-      $row[] = array('data' => drupal_render($element['hidden']), 'class' => array('checkbox', 'menu-enabled'));
-      $row[] = drupal_render($element['weight']) . drupal_render($element['plid']) . drupal_render($element['mlid']);
-      $row = array_merge($row, $operations);
+        $row = array_merge(array('data' => $row), $element['#attributes']);
+        $row['class'][] = 'draggable';
+        $rows[] = $row;
+      }
+    }
 
-      $row = array_merge(array('data' => $row), $element['#attributes']);
-      $row['class'][] = 'draggable';
-      $rows[] = $row;
+    // Add special classes to be used for tabledrag.js.
+    if (!empty($rows)) {
+      drupal_add_tabledrag('menu-edit', 'match', 'parent', 'menu-plid', 'menu-plid', 'menu-mlid', TRUE, MENU_MAX_DEPTH - 1);
+      drupal_add_tabledrag('menu-edit', 'order', 'sibling', 'menu-weight');
     }
+
+    if (empty($rows)) {
+      $rows[] = array(array('data' => $form['#empty_text'], 'colspan' => '6'));
+    }
+    $output .= theme('table', array('header' => $header, 'rows' => $rows, 'attributes' => array('id' => 'menu-edit')));
   }
-  $output = '';
-  if (empty($rows)) {
-    $rows[] = array(array('data' => $form['#empty_text'], 'colspan' => '7'));
-  }
-  $output .= theme('table', array('header' => $header, 'rows' => $rows, 'attributes' => array('id' => 'menu-overview')));
   $output .= drupal_render_children($form);
   return $output;
 }
@@ -418,15 +337,24 @@ function menu_edit_item_submit($form, &$form_state) {
 
 /**
  * Menu callback; Build the form that handles the adding/editing of a custom menu.
+ *
+ * This function takes great care in saving parent items first, then items
+ * underneath them. Saving items in the incorrect order can break the menu tree.
  */
 function menu_edit_menu($form, &$form_state, $type, $menu = array()) {
+  global $menu_admin;
   $system_menus = menu_list_system_menus();
+
+  $form['#attached']['css'] = array(drupal_get_path('module', 'menu') . '/menu.css');
+
   $menu += array(
     'menu_name' => '',
     'old_name' => !empty($menu['menu_name']) ? $menu['menu_name'] : '',
     'title' => '',
     'description' => '',
+    'description_toggle' => '',
   );
+
   // Allow menu_edit_menu_submit() and other form submit handlers to determine
   // whether the menu already exists.
   $form['#insert'] = empty($menu['old_name']);
@@ -461,11 +389,51 @@ function menu_edit_menu($form, &$form_state, $type, $menu = array()) {
     '#disabled' => !empty($menu['old_name']) || isset($system_menus[$menu['menu_name']]),
   );
 
+  // Hide the menu description field unless an "edit description" checkbox is
+  // selected. This prevents the list of menu links from being pushed too far
+  // down the page.
+  $form['description_toggle'] = array(
+    '#type' => 'checkbox',
+    '#title' => t('Edit description'),
+  );
+  if (isset($form['description']['#access'])) {
+    $form['description_toggle']['#access'] = $form['description']['#access'];
+  }
+
   $form['description'] = array(
     '#type' => 'textarea',
     '#title' => t('Description'),
     '#default_value' => $menu['description'],
   );
+  $form['description']['#states']['visible'][':input[name="description_toggle"]']['checked'] = TRUE;
+
+  if ($type == 'edit') {
+    $sql = "
+      SELECT m.load_functions, m.to_arg_functions, m.access_callback, m.access_arguments, m.page_callback, m.page_arguments, m.delivery_callback, m.title, m.title_callback, m.title_arguments, m.type, m.description, ml.*
+      FROM {menu_links} ml LEFT JOIN {menu_router} m ON m.path = ml.router_path
+      WHERE ml.menu_name = :menu
+      ORDER BY p1 ASC, p2 ASC, p3 ASC, p4 ASC, p5 ASC, p6 ASC, p7 ASC, p8 ASC, p9 ASC";
+    $result = db_query($sql, array(':menu' => $menu['menu_name']), array('fetch' => PDO::FETCH_ASSOC));
+    $links = array();
+    foreach ($result as $item) {
+      $links[] = $item;
+    }
+    $tree = menu_tree_data($links);
+    $node_links = array();
+    menu_tree_collect_node_links($tree, $node_links);
+    // We indicate that a menu administrator is running the menu access check.
+    $menu_admin = TRUE;
+    menu_tree_check_access($tree, $node_links);
+    $menu_admin = FALSE;
+
+    $form = array_merge($form, _menu_edit_tree_form($tree));
+    $form['#menu'] =  $menu;
+
+    if (count(element_children($form)) == 5) {
+      $form['#empty_text'] = t('There are no menu links yet. <a href="@link">Add link</a>.', array('@link' => url('admin/structure/menu/manage/'. $form['#menu']['menu_name'] .'/add')));
+    }
+  }
+
   $form['actions'] = array('#type' => 'actions');
   $form['actions']['submit'] = array(
     '#type' => 'submit',
@@ -478,7 +446,6 @@ function menu_edit_menu($form, &$form_state, $type, $menu = array()) {
     '#access' => $type == 'edit' && !isset($system_menus[$menu['menu_name']]),
     '#submit' => array('menu_custom_delete_submit'),
   );
-
   return $form;
 }
 
@@ -535,7 +502,7 @@ function menu_delete_menu_confirm_submit($form, &$form_state) {
     menu_reset_item($link);
   }
 
-  // Delete all links to the overview page for this menu.
+  // Delete all links to the edit page for this menu.
   $result = db_query("SELECT mlid FROM {menu_links} ml WHERE ml.link_path = :link", array(':link' => 'admin/structure/menu/manage/' . $menu['menu_name']), array('fetch' => PDO::FETCH_ASSOC));
   foreach ($result as $link) {
     menu_link_delete($link['mlid']);
@@ -595,6 +562,43 @@ function menu_edit_menu_submit($form, &$form_state) {
       menu_link_save($link);
     }
   }
+
+  // When dealing with saving menu items, the order in which these items are
+  // saved is critical. If a changed child item is saved before its parent,
+  // the child item could be saved with an invalid path past its immediate
+  // parent. To prevent this, save items in the form in the same order they
+  // are sent by $_POST, ensuring parents are saved first, then their children.
+  // See http://drupal.org/node/181126#comment-632270
+  $order = array_flip(array_keys($form_state['input'])); // Get the $_POST order.
+  $form = array_merge($order, $form); // Update our original form with the new order.
+
+  $updated_items = array();
+  $fields = array('weight', 'plid');
+  foreach (element_children($form) as $mlid) {
+    if (isset($form[$mlid]['#item'])) {
+      $element = $form[$mlid];
+      // Update any fields that have changed in this menu item.
+      foreach ($fields as $field) {
+        if ($element[$field]['#value'] != $element[$field]['#default_value']) {
+          $element['#item'][$field] = $element[$field]['#value'];
+          $updated_items[$mlid] = $element['#item'];
+        }
+      }
+      // Hidden is a special case, the value needs to be reversed.
+      if ($element['hidden']['#value'] != $element['hidden']['#default_value']) {
+        // Convert to integer rather than boolean due to PDO cast to string.
+        $element['#item']['hidden'] = $element['hidden']['#value'] ? 0 : 1;
+        $updated_items[$mlid] = $element['#item'];
+      }
+    }
+  }
+
+  // Save all our changed items to the database.
+  foreach ($updated_items as $item) {
+    $item['customized'] = 1;
+    menu_link_save($item);
+  }
+
   drupal_set_message(t('Your configuration has been saved.'));
   $form_state['redirect'] = $path . $menu['menu_name'];
 }
diff --git a/core/modules/menu/menu.module b/core/modules/menu/menu.module
index cd42256..9717ac9 100644
--- a/core/modules/menu/menu.module
+++ b/core/modules/menu/menu.module
@@ -94,20 +94,14 @@ function menu_menu() {
     'file' => 'menu.admin.inc',
   );
   $items['admin/structure/menu/manage/%menu'] = array(
-    'title' => 'Customize menu',
+    'title' => 'Edit menu',
     'page callback' => 'drupal_get_form',
-    'page arguments' => array('menu_overview_form', 4),
+    'page arguments' => array('menu_edit_menu', 'edit', 4),
     'title callback' => 'menu_overview_title',
     'title arguments' => array(4),
     'access arguments' => array('administer menu'),
     'file' => 'menu.admin.inc',
   );
-  $items['admin/structure/menu/manage/%menu/list'] = array(
-    'title' => 'List links',
-    'weight' => -10,
-    'type' => MENU_DEFAULT_LOCAL_TASK,
-    'context' => MENU_CONTEXT_PAGE | MENU_CONTEXT_INLINE,
-  );
   $items['admin/structure/menu/manage/%menu/add'] = array(
     'title' => 'Add link',
     'page callback' => 'drupal_get_form',
@@ -121,7 +115,7 @@ function menu_menu() {
     'page callback' => 'drupal_get_form',
     'page arguments' => array('menu_edit_menu', 'edit', 4),
     'access arguments' => array('administer menu'),
-    'type' => MENU_LOCAL_TASK,
+    'type' => MENU_DEFAULT_LOCAL_TASK,
     'context' => MENU_CONTEXT_PAGE | MENU_CONTEXT_INLINE,
     'file' => 'menu.admin.inc',
   );
@@ -161,7 +155,7 @@ function menu_menu() {
  */
 function menu_theme() {
   return array(
-    'menu_overview_form' => array(
+    'menu_edit_menu' => array(
       'file' => 'menu.admin.inc',
       'render element' => 'form',
     ),
diff --git a/core/modules/menu/menu.test b/core/modules/menu/menu.test
index 08bb7e8..ad18bac 100644
--- a/core/modules/menu/menu.test
+++ b/core/modules/menu/menu.test
@@ -245,7 +245,7 @@ class MenuTestCase extends DrupalWebTestCase {
     // Note in the UI the 'mlid:x[hidden]' form element maps to enabled, or
     // NOT hidden.
     $edit['mlid:' . $item1['mlid'] . '[hidden]'] = TRUE;
-    $this->drupalPost('admin/structure/menu/manage/' . $item1['menu_name'], $edit, t('Save configuration'));
+    $this->drupalPost('admin/structure/menu/manage/' . $item1['menu_name'], $edit, t('Save'));
 
     // Verify in the database.
     $this->assertMenuLink($item1['mlid'], array('hidden' => 0));
diff --git a/core/modules/simpletest/tests/menu.test b/core/modules/simpletest/tests/menu.test
index d0612ac..a7ef833 100644
--- a/core/modules/simpletest/tests/menu.test
+++ b/core/modules/simpletest/tests/menu.test
@@ -1111,10 +1111,10 @@ class MenuBreadcrumbTestCase extends MenuWebTestCase {
       'admin/structure/menu' => t('Menus'),
     );
     $this->assertBreadcrumb('admin/structure/menu/manage/navigation', $trail);
+    $this->assertBreadcrumb('admin/structure/menu/manage/navigation/edit', $trail);
     $trail += array(
       'admin/structure/menu/manage/navigation' => t('Navigation'),
     );
-    $this->assertBreadcrumb('admin/structure/menu/manage/navigation/edit', $trail);
     $this->assertBreadcrumb('admin/structure/menu/manage/navigation/add', $trail);
 
     // Verify Node administration breadcrumbs.
