Index: bp-core/bp-core-template-loader.php
===================================================================
--- bp-core/bp-core-template-loader.php
+++ bp-core/bp-core-template-loader.php
@@ -46,9 +46,9 @@ function bp_get_template_part( $slug, $name = null ) {
 /**
  * Retrieve the name of the highest priority template file that exists.
  *
- * Searches in the STYLESHEETPATH before TEMPLATEPATH so that themes which
- * inherit from a parent theme can just overload one file. If the template is
- * not found in either of those, it looks in the theme-compat folder last.
+ * Searches in the current theme's folder (child or parent) to see if a
+ * template was overriden. If the template is not found in the current theme,
+ * it uses our theme-compat template last.
  *
  * @since BuddyPress (1.7)
  *
@@ -72,27 +72,32 @@ function bp_locate_template( $template_names, $load = false, $require_once = tru
 
 		// Trim off any slashes from the template name
 		$template_name = ltrim( $template_name, '/' );
-		$child_theme    = get_stylesheet_directory();
-		$parent_theme   = get_template_directory();
 		$fallback_theme = bp_get_theme_compat_dir();
 
-		// Check child theme first
-		if ( file_exists( trailingslashit( $child_theme ) . $template_name ) ) {
-			$located = trailingslashit( $child_theme ) . $template_name;
-			break;
+		// Use locate_template() to check the current theme (both child and parent)
+		// for a BP template
+		$located = locate_template( (array) $template_name );
 
-		// Check parent theme next
-		} elseif ( file_exists( trailingslashit( $parent_theme ) . $template_name ) ) {
-			$located = trailingslashit( $child_theme ) . $template_name;
+		// we've located a template in the current theme, so stop!
+		if ( ! empty( $located ) ) {
 			break;
 
-		// Check theme compatibility last
-		} elseif ( file_exists( trailingslashit( $fallback_theme ) . $template_name ) ) {
-			$located = trailingslashit( $fallback_theme ) . $template_name;
-			break;
+		// if no override template, use theme compatibility template last
+		} else {
+			// 3rd-party plugin devs can hook into the 'bp_locate_fallback_template' filter to load custom templates if desired
+			$fallback_template = apply_filters( 'bp_locate_fallback_template', trailingslashit( $fallback_theme ) . $template_name, $template_name );
+
+			if ( file_exists( $fallback_template ) ) {
+				$located = $fallback_template;
+				break;
+			}
 		}
+
 	}
 
+	// one final filter just in case someone wants to go crazy and override a theme's template from a plugin!
+	$located = apply_filters( 'bp_locate_template', $located, $template_names );
+
 	if ( ( true == $load ) && !empty( $located ) )
 		load_template( $located, $require_once );
 
@@ -188,7 +193,7 @@ function bp_get_template_locations( $templates = array() ) {
  * @since BuddyPress (1.7)
  *
  * @param array $templates
- * @return array() 
+ * @return array()
  */
 function bp_add_template_locations( $templates = array() ) {
 	$retval = array();
@@ -234,7 +239,7 @@ function bp_parse_query( $posts_query ) {
  *
  * Listens to the 'template_include' filter and waits for any BuddyPress specific
  * template condition to be met. If one is met and the template file exists,
- * it will be used; otherwise 
+ * it will be used; otherwise
  *
  * Note that the _edit() checks are ahead of their counterparts, to prevent them
  * from being stomped on accident.
