diff --git a/alpha/includes/alpha.inc b/alpha/includes/alpha.inc
index b4be3e2..5f6d9d5 100644
--- a/alpha/includes/alpha.inc
+++ b/alpha/includes/alpha.inc
@@ -87,19 +87,20 @@ function alpha_region_get_setting($name, $region, $default = NULL, $theme = NULL
  *   Handed by reference.
  */
 function alpha_invoke($type, $hook, &$vars) {
-  $theme = alpha_get_theme();
+  static $hooks;
+  if (!isset($hooks)) {
+    $hooks = theme_get_registry(FALSE);
+  }
+
+  if (!isset($hooks[$hook]['alpha invoke'][$type])) {
+    return;
+  }
 
-  // If one of the themes in the theme trail implements this hook
-  // include the corresponding .inc file and call the associated function.
-  foreach (alpha_theme_trail($theme->theme) as $key => $name) {
-    $function = $key . '_alpha_' . $type . '_' . $hook;
+  foreach ($hooks[$hook]['alpha invoke'][$type] as $processor) {
+    $function = $processor['function'];
 
     if (!function_exists($function)) {
-      $file = drupal_get_path('theme', $key) . '/' . $type . '/' . $type . '-' . str_replace('_', '-', $hook) . '.inc';
-
-      if (is_file($file)) {
-        include $file;
-      }
+      include DRUPAL_ROOT . '/' . $processor['file'];
     }
 
     if (function_exists($function)) {
diff --git a/alpha/template.php b/alpha/template.php
index 6dda153..7f55686 100644
--- a/alpha/template.php
+++ b/alpha/template.php
@@ -53,6 +53,33 @@ function alpha_theme($existing, $type, $theme, $path) {
 }
 
 /**
+ * Implements hook_theme_registry_alter().
+ */
+function alpha_theme_registry_alter(&$theme_registry) {
+  $theme = alpha_get_theme();
+
+  foreach ($theme_registry as $hook => $info) {
+    foreach (array('preprocess', 'process') as $type) {
+      if (in_array('alpha_' . $type, $info[$type . ' functions'])) {
+        // If one of the themes in the theme trail implements this hook add the
+        // corresponding processor file and function for alpha_invoke().
+        foreach (alpha_theme_trail($theme->theme) as $key => $name) {
+          $function = $key . '_alpha_' . $type . '_' . $hook;
+          $file = drupal_get_path('theme', $key) . '/' . $type . '/' . $type . '-' . str_replace('_', '-', $hook) . '.inc';
+
+          if (function_exists($function) || is_file(DRUPAL_ROOT . '/' . $file)) {
+            $theme_registry[$hook]['alpha invoke'][$type][$key] = array(
+              'function' => $function,
+              'file' => $file,
+            );
+          }
+        }
+      }
+    }
+  }
+}
+
+/**
  * Implements hook_preprocess().
  */
 function alpha_preprocess(&$vars, $hook) {
