diff --git src/bp-activity/bp-activity-functions.php src/bp-activity/bp-activity-functions.php
index 1f0f85591..6a4400bf4 100644
--- src/bp-activity/bp-activity-functions.php
+++ src/bp-activity/bp-activity-functions.php
@@ -1277,7 +1277,22 @@ function bp_activity_remove_all_user_data( $user_id = 0 ) {
 	do_action( 'bp_activity_remove_all_user_data', $user_id );
 }
 add_action( 'wpmu_delete_user',  'bp_activity_remove_all_user_data' );
-add_action( 'delete_user',       'bp_activity_remove_all_user_data' );
+
+/**
+ * Deletes user activity data on the 'delete_user' hook.
+ *
+ * @since 6.0.0
+ *
+ * @param int $user_id The ID of the deleted user.
+ */
+function bp_activity_remove_all_user_data_on_delete_user( $user_id ) {
+	if ( ! bp_remove_user_data_on_delete_user_hook( 'activity', $user_id ) ) {
+		return;
+	}
+
+	bp_activity_remove_all_user_data( $user_id );
+}
+add_action( 'delete_user', 'bp_activity_remove_all_user_data_on_delete_user' );
 
 /**
  * Mark all of the user's activity as spam.
diff --git src/bp-blogs/bp-blogs-functions.php src/bp-blogs/bp-blogs-functions.php
index d9384741a..139b2f953 100644
--- src/bp-blogs/bp-blogs-functions.php
+++ src/bp-blogs/bp-blogs-functions.php
@@ -1433,9 +1433,24 @@ function bp_blogs_remove_data( $user_id ) {
 	do_action( 'bp_blogs_remove_data', $user_id );
 }
 add_action( 'wpmu_delete_user',  'bp_blogs_remove_data' );
-add_action( 'delete_user',       'bp_blogs_remove_data' );
 add_action( 'bp_make_spam_user', 'bp_blogs_remove_data' );
 
+/**
+ * Deletes user XProfile data on the 'delete_user' hook.
+ *
+ * @since 6.0.0
+ *
+ * @param int $user_id The ID of the deleted user.
+ */
+function bp_blogs_remove_data_on_delete_user( $user_id ) {
+	if ( ! bp_remove_user_data_on_delete_user_hook( 'blogs', $user_id ) ) {
+		return;
+	}
+
+	bp_blogs_remove_data( $user_id );
+}
+add_action( 'delete_user', 'bp_blogs_remove_data_on_delete_user' );
+
 /**
  * Restore all blog associations for a given user.
  *
diff --git src/bp-blogs/classes/class-bp-blogs-blog.php src/bp-blogs/classes/class-bp-blogs-blog.php
index af38b7863..9ba333213 100644
--- src/bp-blogs/classes/class-bp-blogs-blog.php
+++ src/bp-blogs/classes/class-bp-blogs-blog.php
@@ -356,6 +356,8 @@ class BP_Blogs_Blog {
 		else
 			$blogs = $wpdb->get_results( $wpdb->prepare( "SELECT DISTINCT b.blog_id, b.id, bm1.meta_value as name, wb.domain, wb.path FROM {$bp->blogs->table_name} b, {$wpdb->base_prefix}blogs wb, {$bp->blogs->table_name_blogmeta} bm1 WHERE b.blog_id = wb.blog_id AND b.blog_id = bm1.blog_id AND bm1.meta_key = 'name' AND wb.deleted = 0 AND wb.spam = 0 AND wb.mature = 0 AND wb.archived = '0' AND b.user_id = %d ORDER BY b.blog_id", $user_id ) );
 
+			$query = $wpdb->prepare( "SELECT DISTINCT b.blog_id, b.id, bm1.meta_value as name, wb.domain, wb.path FROM {$bp->blogs->table_name} b, {$wpdb->base_prefix}blogs wb, {$bp->blogs->table_name_blogmeta} bm1 WHERE b.blog_id = wb.blog_id AND b.blog_id = bm1.blog_id AND bm1.meta_key = 'name' AND wb.public = 1 AND wb.deleted = 0 AND wb.spam = 0 AND wb.mature = 0 AND wb.archived = '0' AND b.user_id = %d ORDER BY b.blog_id", $user_id );
+
 		$total_blog_count = BP_Blogs_Blog::total_blog_count_for_user( $user_id );
 
 		$user_blogs = array();
diff --git src/bp-friends/bp-friends-functions.php src/bp-friends/bp-friends-functions.php
index 051c65018..a2a906b5a 100644
--- src/bp-friends/bp-friends-functions.php
+++ src/bp-friends/bp-friends-functions.php
@@ -757,9 +757,24 @@ function friends_remove_data( $user_id ) {
 	do_action( 'friends_remove_data', $user_id );
 }
 add_action( 'wpmu_delete_user',  'friends_remove_data' );
-add_action( 'delete_user',       'friends_remove_data' );
 add_action( 'bp_make_spam_user', 'friends_remove_data' );
 
+/**
+ * Deletes user Friends data on the 'delete_user' hook.
+ *
+ * @since 6.0.0
+ *
+ * @param int $user_id The ID of the deleted user.
+ */
+function bp_friends_remove_data_on_delete_user( $user_id ) {
+	if ( ! bp_remove_user_data_on_delete_user_hook( 'friends', $user_id ) ) {
+		return;
+	}
+
+	friends_remove_data( $user_id );
+}
+add_action( 'delete_user', 'bp_friends_remove_data_on_delete_user' );
+
 /**
  * Used by the Activity component's @mentions to print a JSON list of the current user's friends.
  *
diff --git src/bp-groups/bp-groups-functions.php src/bp-groups/bp-groups-functions.php
index 1435edbbb..028534153 100644
--- src/bp-groups/bp-groups-functions.php
+++ src/bp-groups/bp-groups-functions.php
@@ -2417,9 +2417,24 @@ function groups_remove_data_for_user( $user_id ) {
 	do_action( 'groups_remove_data_for_user', $user_id );
 }
 add_action( 'wpmu_delete_user',  'groups_remove_data_for_user' );
-add_action( 'delete_user',       'groups_remove_data_for_user' );
 add_action( 'bp_make_spam_user', 'groups_remove_data_for_user' );
 
+/**
+ * Deletes user group data on the 'delete_user' hook.
+ *
+ * @since 6.0.0
+ *
+ * @param int $user_id The ID of the deleted user.
+ */
+function bp_groups_remove_data_for_user_on_delete_user( $user_id ) {
+	if ( ! bp_remove_user_data_on_delete_user_hook( 'groups', $user_id ) ) {
+		return;
+	}
+
+	groups_remove_data_for_user( $user_id );
+}
+add_action( 'delete_user', 'bp_groups_remove_data_for_user_on_delete_user' );
+
 /**
  * Update orphaned child groups when the parent is deleted.
  *
diff --git src/bp-members/bp-members-functions.php src/bp-members/bp-members-functions.php
index 6b009a1b9..48dacb891 100644
--- src/bp-members/bp-members-functions.php
+++ src/bp-members/bp-members-functions.php
@@ -1261,6 +1261,35 @@ function bp_core_delete_account( $user_id = 0 ) {
 	return $retval;
 }
 
+/**
+ * Determines whether user data should be removed on the 'delete_user' hook.
+ *
+ * WordPress's 'delete_user' hook is ambiguous: on a standard installation, it means that a user
+ * account is being removed from the system, while on Multisite it simply means the user is
+ * being removed from a specific site (ie its roles are being revoked). As a rule, this means
+ * that BuddyPress should remove user data on the delete_user hook only on non-Multisite
+ * installations - only when the user account is being removed altogether. However, this behavior
+ * can be filtered in a global, per-user, or per-component fashion.
+ *
+ * @since 6.0.0
+ *
+ * @param string $data_type Type of data to be removed.
+ * @param int    $user_id   ID of the user, as passed to 'delete_user'.
+ * @return bool
+ */
+function bp_remove_user_data_on_delete_user_hook( $component, $user_id ) {
+	$remove = ! is_multisite();
+
+	/**
+	 * Filters whether to remove user data on the 'delete_user' hook.
+	 *
+	 * @param bool   $remove    Whether data should be removed.
+	 * @param string $data_type Type of data to be removed.
+	 * @param int    $user_id   ID of the user, as passed to 'delete_user'.
+	 */
+	return apply_filters( 'bp_remove_user_data_on_delete_user_hook', $remove, $component, $user_id );
+}
+
 /**
  * Delete a user's avatar when the user is deleted.
  *
@@ -1276,7 +1305,22 @@ function bp_core_delete_avatar_on_user_delete( $user_id ) {
 	) );
 }
 add_action( 'wpmu_delete_user', 'bp_core_delete_avatar_on_user_delete' );
-add_action( 'delete_user', 'bp_core_delete_avatar_on_user_delete' );
+
+/**
+ * Deletes last_activity data on the 'delete_user' hook.
+ *
+ * @since 6.0.0
+ *
+ * @param int $user_id The ID of the deleted user.
+ */
+function bp_core_delete_avatar_on_delete_user( $user_id ) {
+	if ( ! bp_remove_user_data_on_delete_user_hook( 'avatar', $user_id ) ) {
+		return;
+	}
+
+	bp_core_delete_avatar_on_user_delete( $user_id );
+}
+add_action( 'delete_user', 'bp_core_delete_avatar_on_delete_user' );
 
 /**
  * Multibyte-safe ucfirst() support.
@@ -1344,9 +1388,24 @@ function bp_core_remove_data( $user_id ) {
 	wp_cache_flush();
 }
 add_action( 'wpmu_delete_user',  'bp_core_remove_data' );
-add_action( 'delete_user',       'bp_core_remove_data' );
 add_action( 'bp_make_spam_user', 'bp_core_remove_data' );
 
+/**
+ * Deletes last_activity data on the 'delete_user' hook.
+ *
+ * @since 6.0.0
+ *
+ * @param int $user_id The ID of the deleted user.
+ */
+function bp_core_remove_data_on_delete_user( $user_id ) {
+	if ( ! bp_remove_user_data_on_delete_user_hook( 'last_activity', $user_id ) ) {
+		return;
+	}
+
+	bp_core_remove_data( $user_id );
+}
+add_action( 'delete_user', 'bp_core_remove_data_on_delete_user' );
+
 /**
  * Check whether the logged-in user can edit settings for the displayed user.
  *
@@ -2831,7 +2890,22 @@ function bp_remove_member_type_on_user_delete( $user_id ) {
 	return bp_set_member_type( $user_id, '' );
 }
 add_action( 'wpmu_delete_user', 'bp_remove_member_type_on_user_delete' );
-add_action( 'delete_user', 'bp_remove_member_type_on_user_delete' );
+
+/**
+ * Deletes user member type on the 'delete_user' hook.
+ *
+ * @since 6.0.0
+ *
+ * @param int $user_id The ID of the deleted user.
+ */
+function bp_remove_member_type_on_delete_user( $user_id ) {
+	if ( ! bp_remove_user_data_on_delete_user_hook( 'member_type', $user_id ) ) {
+		return;
+	}
+
+	bp_remove_member_type_on_user_delete( $user_id );
+}
+add_action( 'delete_user', 'bp_remove_member_type_on_delete_user' );
 
 /**
  * Get the "current" member type, if one is provided, in member directories.
diff --git src/bp-notifications/bp-notifications-functions.php src/bp-notifications/bp-notifications-functions.php
index 65e4a24d0..cc2618fd2 100644
--- src/bp-notifications/bp-notifications-functions.php
+++ src/bp-notifications/bp-notifications-functions.php
@@ -445,7 +445,23 @@ function bp_notifications_delete_notifications_on_user_delete( $user_id ) {
 	) );
 }
 add_action( 'wpmu_delete_user', 'bp_notifications_delete_notifications_on_user_delete' );
-add_action( 'delete_user', 'bp_notifications_delete_notifications_on_user_delete' );
+
+/**
+ * Deletes user notifications data on the 'delete_user' hook.
+ *
+ * @since 6.0.0
+ *
+ * @param int $user_id The ID of the deleted user.
+ */
+function bp_notifications_delete_notifications_on_delete_user( $user_id ) {
+	if ( ! bp_remove_user_data_on_delete_user_hook( 'notifications', $user_id ) ) {
+		return;
+	}
+
+	bp_notifications_delete_notifications_on_user_delete( $user_id );
+}
+
+add_action( 'delete_user', 'bp_notifications_delete_notifications_on_delete_user' );
 
 /** Mark **********************************************************************/
 
