--- admin_menu/admin_menu.module	2008-06-26 16:08:37.000000000 -0400
+++ admin_menu/admin_menu.module	2008-07-15 02:54:55.000000000 -0400
@@ -129,6 +129,20 @@ function admin_menu_footer($main = 0) {
 }
 
 /**
+ * Recursive helper function to build an associative array of paths whose menu items are hidden
+ */
+function _admin_menu_get_hidden(&$menu,&$ret) {
+  foreach($menu as $item) {
+    if (!empty($item['link']['hidden'])) {
+	$ret[$item['link']['link_path']] = 1;
+    }
+    if (is_array($item['below'])) {
+	_admin_menu_get_hidden($item['below'],$ret);
+    }
+  }
+}
+
+/**
  * Returns a rendered menu tree.
  *
  * @param $tree
@@ -140,7 +154,13 @@ function admin_menu_footer($main = 0) {
 function admin_menu_tree_output($tree) {
   $output = '';
 
+  $menu = menu_tree_all_data();
+  $hidden = array();
+  _admin_menu_get_hidden($menu,$hidden);
   foreach ($tree as $data) {
+    if (isset($hidden[$data['link']['link_path']])) {
+      continue;
+    }
     $extra_class = isset($data['link']['localized_options']['extra class']) ? $data['link']['localized_options']['extra class'] : NULL;
     // Omit alias lookups.
     $data['link']['localized_options']['alias'] = TRUE;
