Index: src/bp-core/bp-core-widgets.php
===================================================================
--- src/bp-core/bp-core-widgets.php
+++ src/bp-core/bp-core-widgets.php
@@ -14,6 +14,7 @@
  * Should BuddyPress load Legacy Widgets?
  *
  * @since 10.0.0
+ * @deprecated
  *
  * @return bool False if BuddyPress shouldn't load Legacy Widgets. True otherwise.
  */
@@ -64,35 +65,36 @@
  * @since 10.0.0
  */
 function bp_core_maybe_unhook_legacy_widgets() {
-	if ( bp_core_retain_legacy_widgets() ) {
-		return;
-	}
-
 	$callbacks = array(
-		'bp_core_register_login_widget',
-		'bp_members_register_members_widget',
-		'bp_members_register_whos_online_widget',
-		'bp_members_register_recently_active_widget',
+		'BP_Core_Login_Widget',
+		'BP_Core_Members_Widget',
+		'BP_Core_Whos_Online_Widget',
+		'BP_Core_Recently_Active_Widget',
 	);
 
 	if ( bp_is_active( 'friends' ) ) {
-		$callbacks[] = 'bp_friends_register_friends_widget';
+		$callbacks[] = 'BP_Core_Friends_Widget';
 	}
 
 	if ( bp_is_active( 'groups' ) ) {
-		$callbacks[] = 'bp_groups_register_groups_widget';
+		$callbacks[] = 'BP_Groups_Widget';
 	}
 
 	if ( bp_is_active( 'messages' ) ) {
-		$callbacks[] = 'bp_messages_register_sitewide_notices_widget';
+		$callbacks[] = 'BP_Messages_Sitewide_Notices_Widget';
 	}
 
 	if ( bp_is_active( 'blogs' ) && bp_is_active( 'activity' ) && bp_is_root_blog() ) {
-		$callbacks[] = 'bp_blogs_register_recent_posts_widget';
+		$callbacks[] = 'BP_Blogs_Recent_Posts_Widget';
 	}
 
-	foreach ( $callbacks as $callback ) {
-		remove_action( 'widgets_init', $callback );
+	// Widget base is the callback in lowercase letters. Sigh.
+	$legacy_widgets_base = array_map( 'strtolower', $callbacks );
+
+	foreach ( $legacy_widgets_base as $key => $widget_base ) {
+		if ( ! is_active_widget( false, false, $widget_base ) ) {
+			unregister_widget( $callbacks[ $key ] );
+		}
 	}
 }
-add_action( 'widgets_init', 'bp_core_maybe_unhook_legacy_widgets', 0 );
+add_action( 'widgets_init', 'bp_core_maybe_unhook_legacy_widgets', 20 );
