diff --git a/includes/menu.inc b/includes/menu.inc
index c7bee38bf670149142e68a76d625adb2e7f43dd5..266a814c6370888e778ea575e431c11a1dc3de9a 100644
--- a/includes/menu.inc
+++ b/includes/menu.inc
@@ -758,9 +758,10 @@ function menu_rebuild() {
 
           // Because access is checked for each visible parent as well, we only
           // inherit if arguments were given without a callback. Otherwise the
-          // inherited check would be identical to that of the parent.
-          if (!isset($item['access callback']) && isset($parent['access callback']) && !isset($parent['access inherited'])) {
-            if (isset($item['access arguments']) || !$parent['_visible']) {
+          // inherited check would be identical to that of the parent. We do
+          // not inherit from visible parents which are themselves inherited.
+          if (!isset($item['access callback']) && isset($parent['access callback']) && !(isset($parent['access inherited']) && $parent['_visible'])) {
+            if (isset($item['access arguments'])) {
               $item['access callback'] = $parent['access callback'];
             }
             else {