Index: bp-themes/bp-default/members/single/home.php
===================================================================
--- bp-themes/bp-default/members/single/home.php	(revision 3275)
+++ bp-themes/bp-default/members/single/home.php	(working copy)
@@ -23,7 +23,7 @@
 				<?php do_action( 'bp_before_member_body' ) ?>
 
 				<?php if ( bp_is_user_activity() || !bp_current_component() ) : ?>
-					<?php locate_template( array( 'members/single/activity.php' ), true ) ?>
+					<?php bp_load_template( array( 'members/single/activity.php' ) ) ?>
 
 				<?php elseif ( bp_is_user_blogs() ) : ?>
 					<?php locate_template( array( 'members/single/blogs.php' ), true ) ?>
Index: bp-core/bp-core-catchuri.php
===================================================================
--- bp-core/bp-core-catchuri.php	(revision 3275)
+++ bp-core/bp-core-catchuri.php	(working copy)
@@ -246,6 +246,68 @@
 }
 
 /**
+ * Includes, into page output, a template file. To be used within a template included by bp_core_load_template().
+ *
+ * If the requested template follows the BuddyPress core theme file structure, for example "[groups]/[single]/file.php"
+ * i.e. being a file of a registered root component underneath its "single" folder, we'll also try to match against a version
+ * of that template path suffixed with the identifier of the object of the current component.
+ *
+ * For example, on pages of a group named "snugglewugglepants", we'd look for "groups/single/file-snugglewugglepants.php"
+ * as well as plain-old "groups/single/file.php".
+ *
+ * Underneath the member page hierarchy, the user's login name is used, e.g. "members/single/page-admin.php" for the admin user.
+ *
+ * @global object $bp BuddyPress global settings
+ * @param array $templates Requested templates, in priority order
+ * @see bp_core_add_root_component()
+ * @see bp_core_load_template()
+ * @since 2.0
+ */
+function bp_load_template( $templates ) {
+	global $bp;
+
+	$alternative_templates = array();
+
+	foreach ( $templates as $template ) {
+		$uri = explode( '/', $template );
+		$uri_size = count( $uri );
+
+		if ( !is_array( $uri ) || $uri_size < 2 )
+			continue;
+
+		if ( '/' == $uri[0] ) {
+			unset( $uri[0] );
+			$uri = array_merge( $uri, array() );  // Reset the keys by merging with an empty array
+		}
+
+		if ( !in_array( $uri[0], $bp->root_components ) || 'single' != $uri[1] )
+			continue;
+
+		if ( $bp->current_item )
+			$template_slug = $bp->current_item;
+		elseif ( BP_MEMBERS_SLUG == $uri[0] && isset( $bp->displayed_user ) )
+			$template_slug = $bp->displayed_user->userdata->user_login;
+		else
+			continue;
+
+		$extension = strpos( $uri[$uri_size - 1], '.php' );
+		if ( false === $extension )
+			continue;
+
+		$template_slug = apply_filters( 'bp_load_template_slug', $template_slug, $template, $templates );
+		if ( $template_slug ) {
+			// Reconstruct the URL with the filename suffix
+			$uri[$uri_size - 1] = substr( $uri[$uri_size - 1], 0, $extension ) . "-{$template_slug}.php";
+			$alternative_templates[] = implode( '/', $uri );
+		}
+	}
+
+	$templates = array_merge( apply_filters( 'bp_load_template_alternatives', $alternative_templates, $templates ), $templates );
+	if ( $located_template = apply_filters( 'bp_located_template', locate_template( $templates, false ), $templates, $alternative_templates ) )
+		load_template( apply_filters( 'bp_load_template', $located_template ) );
+}
+
+/**
  * bp_core_catch_profile_uri()
  *
  * If the extended profiles component is not installed we still need
