Index: wp-admin/includes/default-list-tables.php
===================================================================
--- wp-admin/includes/default-list-tables.php	(revision 15737)
+++ wp-admin/includes/default-list-tables.php	(working copy)
@@ -24,7 +24,7 @@
 	 * Holds the number of pending comments for each post
 	 *
 	 * @since 3.1.0
-	 * @var bool
+	 * @var int
 	 * @access protected
 	 */
 	var $comment_pending_count;
@@ -33,11 +33,20 @@
 	 * Holds the number of posts for this user
 	 *
 	 * @since 3.1.0
-	 * @var bool
+	 * @var int
 	 * @access private
 	 */
 	var $user_posts_count;
 
+	/**
+	 * Holds the number of posts which are sticky.
+	 *
+	 * @since 3.1.0
+	 * @var int
+	 * @access private
+	 */
+	var $sticky_posts_count;
+
 	function WP_Posts_Table() {
 		global $post_type_object, $post_type, $current_screen, $wpdb;
 
@@ -58,10 +67,12 @@
 				AND post_author = %d
 			", $post_type, get_current_user_id() ) );
 
-			if ( $this->user_posts_count && empty( $_REQUEST['post_status'] ) && empty( $_REQUEST['all_posts'] ) && empty( $_REQUEST['author'] ) )
+			if ( $this->user_posts_count && empty( $_REQUEST['post_status'] ) && empty( $_REQUEST['all_posts'] ) && empty( $_REQUEST['author'] ) && empty( $_REQUEST['show_sticky'] ) )
 				$_GET['author'] = get_current_user_id();
 		}
 
+		$this->sticky_posts_count = $post_type == 'post' ? count( (array) get_option( 'sticky_posts' ) ) : 0;
+
 		parent::WP_List_Table( array(
 			'screen' => $current_screen,
 			'plural' => 'posts',
@@ -142,7 +153,7 @@
 		foreach ( get_post_stati( array('show_in_admin_all_list' => false) ) as $state )
 			$total_posts -= $num_posts->$state;
 
-		$class = empty($class) && empty($_REQUEST['post_status']) ? ' class="current"' : '';
+		$class = empty( $class ) && empty( $_REQUEST['post_status'] ) && empty( $_REQUEST['show_sticky'] ) ? ' class="current"' : '';
 		$status_links['all'] = "<li><a href='edit.php?post_type=$post_type{$allposts}'$class>" . sprintf( _nx( 'All <span class="count">(%s)</span>', 'All <span class="count">(%s)</span>', $total_posts, 'posts' ), number_format_i18n( $total_posts ) ) . '</a>';
 
 		foreach ( get_post_stati(array('show_in_admin_status_list' => true), 'objects') as $status ) {
@@ -161,7 +172,17 @@
 
 			$status_links[$status_name] = "<li><a href='edit.php?post_status=$status_name&amp;post_type=$post_type'$class>" . sprintf( _n( $status->label_count[0], $status->label_count[1], $num_posts->$status_name ), number_format_i18n( $num_posts->$status_name ) ) . '</a>';
 		}
-		
+
+		if ( ! empty( $this->sticky_posts_count ) ) {
+			$class = ! empty( $_REQUEST['show_sticky'] ) ? ' class="current"' : '';
+			
+			$sticky_link = array( 'sticky' => "<li><a href='edit.php?post_type=$post_type&amp;show_sticky=1'$class>" . sprintf( _nx( 'Sticky <span class="count">(%s)</span>', 'Sticky <span class="count">(%s)</span>', $this->sticky_posts_count, 'posts' ), number_format_i18n( $this->sticky_posts_count ) ) . '</a>' );
+
+			// Sticky comes after Publish, or if not listed, after All.
+			$split = 1 + array_search( ( isset( $status_links['publish'] ) ? 'publish' : 'all' ), array_keys( $status_links ) );
+			$status_links = array_merge( array_slice( $status_links, 0, $split ), $sticky_link, array_slice( $status_links, $split ) );
+		}
+
 		return $status_links;
 	}
 
Index: wp-admin/includes/post.php
===================================================================
--- wp-admin/includes/post.php	(revision 15737)
+++ wp-admin/includes/post.php	(working copy)
@@ -853,8 +853,11 @@
 		$query['posts_per_archive_page'] = -1;
 	}
 
-	wp( $query );
+	if ( ! empty( $q['show_sticky'] ) )
+		$query['post__in'] = (array) get_option( 'sticky_posts' );
 
+	query_posts( $query );
+
 	return $avail_post_stati;
 }
 
@@ -920,7 +923,7 @@
 	if ( isset($q['detached']) )
 		add_filter('posts_where', '_edit_attachments_query_helper');
 
-	wp($q);
+	query_posts( $q );
 
 	if ( isset($q['detached']) )
 		remove_filter('posts_where', '_edit_attachments_query_helper');
