Index: wp-includes/user.php
===================================================================
--- wp-includes/user.php	(revision 22117)
+++ wp-includes/user.php	(working copy)
@@ -559,6 +559,10 @@
 				$r[ $userid ] = new WP_User( $userid, '', $qv['blog_id'] );
 
 			$this->results = $r;
+		} elseif ( 'all' == $qv['fields'] ) {
+			foreach ( $this->results as $key => $user ) {
+				$this->results[ $key ] = new WP_User( $user );
+			}
 		}
 	}
 
Index: wp-includes/capabilities.php
===================================================================
--- wp-includes/capabilities.php	(revision 22118)
+++ wp-includes/capabilities.php	(working copy)
@@ -459,7 +459,7 @@
 	 * @since 2.0.0
 	 * @access public
 	 *
-	 * @param int|string $id User's ID
+	 * @param int|string|stdClass|WP_User $id User's ID, a WP_User object, or a user object from the DB.
 	 * @param string $name Optional. User's username
 	 * @param int $blog_id Optional Blog ID, defaults to current blog.
 	 * @return WP_User
@@ -477,6 +477,14 @@
 			);
 		}
 
+		if ( is_a( $id, 'WP_User' ) ) {
+			$this->init( $id->data, $blog_id );
+			return;
+		} elseif ( is_object( $id ) ) {
+			$this->init( $id, $blog_id );
+			return;
+		}
+
 		if ( ! empty( $id ) && ! is_numeric( $id ) ) {
 			$name = $id;
 			$id = 0;
