Index: wp-includes/post.php
===================================================================
--- wp-includes/post.php	(revision 22002)
+++ wp-includes/post.php	(working copy)
@@ -1989,7 +1989,7 @@
 
 	$user = wp_get_current_user();
 
-	$cache_key = $type;
+	$cache_key = 'posts-' . $type;
 
 	$query = "SELECT post_status, COUNT( * ) AS num_posts FROM {$wpdb->posts} WHERE post_type = %s";
 	if ( 'readable' == $perm && is_user_logged_in() ) {
@@ -2001,23 +2001,21 @@
 	}
 	$query .= ' GROUP BY post_status';
 
-	$count = wp_cache_get($cache_key, 'counts');
-	if ( false !== $count )
-		return $count;
+	$counts = wp_cache_get( $cache_key, 'counts' );
+	if ( false !== $counts )
+		return apply_filters( 'count_posts', $counts, $type, $perm );
 
-	$count = $wpdb->get_results( $wpdb->prepare( $query, $type ), ARRAY_A );
+	$results = (array) $wpdb->get_results( $wpdb->prepare( $query, $type ), ARRAY_A );
 
-	$stats = array();
-	foreach ( get_post_stati() as $state )
-		$stats[$state] = 0;
+	$counts = array_fill_keys( get_post_stati(), 0 );
 
-	foreach ( (array) $count as $row )
-		$stats[$row['post_status']] = $row['num_posts'];
+	foreach ( $results as $row )
+		$counts[ $row['post_status'] ] = $row['num_posts'];
 
-	$stats = (object) $stats;
-	wp_cache_set($cache_key, $stats, 'counts');
+	$counts = (object) $counts;
+	wp_cache_set( $cache_key, $counts, 'counts' );
 
-	return $stats;
+	return apply_filters( 'count_posts', $counts, $type, $perm );
 }
 
 /**
