Index: includes/theme.inc
===================================================================
RCS file: /cvs/drupal/drupal/includes/theme.inc,v
retrieving revision 1.409
diff -u -p -r1.409 theme.inc
--- includes/theme.inc	9 Jan 2008 22:01:29 -0000	1.409
+++ includes/theme.inc	9 Jan 2008 23:27:26 -0000
@@ -757,13 +757,14 @@ function drupal_find_theme_templates($ca
   // Escape the periods in the extension.
   $regex = str_replace('.', '\.', $extension) .'$';
 
-  // Collect sub-themes for the current theme. This allows base themes to have
-  // sub-themes in its folder hierarchy without affecting the base theme.
+  // Collect a list of themes directories not owned by the current theme.
+  // This is to prevent the active base theme from reading sub-theme templates
+  // when they are placed in a sub-directory of the base theme.
   global $theme;
-  $sub_themes = array();
+  $filter_list = array();
   foreach (list_themes() as $theme_info) {
-    if (!empty($theme_info->base_theme) && $theme_info->base_theme == $theme) {
-      $sub_themes[] = dirname($theme_info->filename);
+    if ($theme_info->name != $theme) {
+      $filter_list[] = dirname($theme_info->filename);
     }
   }
 
@@ -771,8 +772,8 @@ function drupal_find_theme_templates($ca
   // templates separately from checking for patterns.
   $files = drupal_system_listing($regex, $path, 'name', 0);
   foreach ($files as $template => $file) {
-    // Catch sub-themes and skip.
-    if (strpos($file->filename, str_replace($sub_themes, '', $file->filename)) !== 0) {
+    // Filter out templates in sub-directories not owned by the current theme.
+    if (strpos($file->filename, str_replace($filter_list, '', $file->filename)) !== 0) {
       continue;
     }
     // Chop off the remaining extensions if there are any. $template already
