diff --git includes/path.inc includes/path.inc
index 1825c1a..1f9b366 100644
--- includes/path.inc
+++ includes/path.inc
@@ -512,23 +512,31 @@ function path_is_admin($path) {
 function path_get_admin_paths() {
   $patterns = &drupal_static(__FUNCTION__);
   if (!isset($patterns)) {
-    $paths = module_invoke_all('admin_paths');
-    drupal_alter('admin_paths', $paths);
-    // Combine all admin paths into one array, and likewise for non-admin paths,
-    // for easier handling.
-    $patterns = array();
-    $patterns['admin'] = array();
-    $patterns['non_admin'] = array();
-    foreach ($paths as $path => $enabled) {
-      if ($enabled) {
-        $patterns['admin'][] = $path;
-      }
-      else {
-        $patterns['non_admin'][] = $path;
+    // Using cache_menu cache to ensure that these paths are rebuilt along with
+    // the rest of the menu system.
+    if ($cached = cache_get('admin_paths', 'cache_menu')) {
+      $patterns = $cached->data;
+    }
+    else {
+      $paths = module_invoke_all('admin_paths');
+      drupal_alter('admin_paths', $paths);
+      // Combine all admin paths into one array, and likewise for non-admin paths,
+      // for easier handling.
+      $patterns = array();
+      $patterns['admin'] = array();
+      $patterns['non_admin'] = array();
+      foreach ($paths as $path => $enabled) {
+        if ($enabled) {
+          $patterns['admin'][] = $path;
+        }
+        else {
+          $patterns['non_admin'][] = $path;
+        }
       }
+      $patterns['admin'] = implode("\n", $patterns['admin']);
+      $patterns['non_admin'] = implode("\n", $patterns['non_admin']);
+      cache_set('admin_paths', $patterns, 'cache_menu');
     }
-    $patterns['admin'] = implode("\n", $patterns['admin']);
-    $patterns['non_admin'] = implode("\n", $patterns['non_admin']);
   }
   return $patterns;
 }
