Index: modules/admin/admin-links.tpl.php
===================================================================
RCS file: modules/admin/admin-links.tpl.php
diff -N modules/admin/admin-links.tpl.php
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ modules/admin/admin-links.tpl.php	8 Jun 2009 05:37:04 -0000
@@ -0,0 +1,26 @@
+<?php
+// $Id$
+
+/**
+ * @file
+ * Default template for inline administration links.
+ *
+ * Available variables:
+ * - $links: The fully rendered administration links.
+ * - $admin_links: A structured array of links prior to rendering.
+ *
+ * @see template_preprocess()
+ * @see template_preprocess_admin_links()
+ */
+?>
+<?php if ($links): ?>
+
+<div class='admin-inline'>
+  <div class='admin-border admin-border-top'></div>
+  <div class='admin-border admin-border-right'></div>
+  <div class='admin-border admin-border-bottom'></div>
+  <div class='admin-border admin-border-left'></div>
+  <div class='admin-links clear-block'><?php print $links ?></div>
+</div>
+
+<?php endif; ?>
Index: modules/admin/admin-toolbar.tpl.php
===================================================================
RCS file: modules/admin/admin-toolbar.tpl.php
diff -N modules/admin/admin-toolbar.tpl.php
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ modules/admin/admin-toolbar.tpl.php	8 Jun 2009 05:37:04 -0000
@@ -0,0 +1,36 @@
+<?php
+// $Id$
+
+/**
+ * @file
+ * Default template for header admin toolbar.
+ *
+ * Available variables:
+ * - $collapsed: Boolean TRUE when the depth > 0 links should be collapsed.
+ * - $tree_0: Admin menu links at depth 0.
+ * - $tree_1: Admin menu links at depth 1.
+ *
+ * @see template_preprocess()
+ * @see template_preprocess_admin_toolbar()
+ */
+?>
+<div id='admin-toolbar' class='clearfix'>
+  <?php if (!empty($tree_0)): ?>
+    <div class='depth-0 clearfix'>
+      <?php foreach ($tree_0 as $links): ?>
+        <?php print $links; ?>
+      <?php endforeach; ?>
+    </div>
+  <?php endif; ?>
+
+  <?php if (!empty($tree_1)): ?>
+    <div class='depth-1 clearfix <?php if ($collapsed) print 'collapsed' ?>'>
+      <span class='close'><?php print t('Close') ?></span>
+      <?php foreach ($tree_1 as $links): ?>
+        <?php print $links; ?>
+      <?php endforeach; ?>
+    </div>
+  <?php endif; ?>
+
+  <div class='shadow'></div>
+</div>
Index: modules/admin/admin.info
===================================================================
RCS file: modules/admin/admin.info
diff -N modules/admin/admin.info
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ modules/admin/admin.info	8 Jun 2009 05:37:04 -0000
@@ -0,0 +1,7 @@
+; $Id$
+name = "Admin"
+description = "Drupal administration UI helpers. Includes: admin menu, contextual administration links, admin theme."
+package = "Administration"
+core = "7.x"
+version = "7.0-dev"
+files[] = "admin.module"
Index: modules/admin/admin.module
===================================================================
RCS file: modules/admin/admin.module
diff -N modules/admin/admin.module
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ modules/admin/admin.module	8 Jun 2009 05:37:05 -0000
@@ -0,0 +1,249 @@
+<?php
+// $Id$
+
+/**
+ * Implementation of hook_init().
+ */
+function admin_init() {
+  if (admin_is_enabled('admin menu') || admin_is_enabled('admin inline') || arg(0) == 'admin') {
+    $path = drupal_get_path('module', 'admin');
+    drupal_add_js($path .'/admin_toolbar.js');
+    drupal_add_css($path .'/admin_toolbar.css');
+  }
+}
+
+/**
+ * Implementation of hook_perm().
+ */
+function admin_perm() {
+  return array(
+    'admin menu' => array(
+      'title' => t('Use admin menu'),
+      'description' => t('Access the persistent administration menu at the top of each page.'),
+    ),
+    'admin inline' => array(
+      'title' => t('Use inline admin links'),
+      'description' => t('Access inline administrative links on nodes, blocks, and other page components.'),
+    ),
+  );
+}
+
+/**
+ * Implementation of hook_theme().
+ */
+function admin_theme($cache, $type, $theme, $path) {
+  $items = array();
+  $items['admin_toolbar'] = array(
+    'arguments' => array('tree' => array()),
+    'template' => 'admin-toolbar',
+    'path' => drupal_get_path('module', 'admin'),
+    'file' => 'theme.inc',
+  );
+  $items['admin_links'] = array(
+    'arguments' => array('admin_links' => array()),
+    'template' => 'admin-links',
+    'path' => drupal_get_path('module', 'admin'),
+    'file' => 'theme.inc',
+  );
+  return $items;
+}
+
+/**
+ * Wrapper to check whether various admin features are accessible to the
+ * current user and compatible with the current theme.
+ */
+function admin_is_enabled($op = 'admin menu') {
+  if (user_access($op)) {
+    global $theme_info;
+    // If the theme does not specify some flag for this feature, assume it is compatible.
+    if (!isset($theme_info->info['admin'][$op]) || (isset($theme_info->info['admin'][$op]) && !empty($theme_info->info['admin'][$op]))) {
+      return TRUE;
+    }
+  }
+  return FALSE;
+}
+
+/**
+ * An implementation of hook_node_view().
+ */
+function admin_node_view(&$node, $teaser) {
+  if (admin_is_enabled('admin inline')) {
+    $links = array();
+    if (node_access('update', $node)) {
+      $links['node-edit'] = array(
+        'title' => t('Edit'),
+        'href' => "node/{$node->nid}/edit",
+        'attributes' => array('class' => 'icon-edit'),
+        'query' => array('destination' => $_GET['q']),
+      );
+    }
+    if (node_access('delete', $node)) {
+      $links['node-delete'] = array(
+        'title' => t('Delete'),
+        'href' => "node/{$node->nid}/delete",
+        'attributes' => array('class' => 'icon-delete'),
+        'query' => array('destination' => $_GET['q']),
+      );
+    }
+    $node->content['admin'] = array(
+      '#theme' => 'admin_links',
+      '#admin_links' => $links,
+    );
+  }
+}
+
+/**
+ * Implementation of hook_page_alter().
+ */
+function admin_page_alter(&$page) {
+  if (admin_is_enabled('admin menu')) {
+    $links = admin_menu_tree();
+    $page['admin']['admin_menu']['#tree'] = $links;
+    $page['admin']['admin_menu']['#theme'] = 'admin_toolbar';
+  }
+}
+
+/**
+ * Implementation of hook_preprocess_page().
+ */
+function admin_preprocess_page(&$vars) {
+  if (system_use_admin_theme()) {
+    $vars['primary_nav'] = admin_navigation_primary();
+    $vars['secondary_nav'] = admin_navigation_secondary();
+  }
+}
+
+/**
+ * Helper for returning a selectively flattened version of the admin menu.
+ */
+function admin_get_menu_tree($method = 'all', $reset = FALSE) {
+  $tree = ($method == 'all') ? menu_tree_all_data('management') : menu_tree_page_data('management');
+  foreach ($tree as $k => $item) {
+    if ($item['link']['link_path'] == 'admin' && !empty($item['below'])) {
+      unset($tree[$k]);
+      $tree = array_merge($tree, $item['below']);
+    }
+  }
+  return $tree;
+}
+
+/**
+ * Retrieve a hierarchy of links representing select portions of the
+ * 'admin' branch of the navigation menu.
+ */
+function admin_menu_tree() {
+  $links = array();
+  // Retrieve the admin menu from the database.
+  $tree = admin_get_menu_tree();
+  admin_menu_tree_links($tree, $links);
+
+  // Add user-specific links
+  global $user;
+  $user_links = array();
+  $user_links[] = array(
+    'title' => t('Hello <strong>!username</strong>', array('!username' => $user->name)),
+    'href' => 'user',
+    'html' => TRUE
+  );
+  $user_links[] = array('title' => t('Logout'), 'href' => "logout");
+  $links[0]['user'] = $user_links;
+
+  return $links;
+}
+
+/**
+ * Generate a links array from a menu tree array.
+ */
+function admin_menu_navigation_links($tree, $admin_only = FALSE) {
+  $links = array();
+  foreach ($tree as $item) {
+    if (!$item['link']['hidden'] && (!$admin_only || !empty($item['link']['options']['admin']))) {
+      $class = '';
+      $id = str_replace('/', '-', $item['link']['href']);
+
+      $l = $item['link']['localized_options'];
+      $l['href'] = $item['link']['href'];
+      $l['title'] = "<span class='icon'></span>". $item['link']['title'];
+      $l['attributes'] = array('id' => 'admin-link-'. $id);
+      $l['html'] = TRUE;
+
+      $class = ' path-'. $id;
+      if (admin_in_active_trail($item['link']['href'])) {
+        $class .= ' active-trail';
+      }
+      // Keyed with the unique mlid to generate classes in theme_links().
+      $links['menu-'. $item['link']['mlid'] . $class] = $l;
+    }
+  }
+  return $links;
+}
+
+/**
+ * Build a hierarchy of $links arrays suitable for theme_links() from a
+ * menu tree.
+ */
+function admin_menu_tree_links($tree, &$links, $parent = 'admin', $depth = 0) {
+  // Create a single level of links.
+  $links[$depth][$parent] = array();
+  $l = admin_menu_navigation_links($tree, TRUE);
+  if (!empty($l)) {
+    $links[$depth][$parent] = $l;
+  }
+
+  // Recurse
+  foreach ($tree as $item) {
+    if (!$item['link']['hidden'] && !empty($item['link']['options']['admin'])) {
+      if (!empty($item['below'])) {
+        admin_menu_tree_links($item['below'], $links, $item['link']['href'], $depth + 1);
+      }
+    }
+  }
+}
+
+/**
+ * Checks whether an item is in the active trail. Useful when using
+ * a menu generated by menu_tree_all_data() which does not set the
+ * 'in_active_trail' flag on items.
+ */
+function admin_in_active_trail($path) {
+  $active_paths = &drupal_static(__FUNCTION__);
+
+  // Gather active paths
+  if (!isset($active_paths)) {
+    $active_paths = array();
+    $trail = menu_get_active_trail();
+    foreach ($trail as $item) {
+      if (!empty($item['href'])) {
+        $active_paths[] = $item['href'];
+      }
+    }
+  }
+  return in_array($path, $active_paths);
+}
+
+/**
+ * Generate the 1st level of navigation links under 'admin'.
+ */
+function admin_navigation_primary() {
+  $tree = admin_get_menu_tree();
+  return admin_menu_navigation_links($tree);
+}
+
+/**
+ * Generate the 2nd level of navigation links under 'admin/*'.
+ */
+function admin_navigation_secondary() {
+  $item = menu_get_item();
+
+  // Check that this is not a menu overview page.
+  // We don't want to duplicate UI components.
+  if ($item['page_callback'] !== 'system_admin_menu_block_page') {
+    $tree = admin_get_menu_tree('page');
+    foreach ($tree as $item) {
+      if (admin_in_active_trail($item['link']['href']) && !empty($item['below'])) {
+        return admin_menu_navigation_links($item['below']);
+      }
+    }
+  }
+  return NULL;
+}
Index: modules/admin/admin_toolbar.css
===================================================================
RCS file: modules/admin/admin_toolbar.css
diff -N modules/admin/admin_toolbar.css
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ modules/admin/admin_toolbar.css	8 Jun 2009 05:37:05 -0000
@@ -0,0 +1,278 @@
+/* $Id: admin_toolbar.css,v 1.1.2.1 2009/06/05 07:11:13 yhahn Exp $ */
+
+/**
+ * Aggressive resets so we can achieve a consistent look in
+ * hostile CSS environments.
+ */
+div.admin-links,
+div#admin-toolbar,
+div#admin-toolbar * {
+  margin:0px;
+  padding:0px;
+  border:0px;
+  outline:0px;
+  font-size:100%;
+  vertical-align:baseline;
+  line-height:inherit;
+  text-align:left;  
+}
+
+/**
+ * Inline/contextual tools
+ */
+div.block,
+div.node,
+div.view,
+div.view-data-node-body { position:relative; }
+
+div.block div.view { position:static; }
+
+div.admin-inline { display:none; }
+
+div.admin-border {
+  opacity:.25;
+  position:absolute;
+  left:-10px;
+  right:-10px;
+  top:-10px;
+  bottom:-10px;
+  height:10px;
+  width:10px;
+  background:#666;
+  }
+
+  div.admin-border-top {
+    left:0px; right:0px;
+    width:auto;
+    bottom:auto;
+    }
+
+  div.admin-border-bottom {
+    left:0px; right:0px;
+    width:auto;
+    top:auto;
+    }
+
+  div.admin-border-left {
+    height:auto;
+    right:auto;
+
+    -moz-border-radius-topleft:5px;
+    -moz-border-radius-bottomleft:5px;
+    -webkit-border-top-left-radius:5px;
+    -webkit-border-bottom-left-radius-:5px;
+    }
+
+  div.admin-border-right {
+    height:auto;
+    left:auto;
+
+    -moz-border-radius-topright:5px;
+    -moz-border-radius-bottomright:5px;
+    -webkit-border-top-right-radius:5px;
+    -webkit-border-bottom-right-radius-:5px;
+    }
+
+div.admin-links {
+  -moz-border-radius-topleft:5px;
+  -moz-border-radius-topright:5px;
+  -webkit-border-top-left-radius:5px;
+  -webkit-border-top-right-radius:5px;
+
+  font:normal 11px/20px "Lucida Grande",Verdana,sans-serif !important;
+  background:#444 url(sprite.png) 0px -110px repeat-x !important;
+
+  position:absolute;
+  top:-25px;
+  right:0px;
+
+  z-index:100;
+  height:25px;
+  line-height:25px;
+  overflow:hidden;
+  }
+
+  div.view:hover div.node div.admin-inline,
+  div.block:hover div.node div.admin-inline { display:none; }
+
+  div.view:hover div.node:hover div.admin-inline,
+  div.block:hover div.node:hover div.admin-inline { display:block; }
+
+  div.view:hover div.admin-inline,
+  div.block:hover div.admin-inline,
+  div.node:hover div.admin-inline { display:block; }
+
+div.admin-links a,
+div.admin-links a:hover {
+  background-color:transparent !important;
+  background-image:url(sprite.png);
+  background-repeat:no-repeat;
+  background-position:25px 25px;
+
+  color:#fff !important;
+  text-transform:none !important;
+  font-weight:normal !important;
+  font-style:normal !important;
+  float:left !important;
+  padding:0px 10px 0px 25px;
+  line-height:25px !important;
+  }
+
+  div.admin-links a.icon-delete { background-position:-215px -135px; }
+  div.admin-links a.icon-edit { background-position:-215px -160px; }
+  div.admin-links a.icon-configure { background-position:-215px -185px; }
+
+/**
+ * Base styles
+ */
+div#admin-toolbar {
+  font:normal 11px/20px "Lucida Grande",Verdana,sans-serif;
+  background:url(sprite.png) 0px -20px repeat-x;
+  color:#ccc;
+  position:relative;
+  z-index:100;
+  }
+
+div#admin-toolbar .collapsed { display:none; }  
+
+div#admin-toolbar div.shadow {
+  position:absolute;
+  left:0px;
+  right:0px;
+  bottom:-10px;
+  height:10px;
+
+  background:url(sprite.png) 0px -100px repeat-x;
+  }
+
+div#admin-toolbar a {
+  text-decoration:none;
+  color:#fff;
+  }
+
+div#admin-toolbar ul.links li,
+div#admin-toolbar ul.links li a { float:left; }
+
+/**
+ * First level menus
+ */
+div#admin-toolbar div.depth-0 {
+  overflow:hidden;
+  height:20px;
+  line-height:20px;
+  padding:5px 10px;
+  }
+
+div#admin-toolbar div.depth-0 #admin-toolbar-admin { float:left; }
+div#admin-toolbar div.depth-0 #admin-toolbar-user { float:right; }
+
+div#admin-toolbar div.depth-0 ul.links li a {
+  -moz-border-radius:10px;
+  -webkit-border-radius:10px;
+  padding:0px 10px;
+  }
+
+div#admin-toolbar div.depth-0 ul.links li a.active {
+  text-shadow:#333 0px 1px 0px;
+  background:url(sprite.png) 0px 0px repeat-x;
+  }
+
+/**
+ * Second level menus
+ */
+div#admin-toolbar div.depth-1 {
+  position:relative;
+  padding:0px 10px;
+  }
+
+div#admin-toolbar div.depth-1 span.close {
+  position:absolute;
+  top:10px;
+  right:10px;
+
+  cursor:pointer;
+  background:url(sprite.png) 0px -135px no-repeat;
+  text-indent:-9999px;
+  overflow:hidden;
+
+  width:15px;
+  height:15px;
+  }
+
+div#admin-toolbar div.depth-1 ul.links {
+  padding:5px 0px;
+  height:40px;
+  line-height:30px;
+  overflow:hidden;
+  float:left;
+  }
+
+div#admin-toolbar div.depth-1 ul.links li a {
+  -moz-border-radius:10px;
+  -webkit-border-radius:10px;
+  padding:5px 10px 5px 5px;
+  margin-right:5px;
+  }
+
+div#admin-toolbar div.depth-1 ul.links li a.active {
+  background-color:#333;
+  }
+
+div#admin-toolbar div.depth-1 span.icon {
+  float:left;
+
+  width:30px;
+  height:30px;
+  margin-right:5px;
+  }
+
+/**
+ * Icon classes
+ */
+ul.menu span.icon,
+ul.admin-list span.icon,
+ul.links span.icon { background:transparent url(icons.png) -30px 0px no-repeat; }
+
+div.depth-1 span.icon { background:transparent url(icons.png) 0px 0px no-repeat; }
+
+.path-admin-content-add span.icon { background-position:-60px 0px !important; }
+.path-admin-content-node span.icon { background-position:-90px 0px !important; }
+.path-admin-content-node-settings span.icon { background-position:0px -150px !important; }
+
+.path-admin-settings-actions span.icon { background-position:-180px -120px !important; }
+.path-admin-settings-file-system span.icon { background-position:-60px -60px !important; }
+.path-admin-settings-filter span.icon { background-position:-30px -60px !important; }
+.path-admin-settings-image-toolkit span.icon { background-position:-120px -60px !important;}
+.path-admin-settings-logging span.icon { background-position:-150px -60px !important; }
+.path-admin-settings-maintenance-mode span.icon { background-position:-90px -90px !important; }
+.path-admin-settings-performance span.icon { background-position:-30px -90px !important; }
+.path-admin-settings-regional-settings span.icon { background-position:0px -60px !important; }
+.path-admin-settings-search span.icon { background-position:-30px -30px !important; }
+.path-admin-settings-site-information span.icon { background-position:-60px -90px !important; }
+.path-admin-settings-updates span.icon { background-position:-150px -90px !important; }
+.path-admin-settings-uploads span.icon { background-position:-90px -60px !important; }
+
+.path-admin-build-block span.icon { background-position:-210px -90px !important; }
+.path-admin-build-menu span.icon { background-position:-150px 0px !important; }
+.path-admin-build-modules span.icon { background-position:-180px -90px !important; }
+.path-admin-build-themes span.icon { background-position:-120px -90px !important; }
+.path-admin-build-trigger span.icon { background-position:-180px -120px !important; }
+.path-admin-build-types span.icon { background-position:-120px -30px !important; }
+
+.path-admin-content-book span.icon { background-position:-180px 0px !important; }
+.path-admin-content-comment span.icon { background-position:-210px 0px !important; }
+.path-admin-content-taxonomy span.icon { background-position:-180px -30px !important; }
+.path-admin-content-rss-publishing span.icon { background-position:-150px -30px !important; }
+
+.path-admin-reports-access-denied span.icon { background-position:-90px -30px !important; }
+.path-admin-reports-page-not-found span.icon { background-position:-30px -150px !important; }
+.path-admin-reports-status span.icon { background-position:-60px -30px !important; }
+.path-admin-reports-updates span.icon { background-position:-150px -90px !important; }
+.path-admin-reports-dblog span.icon { background-position:-210px -120px !important; }
+.path-admin-reports-search span.icon { background-position:-30px -30px !important; }
+
+.path-admin-user-rules span.icon { background-position:0px -120px !important; }
+.path-admin-user-permissions span.icon { background-position:-30px -120px !important; }
+.path-admin-user-roles span.icon { background-position:-60px -120px !important; }
+.path-admin-user-user span.icon { background-position:-90px -120px !important; }
+.path-admin-user-settings span.icon { background-position:-150px -120px !important; }
Index: modules/admin/admin_toolbar.js
===================================================================
RCS file: modules/admin/admin_toolbar.js
diff -N modules/admin/admin_toolbar.js
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ modules/admin/admin_toolbar.js	8 Jun 2009 05:37:05 -0000
@@ -0,0 +1,56 @@
+// $Id: admin_toolbar.js,v 1.1.2.1 2009/06/07 04:14:41 yhahn Exp $
+(function ($) {
+
+Drupal.behaviors.admin = {
+  attach: function() {
+    Drupal.admin = Drupal.admin || {};
+    Drupal.admin.toolbar = Drupal.admin.toolbar || {};
+
+    Drupal.admin.toolbar.setActive = function(toolbar_id) {
+      // Show the right toolbar
+      $('#admin-toolbar .depth-1 ul.links').addClass('collapsed');
+      $(toolbar_id).removeClass('collapsed');
+      $('#admin-toolbar, #admin-toolbar .depth-1').removeClass('collapsed');
+
+      // Switch link active class to corresponding menu item
+      var link_id = toolbar_id.replace('admin-toolbar', 'admin-link');
+      $('#admin-toolbar .depth-0 ul.links a').removeClass('active');
+      $(link_id).addClass('active');
+    }
+
+    // Primary menus
+    $('#admin-toolbar .depth-0 ul.links a:not(.processed)').each(function() {
+      var target = $(this).attr('id');
+      if (target) {
+        target = '#'+ target.replace('admin-link', 'admin-toolbar');
+        if ($(target, '#admin-toolbar').size() > 0) {
+          // If this link is active show this toolbar on setup
+          if ($(this).parent().is('.active-trail')) {
+            Drupal.admin.toolbar.setActive(target);
+          }
+          // Add click handler
+          $(this).click(function() {
+            Drupal.admin.toolbar.setActive(target);
+            return false;
+          });
+        }
+      }
+      $(this).addClass('processed');
+    });
+
+    $('#admin-toolbar .depth-1 span.close:not(.processed)').each(function() {
+      $(this).click(function() {
+        $('#admin-toolbar .depth-1').addClass('collapsed');
+        return false;
+      });
+      $(this).addClass('processed');
+    });
+
+    // Secondary menus
+    $('#admin-toolbar .depth-1 ul.links:not(.processed)').each(function() {
+      $(this).addClass('processed');
+    });
+  }
+};
+
+})(jQuery);
Index: modules/admin/icons.png
===================================================================
RCS file: modules/admin/icons.png
diff -N modules/admin/icons.png
Binary files /dev/null and icons.png differ
Index: modules/admin/sprite.png
===================================================================
RCS file: modules/admin/sprite.png
diff -N modules/admin/sprite.png
Binary files /dev/null and sprite.png differ
Index: modules/admin/theme.inc
===================================================================
RCS file: modules/admin/theme.inc
diff -N modules/admin/theme.inc
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ modules/admin/theme.inc	8 Jun 2009 05:37:06 -0000
@@ -0,0 +1,30 @@
+<?php
+
+/**
+ * Preprocessor for theme('admin_toolbar').
+ */
+function template_preprocess_admin_toolbar(&$vars) {
+  $vars['collapsed'] = TRUE;
+  foreach ($vars['tree']['#tree'] as $depth => $menus) {
+    foreach ($menus as $href => $links) {
+      $class = ($depth > 0) ? 'collapsed' : '';
+      if ($depth > 0 && admin_in_active_trail($href)) {
+        $class = '';
+        $vars['collapsed'] = FALSE;
+      }
+      $id = str_replace('/', '-', $href);
+      $vars["tree_{$depth}"][$id] = theme('links', $links, array('class' => "links clear-block $class", 'id' => "admin-toolbar-{$id}"));
+    }
+  }
+}
+
+/**
+ * Theme function for contextual popups.
+ */
+function template_preprocess_admin_links(&$vars) {
+  $links = '';
+  foreach ($vars['admin_links']['#admin_links'] as $link) {
+    $links .= l($link['title'], $link['href'], $link);
+  }
+  $vars['links'] = $links;
+}
Index: modules/block/block.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/block/block.module,v
retrieving revision 1.343
diff -u -p -r1.343 block.module
--- modules/block/block.module	8 Jun 2009 04:55:34 -0000	1.343
+++ modules/block/block.module	8 Jun 2009 05:37:07 -0000
@@ -125,6 +125,7 @@ function block_menu() {
     'description' => 'Configure what block content appears in your site\'s sidebars and other regions.',
     'page callback' => 'block_admin_display',
     'access arguments' => array('administer blocks'),
+    'options' => array('admin' => TRUE),
   );
   $items['admin/build/block/list'] = array(
     'title' => 'List',
Index: modules/book/book.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/book/book.module,v
retrieving revision 1.495
diff -u -p -r1.495 book.module
--- modules/book/book.module	7 Jun 2009 02:32:57 -0000	1.495
+++ modules/book/book.module	8 Jun 2009 05:37:08 -0000
@@ -104,6 +104,7 @@ function book_menu() {
     'description' => "Manage your site's book outlines.",
     'page callback' => 'book_admin_overview',
     'access arguments' => array('administer book outlines'),
+    'options' => array('admin' => TRUE),
   );
   $items['admin/content/book/list'] = array(
     'title' => 'List',
Index: modules/comment/comment.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/comment/comment.module,v
retrieving revision 1.721
diff -u -p -r1.721 comment.module
--- modules/comment/comment.module	8 Jun 2009 05:12:15 -0000	1.721
+++ modules/comment/comment.module	8 Jun 2009 05:37:10 -0000
@@ -164,6 +164,7 @@ function comment_menu() {
     'description' => 'List and edit site comments and the comment approval queue.',
     'page callback' => 'comment_admin',
     'access arguments' => array('administer comments'),
+    'options' => array('admin' => TRUE),
   );
   // Tabs begin here.
   $items['admin/content/comment/new'] = array(
Index: modules/dblog/dblog.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/dblog/dblog.module,v
retrieving revision 1.38
diff -u -p -r1.38 dblog.module
--- modules/dblog/dblog.module	27 May 2009 18:33:56 -0000	1.38
+++ modules/dblog/dblog.module	8 Jun 2009 05:37:10 -0000
@@ -48,6 +48,7 @@ function dblog_menu() {
     'page callback' => 'dblog_overview',
     'access arguments' => array('access site reports'),
     'weight' => -1,
+    'options' => array('admin' => TRUE),
   );
   $items['admin/reports/page-not-found'] = array(
     'title' => "Top 'page not found' errors",
Index: modules/filter/filter.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/filter/filter.module,v
retrieving revision 1.260
diff -u -p -r1.260 filter.module
--- modules/filter/filter.module	8 Jun 2009 04:51:45 -0000	1.260
+++ modules/filter/filter.module	8 Jun 2009 05:37:11 -0000
@@ -76,6 +76,7 @@ function filter_menu() {
     'page callback' => 'drupal_get_form',
     'page arguments' => array('filter_admin_overview'),
     'access arguments' => array('administer filters'),
+    'options' => array('admin' => TRUE),
   );
   $items['admin/settings/formats/list'] = array(
     'title' => 'List',
Index: modules/menu/menu.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/menu/menu.module,v
retrieving revision 1.192
diff -u -p -r1.192 menu.module
--- modules/menu/menu.module	27 May 2009 18:33:58 -0000	1.192
+++ modules/menu/menu.module	8 Jun 2009 05:37:12 -0000
@@ -56,6 +56,7 @@ function menu_menu() {
     'page callback' => 'menu_overview_page',
     'access callback' => 'user_access',
     'access arguments' => array('administer menu'),
+    'options' => array('admin' => TRUE),
   );
   $items['admin/build/menu/list'] = array(
     'title' => 'List menus',
Index: modules/node/node.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/node/node.module,v
retrieving revision 1.1069
diff -u -p -r1.1069 node.module
--- modules/node/node.module	5 Jun 2009 21:56:07 -0000	1.1069
+++ modules/node/node.module	8 Jun 2009 05:37:15 -0000
@@ -1862,6 +1862,7 @@ function node_menu() {
     'page callback' => 'drupal_get_form',
     'page arguments' => array('node_admin_content'),
     'access arguments' => array('administer nodes'),
+    'options' => array('admin' => TRUE),
   );
 
   $items['admin/content/node/overview'] = array(
@@ -1885,6 +1886,7 @@ function node_menu() {
     'description' => 'Manage posts by content type, including default status, front page promotion, comment settings, etc.',
     'page callback' => 'node_overview_types',
     'access arguments' => array('administer content types'),
+    'options' => array('admin' => TRUE),
   );
   $items['admin/build/types/list'] = array(
     'title' => 'List',
Index: modules/system/system.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/system/system.module,v
retrieving revision 1.710
diff -u -p -r1.710 system.module
--- modules/system/system.module	8 Jun 2009 04:28:19 -0000	1.710
+++ modules/system/system.module	8 Jun 2009 05:37:18 -0000
@@ -510,6 +510,7 @@ function system_menu() {
     'page callback' => 'system_admin_menu_block_page',
     'access callback' => 'system_admin_menu_block_access',
     'access arguments' => array('admin/content', 'access administration pages'),
+    'options' => array('admin' => TRUE),
   );
 
   // Menu items that are basically just menu blocks.
@@ -521,6 +522,7 @@ function system_menu() {
     'page callback' => 'system_settings_overview',
     'access callback' => 'system_admin_menu_block_access',
     'access arguments' => array('admin/settings', 'access administration pages'),
+    'options' => array('admin' => TRUE),
   );
   $items['admin/build'] = array(
     'title' => 'Site building',
@@ -530,6 +532,7 @@ function system_menu() {
     'page callback' => 'system_admin_menu_block_page',
     'access callback' => 'system_admin_menu_block_access',
     'access arguments' => array('admin/build', 'access administration pages'),
+    'options' => array('admin' => TRUE),
   );
   // Themes.
   $items['admin/build/themes'] = array(
@@ -538,6 +541,7 @@ function system_menu() {
     'page callback' => 'drupal_get_form',
     'page arguments' => array('system_themes_form'),
     'access arguments' => array('administer site configuration'),
+    'options' => array('admin' => TRUE),
   );
   $items['admin/build/themes/select'] = array(
     'title' => 'List',
@@ -575,6 +579,7 @@ function system_menu() {
     'page callback' => 'drupal_get_form',
     'page arguments' => array('system_modules'),
     'access arguments' => array('administer site configuration'),
+    'options' => array('admin' => TRUE),
   );
   $items['admin/build/modules/list'] = array(
     'title' => 'List',
@@ -673,6 +678,7 @@ function system_menu() {
     'page callback' => 'drupal_get_form',
     'page arguments' => array('system_site_information_settings'),
     'access arguments' => array('administer site configuration'),
+    'options' => array('admin' => TRUE),
   );
   $items['admin/settings/logging'] = array(
     'title' => 'Logging and errors',
@@ -680,6 +686,7 @@ function system_menu() {
     'page callback' => 'drupal_get_form',
     'page arguments' => array('system_logging_settings'),
     'access arguments' => array('administer site configuration'),
+    'options' => array('admin' => TRUE),
   );
   $items['admin/settings/logging/settings'] = array(
     'title' => 'Settings',
@@ -693,6 +700,7 @@ function system_menu() {
     'page callback' => 'drupal_get_form',
     'page arguments' => array('system_performance_settings'),
     'access arguments' => array('administer site configuration'),
+    'options' => array('admin' => TRUE),
   );
   $items['admin/settings/file-system'] = array(
     'title' => 'File system',
@@ -721,6 +729,7 @@ function system_menu() {
     'page callback' => 'drupal_get_form',
     'page arguments' => array('system_regional_settings'),
     'access arguments' => array('administer site configuration'),
+    'options' => array('admin' => TRUE),
   );
   $items['admin/settings/regional-settings/lookup'] = array(
     'title' => 'Date and time lookup',
@@ -759,6 +768,7 @@ function system_menu() {
     'access arguments' => array('admin/reports', 'access site reports'),
     'weight' => 5,
     'position' => 'left',
+    'options' => array('admin' => TRUE),
   );
   $items['admin/reports/status'] = array(
     'title' => 'Status report',
@@ -766,6 +776,7 @@ function system_menu() {
     'page callback' => 'system_status',
     'weight' => 10,
     'access arguments' => array('administer site configuration'),
+    'options' => array('admin' => TRUE),
   );
   $items['admin/reports/status/run-cron'] = array(
     'title' => 'Run cron',
@@ -832,7 +843,7 @@ function system_admin_menu_block_access(
  */
 function system_init() {
   // Use the administrative theme if the user is looking at a page in the admin/* path.
-  if (arg(0) == 'admin' || (variable_get('node_admin_theme', '0') && arg(0) == 'node' && (arg(1) == 'add' || arg(2) == 'edit'))) {
+  if (system_use_admin_theme()) {
     global $custom_theme;
     $custom_theme = variable_get('admin_theme', 0);
     drupal_add_css(drupal_get_path('module', 'system') . '/admin.css');
@@ -1322,6 +1333,7 @@ function _system_get_theme_data() {
     // Set defaults for theme info.
     $defaults = array(
       'regions' => array(
+        'admin' => 'Admin tools',
         'left' => 'Left sidebar',
         'right' => 'Right sidebar',
         'content' => 'Content',
@@ -1480,6 +1492,26 @@ function system_find_base_theme($themes,
 }
 
 /**
+ * Determine whether Drupal should use the admin theme for this page.
+ *
+ * @return
+ *   Boolean TRUE if the admin theme should be used.
+ */
+function system_use_admin_theme() {
+  // Are we on an admin/* page?
+  if (arg(0) == 'admin') {
+    return TRUE;
+  }
+
+  // Should the admin theme be used on node add/edit pages?
+  if ((variable_get('node_admin_theme', '0') && arg(0) == 'node' && (arg(1) == 'add' || arg(2) == 'edit'))) {
+    return TRUE;
+  }
+
+  return FALSE;
+}
+
+/**
  * Get a list of available regions from a specified theme.
  *
  * @param $theme_key
Index: modules/update/update.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/update/update.module,v
retrieving revision 1.37
diff -u -p -r1.37 update.module
--- modules/update/update.module	8 Jun 2009 05:00:11 -0000	1.37
+++ modules/update/update.module	8 Jun 2009 05:37:18 -0000
@@ -132,6 +132,7 @@ function update_menu() {
     'page callback' => 'update_status',
     'access arguments' => array('administer site configuration'),
     'weight' => 10,
+    'options' => array('admin' => TRUE),
   );
   $items['admin/settings/updates'] = array(
     'title' => 'Updates',
Index: modules/user/user.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/user/user.module,v
retrieving revision 1.1000
diff -u -p -r1.1000 user.module
--- modules/user/user.module	8 Jun 2009 05:00:11 -0000	1.1000
+++ modules/user/user.module	8 Jun 2009 05:37:22 -0000
@@ -1341,6 +1341,7 @@ function user_menu() {
     'page callback' => 'system_admin_menu_block_page',
     'access callback' => 'system_admin_menu_block_access',
     'access arguments' => array('admin/user', 'access administration pages'),
+    'options' => array('admin' => TRUE),
   );
   $items['admin/user/user'] = array(
     'title' => 'Users',
@@ -1348,6 +1349,7 @@ function user_menu() {
     'page callback' => 'user_admin',
     'page arguments' => array('list'),
     'access arguments' => array('administer users'),
+    'options' => array('admin' => TRUE),
   );
   $items['admin/user/user/list'] = array(
     'title' => 'List',
@@ -1366,6 +1368,7 @@ function user_menu() {
     'page callback' => 'drupal_get_form',
     'page arguments' => array('user_admin_settings'),
     'access arguments' => array('administer users'),
+    'options' => array('admin' => TRUE),
   );
 
   // Permission administration pages.
@@ -1375,6 +1378,7 @@ function user_menu() {
     'page callback' => 'drupal_get_form',
     'page arguments' => array('user_admin_perm'),
     'access arguments' => array('administer permissions'),
+    'options' => array('admin' => TRUE),
   );
   $items['admin/user/roles'] = array(
     'title' => 'Roles',
@@ -1382,6 +1386,7 @@ function user_menu() {
     'page callback' => 'drupal_get_form',
     'page arguments' => array('user_admin_new_role'),
     'access arguments' => array('administer permissions'),
+    'options' => array('admin' => TRUE),
   );
   $items['admin/user/roles/edit'] = array(
     'title' => 'Edit role',
Index: themes/garland/page.tpl.php
===================================================================
RCS file: /cvs/drupal/drupal/themes/garland/page.tpl.php,v
retrieving revision 1.27
diff -u -p -r1.27 page.tpl.php
--- themes/garland/page.tpl.php	28 May 2009 16:44:07 -0000	1.27
+++ themes/garland/page.tpl.php	8 Jun 2009 05:37:22 -0000
@@ -15,6 +15,8 @@
   </head>
   <body class="<?php print $classes ?>">
 
+  <?php print $admin; ?>
+
   <div id="header-region" class="clearfix"><?php print $header ?></div>
 
   <div id="wrapper">
