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-includes/meta.php
===================================================================
--- wp-includes/meta.php	(revision 17041)
+++ wp-includes/meta.php	(working copy)
@@ -386,19 +386,30 @@
 	$i = 0;
 	foreach ( $meta_query as $q ) {
 		$meta_key = isset( $q['key'] ) ? trim( $q['key'] ) : '';
-		$meta_value = isset( $q['value'] ) ? $q['value'] : '';
+
 		$meta_compare = isset( $q['compare'] ) ? strtoupper( $q['compare'] ) : '=';
-		$meta_type = isset( $q['type'] ) ? strtoupper( $q['type'] ) : 'CHAR';
-
-		if ( ! in_array( $meta_compare, array( '=', '!=', '>', '>=', '<', '<=', 'LIKE', 'NOT LIKE', 'IN', 'NOT IN', 'BETWEEN', 'NOT BETWEEN' ) ) )
+		if ( ! in_array( $meta_compare, array( '=', '!=', '>', '>=', '<', '<=', 'LIKE', 'NOT LIKE', 'IN', 'NOT IN', 'BETWEEN', 'NOT BETWEEN' ) ) ) {
 			$meta_compare = '=';
+		}
 
-		if ( 'NUMERIC' == $meta_type )
+		$meta_value = isset( $q['value'] ) ? $q['value'] : '';
+		if ( in_array( $meta_compare, array( 'IN', 'NOT IN', 'BETWEEN', 'NOT BETWEEN' ) ) ) {
+			if ( ! is_array( $meta_value ) )
+				$meta_value = preg_split( '/[,\s]+/', $meta_value );
+		} else {
+			$meta_value = trim( $meta_value );
+		}
+
+		$no_meta_value = ( '' === $meta_value || ( is_array( $meta_value ) && empty( $meta_value ) ) );
+
+		$meta_type = isset( $q['type'] ) ? strtoupper( $q['type'] ) : 'CHAR';
+		if ( 'NUMERIC' == $meta_type ) {
 			$meta_type = 'SIGNED';
-		elseif ( ! in_array( $meta_type, array( 'BINARY', 'CHAR', 'DATE', 'DATETIME', 'DECIMAL', 'SIGNED', 'TIME', 'UNSIGNED' ) ) )
+		} elseif ( ! in_array( $meta_type, array( 'BINARY', 'CHAR', 'DATE', 'DATETIME', 'DECIMAL', 'SIGNED', 'TIME', 'UNSIGNED' ) ) ) {
 			$meta_type = 'CHAR';
+		}
 
-		if ( empty( $meta_key ) && empty( $meta_value ) )
+		if ( empty( $meta_key ) && $no_meta_value )
 			continue;
 
 		$alias = $i ? 'mt' . $i : $meta_table;
@@ -412,14 +423,7 @@
 		if ( !empty( $meta_key ) )
 			$where .= $wpdb->prepare( " AND $alias.meta_key = %s", $meta_key );
 
-		if ( in_array( $meta_compare, array( 'IN', 'NOT IN', 'BETWEEN', 'NOT BETWEEN' ) ) ) {
-			if ( ! is_array( $meta_value ) )
-				$meta_value = preg_split( '/[,\s]+/', $meta_value );
-		} else {
-			$meta_value = trim( $meta_value );
-		}
-
-		if ( empty( $meta_value ) )
+		if ( $no_meta_value )
 			continue;
 
 		if ( 'IN' == substr( $meta_compare, -2) ) {
@@ -452,7 +456,7 @@
 
 	// Simple query needs to be first for orderby=meta_value to work correctly
 	foreach ( array( 'key', 'value', 'compare', 'type' ) as $key ) {
-		if ( !empty( $qv[ "meta_$key" ] ) )
+		if ( isset( $qv[ "meta_$key" ] ) )
 			$meta_query[0][ $key ] = $qv[ "meta_$key" ];
 	}
 
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_non_subscribers();
+
+				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_non_subscribers(),
 		'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,25 @@
 	return $button;
 }
 
+// Get list of users for the author metabox and quick edit dropdowns
+function _get_non_subscribers() {
+	global $wpdb, $blog_id;
+
+	$args = array(
+		'fields' => array( 'ID', 'display_name' ),
+		'orderby' => 'display_name',
+		'order' => 'ASC'
+	);
+
+	if ( !is_multisite() ) { // super-admins don't have user_levels
+		$args = array_merge( $args, array(
+			'meta_key' => $wpdb->get_blog_prefix( $blog_id ) . 'user_level',
+			'meta_value' => '0',
+			'meta_compare' => '!=',
+			'blog_id' => 0,	// avoid additional meta query
+		) );
+	}
+
+	return get_users( $args );
+}
+
