Index: wp-admin/includes/ms.php
===================================================================
--- wp-admin/includes/ms.php	(revision 44358)
+++ wp-admin/includes/ms.php	(working copy)
@@ -308,59 +308,6 @@
 }
 
 /**
- * Update the status of a user in the database.
- *
- * Used in core to mark a user as spam or "ham" (not spam) in Multisite.
- *
- * @since 3.0.0
- *
- * @global wpdb $wpdb WordPress database abstraction object.
- *
- * @param int    $id         The user ID.
- * @param string $pref       The column in the wp_users table to update the user's status
- *                           in (presumably user_status, spam, or deleted).
- * @param int    $value      The new status for the user.
- * @param null   $deprecated Deprecated as of 3.0.2 and should not be used.
- * @return int   The initially passed $value.
- */
-function update_user_status( $id, $pref, $value, $deprecated = null ) {
-	global $wpdb;
-
-	if ( null !== $deprecated ) {
-		_deprecated_argument( __FUNCTION__, '3.0.2' );
-	}
-
-	$wpdb->update( $wpdb->users, array( sanitize_key( $pref ) => $value ), array( 'ID' => $id ) );
-
-	$user = new WP_User( $id );
-	clean_user_cache( $user );
-
-	if ( $pref == 'spam' ) {
-		if ( $value == 1 ) {
-			/**
-			 * Fires after the user is marked as a SPAM user.
-			 *
-			 * @since 3.0.0
-			 *
-			 * @param int $id ID of the user marked as SPAM.
-			 */
-			do_action( 'make_spam_user', $id );
-		} else {
-			/**
-			 * Fires after the user is marked as a HAM user. Opposite of SPAM.
-			 *
-			 * @since 3.0.0
-			 *
-			 * @param int $id ID of the user marked as HAM.
-			 */
-			do_action( 'make_ham_user', $id );
-		}
-	}
-
-	return $value;
-}
-
-/**
  * Cleans the user cache for a specific user.
  *
  * @since 3.0.0
Index: wp-admin/network/users.php
===================================================================
--- wp-admin/network/users.php	(revision 44358)
+++ wp-admin/network/users.php	(working copy)
@@ -81,7 +81,9 @@
 										update_blog_status( $details->userblog_id, 'spam', '1' );
 									}
 								}
-								update_user_status( $user_id, 'spam', '1' );
+								$user_data         = $user->to_array();
+								$user_data['spam'] = '1';
+								wp_update_user( $user_data );
 								break;
 
 							case 'notspam':
@@ -90,8 +92,10 @@
 								foreach ( (array) $blogs as $details ) {
 									update_blog_status( $details->userblog_id, 'spam', '0' );
 								}
-
-								update_user_status( $user_id, 'spam', '0' );
+								$user              = get_userdata( $user_id );
+								$user_data         = $user->to_array();
+								$user_data['spam'] = '0';
+								wp_update_user( $user_data );
 								break;
 						}
 					}
Index: wp-includes/ms-deprecated.php
===================================================================
--- wp-includes/ms-deprecated.php	(revision 44358)
+++ wp-includes/ms-deprecated.php	(working copy)
@@ -685,3 +685,60 @@
 
 	$wpdb->suppress_errors( $suppress );
 }
+
+/**
+ * Update the status of a user in the database.
+ *
+ * Used in core to mark a user as spam or "ham" (not spam) in Multisite.
+ *
+ * @since 3.0.0
+ * @deprecated 5.1.0
+ *
+ * @global wpdb $wpdb WordPress database abstraction object.
+ *
+ * @param int    $id         The user ID.
+ * @param string $pref       The column in the wp_users table to update the user's status
+ *                           in (presumably user_status, spam, or deleted).
+ * @param int    $value      The new status for the user.
+ * @param null   $deprecated Deprecated as of 3.0.2 and should not be used.
+ * @return int   The initially passed $value.
+ */
+function update_user_status( $id, $pref, $value, $deprecated = null ) {
+	global $wpdb;
+
+
+	_deprecated_function( __FUNCTION__, '5.1.0', 'wp_update_user()' );
+
+	if ( null !== $deprecated ) {
+		_deprecated_argument( __FUNCTION__, '3.0.2' );
+	}
+
+	$wpdb->update( $wpdb->users, array( sanitize_key( $pref ) => $value ), array( 'ID' => $id ) );
+
+	$user = new WP_User( $id );
+	clean_user_cache( $user );
+
+	if ( $pref == 'spam' ) {
+		if ( $value == 1 ) {
+			/**
+			 * Fires after the user is marked as a SPAM user.
+			 *
+			 * @since 3.0.0
+			 *
+			 * @param int $id ID of the user marked as SPAM.
+			 */
+			do_action( 'make_spam_user', $id );
+		} else {
+			/**
+			 * Fires after the user is marked as a HAM user. Opposite of SPAM.
+			 *
+			 * @since 3.0.0
+			 *
+			 * @param int $id ID of the user marked as HAM.
+			 */
+			do_action( 'make_ham_user', $id );
+		}
+	}
+
+	return $value;
+}
\ No newline at end of file
Index: wp-includes/user.php
===================================================================
--- wp-includes/user.php	(revision 44358)
+++ wp-includes/user.php	(working copy)
@@ -1625,6 +1625,35 @@
 	}
 	$nickname = empty( $userdata['nickname'] ) ? $user_login : $userdata['nickname'];
 
+
+	if ( isset( $userdata['spam'] ) ) {
+		if ( ! is_multisite() ) {
+			return new WP_Error( 'no_spam', __( 'Sorry, spam is only supported on multisite.' ) );
+		}
+		if ( $update && $userdata['spam'] != $old_user_data->spam ) {
+			if ( $userdata['spam'] == 1 ) {
+				/**
+				 * Fires after the user is marked as a SPAM user.
+				 *
+				 * @since 3.0.0
+				 *
+				 * @param int $id ID of the user marked as SPAM.
+				 */
+				do_action( 'make_spam_user', $ID );
+			} else {
+				/**
+				 * Fires after the user is marked as a HAM user. Opposite of SPAM.
+				 *
+				 * @since 3.0.0
+				 *
+				 * @param int $id ID of the user marked as HAM.
+				 */
+				do_action( 'make_ham_user', $ID );
+			}
+
+		}
+	}
+
 	/**
 	 * Filters a user's nickname before the user is created or updated.
 	 *
