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 3165a5e..a966541 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;
@@ -3542,7 +3550,8 @@ span.imgedit-scale-warn {
 }
 
 .spam-undo-inside .avatar,
-.trash-undo-inside .avatar {
+.trash-undo-inside .avatar,
+.replied-approved-notice-inside .avatar {
 	height: 20px;
 	width: 20px;
 	margin-right: 8px;
diff --git wp-admin/includes/template.php wp-admin/includes/template.php
index b345c36..5fed7b7 100644
--- wp-admin/includes/template.php
+++ wp-admin/includes/template.php
@@ -408,6 +408,9 @@ function wp_comment_trashnotice() {
 <div class="hidden" id="spam-undo-holder">
 	<div class="spam-undo-inside"><?php printf(__('Comment by %s marked as spam.'), '<strong></strong>'); ?> <span class="undo unspam"><a href="#"><?php _e('Undo'); ?></a></span></div>
 </div>
+<div class="hidden" id="replied-approved-notice">
+	<div class="replied-approved-notice-inside"><?php printf(__('Comment by %s replied to and approved.'), '<strong></strong>'); ?></div>
+</div>
 <?php
 }
 
diff --git wp-admin/js/edit-comments.dev.js wp-admin/js/edit-comments.dev.js
index b81b397..e860696 100644
--- wp-admin/js/edit-comments.dev.js
+++ wp-admin/js/edit-comments.dev.js
@@ -1,6 +1,55 @@
-var theList, theExtraList, toggleWithKeyboard = false;
+var theList, theExtraList, toggleWithKeyboard = false, commentReply, setCommentsList;
 (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;
 
@@ -12,9 +61,9 @@ setCommentsList = function() {
 		var c = $('#' + settings.element);
 
 		if ( c.is('.unapproved') )
-			c.find('div.comment_status').html('0')
+			c.find('div.comment_status').html('0');
 		else
-			c.find('div.comment_status').html('1')
+			c.find('div.comment_status').html('1');
 
 		$('span.pending-count').each( function() {
 			var a = $(this), n, dif;
@@ -81,7 +130,6 @@ setCommentsList = function() {
 				return false;
 			});
 		}
-
 		return settings;
 	};
 
@@ -99,46 +147,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 +193,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 +201,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 );
@@ -210,9 +213,7 @@ setCommentsList = function() {
 			return;
 		}
 
-		theList.get(0).wpList.add( theExtraList.children(':eq(0)').remove().clone() );
-
-		refillTheExtraList();
+		refillTheList();
 	};
 
 	var refillTheExtraList = function(ev) {
@@ -258,6 +259,12 @@ setCommentsList = function() {
 			}
 		});
 	};
+	
+	var refillTheList = function() {
+		theList.get(0).wpList.add( theExtraList.children(':eq(0)').remove().clone() );
+
+		refillTheExtraList();
+	}
 
 	theExtraList = $('#the-extra-comment-list').wpList( { alt: '', delColor: 'none', addColor: 'none' } );
 	theList = $('#the-comment-list').wpList( { alt: '', delBefore: delBefore, dimAfter: dimAfter, delAfter: delAfter, addColor: 'none' } )
@@ -268,11 +275,26 @@ setCommentsList = function() {
 				$('#undo-' + id).fadeIn(300, function(){ $(this).show() });
 		});
 	// $(listTable).bind('changePage', refillTheExtraList);
+	$(commentReply).bind('repliedAndApproved', refillTheList);
 };
 
 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 +343,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 +368,7 @@ commentReply = {
 			$('input', '#edithead').val('');
 			$('.error', '#replysubmit').html('').hide();
 			$('.waiting', '#replysubmit').hide();
+			this.focusOff();
 
 			if ( $.browser.msie )
 				$('#replycontainer, #replycontent').css('height', '120px');
@@ -355,7 +380,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 +391,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 +413,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 +460,7 @@ commentReply = {
 	},
 
 	send : function() {
-		var post = {};
+		var post = {}, c;
 
 		$('#replysubmit .error').hide();
 		$('#replysubmit .waiting').show();
@@ -440,12 +473,62 @@ 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 is_moderated = commentReply.comments_listing == 'moderated', id, note, n, h, author;
+				
+				r = wpAjax.parseAjaxResponse(x);
+				if ( r.errors ) {
+					this.error({'responseText': wpAjax.broken});
+					return false;
+				}
+				
+				if (r.responses[0].supplemental)
+					updatePagination(r.responses[0].supplemental);
+				
+				if (c.hasClass('unapproved')) {
+					c.removeClass('unapproved').addClass('approved');
+					c.find('div.comment_status').html('1');
+					$('span.pending-count').each( function() {
+						var a = $(this), n = getCount(a);
+						if (! isNaN(n)) {
+							updateCount(a, Math.max(0, n - 1));
+							dashboardTotals();
+						}
+					});
+				}
+				
+				if (is_moderated) {
+					id = c.attr('id').replace(/[^0-9]+/g, '');
+					note = $('#replied-approved-notice').html();
+					
+					c.find('.check-column :checkbox').attr('checked', '');
+
+					if ( c.is('tr') ) {
+						n = c.children(':visible').length;
+						author = $('.author strong', c).text();
+						h = $('<tr id="replied-approved-' + id + '" class="undo" style="display:none;"><td colspan="' + n + '">' + note + '</td></tr>');
+					} else {
+						author = $('.comment-author', c).text();
+						h = $('<div id="replied-approved-' + id + '" style="display:none;" class="undo">' + note + '</div>');
+					}
+					c.before(h);
+					$('strong', '#replied-approved-' + id).text(author + ' ');
+					$('.avatar', c).clone().prependTo('#replied-approved-' + id + ' .replied-approved-notice-inside');
+
+					c.fadeOut(350, function(){ h.fadeIn(350); });
+					commentReply.revert();
+					$(commentReply).trigger('repliedAndApproved');
+					return;
+				}
+
+				commentReply.show(x);
+			},
 			error : function(r) { commentReply.error(r); }
 		});
 
diff --git wp-admin/js/post.dev.js wp-admin/js/post.dev.js
index fc469b7..b3df35a 100644
--- wp-admin/js/post.dev.js
+++ wp-admin/js/post.dev.js
@@ -194,7 +194,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/js/wp-lists.dev.js wp-includes/js/wp-lists.dev.js
index fb145ab..02119aa 100644
--- wp-includes/js/wp-lists.dev.js
+++ wp-includes/js/wp-lists.dev.js
@@ -142,7 +142,6 @@ wpList = {
 		if ( !s.data._ajax_nonce ) { return true; }
 
 		element = $('#' + s.element);
-
 		if ( 'none' != s.delColor ) {
 			element.css( 'backgroundColor', s.delColor ).fadeOut( 350, function(){
 				list.wpList.recolor();
diff --git wp-includes/script-loader.php wp-includes/script-loader.php
index ef51ed5..e1385b4 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' );