diff --git src/bp-xprofile/bp-xprofile-functions.php src/bp-xprofile/bp-xprofile-functions.php
index 25d6d5fc0..3698f5fa3 100644
--- src/bp-xprofile/bp-xprofile-functions.php
+++ src/bp-xprofile/bp-xprofile-functions.php
@@ -847,9 +847,24 @@ function xprofile_remove_data( $user_id ) {
 	BP_XProfile_ProfileData::delete_data_for_user( $user_id );
 }
 add_action( 'wpmu_delete_user',  'xprofile_remove_data' );
-add_action( 'delete_user',       'xprofile_remove_data' );
 add_action( 'bp_make_spam_user', 'xprofile_remove_data' );
 
+/**
+ * Deletes user XProfile data on the 'delete_user' hook.
+ *
+ * @since 6.0.0
+ *
+ * @param int $user_id The ID of the deleted user.
+ */
+function xprofile_remove_data_on_delete_user( $user_id ) {
+	if ( ! bp_remove_user_data_on_delete_user_hook( 'xprofile', $user_id ) ) {
+		return;
+	}
+
+	xprofile_remove_data( $user_id );
+}
+add_action( 'delete_user', 'xprofile_remove_data_on_delete_user' );
+
 /*** XProfile Meta ****************************************************/
 
 /**
diff --git tests/phpunit/testcases/activity/functions.php tests/phpunit/testcases/activity/functions.php
index e4974ea2c..9737ebbe7 100644
--- tests/phpunit/testcases/activity/functions.php
+++ tests/phpunit/testcases/activity/functions.php
@@ -1803,4 +1803,160 @@ Bar!';
 		// Number of exported activity items.
 		$this->assertSame( 3, count( $actual['data'] ) );
 	}
+
+	/**
+	 * @ticket BP8175
+	 */
+	public function test_activity_data_should_be_deleted_on_user_delete_non_multisite() {
+		if ( is_multisite() ) {
+			$this->markTestSkipped( __METHOD__ . ' requires non-multisite.' );
+		}
+
+		$u1 = self::factory()->user->create();
+		$a1 = self::factory()->activity->create(
+			array(
+				'user_id'   => $u1,
+				'component' => 'activity',
+				'type'      => 'activity_update',
+			)
+		);
+
+		$latest_update = array(
+			'id'      => $a1,
+			'content' => 'Foo',
+		);
+		bp_update_user_meta( $u1, 'bp_latest_update', $latest_update );
+
+		bp_activity_add_user_favorite( $a1, $u1 );
+
+		$found = bp_activity_get(
+			array(
+				'filter' => array(
+					'user_id' => $u1,
+				)
+			)
+		);
+
+		$this->assertEqualSets( [ $a1 ], wp_list_pluck( $found['activities'], 'id' ) );
+		$this->assertEqualSets( [ $a1 ], bp_activity_get_user_favorites( $u1 ) );
+		$this->assertSame( $latest_update, bp_get_user_meta( $u1, 'bp_latest_update', true ) );
+
+		wp_delete_user( $u1 );
+
+		$found = bp_activity_get(
+			array(
+				'filter' => array(
+					'user_id' => $u1,
+				)
+			)
+		);
+
+		$this->assertEmpty( $found['activities'] );
+		$this->assertEmpty( bp_activity_get_user_favorites( $u1 ) );
+		$this->assertSame( '', bp_get_user_meta( $u1, 'bp_latest_update', true ) );
+	}
+
+	/**
+	 * @ticket BP8175
+	 */
+	public function test_activity_data_should_be_deleted_on_user_delete_multisite() {
+		if ( ! is_multisite() ) {
+			$this->markTestSkipped( __METHOD__ . ' requires multisite.' );
+		}
+
+		$u1 = self::factory()->user->create();
+		$a1 = self::factory()->activity->create(
+			array(
+				'user_id'   => $u1,
+				'component' => 'activity',
+				'type'      => 'activity_update',
+			)
+		);
+
+		$latest_update = array(
+			'id'      => $a1,
+			'content' => 'Foo',
+		);
+		bp_update_user_meta( $u1, 'bp_latest_update', $latest_update );
+
+		bp_activity_add_user_favorite( $a1, $u1 );
+
+		$found = bp_activity_get(
+			array(
+				'filter' => array(
+					'user_id' => $u1,
+				)
+			)
+		);
+
+		$this->assertEqualSets( [ $a1 ], wp_list_pluck( $found['activities'], 'id' ) );
+		$this->assertEqualSets( [ $a1 ], bp_activity_get_user_favorites( $u1 ) );
+		$this->assertSame( $latest_update, bp_get_user_meta( $u1, 'bp_latest_update', true ) );
+
+		wpmu_delete_user( $u1 );
+
+		$found = bp_activity_get(
+			array(
+				'filter' => array(
+					'user_id' => $u1,
+				)
+			)
+		);
+
+		$this->assertEmpty( $found['activities'] );
+		$this->assertEmpty( bp_activity_get_user_favorites( $u1 ) );
+		$this->assertSame( '', bp_get_user_meta( $u1, 'bp_latest_update', true ) );
+	}
+
+	/**
+	 * @ticket BP8175
+	 */
+	public function test_activity_data_should_not_be_deleted_on_wp_delete_user_multisite() {
+		if ( ! is_multisite() ) {
+			$this->markTestSkipped( __METHOD__ . ' requires multisite.' );
+		}
+
+		$u1 = self::factory()->user->create();
+		$a1 = self::factory()->activity->create(
+			array(
+				'user_id'   => $u1,
+				'component' => 'activity',
+				'type'      => 'activity_update',
+			)
+		);
+
+		$latest_update = array(
+			'id'      => $a1,
+			'content' => 'Foo',
+		);
+		bp_update_user_meta( $u1, 'bp_latest_update', $latest_update );
+
+		bp_activity_add_user_favorite( $a1, $u1 );
+
+		$found = bp_activity_get(
+			array(
+				'filter' => array(
+					'user_id' => $u1,
+				)
+			)
+		);
+
+		$this->assertEqualSets( [ $a1 ], wp_list_pluck( $found['activities'], 'id' ) );
+		$this->assertEqualSets( [ $a1 ], bp_activity_get_user_favorites( $u1 ) );
+		$this->assertSame( $latest_update, bp_get_user_meta( $u1, 'bp_latest_update', true ) );
+
+		wp_delete_user( $u1 );
+
+		$found = bp_activity_get(
+			array(
+				'filter' => array(
+					'user_id' => $u1,
+				)
+			)
+		);
+
+		$this->assertEqualSets( [ $a1 ], wp_list_pluck( $found['activities'], 'id' ) );
+		$this->assertEqualSets( [ $a1 ], bp_activity_get_user_favorites( $u1 ) );
+		$this->assertSame( $latest_update, bp_get_user_meta( $u1, 'bp_latest_update', true ) );
+	}
 }
