Index: /Users/denis/Sites/sem-pro/wp-includes/registration.php
===================================================================
--- /Users/denis/Sites/sem-pro/wp-includes/registration.php	(revision 1218)
+++ /Users/denis/Sites/sem-pro/wp-includes/registration.php	(working copy)
@@ -176,14 +176,14 @@
 	if ( empty($user_registered) )
 		$user_registered = gmdate('Y-m-d H:i:s');
 
-	$data = compact( 'user_pass', 'user_email', 'user_url', 'user_nicename', 'display_name', 'user_registered' );
+	$data = compact( 'user_login', 'user_pass', 'user_email', 'user_url', 'user_nicename', 'display_name', 'user_registered' );
 	$data = stripslashes_deep( $data );
 
 	if ( $update ) {
 		$wpdb->update( $wpdb->users, $data, compact( 'ID' ) );
 		$user_id = (int) $ID;
 	} else {
-		$wpdb->insert( $wpdb->users, $data + compact( 'user_login' ) );
+		$wpdb->insert( $wpdb->users, $data );
 		$user_id = (int) $wpdb->insert_id;
 	}
 
@@ -256,12 +256,16 @@
 
 	// Merge old and new fields with new fields overwriting old ones.
 	$userdata = array_merge($user, $userdata);
+	
+	// Keep trace of current_user using current data
+	$current_user = wp_get_current_user();
+	
+	// Update user
 	$user_id = wp_insert_user($userdata);
 
 	// Update the cookies if the password changed.
-	$current_user = wp_get_current_user();
 	if ( $current_user->id == $ID ) {
-		if ( isset($plaintext_pass) ) {
+		if ( isset($plaintext_pass) || $user['user_login'] != $userdata['user_login'] ) {
 			wp_clear_auth_cookie();
 			wp_set_auth_cookie($ID);
 		}
Index: /Users/denis/Sites/sem-pro/wp-admin/includes/user.php
===================================================================
--- /Users/denis/Sites/sem-pro/wp-admin/includes/user.php	(revision 1218)
+++ /Users/denis/Sites/sem-pro/wp-admin/includes/user.php	(working copy)
@@ -176,6 +176,10 @@
 	if ( $errors->get_error_codes() )
 		return $errors;
 
+	if ( $update && $userdata->user_email == $userdata->user_login ) {
+		$user->user_login = $user->user_email;
+	}
+
 	if ( $update ) {
 		$user_id = wp_update_user( get_object_vars( $user ));
 	} else {
