Index: bp-members/bp-members-functions.php
===================================================================
--- bp-members/bp-members-functions.php
+++ bp-members/bp-members-functions.php
@@ -642,52 +642,59 @@ add_action( 'make_ham_user', 'bp_core_mark_user_ham_admin' );
  * Checks if the user has been marked as a spammer.
  *
  * @package BuddyPress Core
- * @param int $user_id int The id for the user.
+ * @param int|WP_User $user If integer, pass the user ID. Otherwise, pass the
+ *  WP_User object.
  * @return bool True if spammer, False if not.
  */
-function bp_is_user_spammer( $user_id = 0 ) {
+function bp_is_user_spammer( $user = 0 ) {
 
 	// No user to check
-	if ( empty( $user_id ) )
+	if ( empty( $user ) )
 		return false;
 
-	$bp = buddypress();
-
 	// Assume user is not spam
 	$is_spammer = false;
 
-	// Setup our user
-	$user = false;
+	// If $user is numeric, get the user data
+	if( ! is_a( $user, 'WP_User' ) && is_numeric( $user ) ) {
 
-	// Get locally-cached data if available
-	switch ( $user_id ) {
-		case bp_loggedin_user_id() :
-			$user = ! empty( $bp->loggedin_user->userdata ) ? $bp->loggedin_user->userdata : false;
-			break;
+		$user_id = $user;
 
-		case bp_displayed_user_id() :
-			$user = ! empty( $bp->displayed_user->userdata ) ? $bp->displayed_user->userdata : false;
-			break;
-	}
+		$bp = buddypress();
 
-	// Manually get userdata if still empty
-	if ( empty( $user ) ) {
-		$user = get_userdata( $user_id );
-	}
+		// Get locally-cached userdata if available
+		switch ( $user_id ) {
+			case bp_loggedin_user_id() :
+				$user = ! empty( $bp->loggedin_user->userdata ) ? $bp->loggedin_user->userdata : false;
+				break;
 
-	// No user found
-	if ( empty( $user ) ) {
-		$is_spammer = false;
+			case bp_displayed_user_id() :
+				$user = ! empty( $bp->displayed_user->userdata ) ? $bp->displayed_user->userdata : false;
+				break;
+		}
 
-	// User found
-	} else {
+		// Manually get userdata if still empty
+		if ( empty( $user ) ) {
+			$user = get_userdata( $user_id );
+		}
 
-		// Check if spam
-		if ( !empty( $user->spam ) )
-			$is_spammer = true;
+	}
 
-		if ( 1 == $user->user_status )
-			$is_spammer = true;
+	// Spam check
+	if ( ! empty( $user ) ) {
+
+		// Multisite
+		if ( is_multisite() ) {
+			if ( ! empty( $user->spam ) ) {
+				$is_spammer = true;
+			}
+
+		// Single-site
+		} else {
+			if ( 1 == $user->user_status ) {
+				$is_spammer = true;
+			}
+		}
 	}
 
 	return apply_filters( 'bp_is_user_spammer', (bool) $is_spammer );
@@ -973,8 +980,9 @@ function bp_core_boot_spammer( $user ) {
 
 	// the user exists; now do a check to see if the user is a spammer
 	// if the user is a spammer, stop them in their tracks!
-	if ( is_a( $user, 'WP_User' ) && ( ( is_multisite() && (int) $user->spam ) || 1 == $user->user_status ) )
+	if ( bp_is_user_spammer( $user ) ) {
 		return new WP_Error( 'invalid_username', __( '<strong>ERROR</strong>: Your account has been marked as a spammer.', 'buddypress' ) );
+	}
 
 	// user is good to go!
 	return $user;
