Index: wp-includes/theme.php
===================================================================
--- wp-includes/theme.php	(revision 15605)
+++ wp-includes/theme.php	(working copy)
@@ -375,8 +375,22 @@
 					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";
+						}
+						// Let's go a second level deep, for good measure (and to play nice with well-organized theme frameworks)
+						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();
 				}
Index: wp-admin/includes/theme.php
===================================================================
--- wp-admin/includes/theme.php	(revision 15605)
+++ 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 = '';
@@ -190,8 +186,8 @@
 			}
 		}
 	}
-
-	return $page_templates;
+	
+	return apply_filters( 'available_page_templates', $page_templates );
 }
 
 /**
