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..d852cba 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,20 +40,35 @@ function theme_menu_admin_overview($variables) {
 }
 
 /**
- * Form for editing an entire menu tree at once.
+ * Form constructor to edit an entire menu tree at once.
  *
  * Shows for one menu the menu links accessible to the current user and
  * relevant operations.
+ *
+ * This form constructor can be integrated as section into another form. It
+ * relies on the following keys in $form_state:
+ * - menu: A loaded menu definition, as returned by menu_load().
+ * - menu_overview_form_parents: An array containing the parent keys to this
+ *   form.
+ * Forms integrating this section should add menu_overview_form_submit() to the
+ * list of #submit handlers.
+ * @see menu_edit_menu()
  */
-function menu_overview_form($form, &$form_state, $menu) {
+function menu_overview_form($form, &$form_state) {
   global $menu_admin;
-  $form['#attached']['css'] = array(drupal_get_path('module', 'menu') . '/menu.css');
+
+  // Ensure that menu_overview_form_submit() knows the parents of this form
+  // section.
+  $form['#tree'] = TRUE;
+  $form['#theme'] = 'menu_overview_form';
+  $form_state += array('menu_overview_form_parents' => array());
+
   $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));
+  $result = db_query($sql, array(':menu' => $form_state['menu']['menu_name']), array('fetch' => PDO::FETCH_ASSOC));
   $links = array();
   foreach ($result as $item) {
     $links[] = $item;
@@ -68,18 +82,9 @@ function menu_overview_form($form, &$form_state, $menu) {
   $menu_admin = FALSE;
 
   $form = array_merge($form, _menu_overview_tree_form($tree));
-  $form['#menu'] =  $menu;
+  $form['#attached']['css'][] = drupal_get_path('module', 'menu') . '/menu.css';
+  $form['#empty_text'] = t('There are no menu links yet. <a href="@link">Add link</a>.', array('@link' => url('admin/structure/menu/manage/' . $form_state['menu']['menu_name'] .'/add')));
 
-  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;
 }
 
@@ -150,15 +155,21 @@ function _menu_overview_tree_form($tree) {
  *
  * @see menu_overview_form()
  */
-function menu_overview_form_submit($form, &$form_state) {
+function menu_overview_form_submit($complete_form, &$form_state) {
+  $parents = $form_state['menu_overview_form_parents'];
+  $input = drupal_array_get_nested_value($form_state['input'], $parents);
+  $form = &drupal_array_get_nested_value($complete_form, $parents);
+
   // 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.
+  // Get the $_POST order.
+  $order = array_flip(array_keys($input));
+  // Update our original form with the new order.
+  $form = array_intersect_key(array_merge($order, $form), $form);
 
   $updated_items = array();
   $fields = array('weight', 'plid');
@@ -186,7 +197,6 @@ function menu_overview_form_submit($form, &$form_state) {
     $item['customized'] = 1;
     menu_link_save($item);
   }
-  drupal_set_message(t('Your configuration has been saved.'));
 }
 
 /**
@@ -421,12 +431,15 @@ function menu_edit_item_submit($form, &$form_state) {
  */
 function menu_edit_menu($form, &$form_state, $type, $menu = array()) {
   $system_menus = menu_list_system_menus();
+
   $menu += array(
     'menu_name' => '',
     'old_name' => !empty($menu['menu_name']) ? $menu['menu_name'] : '',
     'title' => '',
     'description' => '',
   );
+  $form_state['menu'] = &$menu;
+
   // Allow menu_edit_menu_submit() and other form submit handlers to determine
   // whether the menu already exists.
   $form['#insert'] = empty($menu['old_name']);
@@ -434,6 +447,7 @@ function menu_edit_menu($form, &$form_state, $type, $menu = array()) {
     '#type' => 'value',
     '#value' => $menu['old_name'],
   );
+  $form['#submit'][] = 'menu_edit_menu_submit';
 
   $form['title'] = array(
     '#type' => 'textfield',
@@ -461,11 +475,37 @@ 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'),
+  );
   $form['description'] = array(
     '#type' => 'textarea',
     '#title' => t('Description'),
     '#default_value' => $menu['description'],
+    '#states' => array(
+      'visible' => array(
+        ':input[name="description_toggle"]' => array('checked' => TRUE),
+      ),
+    ),
   );
+
+  // Add menu links administration form for existing menus.
+  if (!empty($menu['old_name'])) {
+    // Form API supports to construct and validate self-contained sections
+    // within forms, but does not allow to handle the form section's submission
+    // equally separated yet. Therefore, we use a $form_state key to point to
+    // the parents of the form section.
+    // @see menu_overview_form_submit()
+    $form_state['menu_overview_form_parents'] = array('links');
+    $form['links'] = array();
+    $form['links'] = menu_overview_form($form['links'], $form_state);
+    $form['#submit'][] = 'menu_overview_form_submit';
+  }
+
   $form['actions'] = array('#type' => 'actions');
   $form['actions']['submit'] = array(
     '#type' => 'submit',
diff --git a/core/modules/menu/menu.module b/core/modules/menu/menu.module
index cd42256..4b4b06e 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',
@@ -118,12 +112,9 @@ function menu_menu() {
   );
   $items['admin/structure/menu/manage/%menu/edit'] = array(
     'title' => 'Edit 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,
+    'weight' => -10,
     'context' => MENU_CONTEXT_PAGE | MENU_CONTEXT_INLINE,
-    'file' => 'menu.admin.inc',
   );
   $items['admin/structure/menu/manage/%menu/delete'] = array(
     'title' => 'Delete menu',
diff --git a/core/modules/menu/menu.test b/core/modules/menu/menu.test
index 08bb7e8..3f269fd 100644
--- a/core/modules/menu/menu.test
+++ b/core/modules/menu/menu.test
@@ -65,6 +65,7 @@ class MenuTestCase extends DrupalWebTestCase {
     $old_title = $item['link_title'];
     $this->modifyMenuLink($item);
     $item = menu_link_load($item['mlid']);
+    
     // Verify that a change to the description is saved.
     $description = $this->randomName(16);
     $item['options']['attributes']['title']  = $description;
@@ -110,14 +111,14 @@ class MenuTestCase extends DrupalWebTestCase {
     menu_save($menu);
 
     // Assert the new menu.
-    $this->drupalGet('admin/structure/menu/manage/' . $menu_name . '/edit');
+    $this->drupalGet('admin/structure/menu/manage/' . $menu_name);
     $this->assertRaw($title, t('Custom menu was added.'));
 
     // Edit the menu.
     $new_title = $this->randomName(16);
     $menu['title'] = $new_title;
     menu_save($menu);
-    $this->drupalGet('admin/structure/menu/manage/' . $menu_name . '/edit');
+    $this->drupalGet('admin/structure/menu/manage/' . $menu_name);
     $this->assertRaw($new_title, t('Custom menu was edited.'));
   }
 
@@ -244,8 +245,8 @@ 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'));
+    $edit['links[mlid:' . $item1['mlid'] . '][hidden]'] = TRUE;
+    $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.
