diff --git includes/module.inc includes/module.inc
index ac32df9..810c4b4 100644
--- includes/module.inc
+++ includes/module.inc
@@ -15,6 +15,18 @@ function module_load_all($bootstrap = FALSE) {
     drupal_load('module', $module);
   }
 }
+/**
+ * Determines whether we have passed the module_load_all() stage of full 
+ * bootstrap.
+ * 
+ * @see _theme_load_registry()
+ *
+ * @return boolean
+ */
+function module_is_loaded_all() {
+  // Look for an arbitrary function within a required module.
+  return function_exists('system_menu');
+}
 
 /**
  * Collect a list of all loaded modules. During the bootstrap, return only
diff --git includes/theme.inc includes/theme.inc
index 65fefe2..fe061be 100644
--- includes/theme.inc
+++ includes/theme.inc
@@ -251,13 +251,18 @@ function _theme_load_registry($theme, $base_theme = NULL, $theme_engine = NULL)
   $cache = cache_get("theme_registry:$theme->name", 'cache');
   if (isset($cache->data)) {
     $registry = $cache->data;
+    _theme_set_registry($registry);
   }
   else {
     // If not, build one and cache it.
     $registry = _theme_build_registry($theme, $base_theme, $theme_engine);
-    _theme_save_registry($theme, $registry);
+   // Only persist this registry if all modules are loaded. This assures a 
+   // complete set of theme hooks.
+    if (module_is_loaded_all()) {
+      _theme_save_registry($theme, $registry);
+      _theme_set_registry($registry);
+    }
   }
-  _theme_set_registry($registry);
 }
 
 /**
