Index: wp-includes/theme.php
===================================================================
--- wp-includes/theme.php	(revision 15654)
+++ wp-includes/theme.php	(working copy)
@@ -352,10 +352,35 @@
 		if ( $stylesheet_dir ) {
 			while ( ($file = $stylesheet_dir->read()) !== false ) {
 				if ( !preg_match('|^\.+$|', $file) ) {
-					if ( preg_match('|\.css$|', $file) )
+					if ( preg_match('|\.css$|', $file) ) {
 						$stylesheet_files[] = "$theme_root/$stylesheet/$file";
-					elseif ( preg_match('|\.php$|', $file) )
+					} elseif ( preg_match('|\.php$|', $file) ) {
 						$template_files[] = "$theme_root/$stylesheet/$file";
+					} elseif ( is_dir("$theme_root/$stylesheet/$file") ) {
+						$stylesheet_subdir = @ dir("$theme_root/$stylesheet/$file");
+						if ( !$stylesheet_subdir )
+							continue;
+						while ( ($subfile = $stylesheet_subdir->read()) !== false ) {
+							if ( preg_match('|^\.+$|', $subfile) )
+								continue;
+							if ( preg_match('|\.php$|', $subfile) ) {
+								$template_files[] = "$theme_root/$stylesheet/$file/$subfile";
+							}
+							elseif ( is_dir("$theme_root/$stylesheet/$file/$subfile") ) {
+								$stylesheet_subdir_subdir = @ dir("$theme_root/$stylesheet/$file/$subfile");
+								if ( !$stylesheet_subdir_subdir )
+									continue;
+								while ( ($sub_subfile = $stylesheet_subdir_subdir->read()) !== false ) {
+									if ( preg_match('|^\.+$|', $sub_subfile) )
+										continue;
+									if ( preg_match('|\.php$|', $sub_subfile) )
+										$template_files[] = "$theme_root/$stylesheet/$file/$subfile/$sub_subfile";
+								}
+								@ $stylesheet_subdir_subdir->close();
+							}
+						}
+						@ $stylesheet_subdir->close();
+					}
 				}
 			}
 			@ $stylesheet_dir->close();
@@ -375,11 +400,24 @@
 					while ( ($subfile = $template_subdir->read()) !== false ) {
 						if ( preg_match('|^\.+$|', $subfile) )
 							continue;
-						if ( preg_match('|\.php$|', $subfile) )
+						if ( preg_match('|\.php$|', $subfile) ) {
 							$template_files[] = "$template_directory/$file/$subfile";
+						}
+						elseif ( is_dir("$template_directory/$file/$subfile") ) {
+							$template_subdir_subdir = @ dir("$template_directory/$file/$subfile");
+							if ( !$template_subdir_subdir )
+								continue;
+							while ( ($sub_subfile = $template_subdir_subdir->read()) !== false ) {
+								if ( preg_match('|^\.+$|', $sub_subfile) )
+									continue;
+								if ( preg_match('|\.php$|', $sub_subfile) )
+									$template_files[] = "$template_directory/$file/$subfile/$sub_subfile";
+							}
+							@ $template_subdir_subdir->close();
+						}
 					}
 					@ $template_subdir->close();
-				}
+				} 
 			}
 			@ $template_dir->close();
 		}
Index: wp-admin/includes/theme.php
===================================================================
--- wp-admin/includes/theme.php	(revision 15654)
+++ wp-admin/includes/theme.php	(working copy)
@@ -175,10 +175,6 @@
 		foreach ( $templates as $template ) {
 			$basename = str_replace($base, '', $template);
 
-			// don't allow template files in subdirectories
-			if ( false !== strpos($basename, '/') )
-				continue;
-
 			$template_data = implode( '', file( $template ));
 
 			$name = '';
