diff --git a/core/modules/help/help.module b/core/modules/help/help.module
index aac8636..cd5f712 100644
--- a/core/modules/help/help.module
+++ b/core/modules/help/help.module
@@ -14,6 +14,7 @@ function help_menu() {
     'description' => 'Reference for usage, configuration, and modules.',
     'page callback' => 'help_main',
     'access arguments' => array('access administration pages'),
+    'menu_name' => 'admin',
     'weight' => 9,
     'file' => 'help.admin.inc',
   );
diff --git a/core/modules/node/node.module b/core/modules/node/node.module
index 7cbba86..d8b6bc5 100644
--- a/core/modules/node/node.module
+++ b/core/modules/node/node.module
@@ -1634,6 +1634,7 @@ function node_menu() {
     'page callback' => 'drupal_get_form',
     'page arguments' => array('node_admin_content'),
     'access arguments' => array('access content overview'),
+    'menu_name' => 'admin',
     'weight' => -10,
     'file' => 'node.admin.inc',
   );
diff --git a/core/modules/system/system.admin.inc b/core/modules/system/system.admin.inc
index c3c2ce4..5f50493 100644
--- a/core/modules/system/system.admin.inc
+++ b/core/modules/system/system.admin.inc
@@ -65,11 +65,18 @@ function system_admin_config_page() {
  * in the Drupal menu system, but too much information there might be
  * hidden, so we supply the contents of the block.
  *
+ * @param array $item
+ *   (optional) A menu router item that represents the parent path for which to
+ *   show all children as blocks. If omitted, the item of the current router
+ *   path is used.
+ *
  * @return
  *   The output HTML.
  */
-function system_admin_menu_block_page() {
-  $item = menu_get_item();
+function system_admin_menu_block_page(array $item = NULL) {
+  if (!isset($item)) {
+    $item = menu_get_item();
+  }
   if ($content = system_admin_menu_block($item)) {
     $output = theme('admin_block_content', array('content' => $content));
   }
diff --git a/core/modules/system/system.module b/core/modules/system/system.module
index 6d16229..3ad7339 100644
--- a/core/modules/system/system.module
+++ b/core/modules/system/system.module
@@ -626,8 +626,14 @@ function system_menu() {
     'title' => 'Administration',
     'access arguments' => array('access administration pages'),
     'page callback' => 'system_admin_menu_block_page',
+    'page arguments' => array(
+      // List the first level of the 'admin' menu.
+      // The value of mlid is used as query condition for plid in
+      // system_admin_menu_block(); a value of 0 yields all top-level links.
+      array('menu_name' => 'admin', 'mlid' => 0),
+    ),
     'weight' => 9,
-    'menu_name' => 'admin',
+    'menu_name' => 'account',
     'file' => 'system.admin.inc',
   );
   $items['admin/compact'] = array(
@@ -655,6 +661,7 @@ function system_menu() {
   $items['admin/structure'] = array(
     'title' => 'Structure',
     'description' => 'Administer blocks, content types, menus, etc.',
+    'menu_name' => 'admin',
     'position' => 'right',
     'weight' => -8,
     'page callback' => 'system_admin_menu_block_page',
@@ -667,6 +674,7 @@ function system_menu() {
     'description' => 'Select and configure your themes.',
     'page callback' => 'system_themes_page',
     'access arguments' => array('administer themes'),
+    'menu_name' => 'admin',
     'position' => 'left',
     'weight' => -6,
     'file' => 'system.admin.inc',
@@ -734,6 +742,7 @@ function system_menu() {
     'page callback' => 'drupal_get_form',
     'page arguments' => array('system_modules'),
     'access arguments' => array('administer modules'),
+    'menu_name' => 'admin',
     'file' => 'system.admin.inc',
     'weight' => -2,
   );
@@ -767,6 +776,7 @@ function system_menu() {
     'description' => 'Administer settings.',
     'page callback' => 'system_admin_config_page',
     'access arguments' => array('access administration pages'),
+    'menu_name' => 'admin',
     'file' => 'system.admin.inc',
   );
 
@@ -991,6 +1001,7 @@ function system_menu() {
     'description' => 'View reports, updates, and errors.',
     'page callback' => 'system_admin_menu_block_page',
     'access arguments' => array('access site reports'),
+    'menu_name' => 'admin',
     'weight' => 5,
     'position' => 'left',
     'file' => 'system.admin.inc',
@@ -2632,7 +2643,7 @@ function system_admin_menu_block($item) {
   // local task (for example, admin/tasks), then we want to retrieve the
   // parent item's child links, not this item's (since this item won't have
   // any).
-  if ($item['tab_root'] != $item['path']) {
+  if (isset($item['tab_root']) && isset($item['path']) && $item['tab_root'] != $item['path']) {
     $item = menu_get_item($item['tab_root_href']);
   }
 
diff --git a/core/modules/toolbar/toolbar.module b/core/modules/toolbar/toolbar.module
index e543326..2c760ed 100644
--- a/core/modules/toolbar/toolbar.module
+++ b/core/modules/toolbar/toolbar.module
@@ -357,17 +357,9 @@ function($object) {return $object->mediaQuery;},
  *   An array containing a menu tree of top level items below the 'admin' path.
  */
 function toolbar_get_menu_tree() {
-  $tree = array();
-  $admin_link = db_query('SELECT * FROM {menu_links} WHERE menu_name = :menu_name AND module = :module AND link_path = :path', array(':menu_name' => 'admin', ':module' => 'system', ':path' => 'admin'))->fetchAssoc();
-  if ($admin_link) {
-    $tree = menu_build_tree('admin', array(
-      'expanded' => array($admin_link['mlid']),
-      'min_depth' => $admin_link['depth'] + 1,
-      'max_depth' => $admin_link['depth'] + 1,
-    ));
-  }
-
-  return $tree;
+  return menu_build_tree('admin', array(
+    'max_depth' => 1,
+  ));
 }
 
 /**
diff --git a/core/modules/user/user.module b/core/modules/user/user.module
index 5210583..1b1a25d 100644
--- a/core/modules/user/user.module
+++ b/core/modules/user/user.module
@@ -951,6 +951,7 @@ function user_menu() {
     'page callback' => 'user_admin',
     'page arguments' => array('list'),
     'access arguments' => array('administer users'),
+    'menu_name' => 'admin',
     'position' => 'left',
     'weight' => -4,
     'file' => 'user.admin.inc',
