diff --git src/bp-members/bp-members-functions.php src/bp-members/bp-members-functions.php
index 72a035d..28fc8f1 100644
--- src/bp-members/bp-members-functions.php
+++ src/bp-members/bp-members-functions.php
@@ -812,11 +812,8 @@ function bp_core_process_spammer_status( $user_id, $status, $do_wp_cleanup = tru
 			update_user_status( $user_id, 'spam', $is_spam );
 		}
 
-		// Always set single site status
-		$wpdb->update( $wpdb->users, array( 'user_status' => $is_spam ), array( 'ID' => $user_id ) );
-
 		// Call multisite actions in single site mode for good measure
-		if ( !is_multisite() ) {
+		if ( ! is_multisite() && ! $is_admin ) {
 			if ( true === $is_spam ) {
 
 				/**
@@ -843,6 +840,9 @@ function bp_core_process_spammer_status( $user_id, $status, $do_wp_cleanup = tru
 		}
 	}
 
+	// Always set user status
+	$wpdb->update( $wpdb->users, array( 'user_status' => $is_spam ), array( 'ID' => $user_id ) );
+
 	// Hide this user's activity
 	if ( ( true === $is_spam ) && bp_is_active( 'activity' ) ) {
 		bp_activity_hide_user_activity( $user_id );
diff --git tests/phpunit/testcases/core/functions.php tests/phpunit/testcases/core/functions.php
index c279066..d11a096 100644
--- tests/phpunit/testcases/core/functions.php
+++ tests/phpunit/testcases/core/functions.php
@@ -648,4 +648,94 @@ class BP_Tests_Core_Functions extends BP_UnitTestCase {
 			date_default_timezone_set( $tz_backup );
 		}
 	}
+
+	/**
+	 * @group bp_core_process_spammer_status
+	 */
+	public function test_bp_core_process_spammer_status() {
+		if ( is_multisite() ) {
+			return;
+		}
+
+		$bp = buddypress();
+		$displayed_user = $bp->displayed_user;
+
+		$u1 = $this->factory->user->create();
+		$bp->displayed_user->id = $u1;
+
+		// Spam the user
+		bp_core_process_spammer_status( $u1, 'spam' );
+
+		$this->assertTrue( bp_is_user_spammer( $u1 ) );
+
+		// Unspam the user
+		bp_core_process_spammer_status( $u1, 'ham' );
+
+		clean_user_cache( $u1 );
+
+		$this->assertFalse( bp_is_user_spammer( $u1 ) );
+
+		// Reset displayed user
+		$bp->displayed_user = $displayed_user;
+	}
+
+	/**
+	 * @group bp_core_process_spammer_status
+	 */
+	public function test_bp_core_process_spammer_status_ms_bulk_spam() {
+		if ( ! is_multisite() ) {
+			return;
+		}
+
+		$bp = buddypress();
+		$displayed_user = $bp->displayed_user;
+
+		$u1 = $this->factory->user->create();
+		$bp->displayed_user->id = $u1;
+
+		// Bulk spam in network admin uses update_user_status
+		update_user_status( $u1, 'spam', '1' );
+
+		$this->assertTrue( bp_is_user_spammer( $u1 ) );
+
+		// Unspam the user
+		bp_core_process_spammer_status( $u1, 'ham' );
+
+		clean_user_cache( $u1 );
+
+		$this->assertFalse( bp_is_user_spammer( $u1 ) );
+
+		// Reset displayed user
+		$bp->displayed_user = $displayed_user;
+	}
+
+	/**
+	 * @group bp_core_process_spammer_status
+	 */
+	public function test_bp_core_process_spammer_status_ms_bulk_ham() {
+		if ( ! is_multisite() ) {
+			return;
+		}
+
+		$bp = buddypress();
+		$displayed_user = $bp->displayed_user;
+
+		$u1 = $this->factory->user->create();
+		$bp->displayed_user->id = $u1;
+
+		// Spam the user
+		bp_core_process_spammer_status( $u1, 'spam' );
+
+		$this->assertTrue( bp_is_user_spammer( $u1 ) );
+
+		// Bulk unspam in network admin uses update_user_status
+		update_user_status( $u1, 'spam', '0' );
+
+		clean_user_cache( $u1 );
+
+		$this->assertFalse( bp_is_user_spammer( $u1 ) );
+
+		// Reset displayed user
+		$bp->displayed_user = $displayed_user;
+	}
 }
