Index: template-loader.php
===================================================================
--- template-loader.php	(revision 12905)
+++ template-loader.php	(working copy)
@@ -36,6 +36,9 @@
 	} else if ( is_page() && $template = get_page_template() ) {
 		include($template);
 		return;
+	} else if ( is_singular() && $template = get_page_template() ) {
+		include( $template );
+		return;
 	} else if ( is_category() && $template = get_category_template()) {
 		include($template);
 		return;
Index: theme.php
===================================================================
--- theme.php	(revision 12905)
+++ theme.php	(working copy)
@@ -895,6 +895,27 @@
 }
 
 /**
+ * Retrieve the path of the singular template in current or parent template.
+ *
+ * @since 0.3
+ *
+ * @return string
+ */
+function get_singular_template() {
+ 	global $wp_query; 
+
+ 	$id = (int) $wp_query->post->ID;
+
+ 	$templates = array(); 
+ 	$templates[] = "{$wp_query->post->post_type}-{$wp_query->post->post_name}.php"; 
+ 	$templates[] = "{$wp_query->post->post_type}-{$id}.php"; 
+ 	$templates[] = "{$wp_query->post->post_type}.php"; 
+ 	$templates[] = "singular.php";
+
+ 	return apply_filters( 'singular_template', locate_template( $templates ) ); 
+}
+
+/**
  * Retrieve path of attachment template in current or parent template.
  *
  * The attachment path first checks if the first part of the mime type exists.
