Index: wp-admin/includes/theme.php
===================================================================
--- wp-admin/includes/theme.php	(revision 6755)
+++ wp-admin/includes/theme.php	(working copy)
@@ -42,7 +42,7 @@
 			$description = $description[1];
 
 			if ( !empty( $name ) ) {
-				$page_templates[trim( $name )] = basename( $template );
+				$page_templates[trim( $name )] = theme_basename( $template );
 			}
 		}
 	}
Index: wp-includes/theme.php
===================================================================
--- wp-includes/theme.php	(revision 6755)
+++ wp-includes/theme.php	(working copy)
@@ -239,16 +238,30 @@
 					$stylesheet_files[] = "$theme_loc/$stylesheet/$file";
 			}
 		}
+		@ $stylesheet_dir->close();
 
 		$template_files = array();
 		$template_dir = @ dir("$theme_root/$template");
 		if ( $template_dir ) {
 			while(($file = $template_dir->read()) !== false) {
-				if ( !preg_match('|^\.+$|', $file) && preg_match('|\.php$|', $file) )
+				if( preg_match('|^\.+$|', $file) )
+					continue;
+				if ( preg_match('|\.php$|', $file) ) {
 					$template_files[] = "$theme_loc/$template/$file";
+				} elseif ( is_dir("$theme_root/$template/$file") ){
+					$template_subdir = @ dir("$theme_root/$template/$file");
+					while(($subfile = $template_subdir->read()) !== false) {
+						if( preg_match('|^\.+$|', $file) )
+							continue;
+						if ( preg_match('|\.php$|', $subfile) )
+							$template_files[] = "$theme_loc/$template/$file/$subfile";
+					}
+					@ $template_subdir->close();
+				}
 			}
 		}
-
+		@ $template_dir->close();
+			
 		$template_dir = dirname($template_files[0]);
 		$stylesheet_dir = dirname($stylesheet_files[0]);
 
@@ -563,4 +575,25 @@
 	add_action('admin_menu', array(&$GLOBALS['custom_image_header'], 'init'));
 }
 
+/**
+ * theme_basename() - Gets the basename of a theme.
+ *
+ * This method extracts the filename of a theme file from a path
+ *
+ * @package WordPress
+ * @subpackage Plugin
+ * @since 2.4
+ *
+ * @access private
+ *
+ * @param string $file The filename of a theme file
+ * @return string The filename relitive to the themes folder
+ */
+function theme_basename($file) {
+	$file = str_replace('\\','/',$file); // sanitize for Win32 installs
+	$file = preg_replace('|/+|','/', $file); // remove any duplicate slash
+	$file = preg_replace('|^.*/themes/.*?/|','',$file); // get relative path from theme dir
+	return $file;
+}
+
 ?>
