 includes/menu.inc |   29 ++++++++++++-----------------
 1 files changed, 12 insertions(+), 17 deletions(-)

diff --git includes/menu.inc includes/menu.inc
index c5208d0..43e8bb7 100644
--- includes/menu.inc
+++ includes/menu.inc
@@ -374,7 +374,8 @@ function menu_unserialize($data, $map) {
  *   call.
  */
 function menu_set_item($path, $router_item) {
-  menu_get_item($path, $router_item);
+  $router_items = &drupal_static('menu_get_item');
+  $router_items[$path] = $router_item;
 }
 
 /**
@@ -383,8 +384,6 @@ function menu_set_item($path, $router_item) {
  * @param $path
  *   The path, for example node/5. The function will find the corresponding
  *   node/% item and return that.
- * @param $router_item
- *   Internal use only.
  *
  * @return
  *   The router item, an associate array corresponding to one row in the
@@ -394,14 +393,11 @@ function menu_set_item($path, $router_item) {
  *   theme_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_items = &drupal_static(__FUNCTION__);
   if (!isset($path)) {
     $path = $_GET['q'];
   }
-  if (isset($router_item)) {
-    $router_items[$path] = $router_item;
-  }
   if (!isset($router_items[$path])) {
     $original_map = arg(NULL, $path);
     $parts = array_slice($original_map, 0, MENU_MAX_PARTS);
@@ -418,16 +414,15 @@ function menu_get_item($path = NULL, $router_item = NULL) {
       cache_set($cid, $router_item, 'cache_menu');
     }
     if ($router_item) {
-      $map = _menu_translate($router_item, $original_map);
+      $router_item['map'] = _menu_translate($router_item, $original_map);
       $router_item['original_map'] = $original_map;
-      if ($map === FALSE) {
-        $router_items[$path] = FALSE;
-        return FALSE;
+      if ($router_item['map'] && $router_item['access']) {
+        $router_item['page_arguments'] = array_merge(menu_unserialize($router_item['page_arguments'], $router_item['map']), array_slice($router_item['map'], $router_item['number_parts']));
+        $router_item['theme_arguments'] = array_merge(menu_unserialize($router_item['theme_arguments'], $router_item['map']), array_slice($router_item['map'], $router_item['number_parts']));
       }
-      if ($router_item['access']) {
-        $router_item['map'] = $map;
-        $router_item['page_arguments'] = array_merge(menu_unserialize($router_item['page_arguments'], $map), array_slice($map, $router_item['number_parts']));
-        $router_item['theme_arguments'] = array_merge(menu_unserialize($router_item['theme_arguments'], $map), array_slice($map, $router_item['number_parts']));
+      else {
+        // access is always FALSE when map is.
+        $router_item['access'] = FALSE;
       }
     }
     $router_items[$path] = $router_item;
@@ -456,7 +451,7 @@ function menu_execute_active_handler($path = NULL, $deliver = TRUE) {
     if (variable_get('menu_rebuild_needed', FALSE) || !variable_get('menu_masks', array())) {
       menu_rebuild();
     }
-    if ($router_item = menu_get_item($path)) {
+    if (($router_item = menu_get_item($path)) && $router_item['map']) {
       if ($router_item['access']) {
         if ($router_item['include_file']) {
           require_once DRUPAL_ROOT . '/' . $router_item['include_file'];
@@ -1037,7 +1032,7 @@ function menu_tree_page_data($menu_name, $max_depth = NULL) {
   $tree = &drupal_static(__FUNCTION__, array());
 
   // Load the menu item corresponding to the current page.
-  if ($item = menu_get_item()) {
+  if (($item = menu_get_item()) && $item['map']) {
     if (isset($max_depth)) {
       $max_depth = min($max_depth, MENU_MAX_DEPTH);
     }
