diff --git a/includes/theme.inc b/includes/theme.inc
index 67cbe85..30049ea 100644
--- a/includes/theme.inc
+++ b/includes/theme.inc
@@ -996,12 +996,16 @@ function drupal_find_theme_functions($cache, $prefixes) {
         if ($matches) {
           foreach ($matches as $match) {
             $new_hook = str_replace($prefix . '_', '', $match);
-            $arg_name = isset($info['variables']) ? 'variables' : 'render element';
             $implementations[$new_hook] = array(
-              'function' => $match,
-              $arg_name => $info[$arg_name],
+              'function'  => $match,
               'base hook' => $hook,
             );
+            // Copy required meta from base hook.
+            foreach (array('render element', 'variables', 'includes') as $info_key) {
+              if (isset($info[$info_key])) {
+                $implementations[$new_hook][$info_key] = $info[$info_key];
+              }
+            }
           }
         }
       }
@@ -1098,13 +1102,18 @@ function drupal_find_theme_templates($cache, $extension, $path) {
         foreach ($matches as $match) {
           $file = substr($match, 0, strpos($match, '.'));
           // Put the underscores back in for the hook name and register this pattern.
-          $arg_name = isset($info['variables']) ? 'variables' : 'render element';
-          $implementations[strtr($file, '-', '_')] = array(
+          $new_hook = strtr($file, '-', '_');
+          $implementations[$new_hook] = array(
             'template' => $file,
             'path' => dirname($files[$match]->uri),
-            $arg_name => $info[$arg_name],
             'base hook' => $hook,
           );
+          // Copy required meta from base hook.
+          foreach (array('render element', 'variables', 'includes') as $info_key) {
+            if (isset($info[$info_key])) {
+              $implementations[$new_hook][$info_key] = $info[$info_key];
+            }
+          }
         }
       }
     }
diff --git a/modules/simpletest/tests/theme.test b/modules/simpletest/tests/theme.test
index d0ad77d..916d3b6 100644
--- a/modules/simpletest/tests/theme.test
+++ b/modules/simpletest/tests/theme.test
@@ -53,6 +53,14 @@ class ThemeUnitTest extends DrupalWebTestCase {
   }
 
   /**
+  * Preprocess functions for the base hook should run even for suggestion implementations.
+  */
+  function testPreprocessForSuggestionsIncluded() {
+    $this->drupalGet('theme-test/suggestion/include');
+    $this->assertText('test_theme_indentation__suggestion_include: 1', t('Theme hook suggestion ran with data available from a preprocess function for the base hook in an include.'));
+  }
+
+  /**
    * Ensure page-front template suggestion is added when on front page.
    */
   function testFrontPageThemeSuggestion() {
diff --git a/modules/simpletest/tests/theme_test.module b/modules/simpletest/tests/theme_test.module
index 160d192..ea07849 100644
--- a/modules/simpletest/tests/theme_test.module
+++ b/modules/simpletest/tests/theme_test.module
@@ -11,6 +11,13 @@ function theme_test_menu() {
     'theme callback' => '_theme_custom_theme',
     'type' => MENU_CALLBACK,
   );
+  $items['theme-test/suggestion/include'] = array(
+    'title' => 'Suggestion - from include',
+    'page callback' => '_theme_test_suggestion_include',
+    'access arguments' => array('access content'),
+    'theme callback' => '_theme_custom_theme',
+    'type' => MENU_CALLBACK,
+  );
   $items['theme-test/alter'] = array(
     'title' => 'Suggestion',
     'page callback' => '_theme_test_alter',
@@ -27,6 +34,15 @@ function theme_test_menu() {
 }
 
 /**
+ * Implements hook_theme_registry_alter().
+ */
+function theme_test_theme_registry_alter(&$theme_registry) {
+  // This is a slightly hacky way to get our preprocessor registered.
+  $theme_registry['indentation']['preprocess functions'][] = 'theme_test_preprocess_indentation';
+  $theme_registry['indentation']['includes'][] = drupal_get_path('module', 'theme_test') . '/theme_test.inc';
+}
+
+/**
  * Implements hook_init().
  */
 function theme_test_init() {
@@ -97,6 +113,13 @@ function _theme_test_suggestion() {
 }
 
 /**
+ * Page callback, calls a theme hook suggestion.
+ */
+function _theme_test_suggestion_include() {
+  return theme(array('indentation__suggestion_include', 'indentation'), array());
+}
+
+/**
  * Implements hook_preprocess_breadcrumb().
  *
  * Set a variable that can later be tested to see if this function ran.
diff --git a/themes/tests/test_theme/template.php b/themes/tests/test_theme/template.php
index ef8118a..23afd60 100644
--- a/themes/tests/test_theme/template.php
+++ b/themes/tests/test_theme/template.php
@@ -10,6 +10,15 @@ function test_theme_breadcrumb__suggestion($variables) {
 }
 
 /**
+ * Tests a preprocess hook in an include for a template suggestion.
+ */
+function test_theme_indentation__suggestion_include($variables) {
+  // Tests that preprocess functions for the base theme hook get called even
+  // when the suggestion has an implementation in an include file.
+  return 'test_theme_indentation__suggestion_include: ' . $variables['theme_test_preprocess_indentation'];
+}
+
+/**
  * Tests a theme implementing an alter hook.
  *
  * The confusing function name here is due to this being an implementation of
