Index: wp-login.php
===================================================================
--- wp-login.php	(revision 11710)
+++ wp-login.php	(working copy)
@@ -95,9 +95,9 @@
 			}
 		}
 		if ( !empty($errors) )
-			echo '<div id="login_error">' . apply_filters('login_errors', $errors) . "</div>\n";
+			echo '<div id="login_error">' . apply_filters('login_errors', $errors, $wp_error) . "</div>\n";
 		if ( !empty($messages) )
-			echo '<p class="message">' . apply_filters('login_messages', $messages) . "</p>\n";
+			echo '<p class="message">' . apply_filters('login_messages', $messages, $wp_error) . "</p>\n";
 	}
 } // End of login_header()
 
Index: wp-includes/user.php
===================================================================
--- wp-includes/user.php	(revision 11710)
+++ wp-includes/user.php	(working copy)
@@ -51,8 +51,13 @@
 	$user = wp_authenticate($credentials['user_login'], $credentials['user_password']);
 
 	if ( is_wp_error($user) ) {
-		if ( $user->get_error_codes() == array('empty_username', 'empty_password') ) {
-			$user = new WP_Error('', '');
+		$error_codes = $user->get_error_codes();
+		// if both username and password are empty, don't bother showing those error messages
+		if ( in_array('empty_username', $error_codes) && in_array('empty_password', $error_codes) ) {
+			unset($user->errors['empty_username']);
+			unset($user->error_data['empty_username']);
+			unset($user->errors['empty_password']);
+			unset($user->error_data['empty_password']);
 		}
 
 		return $user;
@@ -72,7 +77,11 @@
 	if ( is_a($user, 'WP_User') ) { return $user; }
 
 	if ( empty($username) || empty($password) ) {
-		$error = new WP_Error();
+		if ( is_wp_error($user) ) {
+			$error = $user;
+		} else {
+			$error = new WP_Error();
+		}
 
 		if ( empty($username) )
 			$error->add('empty_username', __('<strong>ERROR</strong>: The username field is empty.'));
