Index: wp-includes/template-loader.php
===================================================================
--- wp-includes/template-loader.php	(revision 11556)
+++ wp-includes/template-loader.php	(working copy)
@@ -23,6 +23,9 @@
 	} else if ( is_tax() && $template = get_taxonomy_template()) {
 		include($template);
 		return;
+	} else if ( is_front_page() && !is_home() && $template = get_front_page_template() ) {
+		include($template);
+		return;
 	} else if ( is_home() && $template = get_home_template() ) {
 		include($template);
 		return;
@@ -75,4 +78,4 @@
 	}
 }
 
-?>
\ No newline at end of file
+?>
Index: wp-includes/theme.php
===================================================================
--- wp-includes/theme.php	(revision 11556)
+++ wp-includes/theme.php	(working copy)
@@ -675,11 +675,47 @@
  * @return string
  */
 function get_home_template() {
-	$template = locate_template(array('home.php', 'index.php'));
-	return apply_filters('home_template', $template);
+	$templates = array();
+	if ( is_front_page() )
+		$templates[] = 'front-page.php';
+	$templates[] = 'home.php';
+	$templates[] = 'index.php';
+	return apply_filters('home_template', locate_template($templates));
 }
 
 /**
+ * Retrieve path of front-page template in current or parent template.
+ *
+ * First attempt is to look for the file in the '_wp_page_template' page meta
+ * data. The second attempt, if the first does not have a file or it's empty, 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 2.9.0
+ * @uses apply_filters() Calls 'front_page_template' on file path of template.
+ *
+ * @return string
+ */
+function get_front_page_template() {
+	global $wp_query;
+
+	$id = (int) $wp_query->post->ID;
+	$template = get_post_meta($id, '_wp_page_template', true);
+
+	if ( 'default' == $template )
+		$template = '';
+
+	$templates = array();
+	if ( !empty($template) && !validate_file($template) )
+		$templates[] = $template;
+
+	$templates[] = "front-page.php";
+	$templates[] = "page.php";
+
+	return apply_filters('front_page_template', locate_template($templates));
+}
+
+/**
  * Retrieve path of page template in current or parent template.
  *
  * First attempt is to look for the file in the '_wp_page_template' page meta
