Index: wp-includes/user.php
===================================================================
--- wp-includes/user.php	(revision 17041)
+++ wp-includes/user.php	(working copy)
@@ -961,6 +961,7 @@
  * <li>id - Default is the value of the 'name' parameter. ID attribute of select element.</li>
  * <li>class - Class attribute of select element.</li>
  * <li>blog_id - ID of blog (Multisite only). Defaults to ID of current blog.</li>
+ * <li>users - Raw array of users.</li>
  * </ol>
  *
  * @since 2.3.0
@@ -970,14 +971,13 @@
  * @return string|null Null on display. String of HTML content on retrieve.
  */
 function wp_dropdown_users( $args = '' ) {
-	global $wpdb;
 	$defaults = array(
 		'show_option_all' => '', 'show_option_none' => '',
 		'orderby' => 'display_name', 'order' => 'ASC',
 		'include' => '', 'exclude' => '', 'multi' => 0,
 		'show' => 'display_name', 'echo' => 1,
-		'selected' => 0, 'name' => 'user', 'class' => '', 'blog_id' => $GLOBALS['blog_id'],
-		'id' => '',
+		'selected' => 0, 'name' => 'user', 'class' => '', 'id' => '',
+		'blog_id' => $GLOBALS['blog_id'], 'users' => null
 	);
 
 	$defaults['selected'] = is_author() ? get_query_var( 'author' ) : 0;
@@ -985,11 +985,12 @@
 	$r = wp_parse_args( $args, $defaults );
 	extract( $r, EXTR_SKIP );
 
-	$query_args = wp_array_slice_assoc( $r, array( 'blog_id', 'include', 'exclude', 'orderby', 'order' ) );
-	$query_args['fields'] = array( 'ID', $show );
+	if ( is_null( $users ) ) {
+		$query_args = wp_array_slice_assoc( $r, array( 'blog_id', 'include', 'exclude', 'orderby', 'order' ) );
+		$query_args['fields'] = array( 'ID', $show );
+		$users = get_users( $query_args );
+	}
 
-	$users = get_users( $query_args );
-
 	$output = '';
 	if ( !empty($users) ) {
 		$name = esc_attr( $name );
Index: wp-admin/includes/class-wp-posts-list-table.php
===================================================================
--- wp-admin/includes/class-wp-posts-list-table.php	(revision 17041)
+++ wp-admin/includes/class-wp-posts-list-table.php	(working copy)
@@ -757,25 +757,29 @@
 				<?php touch_time( 1, 1, 4, 1 ); ?>
 			</div>
 			<br class="clear" />
-
 	<?php endif; // $bulk
 
 		if ( post_type_supports( $screen->post_type, 'author' ) ) :
 			$authors_dropdown = '';
 
 			if ( is_super_admin() || current_user_can( $post_type_object->cap->edit_others_posts ) ) :
-				$users_opt = array(
-					'name' => 'post_author',
-					'class'=> 'authors',
-					'multi' => 1,
-					'echo' => 0
-				);
-				if ( $bulk )
-					$users_opt['show_option_none'] = __( '&mdash; No Change &mdash;' );
-				$authors_dropdown  = '<label>';
-				$authors_dropdown .= '<span class="title">' . __( 'Author' ) . '</span>';
-				$authors_dropdown .= wp_dropdown_users( $users_opt );
-				$authors_dropdown .= '</label>';
+				$users = _get_potential_authors();
+
+				if ( count( $users ) > 1 ) :	
+					$users_opt = array(
+						'users' => $users,
+						'name' => 'post_author',
+						'class'=> 'authors',
+						'multi' => 1,
+						'echo' => 0
+					);
+					if ( $bulk )
+						$users_opt['show_option_none'] = __( '&mdash; No Change &mdash;' );
+					$authors_dropdown  = '<label>';
+					$authors_dropdown .= '<span class="title">' . __( 'Author' ) . '</span>';
+					$authors_dropdown .= wp_dropdown_users( $users_opt );
+					$authors_dropdown .= '</label>';
+				endif;
 			endif; // authors
 	?>
 
Index: wp-admin/includes/meta-boxes.php
===================================================================
--- wp-admin/includes/meta-boxes.php	(revision 17041)
+++ wp-admin/includes/meta-boxes.php	(working copy)
@@ -530,11 +530,11 @@
  */
 function post_author_meta_box($post) {
 	global $user_ID;
-
 ?>
 <label class="screen-reader-text" for="post_author_override"><?php _e('Author'); ?></label>
 <?php
 	wp_dropdown_users( array(
+		'users' => _get_potential_authors(),
 		'name' => 'post_author_override',
 		'selected' => empty($post->ID) ? $user_ID : $post->post_author
 	) );
Index: wp-admin/includes/template.php
===================================================================
--- wp-admin/includes/template.php	(revision 17041)
+++ wp-admin/includes/template.php	(working copy)
@@ -2171,3 +2171,33 @@
 	return $button;
 }
 
+// Get list of users for the author metabox and quick edit dropdowns
+function _get_potential_authors() {
+	global $post_type, $wp_roles, $wpdb, $blog_id;
+
+	$post_type_obj = get_post_type_object( $post_type );
+
+	$roles = array();
+	foreach ( $wp_roles->role_objects as $role => $role_obj ) {
+		if ( !$role_obj->has_cap( $post_type_obj->cap->edit_posts ) )
+			$roles[] = $role;
+	}
+
+	$meta_query = array();
+	foreach ( $roles as $role ) {
+		$meta_query[] = array(
+			'key' => $wpdb->get_blog_prefix( $blog_id ) . 'capabilities',
+			'value' => '"' . $role . '"',
+			'compare' => 'NOT LIKE',
+		);
+	}
+
+	return get_users( array(
+		'fields' => array( 'ID', 'display_name' ),
+		'meta_query' => $meta_query,
+		'blog_id' => 0,	// avoid additional meta query
+		'orderby' => 'display_name',
+		'order' => 'ASC'
+	) );
+}
+
