diff --git src/bp-core/bp-core-template-loader.php src/bp-core/bp-core-template-loader.php
index 47d48fd..9fd45a4 100644
--- src/bp-core/bp-core-template-loader.php
+++ src/bp-core/bp-core-template-loader.php
@@ -68,6 +68,26 @@ function bp_get_template_part( $slug, $name = null ) {
 }
 
 /**
+ * Get a restrained BuddyPress template part for display.
+ *
+ * @since BuddyPress (2.3.0)
+ *
+ * @see bp_get_template_part() for the description of parameters and returned value
+ */
+function bp_get_restrained_template_part( $slug, $name = null ) {
+	// Restrain to BP Legacy
+	add_filter( 'bp_is_theme_compat_restrained', '__return_true' );
+
+	$restrained_template_part =  bp_get_template_part( $slug, $name );
+
+	// Stop restraining to BP Legacy
+	remove_filter( 'bp_is_theme_compat_restrained', '__return_true' );
+
+	// Return the restrained template part
+	return $restrained_template_part;
+}
+
+/**
  * Retrieve the name of the highest priority template file that exists.
  *
  * Searches in the STYLESHEETPATH before TEMPLATEPATH so that themes which
@@ -127,8 +147,7 @@ function bp_locate_template( $template_names, $load = false, $require_once = tru
 
 	// Maybe load the template if one was located
 	$use_themes = defined( 'WP_USE_THEMES' ) && WP_USE_THEMES;
-	$doing_ajax = defined( 'DOING_AJAX' ) && DOING_AJAX;
-	if ( ( $use_themes || $doing_ajax ) && ( true == $load ) && ! empty( $located ) ) {
+	if ( ( $use_themes || is_admin() ) && ( true == $load ) && ! empty( $located ) ) {
 		load_template( $located, $require_once );
 	}
 
@@ -222,6 +241,12 @@ function bp_get_template_stack() {
 	do {
 		foreach( (array) current( $wp_filter[$tag] ) as $the_ ) {
 			if ( ! is_null( $the_['function'] ) ) {
+
+				// Restrict to theme compat dir if needed
+				if ( bp_is_theme_compat_restrained() && 'bp_get_theme_compat_dir' !== $the_['function'] ) {
+					continue;
+				}
+
 				$args[1] = $stack;
 				$stack[] = call_user_func_array( $the_['function'], array_slice( $args, 1, (int) $the_['accepted_args'] ) );
 			}
diff --git src/bp-core/bp-core-theme-compatibility.php src/bp-core/bp-core-theme-compatibility.php
index d88c27a..7311e0d 100644
--- src/bp-core/bp-core-theme-compatibility.php
+++ src/bp-core/bp-core-theme-compatibility.php
@@ -224,6 +224,18 @@ function bp_get_theme_compat_version() {
 }
 
 /**
+ * Toggle function to allow BuddyPress core to restrict Theme Compat
+ * to the legacy one when needed (eg: Administration screens)
+ *
+ * @since BuddyPress (2.3.0)
+ *
+ * @return bool True to restrict to BP Legacy, false otherwise
+ */
+function bp_is_theme_compat_restrained() {
+	return apply_filters( 'bp_is_theme_compat_restrained', false );
+}
+
+/**
  * Get the absolute path of the theme package being used.
  *
  * or set manually. Tricky theme authors can override the default and include
@@ -236,6 +248,12 @@ function bp_get_theme_compat_version() {
  * @return string The absolute path of the theme package currently in use.
  */
 function bp_get_theme_compat_dir() {
+	/**
+	 * Restrict to BP Legacy if needed
+	 */
+	if ( bp_is_theme_compat_restrained() && 'legacy' !== bp_get_theme_compat_id() ) {
+		return false;
+	}
 
 	/**
 	 * Filters the absolute path of the theme package being used.
@@ -261,6 +279,12 @@ function bp_get_theme_compat_dir() {
  * @return string URL of the theme package currently in use.
  */
 function bp_get_theme_compat_url() {
+	/**
+	 * Restrict to BP Legacy if needed
+	 */
+	if ( bp_is_theme_compat_restrained() && 'legacy' !== bp_get_theme_compat_id() ) {
+		return false;
+	}
 
 	/**
 	 * Filters the URL of the theme package being used.
diff --git tests/phpunit/testcases/core/template/theme-compat.php tests/phpunit/testcases/core/template/theme-compat.php
index e69de29..600c814 100644
--- tests/phpunit/testcases/core/template/theme-compat.php
+++ tests/phpunit/testcases/core/template/theme-compat.php
@@ -0,0 +1,62 @@
+<?php
+/**
+ * @group theme_compat
+ */
+class BP_Tests_BP_Attachement_Avatar_TestCases extends BP_UnitTestCase {
+	protected $displayed_user;
+
+	public function template_dir() {
+		return buddypress()->themes_dir . '/template-pack-test';
+	}
+
+	public function setUp() {
+		parent::setUp();
+		bp_register_template_stack( array( $this, 'template_dir' ),  13 );
+	}
+
+	public function tearDown() {
+		parent::tearDown();
+		bp_deregister_template_stack( array( $this, 'template_dir' ),  13 );
+	}
+
+	/**
+	 * @group bp_get_template_stack
+	 */
+	public function test_bp_get_template_stack_not_restrained() {
+		$stack     = bp_get_template_stack();
+		$root_dirs = array();
+
+		foreach ( $stack as $template_dir ) {
+			$root_dir = array_pop( explode( '/', $template_dir ) );
+
+			if ( 'template-pack-test' === $root_dir || 'bp-legacy' === $root_dir ) {
+				$root_dirs[] = $root_dir;
+			}
+		}
+
+		$this->assertFalse( count( $root_dirs ) === 1 );
+		$this->assertContains( 'template-pack-test', $root_dirs );
+	}
+
+	/**
+	 * @group bp_get_template_stack
+	 */
+	public function test_bp_get_template_stack_restrained() {
+		add_filter( 'bp_is_theme_compat_restrained', '__return_true' );
+		$stack = bp_get_template_stack();
+		remove_filter( 'bp_is_theme_compat_restrained', '__return_true' );
+
+		$root_dirs = array();
+
+		foreach ( $stack as $template_dir ) {
+			$root_dir = array_pop( explode( '/', $template_dir ) );
+
+			if ( 'template-pack-test' === $root_dir || 'bp-legacy' === $root_dir ) {
+				$root_dirs[] = $root_dir;
+			}
+		}
+
+		$this->assertTrue( count( $root_dirs ) === 1 );
+		$this->assertContains( 'bp-legacy', $root_dirs );
+	}
+}
