Index: includes/menu.inc
===================================================================
RCS file: /cvs/drupal/drupal/includes/menu.inc,v
retrieving revision 1.254
diff -u -r1.254 menu.inc
--- includes/menu.inc	30 Jan 2008 21:01:20 -0000	1.254
+++ includes/menu.inc	3 Feb 2008 14:08:41 -0000
@@ -368,6 +368,7 @@
  *   $item['access'] is set to FALSE if an object cannot be loaded.
  */
 function _menu_load_objects(&$item, &$map) {
+  static $cache;
   if ($load_functions = $item['load_functions']) {
     // If someone calls this function twice, then unserialize will fail.
     if ($load_functions_unserialized = unserialize($load_functions)) {
@@ -381,7 +382,7 @@
           // Set up arguments for the load function. These were pulled from
           // 'load arguments' in the hook_menu() entry, but they need
           // some processing. In this case the $function is the key to the
-          // load_function array, and the value is the list of arguments.
+          // load_functions array, and the value is the list of arguments.
           list($function, $args) = each($function);
           $load_functions[$index] = $function;
 
@@ -406,7 +407,10 @@
           $return = call_user_func_array($function, $args);
         }
         else {
-          $return = $function($value);
+          if (!isset($cache[$function][$value])) {
+            $cache[$function][$value] = $function($value);
+          }
+          $return = $cache[$function][$value];
         }
         // If callback returned an error or there is no callback, trigger 404.
         if ($return === FALSE) {