diff --git tests/phpunit/testcases/blogs/functions.php tests/phpunit/testcases/blogs/functions.php
index 92804a647..58b228ad8 100644
--- tests/phpunit/testcases/blogs/functions.php
+++ tests/phpunit/testcases/blogs/functions.php
@@ -1141,4 +1141,64 @@ class BP_Tests_Blogs_Functions extends BP_UnitTestCase {
 
 		return ! empty( $a['activities'] );
 	}
+
+	/**
+	 * @ticket BP8175
+	 */
+	public function test_blogs_data_should_be_deleted_on_user_delete_multisite() {
+		if ( ! is_multisite() ) {
+			$this->markTestSkipped( __METHOD__ . ' requires multisite.' );
+		}
+
+		if ( function_exists( 'wp_initialize_site' ) ) {
+			$this->setExpectedDeprecated( 'wpmu_new_blog' );
+		}
+
+		$u1 = self::factory()->user->create();
+		$b1 = get_current_blog_id();
+		$b2 = self::factory()->blog->create();
+
+		bp_blogs_record_blog( $b1, $u1, true );
+		bp_blogs_record_blog( $b2, $u1, true );
+
+		$blogs = bp_blogs_get_blogs_for_user( $u1 );
+
+		$this->assertEqualSets( [ $b1, $b2 ], wp_list_pluck( $blogs['blogs'], 'blog_id' ) );
+
+		wpmu_delete_user( $u1 );
+
+		$blogs = bp_blogs_get_blogs_for_user( $u1 );
+
+		$this->assertEmpty( $blogs['blogs'] );
+	}
+
+	/**
+	 * @ticket BP8175
+	 */
+	public function test_blogs_data_should_not_be_deleted_on_wp_delete_user_multisite() {
+		if ( ! is_multisite() ) {
+			$this->markTestSkipped( __METHOD__ . ' requires multisite.' );
+		}
+
+		if ( function_exists( 'wp_initialize_site' ) ) {
+			$this->setExpectedDeprecated( 'wpmu_new_blog' );
+		}
+
+		$u1 = self::factory()->user->create();
+		$b1 = get_current_blog_id();
+		$b2 = self::factory()->blog->create();
+
+		bp_blogs_record_blog( $b1, $u1, true );
+		bp_blogs_record_blog( $b2, $u1, true );
+
+		$blogs = bp_blogs_get_blogs_for_user( $u1 );
+
+		$this->assertEqualSets( [ $b1, $b2 ], wp_list_pluck( $blogs['blogs'], 'blog_id' ) );
+
+		wp_delete_user( $u1 );
+
+		$blogs = bp_blogs_get_blogs_for_user( $u1 );
+
+		$this->assertEqualSets( [ $b2 ], wp_list_pluck( $blogs['blogs'], 'blog_id' ) );
+	}
 }
