Index: wp-login.php
===================================================================
--- wp-login.php	(revision 4864)
+++ wp-login.php	(working copy)
@@ -212,6 +212,7 @@
 		require_once( ABSPATH . WPINC . '/registration.php');
 
 		$user_login = sanitize_user( $_POST['user_login'] );
+		$user_nicename = sanitize_title( $user_login );
 		$user_email = apply_filters( 'user_registration_email', $_POST['user_email'] ); 
 
 		// Check the username
@@ -220,8 +221,9 @@
 		elseif ( !validate_username( $user_login ) ) {
 			$errors['user_login'] = __('<strong>ERROR</strong>: This username is invalid.  Please enter a valid username.');
 			$user_login = '';
-		} elseif ( username_exists( $user_login ) )
+		} elseif ( username_exists( $user_login ) || nicename_exists( $user_nicename ) ) {
 			$errors['user_login'] = __('<strong>ERROR</strong>: This username is already registered, please choose another one.');
+		}
 
 		// Check the e-mail address
 		if ($user_email == '') {
Index: wp-includes/pluggable.php
===================================================================
--- wp-includes/pluggable.php	(revision 4864)
+++ wp-includes/pluggable.php	(working copy)
@@ -149,11 +149,60 @@
 
 	wp_cache_add($user->ID, $user, 'users');
 	wp_cache_add($user->user_login, $user->ID, 'userlogins');
+	wp_cache_add($user->user_nicename, $user->ID, 'usernicenames');
 	return $user;
 
 }
 endif;
 
+if ( !function_exists('get_userdatabynicename') ) :
+function get_userdatabynicename($user_nicename) {
+	global $wpdb;
+	$user_nicename = sanitize_title( $user_nicename );
+
+	if ( empty( $user_nicename ) )
+		return false;
+
+	$user_id = wp_cache_get($user_nicename, 'usernicenames');
+	$userdata = wp_cache_get($user_id, 'users');
+
+	if ( $userdata )
+		return $userdata;
+
+	if ( !$user = $wpdb->get_row("SELECT * FROM $wpdb->users WHERE user_nicename = '$user_nicename'") )
+		return false;
+
+	$wpdb->hide_errors();
+	$metavalues = $wpdb->get_results("SELECT meta_key, meta_value FROM $wpdb->usermeta WHERE user_id = '$user->ID'");
+	$wpdb->show_errors();
+
+	if ($metavalues) {
+		foreach ( $metavalues as $meta ) {
+			$value = maybe_unserialize($meta->meta_value);
+			$user->{$meta->meta_key} = $value;
+
+			// We need to set user_level from meta, not row
+			if ( $wpdb->prefix . 'user_level' == $meta->meta_key )
+				$user->user_level = $meta->meta_value;
+		}
+	}
+
+	// For backwards compat.
+	if ( isset($user->first_name) )
+		$user->user_firstname = $user->first_name;
+	if ( isset($user->last_name) )
+		$user->user_lastname = $user->last_name;
+	if ( isset($user->description) )
+		$user->user_description = $user->description;
+
+	wp_cache_add($user->ID, $user, 'users');
+	wp_cache_add($user->user_login, $user->ID, 'userlogins');
+	wp_cache_add($user->user_nicename, $user->ID, 'usernicenames');
+	return $user;
+
+}
+endif;
+
 if ( !function_exists('wp_mail') ) :
 function wp_mail($to, $subject, $message, $headers = '') {
 	if( $headers == '' ) {
Index: wp-includes/registration.php
===================================================================
--- wp-includes/registration.php	(revision 4864)
+++ wp-includes/registration.php	(working copy)
@@ -11,6 +11,17 @@
 }
 
 
+function nicename_exists( $nicename ) {
+	global $wpdb;
+	$nicename = sanitize_title( $nicename );
+	$user = get_userdatabynicename( $nicename );
+	if ( $user )
+		return $user->ID;
+
+	return null;
+}
+
+
 function email_exists( $email ) {
 	global $wpdb;
 	$email = addslashes( $email );
@@ -181,4 +192,4 @@
 	return wp_create_user($username, $password, $email);
 }
 
-?>
\ No newline at end of file
+?>
