Index: wp-includes/template-loader.php
===================================================================
--- wp-includes/template-loader.php	(revision 11564)
+++ wp-includes/template-loader.php	(working copy)
@@ -26,6 +26,9 @@
 	} else if ( is_home() && $template = get_home_template() ) {
 		include($template);
 		return;
+	} else if ( is_front_page() && $template = get_front_page_template() ) {
+		include($template);
+		return;
 	} else if ( is_attachment() && $template = get_attachment_template() ) {
 		remove_filter('the_content', 'prepend_attachment');
 		include($template);
@@ -75,4 +78,4 @@
 	}
 }
 
-?>
\ No newline at end of file
+?>
Index: wp-includes/theme.php
===================================================================
--- wp-includes/theme.php	(revision 11564)
+++ wp-includes/theme.php	(working copy)
@@ -680,6 +680,38 @@
 }
 
 /**
+ * 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