diff --git tests/phpunit/testcases/friends/activity.php tests/phpunit/testcases/friends/activity.php
index 8e59a31ca..d10119b23 100644
--- tests/phpunit/testcases/friends/activity.php
+++ tests/phpunit/testcases/friends/activity.php
@@ -205,7 +205,7 @@ class BP_Tests_Friends_Activity extends BP_UnitTestCase {
 		$this->set_current_user( $old_user );
 
 		// Delete $u1.
-		wp_delete_user( $u1 );
+		$this->delete_user( $u1 );
 
 		// 'friendship_created' activity item should not exist.
 		$friendship_activity = bp_activity_get( array(
diff --git tests/phpunit/testcases/friends/functions.php tests/phpunit/testcases/friends/functions.php
index d5ba39f68..804a31fa9 100644
--- tests/phpunit/testcases/friends/functions.php
+++ tests/phpunit/testcases/friends/functions.php
@@ -483,4 +483,64 @@ class BP_Tests_Friends_Functions extends BP_UnitTestCase {
 		);
 		$this->assertEqualSets( $expected_ids, wp_list_pluck( $actual['data'], 'item_id' ) );
 	}
+
+	/**
+	 * @ticket BP8175
+	 */
+	public function test_friends_data_should_be_deleted_on_user_delete_non_multisite() {
+		if ( is_multisite() ) {
+			$this->markTestSkipped( __METHOD__ . ' requires non-multisite.' );
+		}
+
+		$u1 = self::factory()->user->create();
+		$u2 = self::factory()->user->create();
+
+		friends_add_friend( $u1, $u2, true );
+
+		$this->assertEquals( 'is_friend', BP_Friends_Friendship::check_is_friend( $u1, $u2 ) );
+
+		wp_delete_user( $u1 );
+
+		$this->assertEquals( 'not_friends', BP_Friends_Friendship::check_is_friend( $u1, $u2 ) );
+	}
+
+	/**
+	 * @ticket BP8175
+	 */
+	public function test_xprofile_data_should_be_deleted_on_user_delete_multisite() {
+		if ( ! is_multisite() ) {
+			$this->markTestSkipped( __METHOD__ . ' requires multisite.' );
+		}
+
+		$u1 = self::factory()->user->create();
+		$u2 = self::factory()->user->create();
+
+		friends_add_friend( $u1, $u2, true );
+
+		$this->assertEquals( 'is_friend', BP_Friends_Friendship::check_is_friend( $u1, $u2 ) );
+
+		wpmu_delete_user( $u1 );
+
+		$this->assertEquals( 'not_friends', BP_Friends_Friendship::check_is_friend( $u1, $u2 ) );
+	}
+
+	/**
+	 * @ticket BP8175
+	 */
+	public function test_xprofile_data_should_not_be_deleted_on_wp_delete_user_multisite() {
+		if ( ! is_multisite() ) {
+			$this->markTestSkipped( __METHOD__ . ' requires multisite.' );
+		}
+
+		$u1 = self::factory()->user->create();
+		$u2 = self::factory()->user->create();
+
+		friends_add_friend( $u1, $u2, true );
+
+		$this->assertEquals( 'is_friend', BP_Friends_Friendship::check_is_friend( $u1, $u2 ) );
+
+		wp_delete_user( $u1 );
+
+		$this->assertEquals( 'is_friend', BP_Friends_Friendship::check_is_friend( $u1, $u2 ) );
+	}
 }
diff --git tests/phpunit/testcases/groups/functions.php tests/phpunit/testcases/groups/functions.php
index 5021d6401..4b7533f55 100644
--- tests/phpunit/testcases/groups/functions.php
+++ tests/phpunit/testcases/groups/functions.php
@@ -949,4 +949,61 @@ Bar!';
 		$this->assertCount( 1, $actual['data'] );
 		$this->assertSame( 'bp-group-pending-received-invitation-' . self::$group_ids[0], $actual['data'][0]['item_id'] );
 	}
