Index: template.php
===================================================================
--- template.php	(revision 38766)
+++ template.php	(working copy)
@@ -539,23 +539,43 @@
  */
 function locate_template($template_names, $load = false, $require_once = true ) {
 	$located = '';
+    $locations = array(  
+    	get_stylesheet_directory(),  
+		get_template_directory()  
+	);  
+
+	/**  
+	 * Filter the possible template locations.  
+	 *  
+	 * @param array $locations Possible template locations.  
+	 */  
+	$locations = apply_filters( 'template_locations', $locations );  
+  
 	foreach ( (array) $template_names as $template_name ) {
-		if ( !$template_name )
+		if ( !$template_name ) {
 			continue;
-		if ( file_exists(STYLESHEETPATH . '/' . $template_name)) {
-			$located = STYLESHEETPATH . '/' . $template_name;
-			break;
-		} elseif ( file_exists(TEMPLATEPATH . '/' . $template_name) ) {
-			$located = TEMPLATEPATH . '/' . $template_name;
-			break;
-		} elseif ( file_exists( ABSPATH . WPINC . '/theme-compat/' . $template_name ) ) {
-			$located = ABSPATH . WPINC . '/theme-compat/' . $template_name;
-			break;
 		}
+
+		foreach ( (array) $locations as $location ) {  
+			$template = trailingslashit( $location ) . $template_name;  
+			if ( file_exists( $template ) {  
+				$located = $template;  
+				break;  
+			}  
+		}
 	}
 
-	if ( $load && '' != $located )
+	/**  
+	 * Filter the set template location  
+	 *  
+	 * @param	string	$located Generated template location.  
+	 * @param	array 	$templates_names Possible template names.  
+	 */  
+	$located = apply_filters( 'locate_template', $located, $template_names );
+
+	if ( $load && '' != $located ) {
 		load_template( $located, $require_once );
+	}
 
 	return $located;
 }
