diff --git HexagonBase/includes/alter/theme_registry.alter.inc HexagonBase/includes/alter/theme_registry.alter.inc
index 2a7ace9..f679a49 100644
--- HexagonBase/includes/alter/theme_registry.alter.inc
+++ HexagonBase/includes/alter/theme_registry.alter.inc
@@ -171,10 +171,6 @@ function hex_theme_registry_hex_alter(&$registry) {
     //    hex_variable_process_suggestion) which handles the invocation of the
     //    remaining processors for the suggestion.
 
-    if ($hex_info->base_hook) {
-      $hook_info['base'] = $hex_info->base_hook;
-    }
-
     foreach (array('preprocess', 'process') as $phase) {
       foreach ($hex_info->suggestions as $suggestion) {
         $suggestion_info = &$registry[$suggestion];
@@ -191,11 +187,11 @@ function hex_theme_registry_hex_alter(&$registry) {
         $ignore[] = 'hex_variable_include_process';
         foreach ($hook_info["$phase functions"] as $i => $phase_function) {
           if (!in_array($phase_function, $ignore)) {
-            $suggestion_info["$phase base diff"][] = $i;
+            $suggestion_info["base $phase functions"][] = $phase_function;
           }
         }
 
-        if (!empty($suggestion_info["$phase base diff"])) {
+        if (!empty($suggestion_info["base $phase functions"])) {
           if (!isset($suggestion_info['includes'])) {
             $suggestion_info['includes'] = array();
           }
@@ -209,6 +205,13 @@ function hex_theme_registry_hex_alter(&$registry) {
       }
     }
 
+    // Inherit includes from base hook for patterns.
+    if (!$hex_info->is_base
+    &&  isset($registry[$hex_info->base_hook]['includes'])
+    &&  $diff = array_diff($registry[$hex_info->base_hook]['includes'], $hook_includes)) {
+      $hook_includes = array_merge($diff, $hook_includes);
+    }
+
     // Optimize the registry.
     foreach (array('includes', 'vars includes', 'preprocess functions', 'process functions') as $key) {
       if (empty($hook_info[$key])) {
@@ -317,16 +320,11 @@ function hex_hook_info($registry, $theme_hook) {
  *  - New hooks based on variable process functions.
  *  - New hooks based on .vars.inc files.
  *  - Pattern based preprocess and process function connected to the new hook.
- *  - Inherits includes, preprocess and process functions from a base hook to
- *    the derivative hook pattern.
- *
- * It also removes the 'base hook' from the registry due to the poor way core
- * handles it in the theme() function.
  */
 function hex_theme_registry_fill(&$registry) {
-  
+
   $hook_origins = hex_get_theme_hook_origins();
-  
+
   // Register hooks based on variable process functions and .vars.inc files.
   // All user defined functions.
   list(, $user_func) = array_values(get_defined_functions());
diff --git HexagonBase/includes/vars_processors.inc HexagonBase/includes/vars_processors.inc
index d2acef4..c1e93d6 100644
--- HexagonBase/includes/vars_processors.inc
+++ HexagonBase/includes/vars_processors.inc
@@ -90,6 +90,10 @@ function hex_suggestion_processors($hook, $suggestion, $phase) {
   $processor_list = array();
 
   if ($hook !== $suggestion) {
+    foreach ((array) hex_theme_hook_info($suggestion, 'includes') as $include_file) {
+      include_once DRUPAL_ROOT . '/' . $include_file;
+    }
+
     foreach ((array) hex_theme_hook_info($suggestion, "{$phase} functions") as $processor) {
       if ($processor !== "hex_variable_{$phase}_base" && function_exists($processor)) {
         $processor_list[] = $processor;
@@ -103,60 +107,25 @@ function hex_suggestion_processors($hook, $suggestion, $phase) {
 /**
  * This is only used for pattern based hooks or "hook suggestions" since they
  * do not carry a full set of variable processor functions.
- *
- * @see hex_base_processors()
  */
 function hex_variable_preprocess_base(&$variables, $hook) {
-  static $processors;
-
-  if (!isset($processors[$hook])) {
-    $processors[$hook] = hex_base_processors($hook, 'preprocess');
-  }
-  foreach ($processors[$hook] as $processor) {
-    $processor($variables, $hook);
+  foreach (hex_theme_hook_info($hook, "base preprocess functions") as $processor) {
+    if (function_exists($processor)) {
+      $processor($variables, $hook);
+    }
   }
 }
 
 /**
  * This is only used for pattern based hooks or "hook suggestions" since they
  * do not carry a full set of variable processor functions.
- *
- * @see hex_base_processors()
  */
 function hex_variable_process_base(&$variables, $hook) {
-  static $processors;
-
-  if (!isset($processors[$hook])) {
-    $processors[$hook] = hex_base_processors($hook, 'process');
-  }
-  foreach ($processors[$hook] as $processor) {
-    $processor($variables, $hook);
-  }
-}
-
-/**
- * When the variable processors for the base hook is detected, it will return
- * the difference between the base and the suggestion. The caller will fill in
- * the gaps effectively running the full set of processors.
- *
- * @see hex_variable_preprocess_base()
- * @see hex_variable_process_base()
- */
-function hex_base_processors($hook, $phase) {
-  $processor_list = array();
-  $base = hex_theme_hook_info($hook, 'base');
-
-  if (hex_theme_hook_info($hook, "{$phase} base diff")
-  &&  $processors = hex_theme_hook_info($base, "{$phase} functions")) {
-
-    foreach (hex_theme_hook_info($hook, "{$phase} base diff") as $i) {
-      if (function_exists($processors[$i])) {
-        $processor_list[] = $processors[$i];
-      }
+  foreach (hex_theme_hook_info($hook, "base process functions") as $processor) {
+    if (function_exists($processor)) {
+      $processor($variables, $hook);
     }
   }
-
-  return $processor_list;
 }
 
 /**