+
+	/**
+	 * @ticket BP8175
+	 */
+	public function test_groups_data_should_be_deleted_on_user_delete_non_multisite() {
+		if ( is_multisite() ) {
+			$this->markTestSkipped( __METHOD__ . ' requires non-multisite.' );
+		}
+
+		$u = self::factory()->user->create();
+
+		groups_join_group( self::$group_ids[0], $u );
+
+		$this->assertNotEmpty( groups_is_user_member( $u, self::$group_ids[0] ) );
+
+		wp_delete_user( $u );
+
+		$this->assertFalse( groups_is_user_member( $u, self::$group_ids[0] ) );
+	}
+
+	/**
+	 * @ticket BP8175
+	 */
+	public function test_groups_data_should_be_deleted_on_user_delete_multisite() {
+		if ( ! is_multisite() ) {
+			$this->markTestSkipped( __METHOD__ . ' requires multisite.' );
+		}
+
+		$u = self::factory()->user->create();
+
+		groups_join_group( self::$group_ids[0], $u );
+
+		$this->assertNotEmpty( groups_is_user_member( $u, self::$group_ids[0] ) );
+
+		wpmu_delete_user( $u );
+
+		$this->assertFalse( groups_is_user_member( $u, self::$group_ids[0] ) );
+	}
+
+	/**
+	 * @ticket BP8175
+	 */
+	public function test_groups_data_should_not_be_deleted_on_wp_delete_user_multisite() {
+		if ( ! is_multisite() ) {
+			$this->markTestSkipped( __METHOD__ . ' requires multisite.' );
+		}
+
+		$u = self::factory()->user->create();
+
+		groups_join_group( self::$group_ids[0], $u );
+
+		$this->assertNotEmpty( groups_is_user_member( $u, self::$group_ids[0] ) );
+
+		wp_delete_user( $u );
+
+		$this->assertNotEmpty( groups_is_user_member( $u, self::$group_ids[0] ) );
+	}
 }
