Index: wp-admin/admin-ajax.php
===================================================================
--- wp-admin/admin-ajax.php	(revision 17347)
+++ wp-admin/admin-ajax.php	(working copy)
@@ -189,7 +189,7 @@
  * @param int $comment_id
  * @return die
  */
-function _wp_ajax_delete_comment_response( $comment_id ) {
+function _wp_ajax_delete_comment_response( $comment_id, $delta = -1 ) {
 	$total = (int) @$_POST['_total'];
 	$per_page = (int) @$_POST['_per_page'];
 	$page = (int) @$_POST['_page'];
@@ -198,43 +198,38 @@
 	if ( !$total || !$per_page || !$page || !$url )
 		die( (string) time() );
 
-	if ( --$total < 0 ) // Take the total from POST and decrement it (since we just deleted one)
+	$total += $delta;
+	if ( $total < 0 )
 		$total = 0;
 
-	if ( 0 != $total % $per_page && 1 != mt_rand( 1, $per_page ) ) // Only do the expensive stuff on a page-break, and about 1 other time per page
-		die( (string) time() );
+	// Only do the expensive stuff on a page-break, and about 1 other time per page
+	if ( 0 == $total % $per_page || 1 == mt_rand( 1, $per_page ) ) {
+		$post_id = 0;
+		$status = 'total_comments'; // What type of comment count are we looking for?
+		$parsed = parse_url( $url );
+		if ( isset( $parsed['query'] ) ) {
+			parse_str( $parsed['query'], $query_vars );
+			if ( !empty( $query_vars['comment_status'] ) )
+				$status = $query_vars['comment_status'];
+			if ( !empty( $query_vars['p'] ) )
+				$post_id = (int) $query_vars['p'];
+		}
 
-	$post_id = 0;
-	$status = 'total_comments'; // What type of comment count are we looking for?
-	$parsed = parse_url( $url );
-	if ( isset( $parsed['query'] ) ) {
-		parse_str( $parsed['query'], $query_vars );
-		if ( !empty( $query_vars['comment_status'] ) )
-			$status = $query_vars['comment_status'];
-		if ( !empty( $query_vars['p'] ) )
-			$post_id = (int) $query_vars['p'];
+		$comment_count = wp_count_comments($post_id);
+
+		if ( isset( $comment_count->$status ) ) // We're looking for a known type of comment count
+			$total = $comment_count->$status;
+			// else use the decremented value from above
 	}
 
-	$comment_count = wp_count_comments($post_id);
 	$time = time(); // The time since the last comment count
 
-	if ( isset( $comment_count->$status ) ) // We're looking for a known type of comment count
-		$total = $comment_count->$status;
-	// else use the decremented value from above
-
-	$page_links = paginate_links( array(
-		'base' => add_query_arg( 'apage', '%#%', $url ),
-		'format' => '',
-		'prev_text' => __('&laquo;'),
-		'next_text' => __('&raquo;'),
-		'total' => ceil($total / $per_page),
-		'current' => $page
-	) );
 	$x = new WP_Ajax_Response( array(
 		'what' => 'comment',
 		'id' => $comment_id, // here for completeness - not used
 		'supplemental' => array(
-			'pageLinks' => $page_links,
+			'total_items_i18n' => sprintf( _n( '1 item', '%s items', $total ), number_format_i18n( $total ) ),
+			'total_pages_i18n' => number_format_i18n( ceil( $total / $per_page ) ),
 			'total' => $total,
 			'time' => $time
 		)
@@ -331,6 +326,7 @@
 	check_ajax_referer( "delete-comment_$id" );
 	$status = wp_get_comment_status( $comment->comment_ID );
 
+	$delta = -1;
 	if ( isset($_POST['trash']) && 1 == $_POST['trash'] ) {
 		if ( 'trash' == $status )
 			die( (string) time() );
@@ -339,6 +335,8 @@
 		if ( 'trash' != $status )
 			die( (string) time() );
 		$r = wp_untrash_comment( $comment->comment_ID );
+		if ( ! isset( $_POST['comment_status'] ) || $_POST['comment_status'] != 'trash' ) // undo trash, not in trash
+			$delta = 1;
 	} elseif ( isset($_POST['spam']) && 1 == $_POST['spam'] ) {
 		if ( 'spam' == $status )
 			die( (string) time() );
@@ -347,6 +345,8 @@
 		if ( 'spam' != $status )
 			die( (string) time() );
 		$r = wp_unspam_comment( $comment->comment_ID );
+		if ( ! isset( $_POST['comment_status'] ) || $_POST['comment_status'] != 'spam' ) // undo spam, not in spam
+			$delta = 1;
 	} elseif ( isset($_POST['delete']) && 1 == $_POST['delete'] ) {
 		$r = wp_delete_comment( $comment->comment_ID );
 	} else {
@@ -354,7 +354,7 @@
 	}
 
 	if ( $r ) // Decide if we need to send back '1' or a more complicated response including page links and comment counts
-		_wp_ajax_delete_comment_response( $comment->comment_ID );
+		_wp_ajax_delete_comment_response( $comment->comment_ID, $delta );
 	die( '0' );
 	break;
 case 'delete-tag' :
Index: wp-admin/js/edit-comments.dev.js
===================================================================
--- wp-admin/js/edit-comments.dev.js	(revision 17347)
+++ wp-admin/js/edit-comments.dev.js	(working copy)
@@ -4,9 +4,9 @@
 setCommentsList = function() {
 	var totalInput, perPageInput, pageInput, lastConfidentTime = 0, dimAfter, delBefore, updateTotalCount, delAfter;
 
-	totalInput = $('.tablenav input[name="_total"]', '#comments-form');
-	perPageInput = $('.tablenav input[name="_per_page"]', '#comments-form');
-	pageInput = $('.tablenav input[name="_page"]', '#comments-form');
+	totalInput = $('input[name="_total"]', '#comments-form');
+	perPageInput = $('input[name="_per_page"]', '#comments-form');
+	pageInput = $('input[name="_page"]', '#comments-form');
 
 	dimAfter = function( r, settings ) {
 		var c = $('#' + settings.element);
@@ -38,6 +38,7 @@
 		settings.data._per_page = perPageInput.val() || 0;
 		settings.data._page = pageInput.val() || 0;
 		settings.data._url = document.location.href;
+		settings.data.comment_status = $('input[name=comment_status]', '#comments-form').val();
 
 		if ( cl.indexOf(':trash=1') != -1 )
 			action = 'trash';
@@ -191,13 +192,13 @@
 			if ( total < 0 )
 				total = 0;
 
-			if ( ( 'object' == typeof r ) && lastConfidentTime < settings.parsed.responses[0].supplemental.time ) {
-				pageLinks = settings.parsed.responses[0].supplemental.pageLinks || '';
-				if ( $.trim( pageLinks ) )
-					$('.tablenav-pages').find( '.page-numbers' ).remove().end().append( $( pageLinks ) );
-				else
-					$('.tablenav-pages').find( '.page-numbers' ).remove();
-
+			if ( lastConfidentTime < settings.parsed.responses[0].supplemental.time ) {
+				total_items_i18n = settings.parsed.responses[0].supplemental.total_items_i18n || '';
+				console.log( total_items_i18n );
+				if ( total_items_i18n ) {
+					$('.displaying-num').text( total_items_i18n );
+					$('.total-pages').text( settings.parsed.responses[0].supplemental.total_pages_i18n );
+				}
 				updateTotalCount( total, settings.parsed.responses[0].supplemental.time, true );
 			} else {
 				updateTotalCount( total, r, false );
