Index: wp-includes/user.php
===================================================================
--- wp-includes/user.php	(revision 23302)
+++ wp-includes/user.php	(working copy)
@@ -1023,12 +1023,19 @@
 		'include' => '', 'exclude' => '', 'multi' => 0,
 		'show' => 'display_name', 'echo' => 1,
 		'selected' => 0, 'name' => 'user', 'class' => '', 'id' => '',
-		'blog_id' => $GLOBALS['blog_id'], 'who' => '', 'include_selected' => false
+		'blog_id' => $GLOBALS['blog_id'], 'who' => '', 'include_selected' => false,
+		'select_max' => 1000, 'suggest_max' => false, 'autocomplete' => false,
 	);
 
 	$defaults['selected'] = is_author() ? get_query_var( 'author' ) : 0;
 
 	$r = wp_parse_args( $args, $defaults );
+
+	//lets bail if we have a large network or a ton of users
+	$site_user_count = get_user_count();
+	if( $site_user_count > $r['select_max'] OR @$r['autocomplete'] ) 
+		return wp_suggest_users( $r );
+	
 	extract( $r, EXTR_SKIP );
 
 	$query_args = wp_array_slice_assoc( $r, array( 'blog_id', 'include', 'exclude', 'orderby', 'order', 'who' ) );
@@ -1082,6 +1089,71 @@
 }
 
 /**
+ * Create an autocomplete HTML field for users.
+ *
+ * The content can either be displayed, which it is by default or retrieved by
+ * setting the 'echo' argument. The 'include' and 'exclude' arguments do not
+ * need to be used; all users will be displayed in that case. Only one can be
+ * used, either 'include' or 'exclude', but not both.
+ * @todo Document options
+ * @todo pass include exclude values to JS
+ * @todo test front end usage
+ *
+**/
+function wp_suggest_users( $args ) {
+	$defaults = array(
+		'include' => '', 'exclude' => '', 'multi' => 0, 'type'=> 'search',
+		'show' => 'display_name', 'echo' => 1, 'selected' => 0, 
+		'name' => 'user', 'class' => '', 'id' => 'user',
+		'blog_id' => $GLOBALS['blog_id'], 'who' => '', 'include_selected' => false,
+		'table_wrap' => true, 'limit' => 1000, 
+	);
+
+	$defaults['selected'] = is_author() ? get_query_var( 'author' ) : 0;
+
+	extract( wp_parse_args( $args, $defaults ), EXTR_SKIP );	
+	
+	wp_enqueue_script('user-suggest');
+	
+	//if a selected user was passed lets's get their display fiels
+	if( $selected > 0 ) {
+		if( is_array( $selected ) ) {
+			$users = array();
+			foreach( $selected as $user ) {
+				$user = get_userdata( $user );
+				$users[] = $user->data->$show;
+			}
+			$selected = implode(', ', $users);
+		} else {
+			$user = get_userdata( $selected );
+			$selected = $user->data->$show;
+			$selected_value = $user->data->ID;
+		}
+	} else {
+		$selected = false;
+	}
+
+	
+	$output = '';
+	$label = __('E-mail or Username');
+	$label = "<label for='post_author'>$label</label>";
+	$input = "<input name='$name' type='text' id='$id' class='wp-suggest-user $class' data-original='$selected' data-target='$name' data-type='$type' data-limit='$limit' data-return-field='$show' data-include='$include' data-exclude='$exclude' value='$selected' />\n";
+	
+	//if we're in the admin lets wrap in the standard form table class
+	if( is_admin() OR @$table_wrap )
+		$output = "<table class='form-table'><tr class='form-field'>\n<th scope='row'>$label</th>\n<td>$input\n</td>\n</tr></table>";
+	else 
+		$output = "$label\n$input";
+	
+	$output = apply_filters( 'wp-suggest-users', $output );
+
+	if( $echo ) 
+		echo $output;
+	
+	return $output;
+}
+
+/**
  * Sanitize user field based on context.
  *
  * Possible context values are:  'raw', 'edit', 'db', 'display', 'attribute' and 'js'. The
Index: wp-admin/includes/ajax-actions.php
===================================================================
--- wp-admin/includes/ajax-actions.php	(revision 23302)
+++ wp-admin/includes/ajax-actions.php	(working copy)
@@ -167,6 +167,8 @@
 
 	$include_blog_users = ( $type == 'search' ? get_users( array( 'blog_id' => $id, 'fields' => 'ID' ) ) : array() );
 	$exclude_blog_users = ( $type == 'add' ? get_users( array( 'blog_id' => $id, 'fields' => 'ID' ) ) : array() );
+	
+	$number = @$_REQUEST['number'] ?: '';
 
 	$users = get_users( array(
 		'blog_id' => false,
@@ -174,14 +176,18 @@
 		'include' => $include_blog_users,
 		'exclude' => $exclude_blog_users,
 		'search_columns' => array( 'user_login', 'user_nicename', 'user_email' ),
+		'number'  => $number, 
 	) );
 
+	$return_field = @$_REQUEST['return_field'] ?: 'user_login';
+
 	foreach ( $users as $user ) {
 		$return[] = array(
 			/* translators: 1: user_login, 2: user_email */
 			'label' => sprintf( __( '%1$s (%2$s)' ), $user->user_login, $user->user_email ),
