Index: wp-includes/template-loader.php
===================================================================
--- wp-includes/template-loader.php	(revision 13536)
+++ wp-includes/template-loader.php	(working copy)
@@ -23,6 +23,7 @@
 	if     ( is_404()            && $template = get_404_template()            ) :
 	elseif ( is_search()         && $template = get_search_template()         ) :
 	elseif ( is_tax()            && $template = get_taxonomy_template()       ) :
+	elseif ( is_front_page()     && $template = get_front_page_template()     ) :
 	elseif ( is_home()           && $template = get_home_template()           ) :
 	elseif ( is_attachment()     && $template = get_attachment_template()     ) :
 		remove_filter('the_content', 'prepend_attachment');
@@ -43,4 +44,4 @@
 	return;
 endif;
 
-?>
\ No newline at end of file
+?>
Index: wp-includes/theme.php
===================================================================
--- wp-includes/theme.php	(revision 13536)
+++ wp-includes/theme.php	(working copy)
@@ -847,6 +847,36 @@
 }
 
 /**
+ * Retrieve path of front-page template in current or parent template.
+ *
+ * First attempt is to look for a page specific template either based on 
+ * the '_wp_page_template' page meta, the page slug and the page id.
+ * The second attempt is to look for 'front-page.php' before falling back
+ * to 'page.php' and ultimately falling back to 'index.php' if none of
+ * these exist.
+ *
+ * @since 3.0.0
+ * @uses apply_filters() Calls 'front_page_template' on file path of template.
+ *
+ * @return string
+ */
+function get_front_page_template() {
+	global $wp_query;
+
+	$templates = array();
+	$templates[] = "front-page.php";
+
+	// If we are showing a page on the front give priority to the page specific templates.
+	if ( 'page' == get_option('show_on_front') ) {
+		$templates[] = basename(get_page_template());
+	} else if ( 'posts' == get_option('show_on_front') ) {
+		$templates[] = basename(get_home_template());
+	}
+
+	return apply_filters('front_page_template', locate_template($templates));
+}
+
+/**
  * Retrieve path of page template in current or parent template.
  *
  * Will first look for the specifically assigned page template
@@ -983,6 +1013,8 @@
 
 	$located = '';
 	foreach ( $template_names as $template_name ) {
+		if ( !$template_name )
+			continue;
 		if ( file_exists(STYLESHEETPATH . '/' . $template_name)) {
 			$located = STYLESHEETPATH . '/' . $template_name;
 			break;
