diff --git wp-includes/capabilities.php wp-includes/capabilities.php
index deb50ce..310d248 100644
--- wp-includes/capabilities.php
+++ wp-includes/capabilities.php
@@ -474,6 +474,7 @@ class WP_User {
 	 *
 	 * @param string $field The field to query against: 'id', 'slug', 'email' or 'login'
 	 * @param string|int $value The field value
+	 * @return object Raw user object
 	 */
 	static function get_data_by( $field, $value ) {
 		global $wpdb;
@@ -618,10 +619,10 @@ class WP_User {
 	 * property matching the 'cap_key' exists and is an array. If so, it will be
 	 * used.
 	 *
+	 * @access protected
 	 * @since 2.1.0
 	 *
 	 * @param string $cap_key Optional capability key
-	 * @access protected
 	 */
 	function _init_caps( $cap_key = '' ) {
 		global $wpdb;
diff --git wp-includes/user.php wp-includes/user.php
index e339eb5..f0bdd96 100644
--- wp-includes/user.php
+++ wp-includes/user.php
@@ -1353,17 +1353,11 @@ function wp_insert_user($userdata) {
 		$user_id = (int) $wpdb->insert_id;
 	}
 
-	update_user_meta( $user_id, 'first_name', $first_name );
-	update_user_meta( $user_id, 'last_name', $last_name );
-	update_user_meta( $user_id, 'nickname', $nickname );
-	update_user_meta( $user_id, 'description', $description );
-	update_user_meta( $user_id, 'rich_editing', $rich_editing );
-	update_user_meta( $user_id, 'comment_shortcuts', $comment_shortcuts );
-	update_user_meta( $user_id, 'admin_color', $admin_color );
-	update_user_meta( $user_id, 'use_ssl', $use_ssl );
-	update_user_meta( $user_id, 'show_admin_bar_front', $show_admin_bar_front );
-
-	$user = new WP_User($user_id);
+	foreach ( _get_additional_user_keys() as $key ) {
+		update_user_meta( $user_id, $key, $$key );
+	}
+
+	$user = new WP_User( $user_id );
 
 	foreach ( _wp_get_user_contactmethods( $user ) as $method => $name ) {
 		if ( empty($$method) )
@@ -1411,10 +1405,15 @@ function wp_update_user($userdata) {
 	$ID = (int) $userdata['ID'];
 
 	// First, get all of the original fields
-	$user = WP_User::get_data_by('id', $ID);
+	$user = get_object_vars( WP_User::get_data_by( 'id', $ID ) );
+
+	// Add additional custom fields
+	foreach ( _get_additional_user_keys() as $key ) {
+		$user[ $key ] = get_user_meta( $ID, $key, true );
+	}
 
 	// Escape data pulled from DB.
-	$user = add_magic_quotes(get_object_vars($user));
+	$user = add_magic_quotes( $user );
 
 	// If password is changing, hash it now.
 	if ( ! empty($userdata['user_pass']) ) {
@@ -1465,6 +1464,18 @@ function wp_create_user($username, $password, $email = '') {
 
 
 /**
+ * Return a list of meta keys that wp_insert_user() is supposed to set.
+ *
+ * @access private
+ * @since 3.3.0
+ *
+ * @return array
+ */
+function _get_additional_user_keys() {
+	return array( 'first_name', 'last_name', 'nickname', 'description', 'rich_editing', 'comment_shortcuts', 'admin_color', 'use_ssl', 'show_admin_bar_front' );
+}
+
+/**
  * Set up the default contact methods
  *
  * @access private
