diff --git a/includes/menu.inc b/includes/menu.inc
index 7cb17459a4e9f51d90db1606121ea662ac5c447d..e8276b38ad6a53c6f8e7a3428a9544101054d882 100644
--- a/includes/menu.inc
+++ b/includes/menu.inc
@@ -110,6 +110,14 @@ function menu_execute_active_handler() {
   }
 }
 
+function menu_active_handler_exists() {
+  global $_list;
+
+  $path = menu_get_active_item();
+
+  return function_exists($_list[$path]["callback"]);
+}
+
 /**
  * Returns true when the path is in the active trail.
  */
diff --git a/index.php b/index.php
index 35f865a002a3a28640384a96fa111598f53a0a6f..b4834e96a25d963ea900132af21a2533138bad3d 100644
--- a/index.php
+++ b/index.php
@@ -9,18 +9,34 @@
 
 menu_build("system");
 
-$mod = arg(0);
-
-if (isset($mod) && module_hook($mod, "page")) {
-  module_invoke($mod, "page");
+if (menu_active_handler_exists()) {
+  $breadcrumb = menu_get_active_breadcrumb();
+  array_pop($breadcrumb);
+  $title = menu_get_active_title();
+
+  theme("header");
+  theme("breadcrumb", $breadcrumb);
+  if ($help = menu_get_active_help()) {
+    $contents = "<small>$help</small><hr />";
+  }
+  $contents .= menu_execute_active_handler();
+  theme("box", $title, $contents);
+  theme("footer");
 }
 else {
-  if (module_hook(variable_get("site_frontpage", "node"), "page")) {
-    module_invoke(variable_get("site_frontpage", "node"), "page");
+  $mod = arg(0);
+
+  if (isset($mod) && module_hook($mod, "page")) {
+    module_invoke($mod, "page");
   }
   else {
-    theme("header");
-    theme("footer");
+    if (module_hook(variable_get("site_frontpage", "node"), "page")) {
+      module_invoke(variable_get("site_frontpage", "node"), "page");
+    }
+    else {
+      theme("header");
+      theme("footer");
+    }
   }
 }
 
diff --git a/modules/admin.module b/modules/admin.module
index f8667f1f635261939a1a60dd5f9ce8425777733c..4df79bc19e7297b5f5a89a7e5fbf8a397d7bbaa0 100644
--- a/modules/admin.module
+++ b/modules/admin.module
@@ -32,36 +32,9 @@ function admin_link($type) {
   }
 }
 
-function admin_page() {
+function admin_admin() {
   if (user_access("access administration pages")) {
-    $title = menu_get_active_title();
-
-    theme("header", $title);
-
-    $contents = "";
-
-    if ($help = menu_get_active_help()) {
-      $contents .= "<small>$help</small><hr />";
-    }
-
-    if (arg(1)) {
-      $contents .= menu_execute_active_handler();
-    }
-    else {
-      $contents .= watchdog_overview("actions");
-    }
-
-    $breadcrumb = menu_get_active_breadcrumb();
-    array_pop($breadcrumb);
-
-    theme("breadcrumb", $breadcrumb);
-    theme("box", $title, $contents);
-    theme("footer");
-  }
-  else {
-    theme("header", t("Access denied"));
-    theme("box", t("Access denied"), message_access());
-    theme("footer");
+    return watchdog_overview("actions");
   }
 }
 
diff --git a/modules/blog.module b/modules/blog.module
index a8a54c4b36fcb6d8d4eae8f6efbc864e05ccd46f..c8aa80a438bebcf430b80031adbffb7d4de0adb2 100644
--- a/modules/blog.module
+++ b/modules/blog.module
@@ -252,10 +252,10 @@ function blog_link($type, $node = 0, $main) {
 
   if ($type == "system") {
     if (user_access("maintain personal blog")) {
-      menu("node/add/blog", t("blog entry"), "blog_page", 0);
+      menu("node/add/blog", t("blog entry"), "page", 0);
     }
     if (user_access("maintain personal blog")) {
-      menu("blog/" . $user->uid, t("my blog"), "user_page", 1);
+      menu("blog/" . $user->uid, t("my blog"), "page", 1);
     }
   }
 
diff --git a/modules/blog/blog.module b/modules/blog/blog.module
index a8a54c4b36fcb6d8d4eae8f6efbc864e05ccd46f..c8aa80a438bebcf430b80031adbffb7d4de0adb2 100644
--- a/modules/blog/blog.module
+++ b/modules/blog/blog.module
@@ -252,10 +252,10 @@ function blog_link($type, $node = 0, $main) {
 
   if ($type == "system") {
     if (user_access("maintain personal blog")) {
-      menu("node/add/blog", t("blog entry"), "blog_page", 0);
+      menu("node/add/blog", t("blog entry"), "page", 0);
     }
     if (user_access("maintain personal blog")) {
-      menu("blog/" . $user->uid, t("my blog"), "user_page", 1);
+      menu("blog/" . $user->uid, t("my blog"), "page", 1);
     }
   }
 
diff --git a/modules/book.module b/modules/book.module
index 72059c6e32ee57ada9c6ecceb389b604bc4fb1a9..ec855509555fdcfc89200be1bda3e91e5877dece 100644
--- a/modules/book.module
+++ b/modules/book.module
@@ -71,7 +71,7 @@ function book_link($type, $node = 0, $main = 0) {
 
   if ($type == "system") {
     if (user_access("maintain books")) {
-      menu("node/add/book", t("book page"), "book_page", 0);
+      menu("node/add/book", t("book page"), "page", 0);
     }
     if (user_access("administer nodes")) {
       menu("admin/node/book", t("books"), "book_admin", 4);
diff --git a/modules/book/book.module b/modules/book/book.module
index 72059c6e32ee57ada9c6ecceb389b604bc4fb1a9..ec855509555fdcfc89200be1bda3e91e5877dece 100644
--- a/modules/book/book.module
+++ b/modules/book/book.module
@@ -71,7 +71,7 @@ function book_link($type, $node = 0, $main = 0) {
 
   if ($type == "system") {
     if (user_access("maintain books")) {
-      menu("node/add/book", t("book page"), "book_page", 0);
+      menu("node/add/book", t("book page"), "page", 0);
     }
     if (user_access("administer nodes")) {
       menu("admin/node/book", t("books"), "book_admin", 4);
diff --git a/modules/forum.module b/modules/forum.module
index 66fee1d55572f6257502a571aa6d2dc943393c91..63755b56ee9cd97b26b7d009b5e2098a63a0d684 100644
--- a/modules/forum.module
+++ b/modules/forum.module
@@ -94,7 +94,7 @@ function forum_link($type, $node = 0, $main = 0) {
   }
 
   if ($type == "system" && user_access("create forum topics")) {
-      menu("node/add/forum",t("forum topic"), "forum_page");
+      menu("node/add/forum",t("forum topic"), "page");
   }
 
   if (!$main && $type == "node" && $node->type == "forum") {
diff --git a/modules/forum/forum.module b/modules/forum/forum.module
index 66fee1d55572f6257502a571aa6d2dc943393c91..63755b56ee9cd97b26b7d009b5e2098a63a0d684 100644
--- a/modules/forum/forum.module
+++ b/modules/forum/forum.module
@@ -94,7 +94,7 @@ function forum_link($type, $node = 0, $main = 0) {
   }
 
   if ($type == "system" && user_access("create forum topics")) {
-      menu("node/add/forum",t("forum topic"), "forum_page");
+      menu("node/add/forum",t("forum topic"), "page");
   }
 
   if (!$main && $type == "node" && $node->type == "forum") {
diff --git a/modules/page.module b/modules/page.module
index 7e7fe72b88865bad74d2874ca73c363910b49ba2..ff6e8c2e110242634f8c37e469773811da942c8b 100644
--- a/modules/page.module
+++ b/modules/page.module
@@ -89,7 +89,7 @@ function page_link($type) {
 
   if ($type == "system") {
     if (user_access("maintain static pages")) {
-      menu("node/add/page", t("static page"), "page_page", 0);
+      menu("node/add/page", t("static page"), "page", 0);
     }
   }
 
diff --git a/modules/page/page.module b/modules/page/page.module
index 7e7fe72b88865bad74d2874ca73c363910b49ba2..ff6e8c2e110242634f8c37e469773811da942c8b 100644
--- a/modules/page/page.module
+++ b/modules/page/page.module
@@ -89,7 +89,7 @@ function page_link($type) {
 
   if ($type == "system") {
     if (user_access("maintain static pages")) {
-      menu("node/add/page", t("static page"), "page_page", 0);
+      menu("node/add/page", t("static page"), "page", 0);
     }
   }
 
diff --git a/modules/poll.module b/modules/poll.module
index 7c06eb22aad1ee4faea26990f5b1e7136e6da4ec..b4bd980ced881cf7f5ba42ca090240161012a819 100644
--- a/modules/poll.module
+++ b/modules/poll.module
@@ -182,7 +182,7 @@ function poll_link($type, $node = 0, $main) {
 
   if ($type == "system") {
     if (user_access("create polls")) {
-      menu("node/add/poll", t("poll"), "poll_page", 0);
+      menu("node/add/poll", t("poll"), "page", 0);
     }
   }
   else if ($type == "page" && user_access("access content")) {
diff --git a/modules/poll/poll.module b/modules/poll/poll.module
index 7c06eb22aad1ee4faea26990f5b1e7136e6da4ec..b4bd980ced881cf7f5ba42ca090240161012a819 100644
--- a/modules/poll/poll.module
+++ b/modules/poll/poll.module
@@ -182,7 +182,7 @@ function poll_link($type, $node = 0, $main) {
 
   if ($type == "system") {
     if (user_access("create polls")) {
-      menu("node/add/poll", t("poll"), "poll_page", 0);
+      menu("node/add/poll", t("poll"), "page", 0);
     }
   }
   else if ($type == "page" && user_access("access content")) {
diff --git a/modules/queue.module b/modules/queue.module
index cc526ddd059b1f7f94ba0afe5a85d98cbd1057b6..92f2decb1683169593427fb7e92ec2b6fc3ea535 100644
--- a/modules/queue.module
+++ b/modules/queue.module
@@ -35,7 +35,7 @@ function queue_perm() {
 function queue_link($type) {
   if ($type == "system") {
     if (user_access("access submission queue")) {
-      menu("queue", t("view submissions"), "queue_page", 1);
+      menu("queue", t("view submissions"), "page", 1);
     }
   }
 
diff --git a/modules/story.module b/modules/story.module
index 17ea3b6c2ac871d9a66346430dedd9994455b0ef..b1559c0eda75b3e509a3448161f949b4c62d6dfb 100644
--- a/modules/story.module
+++ b/modules/story.module
@@ -53,7 +53,7 @@ function story_link($type) {
 
   if ($type == "system") {
     if (user_access("create stories")) {
-      menu("node/add/story", t("story"), "story_page", 0);
+      menu("node/add/story", t("story"), "page", 0);
     }
   }
 
diff --git a/modules/story/story.module b/modules/story/story.module
index 17ea3b6c2ac871d9a66346430dedd9994455b0ef..b1559c0eda75b3e509a3448161f949b4c62d6dfb 100644
--- a/modules/story/story.module
+++ b/modules/story/story.module
@@ -53,7 +53,7 @@ function story_link($type) {
 
   if ($type == "system") {
     if (user_access("create stories")) {
-      menu("node/add/story", t("story"), "story_page", 0);
+      menu("node/add/story", t("story"), "page", 0);
     }
   }
 
diff --git a/modules/tracker.module b/modules/tracker.module
index cb75d04e2e1a7c661e93d842333293167328e983..78d27c793ab83006efe00411592a0fca6b07e9bd 100644
--- a/modules/tracker.module
+++ b/modules/tracker.module
@@ -22,7 +22,7 @@ function tracker_link($type) {
 
   if ($type == "system") {
     if (user_access("access content")) {
-      menu("tracker", t("recent posts"), "tracker_page", 1);
+      menu("tracker", t("recent posts"), "page", 1);
     }
   }
 
diff --git a/modules/tracker/tracker.module b/modules/tracker/tracker.module
index cb75d04e2e1a7c661e93d842333293167328e983..78d27c793ab83006efe00411592a0fca6b07e9bd 100644
--- a/modules/tracker/tracker.module
+++ b/modules/tracker/tracker.module
@@ -22,7 +22,7 @@ function tracker_link($type) {
 
   if ($type == "system") {
     if (user_access("access content")) {
-      menu("tracker", t("recent posts"), "tracker_page", 1);
+      menu("tracker", t("recent posts"), "page", 1);
     }
   }
 
diff --git a/modules/user.module b/modules/user.module
index d67f9535985630a4ddb471a8b67babacd195db4c..853638672afbc1d7629b7613375b160a2e6d3319 100644
--- a/modules/user.module
+++ b/modules/user.module
@@ -496,9 +496,9 @@ function user_link($type) {
   if ($type == "system") {
     global $user;
     if ($user->uid) {
-      menu("user", t("my account"), "user_page", 8);
-      menu("user/edit", t("edit account"), "user_page", 0);
-      menu("user/logout", t("log out"), "user_page", 10);
+      menu("user", t("my account"), "page", 8);
+      menu("user/edit", t("edit account"), "page", 0);
+      menu("user/logout", t("log out"), "page", 10);
     }
 
     if (user_access("administer users")) {
diff --git a/modules/user/user.module b/modules/user/user.module
index d67f9535985630a4ddb471a8b67babacd195db4c..853638672afbc1d7629b7613375b160a2e6d3319 100644
--- a/modules/user/user.module
+++ b/modules/user/user.module
@@ -496,9 +496,9 @@ function user_link($type) {
   if ($type == "system") {
     global $user;
     if ($user->uid) {
-      menu("user", t("my account"), "user_page", 8);
-      menu("user/edit", t("edit account"), "user_page", 0);
-      menu("user/logout", t("log out"), "user_page", 10);
+      menu("user", t("my account"), "page", 8);
+      menu("user/edit", t("edit account"), "page", 0);
+      menu("user/logout", t("log out"), "page", 10);
     }
 
     if (user_access("administer users")) {