diff --git tests/phpunit/testcases/members/functions.php tests/phpunit/testcases/members/functions.php
index e2492116c..1ed038f3d 100644
--- tests/phpunit/testcases/members/functions.php
+++ tests/phpunit/testcases/members/functions.php
@@ -48,6 +48,66 @@ class BP_Tests_Members_Functions extends BP_UnitTestCase {
 		bp_update_option( 'bp-disable-account-deletion', $deletion_disabled );
 	}
 
+	/**
+	 * @ticket BP8175
+	 */
+	public function test_last_activity_data_should_be_deleted_on_user_delete_non_multisite() {
+		if ( is_multisite() ) {
+			$this->markTestSkipped( __METHOD__ . ' requires non-multisite.' );
+		}
+
+		$u1 = self::factory()->user->create();
+
+		$now = time();
+		bp_update_user_last_activity( $u1, $now );
+
+		$this->assertEquals( $now, bp_get_user_last_activity( $u1 ) );
+
+		wp_delete_user( $u1 );
+
+		$this->assertEquals( '', bp_get_user_last_activity( $u1 ) );
+	}
+
+	/**
+	 * @ticket BP8175
+	 */
+	public function test_last_activity_data_should_be_deleted_on_user_delete_multisite() {
+		if ( ! is_multisite() ) {
+			$this->markTestSkipped( __METHOD__ . ' requires multisite.' );
+		}
+
+		$u1 = self::factory()->user->create();
+
+		$now = time();
+		bp_update_user_last_activity( $u1, $now );
+
+		$this->assertEquals( $now, bp_get_user_last_activity( $u1 ) );
+
+		wpmu_delete_user( $u1 );
+
+		$this->assertEquals( '', bp_get_user_last_activity( $u1 ) );
+	}
+
+	/**
+	 * @ticket BP8175
+	 */
+	public function test_last_activity_data_should_not_be_deleted_on_wp_delete_user_multisite() {
+		if ( ! is_multisite() ) {
+			$this->markTestSkipped( __METHOD__ . ' requires multisite.' );
+		}
+
+		$u1 = self::factory()->user->create();
+
+		$now = time();
+		bp_update_user_last_activity( $u1, $now );
+
+		$this->assertEquals( $now, bp_get_user_last_activity( $u1 ) );
+
+		wp_delete_user( $u1 );
+
+		$this->assertEquals( $now, bp_get_user_last_activity( $u1 ) );
+	}
+
 	/**
 	 * @group object_cache
 	 * @group bp_core_get_directory_pages
diff --git tests/phpunit/testcases/notifications/functions.php tests/phpunit/testcases/notifications/functions.php
index 106c1598c..f47556048 100644
--- tests/phpunit/testcases/notifications/functions.php
+++ tests/phpunit/testcases/notifications/functions.php
@@ -346,7 +346,7 @@ class BP_Tests_Notifications_Functions extends BP_UnitTestCase {
 		$found1 = $wpdb->get_col( $query );
 		$this->assertEqualSets( array( $n1, $n2, $n3, $n4, $n5 ), $found1 );
 
-		wp_delete_user( $u );
+		$this->delete_user( $u );
 
 		// Check if notifications are deleted.
 		$found2 = $wpdb->get_col( $query );
@@ -463,4 +463,82 @@ class BP_Tests_Notifications_Functions extends BP_UnitTestCase {
 		// Number of exported notification items.
 		$this->assertSame( 2, count( $actual['data'] ) );
 	}
+
+	/**
+	 * @ticket BP8175
+	 */
+	public function test_notifications_data_should_be_deleted_on_user_delete_non_multisite() {
+		if ( is_multisite() ) {
+			$this->markTestSkipped( __METHOD__ . ' requires non-multisite.' );
+		}
+
+		$u = self::factory()->user->create();
+
+		$n1 = self::factory()->notification->create( array(
+			'component_name'    => 'messages',
+			'component_action'  => 'new_message',
+			'item_id'           => 99,
+			'user_id'           => $u,
+		) );
+
+		$found = bp_notifications_get_notifications_for_user( $u, 'object' );
+		$this->assertEqualSets( [ $n1 ], wp_list_pluck( $found, 'id' ) );
+
+		wp_delete_user( $u );
+
+		$found = bp_notifications_get_notifications_for_user( $u, 'object' );
+		$this->assertEmpty( '', $found );
+	}
+
+	/**
+	 * @ticket BP8175
+	 */
+	public function test_notifications_data_should_be_deleted_on_user_delete_multisite() {
+		if ( ! is_multisite() ) {
+			$this->markTestSkipped( __METHOD__ . ' requires multisite.' );
+		}
+
+		$u = self::factory()->user->create();
+
+		$n1 = self::factory()->notification->create( array(
+			'component_name'    => 'messages',
+			'component_action'  => 'new_message',
+			'item_id'           => 99,
+			'user_id'           => $u,
+		) );
+
+		$found = bp_notifications_get_notifications_for_user( $u, 'object' );
+		$this->assertEqualSets( [ $n1 ], wp_list_pluck( $found, 'id' ) );
+
+		wpmu_delete_user( $u );
+
+		$found = bp_notifications_get_notifications_for_user( $u, 'object' );
+		$this->assertEmpty( '', $found );
+	}
+
+	/**
+	 * @ticket BP8175
+	 */
+	public function test_notifications_data_should_not_be_deleted_on_wp_delete_user_multisite() {
+		if ( ! is_multisite() ) {
+			$this->markTestSkipped( __METHOD__ . ' requires multisite.' );
+		}
+
+		$u = self::factory()->user->create();
+
+		$n1 = self::factory()->notification->create( array(
+			'component_name'    => 'messages',
+			'component_action'  => 'new_message',
+			'item_id'           => 99,
+			'user_id'           => $u,
+		) );
+
+		$found = bp_notifications_get_notifications_for_user( $u, 'object' );
+		$this->assertEqualSets( [ $n1 ], wp_list_pluck( $found, 'id' ) );
+
+		wp_delete_user( $u );
+
+		$found = bp_notifications_get_notifications_for_user( $u, 'object' );
+		$this->assertEqualSets( [ $n1 ], wp_list_pluck( $found, 'id' ) );
+	}
 }
