diff --git a/includes/menu.inc b/includes/menu.inc
index dad65d7..7466f70 100644
--- a/includes/menu.inc
+++ b/includes/menu.inc
@@ -573,10 +573,12 @@ function _menu_load_objects(&$item, &$map) {
             }
           }
           array_unshift($args, $value);
-          $return = call_user_func_array($function, $args);
+          // Prevents infinite recursion if the current item has been already processed
+          $return = ( $function == 'menu_link_load' && isset($item['mlid']) && $value == $item['mlid'] ) ? $item : call_user_func_array($function, $args);
         }
         else {
-          $return = $function($value);
+          // Prevents infinite recursion if the current item has been already processed
+          $return = ( $function == 'menu_link_load' && isset($item['mlid']) && $value == $item['mlid'] ) ? $item : $function($value);
         }
         // If callback returned an error or there is no callback, trigger 404.
         if ($return === FALSE) {
