diff --git a/alpha/includes/alpha.inc b/alpha/includes/alpha.inc
index bf04b4e..56f4657 100644
--- a/alpha/includes/alpha.inc
+++ b/alpha/includes/alpha.inc
@@ -92,22 +92,44 @@ function alpha_region_get_setting($name, $region, $default = NULL, $theme = NULL
  *   Handed by reference.
  */
 function alpha_invoke($type, $hook, &$vars) {
-  $theme = alpha_get_theme();
-  
-  // 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;
-    
-    if (!function_exists($function)) {
-      $file = drupal_get_path('theme', $key) . '/' . $type . '/' . $type . '-' . str_replace('_', '-', $hook) . '.inc';
-      
-      if (is_file($file)) {
-        include $file;
+  $cache_data = &drupal_static(__FUNCTION__);
+
+  if (!isset($cache_data)) {
+    $cache = cache_get('alpha:alpha:invoke');
+    $cache_data =  isset($cache->data) ? $cache->data : array();
+  }
+
+  if (!isset($cache_data[$type][$hook])) {
+    $theme = alpha_get_theme();
+
+    // 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;
+
+      if (!function_exists($function)) {
+        $file = drupal_get_path('theme', $key) . '/' . $type . '/' . $type . '-' . str_replace('_', '-', $hook) . '.inc';
+
+        if (is_file($file)) {
+          $cache_data[$type][$hook]['files'][$key] = $file;
+        }
+      }
+      else {
+        $cache_data[$type][$hook]['functions'][$key] = $function;
       }
     }
-    
-    if (function_exists($function)) {
+
+    $cache_data[$type][$hook]['processed'] = TRUE;
+    cache_set('alpha:alpha:invoke', $cache_data, 'cache');
+  }
+
+  if (isset($cache_data[$type][$hook]['files'])) {
+    foreach ($cache_data[$type][$hook]['files'] as $file) {
+      include $file;
+    }
+  }
+  if (isset($cache_data[$type][$hook]['functions'])) {
+    foreach ($cache_data[$type][$hook]['functions'] as $function) {
       $function($vars);
     }
   }
