=== modified file 'includes/menu.inc'
--- includes/menu.inc	2009-11-11 08:28:50 +0000
+++ includes/menu.inc	2009-11-27 12:21:45 +0000
@@ -498,8 +498,8 @@ function menu_execute_active_handler($pa
 function _menu_load_objects(&$item, &$map) {
   if ($load_functions = $item['load_functions']) {
     // If someone calls this function twice, then unserialize will fail.
-    if ($load_functions_unserialized = unserialize($load_functions)) {
-      $load_functions = $load_functions_unserialized;
+    if (!is_array($load_functions)) {
+      $load_functions = unserialize($load_functions);
     }
     $path_map = $map;
     foreach ($load_functions as $index => $function) {
@@ -691,6 +691,8 @@ function _menu_item_localize(&$item, $ma
  *   a non existing node) then this function return FALSE.
  */
 function _menu_translate(&$router_item, $map, $to_arg = FALSE) {
+  isset($drupal_static[__FUNCTION__]) || ($drupal_static[__FUNCTION__] = &drupal_static(__FUNCTION__));
+  $performance_store = &$drupal_static[__FUNCTION__];
   if ($to_arg && !empty($router_item['to_arg_functions'])) {
     // Fill in missing path elements, such as the current uid.
     _menu_link_map_translate($map, $router_item['to_arg_functions']);
@@ -698,10 +700,33 @@ function _menu_translate(&$router_item, 
   // The $path_map saves the pieces of the path as strings, while elements in
   // $map may be replaced with loaded objects.
   $path_map = $map;
-  if (!empty($router_item['load_functions']) && !_menu_load_objects($router_item, $map)) {
-    // An error occurred loading an object.
-    $router_item['access'] = FALSE;
-    return FALSE;
+  if ($router_item['load_functions']) {
+    $router_item['load_functions'] = unserialize($router_item['load_functions']);
+    $need_object = TRUE;
+    if (count($router_item['load_functions']) == 1) {
+      list($index, $load_function) = each($router_item['load_functions']);
+      if (is_string($load_function)) {
+        if (isset($performance_store[$index][$load_function])) {
+          $need_object = FALSE;
+          $map[$index] = $performance_store[$index][$load_function];
+        }
+        else {
+          $need_store = TRUE;
+        }
+      }
+    }
+    var_dump($need_object);
+    if ($need_object) {
+      $success = _menu_load_objects($router_item, $map);
+      if (!empty($need_store)) {
+        $performance_store[$index][$load_function] = $map[$index];
+      }
+      if (!$success) {
+        // An error occurred loading an object.
+        $router_item['access'] = FALSE;
+        return FALSE;
+      }
+    }
   }
 
   // Generate the link path for the page request or local tasks.
@@ -713,7 +738,9 @@ function _menu_translate(&$router_item, 
   }
   $router_item['href'] = implode('/', $link_map);
   $router_item['options'] = array();
-  _menu_check_access($router_item, $map);
+  #if (!isset($router_item['access'])) {
+    _menu_check_access($router_item, $map);
+  #}
 
   // For performance, don't localize an item the user can't access.
   if ($router_item['access']) {