diff --git tests/phpunit/testcases/xprofile/functions.php tests/phpunit/testcases/xprofile/functions.php
index bc36002e4..10dd64e1d 100644
--- tests/phpunit/testcases/xprofile/functions.php
+++ tests/phpunit/testcases/xprofile/functions.php
@@ -1131,4 +1131,79 @@ Bar!';
 		// Number of exported user properties.
 		$this->assertSame( 3, count( $actual['data'][0]['data'] ) );
 	}
+
+	/**
+	 * @ticket BP8175
+	 */
+	public function test_xprofile_data_should_be_deleted_on_user_delete_non_multisite() {
+		if ( is_multisite() ) {
+			$this->markTestSkipped( __METHOD__ . ' requires non-multisite.' );
+		}
+
+		$u = self::factory()->user->create();
+
+		$fg = self::factory()->xprofile_group->create();
+		$f1 = self::factory()->xprofile_field->create(
+			array(
+				'field_group_id' => $fg,
+			)
+		);
+
+		xprofile_set_field_data( $f1, $u, 'foo' );
+		$this->assertSame( 'foo', xprofile_get_field_data( $f1, $u ) );
+
+		wp_delete_user( $u );
+
+		$this->assertSame( '', xprofile_get_field_data( $f1, $u ) );
+	}
+
+	/**
+	 * @ticket BP8175
+	 */
+	public function test_xprofile_data_should_be_deleted_on_user_delete_multisite() {
+		if ( ! is_multisite() ) {
+			$this->markTestSkipped( __METHOD__ . ' requires multisite.' );
+		}
+
+		$u = self::factory()->user->create();
+
+		$fg = self::factory()->xprofile_group->create();
+		$f1 = self::factory()->xprofile_field->create(
+			array(
+				'field_group_id' => $fg,
+			)
+		);
+
+		xprofile_set_field_data( $f1, $u, 'foo' );
+		$this->assertSame( 'foo', xprofile_get_field_data( $f1, $u ) );
+
+		wpmu_delete_user( $u );
+
+		$this->assertSame( '', xprofile_get_field_data( $f1, $u ) );
+	}
+
+	/**
+	 * @ticket BP8175
+	 */
+	public function test_xprofile_data_should_not_be_deleted_on_wp_delete_user_multisite() {
+		if ( ! is_multisite() ) {
+			$this->markTestSkipped( __METHOD__ . ' requires multisite.' );
+		}
+
+		$u = self::factory()->user->create();
+
+		$fg = self::factory()->xprofile_group->create();
+		$f1 = self::factory()->xprofile_field->create(
+			array(
+				'field_group_id' => $fg,
+			)
+		);
+
+		xprofile_set_field_data( $f1, $u, 'foo' );
+		$this->assertSame( 'foo', xprofile_get_field_data( $f1, $u ) );
+
+		wp_delete_user( $u );
+
+		$this->assertSame( 'foo', xprofile_get_field_data( $f1, $u ) );
+	}
 }
