diff --git a/src/bp-core/bp-core-actions.php b/src/bp-core/bp-core-actions.php
index 67686b923..fe50c8a58 100644
--- a/src/bp-core/bp-core-actions.php
+++ b/src/bp-core/bp-core-actions.php
@@ -113,8 +113,9 @@ add_action( 'bp_template_redirect', 'bp_get_request',        10 );
 /**
  * Add the BuddyPress functions file and the Theme Compat Default features.
  */
-add_action( 'bp_after_setup_theme', 'bp_load_theme_functions',                    1 );
-add_action( 'bp_after_setup_theme', 'bp_register_theme_compat_default_features', 10 );
+add_action( 'bp_after_setup_theme', 'bp_check_theme_template_pack_dependency',   -10 );
+add_action( 'bp_after_setup_theme', 'bp_load_theme_functions',                    1  );
+add_action( 'bp_after_setup_theme', 'bp_register_theme_compat_default_features',  10 );
 
 // Load the admin.
 if ( is_admin() ) {
diff --git a/src/bp-core/bp-core-theme-compatibility.php b/src/bp-core/bp-core-theme-compatibility.php
index 74505bf8d..0bb0efb12 100644
--- a/src/bp-core/bp-core-theme-compatibility.php
+++ b/src/bp-core/bp-core-theme-compatibility.php
@@ -987,3 +987,22 @@ function bp_theme_compat_loop_end( $query ) {
 	unset( $bp->theme_compat->is_page_toggled );
 }
 add_action( 'loop_end', 'bp_theme_compat_loop_end' );
+
+/**
+ * Maybe override the preferred template pack if the theme declares a dependency.
+ *
+ * @since 3.0.0
+ */
+function bp_check_theme_template_pack_dependency() {
+	$all_packages = array_keys( buddypress()->theme_compat->packages );
+
+	foreach ( $all_packages as $package ) {
+		// e.g. "buddypress-use-nouveau", "buddypress-use-legacy".
+		if ( ! current_theme_supports( "buddypress-use-{$package}" ) ) {
+			continue;
+		}
+
+		bp_setup_theme_compat( $package );
+		return;
+	}
+}
