=== modified file 'includes/menu.inc'
--- includes/menu.inc	2007-11-09 22:14:40 +0000
+++ includes/menu.inc	2007-11-15 22:33:43 +0000
@@ -85,6 +85,7 @@ define('MENU_MODIFIABLE_BY_ADMIN', 0x001
 define('MENU_MODIFIED_BY_ADMIN', 0x0020);
 define('MENU_CREATED_BY_ADMIN', 0x0040);
 define('MENU_IS_LOCAL_TASK', 0x0080);
+define('MENU_IS_VISIBLE_FOR_ADMIN', 0x0100);
 
 /**
  * @} End of "Menu flags".
@@ -299,7 +300,7 @@ function menu_set_item($path, $router_it
  *   The values for key title, page_arguments, access_arguments will be
  *   filled in based on the database values and the objects loaded.
  */
-function menu_get_item($path = NULL, $router_item = NULL) {
+function menu_get_item($path = NULL, $router_item = NULL, $is_admin = FALSE) {
   static $router_items;
   if (!isset($path)) {
     $path = $_GET['q'];
@@ -313,7 +314,7 @@ function menu_get_item($path = NULL, $ro
     list($ancestors, $placeholders) = menu_get_ancestors($parts);
 
     if ($router_item = db_fetch_array(db_query_range('SELECT * FROM {menu_router} WHERE path IN ('. implode (',', $placeholders) .') ORDER BY fit DESC', $ancestors, 0, 1))) {
-      $map = _menu_translate($router_item, $original_map);
+      $map = _menu_translate($router_item, $original_map, FALSE, $is_admin);
       if ($map === FALSE) {
         $router_items[$path] = FALSE;
         return FALSE;
@@ -416,7 +417,11 @@ function _menu_load_objects($item, &$map
  * @return
  *   $item['access'] becomes TRUE if the item is accessible, FALSE otherwise.
  */
-function _menu_check_access(&$item, $map) {
+function _menu_check_access(&$item, $map, $is_admin = FALSE) {
+  if ($is_admin && ($item['type'] & MENU_IS_VISIBLE_FOR_ADMIN)) {
+    $item['access'] = TRUE;
+    return TRUE;
+  }
   // Determine access callback, which will decide whether or not the current
   // user has access to this path.
   $callback = empty($item['access_callback']) ? 0 : trim($item['access_callback']);
@@ -499,7 +504,7 @@ function _menu_item_localize(&$item, $ma
  *   If an error occurs during calling the load_functions (like trying to load
  *   a non existing node) then this function return FALSE.
  */
-function _menu_translate(&$router_item, $map, $to_arg = FALSE) {
+function _menu_translate(&$router_item, $map, $to_arg = FALSE, $is_admin = FALSE) {
   $path_map = $map;
   if (!_menu_load_objects($router_item, $map)) {
     // An error occurred loading an object.
@@ -519,7 +524,7 @@ function _menu_translate(&$router_item, 
   }
   $router_item['href'] = implode('/', $link_map);
   $router_item['options'] = array();
-  _menu_check_access($router_item, $map);
+  _menu_check_access($router_item, $map, $is_admin);
 
   _menu_item_localize($router_item, $map);
 
@@ -569,7 +574,7 @@ function menu_tail_to_arg($arg, $map, $i
  *   $item['href'] is generated from link_path, possibly by to_arg functions.
  *   $item['title'] is generated from link_title, and may be localized.
  */
-function _menu_link_translate(&$item) {
+function _menu_link_translate(&$item, $is_admin = FALSE) {
   if ($item['external']) {
     $item['access'] = 1;
     $map = array();
@@ -593,7 +598,7 @@ function _menu_link_translate(&$item) {
         $item['access'] = FALSE;
         return FALSE;
       }
-      _menu_check_access($item, $map);
+      _menu_check_access($item, $map, $is_admin);
     }
     // If the link title matches that of a router item, localize it.
     if (!empty($item['title']) && (($item['title'] == $item['link_title']) || ($item['title_callback'] != 't'))) {
@@ -855,7 +860,7 @@ function menu_tree_collect_node_links(&$
 /**
  * Check access and perform other dynamic operations for each link in the tree.
  */
-function menu_tree_check_access(&$tree, $node_links = array()) {
+function menu_tree_check_access(&$tree, $node_links = array(), $is_admin = FALSE) {
 
   if ($node_links) {
     // Use db_rewrite_sql to evaluate view access without loading each full node.
@@ -869,21 +874,21 @@ function menu_tree_check_access(&$tree, 
       }
     }
   }
-  _menu_tree_check_access($tree);
+  _menu_tree_check_access($tree, $is_admin);
   return;
 }
 
 /**
  * Recursive helper function for menu_tree_check_access()
  */
-function _menu_tree_check_access(&$tree) {
+function _menu_tree_check_access(&$tree, $is_admin) {
   $new_tree = array();
   foreach ($tree as $key => $v) {
     $item = &$tree[$key]['link'];
-    _menu_link_translate($item);
+    _menu_link_translate($item, $is_admin);
     if ($item['access']) {
       if ($tree[$key]['below']) {
-        _menu_tree_check_access($tree[$key]['below']);
+        _menu_tree_check_access($tree[$key]['below'], $is_admin);
       }
       // The weights are made a uniform 5 digits by adding 50000 as an offset.
       // After _menu_link_translate(), $item['title'] has the localized link title.

=== modified file 'modules/menu/menu.admin.inc'
--- modules/menu/menu.admin.inc	2007-11-11 06:56:44 +0000
+++ modules/menu/menu.admin.inc	2007-11-15 22:24:59 +0000
@@ -37,7 +37,7 @@ function menu_overview_form(&$form_state
   $tree = menu_tree_data($result);
   $node_links = array();
   menu_tree_collect_node_links($tree, $node_links);
-  menu_tree_check_access($tree, $node_links);
+  menu_tree_check_access($tree, $node_links, TRUE);
 
   $form = _menu_overview_tree_form($tree);
   if (element_children($form)) {

=== modified file 'modules/menu/menu.module'
--- modules/menu/menu.module	2007-11-09 22:14:40 +0000
+++ modules/menu/menu.module	2007-11-15 22:31:18 +0000
@@ -462,7 +462,7 @@ function menu_valid_path($form_item) {
       $item['link_title'] = $form_item['link_title'];
       $item['external']   = FALSE;
       $item['options'] = '';
-      _menu_link_translate($item);
+      _menu_link_translate($item, TRUE);
     }
   }
   else {

=== modified file 'modules/system/system.install'
--- modules/system/system.install	2007-11-15 14:55:11 +0000
+++ modules/system/system.install	2007-11-15 22:26:46 +0000
@@ -4155,6 +4155,9 @@ function system_update_6021() {
       }
       else {
         $item['router_path'] = '';
+        $item['expanded'] = (bool)$item['type'] & 0x0100;
+        // Mask out MENU_EXPANDED and MENU_LINKS_TO_PARENT flags.
+        $item['type'] = $item['type'] & 0x00FF;
         menu_link_save($item);
         $_SESSION['menu_item_map'][$item['mid']] = array('mlid' => $item['mlid'], 'menu_name' => $item['menu_name']);
       }

=== modified file 'modules/user/user.module'
--- modules/user/user.module	2007-11-14 16:01:30 +0000
+++ modules/user/user.module	2007-11-15 22:26:46 +0000
@@ -874,7 +874,7 @@ function user_menu() {
   $items['user/login'] = array(
     'title' => 'Log in',
     'access callback' => 'user_is_anonymous',
-    'type' => MENU_DEFAULT_LOCAL_TASK,
+    'type' => MENU_DEFAULT_LOCAL_TASK & MENU_IS_VISIBLE_FOR_ADMIN,
   );
 
   $items['user/register'] = array(
@@ -882,7 +882,7 @@ function user_menu() {
     'page callback' => 'drupal_get_form',
     'page arguments' => array('user_register'),
     'access callback' => 'user_register_access',
-    'type' => MENU_LOCAL_TASK,
+    'type' => MENU_LOCAL_TASK  & MENU_IS_VISIBLE_FOR_ADMIN,
     'file' => 'user.pages.inc',
   );
 

