diff --git a/chain_menu_access.module b/chain_menu_access.module
index 9be22b7..6749fae 100644
--- a/chain_menu_access.module
+++ b/chain_menu_access.module
@@ -15,6 +15,14 @@
  * NOTE: hook_menu_alter() is called only when the menu router table is
  * rebuilt after the cache was flushed.
  *
+ * NOTE: MENU_DEFAULT_LOCAL_TASK items should not specify access parameters
+ * but inherit them from their parent item, because access should not be
+ * different between the two. If a module does this anyway, we run into
+ * problems. To be on the safe side, you can call chain_menu_access_chain()
+ * on the MENU_DEFAULT_LOCAL_TASK item as well: this will NOT chain the item's
+ * access but instead remove its access properties, so that sane behavior
+ * (i.e. inheriting from the parent) is restored.
+ *
  * @param $item
  *   The menu router item to modify.
  *   Do not try to chain MENU_DEFAULT_LOCAL_TASK items -- chain their parent
@@ -33,12 +41,14 @@
  *   $new_access_callback().
  *
  * @return
- *   TRUE if the chaining succeeded, FALSE if you tried to chain an item with
- *   the MENU_DEFAULT_LOCAL_TASK flag set.
+ *   TRUE if the chaining succeeded, FALSE if a MENU_DEFAULT_LOCAL_TASK item
+ *   was passed (see the note above). Be sure to chain the parent item in the
+ *   latter case.
  */
 function chain_menu_access_chain(array &$item, $new_access_callback, array $new_access_arguments = array(), $or_or_pass_index = FALSE) {
   if (isset($item['type']) && $item['type'] == MENU_DEFAULT_LOCAL_TASK) {
-    // Defining access callbacks on MENU_DEFAULT_LOCAL_TASK is not supported.
+    // Inherit the parent's access! See http://drupal.org/node/1186208.
+    unset($item['access callback'], $item['access arguments']);
     return FALSE;
   }
   // Normalize the menu router item.
@@ -78,7 +88,13 @@ function _chain_menu_access_callback() {
   $access_callback = empty($access_callback) ? 0 : trim($access_callback);
   $args = func_get_args();
   // Recover the parameters from the array, plus the $new_access_arguments.
-  list($old_access_callback, $new_access_callback, $count, $or, $pass_index) = array_shift($args);
+  $parms = array_shift($args);
+  if (count($parms) != 5) {
+    // Something's wrong, probably failed to clear this MENU_DEFAULT_LOCAL_TASK
+    // item (see chain_menu_access_chain()). Deny access!
+    return FALSE;
+  }
+  list($old_access_callback, $new_access_callback, $count, $or, $pass_index) = $parms;
   $new_access_arguments = array_splice($args, 0, (int) $count, array());
   if ($pass_index !== FALSE || $old_access_callback == 'user_access' || is_numeric($old_access_callback)) {
     // Call the $old_access_callback first either if we need to pass its result
