diff --git wp-admin/admin-ajax.php wp-admin/admin-ajax.php
index d2a8d4d..2c57750 100644
--- wp-admin/admin-ajax.php
+++ wp-admin/admin-ajax.php
@@ -665,7 +665,9 @@ case 'replyto-comment' :
 	$comment_id = wp_new_comment( $commentdata );
 	$comment = get_comment($comment_id);
 	if ( ! $comment ) die('1');
-
+	
+	$parent = get_comment( $comment_parent );
+	
 	$position = ( isset($_POST['position']) && (int) $_POST['position']) ? (int) $_POST['position'] : '-1';
 
 	$x = new WP_Ajax_Response();
@@ -684,14 +686,33 @@ case 'replyto-comment' :
 		}
 		$comment_list_item = ob_get_contents();
 	ob_end_clean();
-
-	$x->add( array(
+	
+	$response = array(
 		'what' => 'comment',
 		'id' => $comment->comment_ID,
 		'data' => $comment_list_item,
 		'position' => $position
-	));
-
+	);
+	
+	// automatically approve parent comment
+	if ( ! $parent->comment_approved ) {
+		if ( ! wp_update_comment( array( 'comment_ID' => $comment_parent, 'comment_approved' => 'approve' ) ) )
+			die( '1' );
+		
+		// include total_items_i18n to update total item number
+		if ( $_POST['status'] == 'moderated' ) {
+			$total = wp_count_comments()->moderated;
+			$per_page = (int) $_POST['_per_page'];
+			$response['supplemental'] = array(
+				'total_items_i18n' => sprintf( _n( '1 item', '%s items', $total ), number_format_i18n( $total ) ),
+				'total_pages' => ceil( $total / $per_page ),
+				'total_pages_i18n' => number_format_i18n( ceil( $total / $per_page ) ),
+				'total' => $total,
+				'time' => time()
+			);
+		}
+	}
+	$x->add( $response );
 	$x->send();
 	break;
 case 'edit-comment' :
diff --git wp-admin/css/wp-admin.dev.css wp-admin/css/wp-admin.dev.css
index 8506810..fc1b7bd 100644
--- wp-admin/css/wp-admin.dev.css
+++ wp-admin/css/wp-admin.dev.css
@@ -1373,6 +1373,14 @@ table.fixed {
 #comments-form .fixed .column-author {
 	width: 20%;
 }
+.comments tr.focus th, .comments tr.focus td {
+	border-top-width:1px;
+	border-top-style:solid;
+}
+
+.comments tr.blur th, .comments tr.blur td {
+	border-bottom-width:0;
+}
 #commentsdiv.postbox .inside {
 	line-height:1.4em;
 	margin:0;
