diff --git spaces.module spaces.module
index 42628ce..41c83db 100644
--- spaces.module
+++ spaces.module
@@ -695,14 +695,12 @@ function spaces_menu_access() {
     else {
       foreach (array_filter($args, 'is_object') as $object) {
         if (isset($object->nid)) {
-          spaces_router('node', $object);
           $feature = !empty($map[$object->type]) ? reset($map[$object->type]) : NULL;
           if ($feature) {
             return spaces_access_feature('view', $feature);
           }
         }
         elseif (isset($object->uid)) {
-          spaces_router('user', $object);
           return spaces_access_user('view', $object);
         }
         break;
@@ -769,6 +767,8 @@ function spaces_perm() {
  * Implementation of hook_init().
  */
 function spaces_init() {
+  global $spaces_current_path;
+  $spaces_current_path = $_GET['q'];
   spaces_ahah_check();
 
   if (module_exists('spaces_customtext')) {
@@ -921,6 +921,29 @@ function spaces_features_order_menu(&$links) {
  * Reorder primary menu links.
  */
 function spaces_preprocess_page(&$vars) {
+  global $spaces_current_path;
+  // Current path needs to be saved in case of access denied
+  $router_item = menu_get_item($spaces_current_path);
+  // We only want to redirect when we're requested to by access callback
+  if ($router_item && $router_item['access_callback'] === 'spaces_menu_access' && !empty($router_item['load_functions'])) {
+    // Copied from menu_get_item and _menu_translate
+    // Unfortunally on access false, map is not put item router item
+    // so need to reload the objects
+    $original_map = arg(NULL, $spaces_current_path);
+    _menu_link_map_translate($original_map, $router_item['to_arg_functions']);
+    if (_menu_load_objects($router_item, $original_map)) {
+      foreach (array_filter($original_map, 'is_object') as $object) {
+        if (isset($object->nid)) {
+          spaces_router('node', $object);
+        }
+        elseif (isset($object->uid)) {
+          spaces_router('user', $object);
+        }
+        break;
+      }
+    }
+  }
   spaces_features_order_menu($vars['primary_links']);
 }
 
