diff --git a/includes/menu.inc b/includes/menu.inc
index 9a686e3..10ca418 100644
--- a/includes/menu.inc
+++ b/includes/menu.inc
@@ -581,7 +581,7 @@ function _menu_translate(&$router_item, $map, $to_arg = FALSE) {
   $router_item['href'] = implode('/', $link_map);
   $router_item['options'] = array();
   _menu_check_access($router_item, $map);
-  
+
   // For performance, don't localize an item the user can't access.
   if ($router_item['access']) {
     _menu_item_localize($router_item, $map);
@@ -1025,6 +1025,11 @@ function _menu_tree_check_access(&$tree) {
   $new_tree = array();
   foreach ($tree as $key => $v) {
     $item = &$tree[$key]['link'];
+    // Do not load hidden menu items if not in active breadcrumb trail and
+    // user can't administer the menu.
+    if (!empty($item['hidden']) && empty($item['in_active_trail']) && !user_access('administer menu')) {
+      continue;
+    }
     _menu_link_translate($item);
     if ($item['access']) {
       if ($tree[$key]['below']) {
@@ -1695,7 +1700,7 @@ function menu_cache_clear_all() {
 function menu_rebuild() {
   if (!lock_acquire('menu_rebuild')) {
     // Wait for another request that is already doing this work.
-    // We choose to block here since otherwise the router item may not 
+    // We choose to block here since otherwise the router item may not
     // be avaiable in menu_execute_active_handler() resulting in a 404.
     lock_wait('menu_rebuild');
     return FALSE;
@@ -1706,7 +1711,7 @@ function menu_rebuild() {
   // Clear the menu, page and block caches.
   menu_cache_clear_all();
   _menu_clear_page_cache();
-  
+
   if (defined('MAINTENANCE_MODE')) {
     variable_set('menu_rebuild_needed', TRUE);
   }
@@ -1898,7 +1903,7 @@ function _menu_delete_item($item, $force = FALSE) {
  *   - router_path: The path of the relevant router item.
  *
  * @return
- *   The mlid of the saved menu link, or FALSE if the menu link could not be 
+ *   The mlid of the saved menu link, or FALSE if the menu link could not be
  *   saved.
  */
 function menu_link_save(&$item) {