-			'value' => $user->user_login,
+			'value' => $user->$return_field,
 		);
+		
 	}
 
 	wp_die( json_encode( $return ) );
Index: wp-admin/includes/post.php
===================================================================
--- wp-admin/includes/post.php	(revision 23302)
+++ wp-admin/includes/post.php	(working copy)
@@ -56,6 +56,14 @@
 		$post_data['user_ID'] = $GLOBALS['user_ID'];
 
 	if (!empty ( $post_data['post_author_override'] ) ) {
+		if( is_string( $post_data['post_author_override'] ) ) {
+			//check for commas cuz we can only have one
+			$postauthor = $post_data['post_author_override'];
+			if(  strpos( $postpostauthor , ',') )
+				$postauthor = substr( $postauthor , 0,  strpos( $postauthor , ',')  );
+			$postauthor = get_user_by( 'login', $postauthor );
+			$post_data['post_author_override'] = $postauthor->data->ID;
+		}
 		$post_data['post_author'] = (int) $post_data['post_author_override'];
 	} else {
 		if (!empty ( $post_data['post_author'] ) ) {
Index: wp-admin/includes/meta-boxes.php
===================================================================
--- wp-admin/includes/meta-boxes.php	(revision 23302)
+++ wp-admin/includes/meta-boxes.php	(working copy)
@@ -591,7 +591,9 @@
 		'who' => 'authors',
 		'name' => 'post_author_override',
 		'selected' => empty($post->ID) ? $user_ID : $post->post_author,
-		'include_selected' => true
+		'include_selected' => true,
+		'limit' 	=> 100,
+		'show'		=> 'user_login',
 	) );
 }
 
@@ -979,4 +981,4 @@
 function post_thumbnail_meta_box( $post ) {
 	$thumbnail_id = get_post_meta( $post->ID, '_thumbnail_id', true );
 	echo _wp_post_thumbnail_html( $thumbnail_id, $post->ID );
-}
\ No newline at end of file
+}
Index: wp-admin/js/user-suggest.js
===================================================================
--- wp-admin/js/user-suggest.js	(revision 23302)
+++ wp-admin/js/user-suggest.js	(working copy)
@@ -1,8 +1,15 @@
 (function($) {
 	var id = 'undefined' !== typeof current_site_id ? '&site_id=' + current_site_id : '';
-	$(document).ready( function() {
+	$(document).ready( function() { 
+		var type = $('.wp-suggest-user').attr('data-type');
+		type = 'undefined' !== typeof type ? '&autocomplete_type=' + type : '';
+		var return_field = $('.wp-suggest-user').attr('data-return-field');
+		return_field = 'undefined' !== typeof return_field ? '&return_field=' + return_field : '';
+		var limit = $('.wp-suggest-user').attr('data-limit');
+		limit = 'undefined' !== typeof limit ? '&number=' + limit : '' ;
+
 		$( '.wp-suggest-user' ).autocomplete({
-			source:    ajaxurl + '?action=autocomplete-user&autocomplete_type=add' + id,
+			source:    ajaxurl + '?action=autocomplete-user' + type + id + return_field + limit,
 			delay:     500,
 			minLength: 2,
 			position:  ( 'undefined' !== typeof isRtl && isRtl ) ? { my: 'right top', at: 'right bottom', offset: '0, -1' } : { offset: '0, -1' },
@@ -10,4 +17,4 @@
 			close:     function() { $(this).removeClass('open'); }
 		});
 	});
-})(jQuery);
\ No newline at end of file
+})(jQuery);