diff --git wp-admin/js/edit-comments.dev.js wp-admin/js/edit-comments.dev.js
index fbadeba..f83dcf0 100644
--- wp-admin/js/edit-comments.dev.js
+++ wp-admin/js/edit-comments.dev.js
@@ -1,6 +1,55 @@
 var theList, theExtraList, toggleWithKeyboard = false;
 (function($) {
 
+var dashboardTotals = function(n) {
+	var dash = $('#dashboard_right_now'), total, appr, totalN, apprN;
+
+	n = n || 0;
+	if ( isNaN(n) || !dash.length )
+		return;
+
+	total = $('span.total-count', dash);
+	appr = $('span.approved-count', dash);
+	totalN = getCount(total);
+
+	totalN = totalN + n;
+	apprN = totalN - getCount( $('span.pending-count', dash) ) - getCount( $('span.spam-count', dash) );
+	updateCount(total, totalN);
+	updateCount(appr, apprN);
+
+}
+
+var getCount = function(el) {
+	var n = parseInt( el.html().replace(/[^0-9]+/g, ''), 10 );
+	if ( isNaN(n) )
+		return 0;
+	return n;
+}
+
+var updateCount = function(el, n) {
+	var n1 = '';
+	if ( isNaN(n) )
+		return;
+	n = n < 1 ? '0' : n.toString();
+	if ( n.length > 3 ) {
+		while ( n.length > 3 ) {
+			n1 = thousandsSeparator + n.substr(n.length - 3) + n1;
+			n = n.substr(0, n.length - 3);
+		}
+		n = n + n1;
+	}
+	el.html(n);
+}
+
+var updatePagination = function(r) {
+	total_items_i18n = r.total_items_i18n || '';
+	if ( total_items_i18n ) {
+		$('.displaying-num').text( total_items_i18n );
+		$('.total-pages').text( r.total_pages_i18n );
+		$('.tablenav-pages').find('.next-page, .last-page').toggleClass('disabled', r.total_pages == $('.current-page').val());
+	}
+}
+
 setCommentsList = function() {
 	var totalInput, perPageInput, pageInput, lastConfidentTime = 0, dimAfter, delBefore, updateTotalCount, delAfter;
 
@@ -9,12 +58,23 @@
 	pageInput = $('input[name="_page"]', '#comments-form');
 
 	dimAfter = function( r, settings ) {
-		var c = $('#' + settings.element);
+		var c = $('#' + settings.element), editRow, replyID, replyButton;
 
-		if ( c.is('.unapproved') )
+		editRow = $('#replyrow');
+		replyID = $('#comment_ID', editRow).val();
+		replyButton = $('#replybtn', editRow);
+
+		if ( c.is('.unapproved') ) {
+			if (settings.data.id == replyID)
+				replyButton.text(adminCommentsL10n.replyApprove);
+
 			c.find('div.comment_status').html('0')
-		else
+		} else {
+ 			if (settings.data.id == replyID)
+				replyButton.text(adminCommentsL10n.reply);
+
 			c.find('div.comment_status').html('1')
+		}
 
 		$('span.pending-count').each( function() {
 			var a = $(this), n, dif;
@@ -99,46 +148,6 @@ setCommentsList = function() {
 		});
 	};
 
-	function dashboardTotals(n) {
-		var dash = $('#dashboard_right_now'), total, appr, totalN, apprN;
-
-		n = n || 0;
-		if ( isNaN(n) || !dash.length )
-			return;
-
-		total = $('span.total-count', dash);
-		appr = $('span.approved-count', dash);
-		totalN = getCount(total);
-
-		totalN = totalN + n;
-		apprN = totalN - getCount( $('span.pending-count', dash) ) - getCount( $('span.spam-count', dash) );
-		updateCount(total, totalN);
-		updateCount(appr, apprN);
-
-	}
-
-	function getCount(el) {
-		var n = parseInt( el.html().replace(/[^0-9]+/g, ''), 10 );
-		if ( isNaN(n) )
-			return 0;
-		return n;
-	}
-
-	function updateCount(el, n) {
-		var n1 = '';
-		if ( isNaN(n) )
-			return;
-		n = n < 1 ? '0' : n.toString();
-		if ( n.length > 3 ) {
-			while ( n.length > 3 ) {
-				n1 = thousandsSeparator + n.substr(n.length - 3) + n1;
-				n = n.substr(0, n.length - 3);
-			}
-			n = n + n1;
-		}
-		el.html(n);
-	}
-
 	// In admin-ajax.php, we send back the unix time stamp instead of 1 on success
 	delAfter = function( r, settings ) {
 		var total, pageLinks, N, untrash = $(settings.target).parent().is('span.untrash'), unspam = $(settings.target).parent().is('span.unspam'), spam, trash;
@@ -185,7 +194,7 @@ setCommentsList = function() {
 
 		if ( $('#dashboard_right_now').length ) {
 			N = trash ? -1 * trash : 0;
-			dashboardTotals(N);
+			dashboardTotals(N);	
 		} else {
 			total = totalInput.val() ? parseInt( totalInput.val(), 10 ) : 0;
 			total = total - spam - trash;
@@ -193,12 +202,7 @@ setCommentsList = function() {
 				total = 0;
 
 			if ( ( 'object' == typeof r ) && lastConfidentTime < settings.parsed.responses[0].supplemental.time ) {
-				total_items_i18n = settings.parsed.responses[0].supplemental.total_items_i18n || '';
-				if ( total_items_i18n ) {
-					$('.displaying-num').text( total_items_i18n );
-					$('.total-pages').text( settings.parsed.responses[0].supplemental.total_pages_i18n );
-					$('.tablenav-pages').find('.next-page, .last-page').toggleClass('disabled', settings.parsed.responses[0].supplemental.total_pages == $('.current-page').val());
-				}
+				updatePagination(settings.parsed.responses[0].supplemental);
 				updateTotalCount( total, settings.parsed.responses[0].supplemental.time, true );
 			} else {
 				updateTotalCount( total, r, false );
@@ -273,6 +277,20 @@ setCommentsList = function() {
 commentReply = {
 	cid : '',
 	act : '',
+	
+	focusOn : function(id) {
+		var c = $('#comment-' + id), 
+			excluded = c.find('td, th').css('opacity', 1).add('td, th', '#replyrow');
+		theList.find('td, th').not(excluded).animate({opacity:'0.2'}, 300);
+		c.addClass('focus');
+		c.prev().addClass('blur');
+	},
+	
+	focusOff : function() {
+		theList.
+			find('.blur').removeClass('blur').end().
+			find('.focus').removeClass('focus');
+	},
 
 	init : function() {
 		var row = $('#replyrow');
@@ -321,6 +339,8 @@ commentReply = {
 
 		if ( $('#the-comment-list #replyrow').length < 1 )
 			return false;
+			
+		theList.find('th, td').animate({opacity : 1}, 300);
 
 		$('#replyrow').fadeOut('fast', function(){
 			commentReply.close();
@@ -344,6 +364,7 @@ commentReply = {
 			$('input', '#edithead').val('');
 			$('.error', '#replysubmit').html('').hide();
 			$('.waiting', '#replysubmit').hide();
+			this.focusOff();
 
 			if ( $.browser.msie )
 				$('#replycontainer, #replycontent').css('height', '120px');
@@ -355,7 +376,7 @@ commentReply = {
 	},
 
 	open : function(id, p, a) {
-		var t = this, editRow, rowData, act, h, c = $('#comment-' + id);
+		var t = this, editRow, rowData, act, h, c = $('#comment-' + id), replyButton;
 		t.close();
 		t.cid = id;
 
@@ -366,6 +387,7 @@ commentReply = {
 		$('#action', editRow).val(act);
 		$('#comment_post_ID', editRow).val(p);
 		$('#comment_ID', editRow).val(id);
+		t.focusOn(id);
 
 		if ( a == 'edit' ) {
 			$('#author', editRow).val( $('div.author', rowData).text() );
@@ -387,9 +409,16 @@ commentReply = {
 				$('#replyrow').fadeIn(300, function(){ $(this).show() });
 			});
 		} else {
+			replyButton = $('#replybtn', editRow);
 			$('#edithead, #savebtn', editRow).hide();
 			$('#replyhead, #replybtn', editRow).show();
+			$('#status', editRow).val($('input[name=comment_status]').val());
 			c.after(editRow);
+			if (c.hasClass('unapproved')) {
+				replyButton.text(adminCommentsL10n.replyApprove);
+			} else {
+				replyButton.text(adminCommentsL10n.reply);
+			}
 			$('#replyrow').fadeIn(300, function(){ $(this).show() });
 		}
 
@@ -427,7 +456,7 @@ commentReply = {
 	},
 
 	send : function() {
-		var post = {};
+		var post = {}, c;
 
 		$('#replysubmit .error').hide();
 		$('#replysubmit .waiting').show();
@@ -440,12 +469,35 @@ commentReply = {
 		post.id = post.comment_post_ID;
 		post.comments_listing = this.comments_listing;
 		post.p = $('[name=p]').val();
-
+		post._per_page = $('input[name="_per_page"]', '#comments-form').val();
+		c = $('#comment-' + post.comment_ID);
 		$.ajax({
 			type : 'POST',
 			url : ajaxurl,
 			data : post,
-			success : function(x) { commentReply.show(x); },
+			success : function(x) { 
+				var pending_count;
+				
+				/**
+				 * Check if reply creation was successful.
+				 * Show error, if error -- otherwise show reply and approve.
+				 */
+				if (commentReply.show(x) != false) {
+					if (c.hasClass('unapproved')) {
+						c.removeClass('unapproved').addClass('approved');
+						$('span.pending-count').each( function() {
+							var a = $(this), n = getCount(a);
+							if (! isNaN(n)) {
+								n = n - 1;
+								if ( n < 0 ) { n = 0; }
+								a.closest('#awaiting-mod')[ 0 == n ? 'addClass' : 'removeClass' ]('count-0');
+								updateCount(a, n);
+								dashboardTotals();
+							}
+						});
+					}
+				}
+			},
 			error : function(r) { commentReply.error(r); }
 		});
 
@@ -483,6 +526,9 @@ commentReply = {
 			.animate( { 'backgroundColor':'#CCEEBB' }, 600 )
 			.animate( { 'backgroundColor': bg }, 600 );
 
+		if (r.supplemental)
+			updatePagination(r.supplemental);
+
 		// $.fn.wpList.process($(id));
 	},
 
diff --git wp-admin/js/post.dev.js wp-admin/js/post.dev.js
index 1c39edf..d3bcd52 100644
--- wp-admin/js/post.dev.js
+++ wp-admin/js/post.dev.js
@@ -185,7 +185,7 @@ commentsBox = {
 				if ( 'object' == typeof r && r.responses[0] ) {
 					$('#the-comment-list').append( r.responses[0].data );
 
-					theList = theExtraList = null;
+//					theList = theExtraList = null;
 					$("a[className*=':']").unbind();
 
 					if ( commentsBox.st > commentsBox.total )
diff --git wp-includes/script-loader.php wp-includes/script-loader.php
index b8d234e..d3f32cb 100644
--- wp-includes/script-loader.php
+++ wp-includes/script-loader.php
@@ -303,7 +303,9 @@ function wp_default_scripts( &$scripts ) {
 		$scripts->add_data( 'admin-comments', 'group', 1 );
 		$scripts->localize( 'admin-comments', 'adminCommentsL10n', array(
 			'hotkeys_highlight_first' => isset($_GET['hotkeys_highlight_first']),
-			'hotkeys_highlight_last' => isset($_GET['hotkeys_highlight_last'])
+			'hotkeys_highlight_last' => isset($_GET['hotkeys_highlight_last']),
+			'replyApprove' => __( 'Approve and Reply' ),
+			'reply' => __( 'Reply' ),
 		) );
 
 		$scripts->add( 'xfn', "/wp-admin/js/xfn$suffix.js", array('jquery'), '20100403' );
