Index: wp-admin/users.php
===================================================================
--- wp-admin/users.php	(revision 12877)
+++ wp-admin/users.php	(working copy)
@@ -265,22 +265,23 @@
 <?php
 $role_links = array();
 $avail_roles = array();
-$users_of_blog = get_users_of_blog();
-$total_users = count( $users_of_blog );
-foreach ( (array) $users_of_blog as $b_user ) {
-	$b_roles = unserialize($b_user->meta_value);
-	foreach ( (array) $b_roles as $b_role => $val ) {
-		if ( !isset($avail_roles[$b_role]) )
-			$avail_roles[$b_role] = 0;
-		$avail_roles[$b_role]++;
-	}
+$role_search = new WP_User_Search();
+$total_users = $role_search->total_users_for_query;
+$role_search->users_per_page = 1; //no need to get more than 1 result since we only need the count
+$registered_roles = $wp_roles->get_names();
+
+foreach( $registered_roles as $role_key => $role_name ) {
+	$role_search->role = $role_key;
+	$role_search->prepare_query();
+	$role_search->query();
+	if( $role_search->total_users_for_query > 0 )
+		$avail_roles[$role_key] = $role_search->total_users_for_query;
 }
-unset($users_of_blog);
 
 $current_role = false;
 $class = empty($role) ? ' class="current"' : '';
 $role_links[] = "<li><a href='users.php'$class>" . sprintf( _nx( 'All <span class="count">(%s)</span>', 'All <span class="count">(%s)</span>', $total_users, 'users' ), number_format_i18n( $total_users ) ) . '</a>';
-foreach ( $wp_roles->get_names() as $this_role => $name ) {
+foreach ( $registered_roles as $this_role => $name ) {
 	if ( !isset($avail_roles[$this_role]) )
 		continue;
 
