Regarding Drupal 6.x. Running core Drupal with og, og_user_roles and tac_lite. I am dynamically creating roles and adding them to the $user object in hook_boot and hook_user('load') (and several other places). The $user object contains the roles that the user needs to create content for the node $type in the example below (I have verified that). Theoretically, module_invoke below should not return false, but it is: <?php global $user ; // $user object contains correct roles for access // Got this from node.module (node_access) // No matter the type, this should return us the create permission. $module = node_get_types ( 'module' , $type ); if ( $module == 'node' ) { $module = 'node_content' ; // Avoid function name collisions. } // I checked $user->roles before this is called $access = module_invoke ( $module , 'access' , 'create' , $type , $user ); // and, afterwards. They are exactly what they should be to allow this // this user access to this content ... ?> $access is FALSE. What happens in module_invoke where it would override the roles in the $user object? This same exact code worked in 5.x, so I have to believe there is something that has changed in 6.x with module_invoke() / $user . Furthermore, this code worked in the initial Drupal 6.x versions, so this change, whatever it is, is rather recent. Any ideas, whatsoever? Thanks! -ron