diff --git wp-admin/css/colors-fresh.dev.css wp-admin/css/colors-fresh.dev.css
index fccbed6..cf0ca7a 100644
--- wp-admin/css/colors-fresh.dev.css
+++ wp-admin/css/colors-fresh.dev.css
@@ -494,6 +494,8 @@ a,
 #poststuff #edButtonPreview,
 #poststuff #edButtonHTML,
 #the-comment-list p.comment-author strong a,
+#the-comment-list .undo .approve a,
+#the-comment-list .undo .unapprove a,
 #media-upload a.del-link,
 #media-items a.delete,
 .plugins a.delete,
diff --git wp-admin/css/wp-admin.dev.css wp-admin/css/wp-admin.dev.css
index 1781101..c87008d 100644
--- wp-admin/css/wp-admin.dev.css
+++ wp-admin/css/wp-admin.dev.css
@@ -3529,20 +3529,22 @@ span.imgedit-scale-warn {
 	border-right-width: 1px;
 }
 
-.trash-undo-inside,
-.spam-undo-inside {
+.undo-inside {
 	margin: 1px 8px 1px 0;
 	line-height: 16px;
 }
 
-.spam-undo-inside .avatar,
-.trash-undo-inside .avatar {
+.undo-inside .avatar {
 	height: 20px;
 	width: 20px;
 	margin-right: 8px;
 	vertical-align: middle;
 }
 
+.undo-inside .approve {
+	display:inline;
+}
+
 .stuffbox .editcomment {
 	clear: none;
 }
diff --git wp-admin/includes/template.php wp-admin/includes/template.php
index 5f5c1c3..a1bc7d5 100644
--- wp-admin/includes/template.php
+++ wp-admin/includes/template.php
@@ -403,10 +403,16 @@ function wp_comment_reply($position = '1', $checkbox = false, $mode = 'single',
 function wp_comment_trashnotice() {
 ?>
 <div class="hidden" id="trash-undo-holder">
-	<div class="trash-undo-inside"><?php printf(__('Comment by %s moved to the trash.'), '<strong></strong>'); ?> <span class="undo untrash"><a href="#"><?php _e('Undo'); ?></a></span></div>
+	<div class="trash-undo-inside undo-inside"><?php printf(__('Comment by %s moved to the trash.'), '<strong></strong>'); ?> <span class="undo untrash"><a href="#"><?php _e('Undo'); ?></a></span></div>
 </div>
 <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 class="spam-undo-inside 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="approve-undo-holder">
+	<div class="approve-undo-inside undo-inside"><?php printf(__('Comment by %s approved.'), '<strong></strong>'); ?> <span class="undo unapprove"><a href="#"><?php _e('Undo'); ?></a></span></div>
+</div>
+<div class="hidden" id="unapprove-undo-holder">
+	<div class="unapprove-undo-inside undo-inside"><?php printf(__('Comment by %s unapproved.'), '<strong></strong>'); ?> <span class="undo approve"><a href="#"><?php _e('Undo'); ?></a></span></div>
 </div>
 <?php
 }
diff --git wp-admin/js/edit-comments.dev.js wp-admin/js/edit-comments.dev.js
index 177dc86..5e178a2 100644
--- wp-admin/js/edit-comments.dev.js
+++ wp-admin/js/edit-comments.dev.js
@@ -2,85 +2,127 @@ var theList, theExtraList, toggleWithKeyboard = false;
 (function($) {
 
 setCommentsList = function() {
-	var totalInput, perPageInput, pageInput, lastConfidentTime = 0, dimAfter, delBefore, updateTotalCount, delAfter;
+	var totalInput, perPageInput, pageInput, lastConfidentTime = 0, dimBefore, dimAfter, delBefore, updateTotalCount, delAfter, showUndo, getActionFromClass;
 
 	totalInput = $('.tablenav input[name="_total"]', '#comments-form');
 	perPageInput = $('.tablenav input[name="_per_page"]', '#comments-form');
 	pageInput = $('.tablenav input[name="_page"]', '#comments-form');
 
-	dimAfter = function( r, settings ) {
-		var c = $('#' + settings.element);
-
-		if ( c.is('.unapproved') )
-			c.find('div.comment_status').html('0')
-		else
-			c.find('div.comment_status').html('1')
-
-		$('span.pending-count').each( function() {
-			var a = $(this), n, dif;
-			n = a.html().replace(/[^0-9]+/g, '');
-			n = parseInt(n,10);
-			if ( isNaN(n) ) return;
-			dif = $('#' + settings.element).is('.' + settings.dimClass) ? 1 : -1;
-			n = n + dif;
-			if ( n < 0 ) { n = 0; }
-			a.closest('#awaiting-mod')[ 0 == n ? 'addClass' : 'removeClass' ]('count-0');
-			updateCount(a, n);
-			dashboardTotals();
-		});
+	getActionFromClass = function(cl) {
+		var ret;
+		if ( cl.indexOf(':trash=1') != -1 ) {
+			ret = {
+				action : 'trash',
+				undoAction : 'untrash',
+				undoClass : ':untrash=1'
+			};
+		}
+		else if ( cl.indexOf(':spam=1') != -1 ) {
+			ret = {
+				action : 'spam',
+				undoAction : 'unspam',
+				undoClass : ':unspam=1'
+			};
+		}
+		else if ( cl.indexOf(':action=dim-comment&new=approved') != -1 ) {
+			ret = {
+				action : 'approve',
+				undoAction : 'unapprove',
+				undoClass : 'e7e7d3:action=dim-comment&new=unapproved'
+			};
+		}
+		else if ( cl.indexOf(':action=dim-comment&new=unapproved') != -1 ) {
+			ret = {
+				action : 'unapprove',
+				undoAction : 'approve',
+				undoClass : 'e7e7d3:action=dim-comment&new=approved'
+			};
+		} else {
+			return false;
+		}
+		
+		return ret; 
 	};
 
-	// Send current total, page, per_page and url
-	delBefore = function( settings, list ) {
-		var cl = $(settings.target).attr('className'), id, el, n, h, a, author, action = false;
-
-		settings.data._total = totalInput.val() || 0;
-		settings.data._per_page = perPageInput.val() || 0;
-		settings.data._page = pageInput.val() || 0;
-		settings.data._url = document.location.href;
-
-		if ( cl.indexOf(':trash=1') != -1 )
-			action = 'trash';
-		else if ( cl.indexOf(':spam=1') != -1 )
-			action = 'spam';
-
-		if ( action ) {
+	showUndo = function(settings, list) {
+		var cl = $(settings.target).attr('className'), params = false, id, el, note, n, author, h, a, undoAction, undoClass;
+		
+		params = getActionFromClass(cl);
+		
+		if ( params ) {
 			id = cl.replace(/.*?comment-([0-9]+).*/, '$1');
 			el = $('#comment-' + id);
-			note = $('#' + action + '-undo-holder').html();
+			note = $('#' + params.action + '-undo-holder').html();
 
 			el.find('.check-column :checkbox').attr('checked', ''); // Uncheck the row so as not to be affected by Bulk Edits.
 
-			if ( el.siblings('#replyrow').length && commentReply.cid == id )
+			if ( el.siblings('#replyrow').length && commentReply.cid == id ) {
 				commentReply.close();
+			}
 
 			if ( el.is('tr') ) {
 				n = el.children(':visible').length;
 				author = $('.author strong', el).text();
-				h = $('<tr id="undo-' + id + '" class="undo un' + action + '" style="display:none;"><td colspan="' + n + '">' + note + '</td></tr>');
+				h = $('<tr id="undo-' + id + '" class="undo ' + params.undoAction + '" style="display:none;"><td colspan="' + n + '">' + note + '</td></tr>');
 			} else {
 				author = $('.comment-author', el).text();
-				h = $('<div id="undo-' + id + '" style="display:none;" class="undo un' + action + '">' + note + '</div>');
+				h = $('<div id="undo-' + id + '" style="display:none;" class="undo ' + params.undoAction + '">' + note + '</div>');
 			}
 
 			el.before(h);
 
 			$('strong', '#undo-' + id).text(author + ' ');
 			a = $('.undo a', '#undo-' + id);
-			a.attr('href', 'comment.php?action=un' + action + 'comment&c=' + id + '&_wpnonce=' + settings.data._ajax_nonce);
-			a.attr('className', 'delete:the-comment-list:comment-' + id + '::un' + action + '=1 vim-z vim-destructive');
-			$('.avatar', el).clone().prependTo('#undo-' + id + ' .' + action + '-undo-inside');
+			a.attr('href', 'comment.php?action=' + params.undoAction + 'comment&c=' + id + '&_wpnonce=' + settings.data._ajax_nonce);
+			a.attr('className', 'delete:the-comment-list:comment-' + id + ':' + params.undoClass + ' vim-z vim-destructive');
+			$('.avatar', el).clone().prependTo('#undo-' + id + ' .' + params.action + '-undo-inside');
 
 			a.click(function(){
 				list.wpList.del(this);
 				$('#undo-' + id).css( {backgroundColor:'#ceb'} ).fadeOut(350, function(){
 					$(this).remove();
-					$('#comment-' + id).css('backgroundColor', '').fadeIn(300, function(){ $(this).show() });
+					$('#comment-' + id).css('backgroundColor', '').fadeIn(300);
 				});
 				return false;
 			});
 		}
+	};
+
+	dimAfter = function( r, settings ) {
+		var c = $('#' + settings.element);
+
+		if ( c.is('.unapproved') )
+			c.find('div.comment_status').html('0');
+		else
+			c.find('div.comment_status').html('1');
 
+		$('span.pending-count').each( function() {
+			var a = $(this), n, dif;
+			n = a.html().replace(/[^0-9]+/g, '');
+			n = parseInt(n,10);
+			if ( isNaN(n) ) return;
+			dif = $('#' + settings.element).is('.' + settings.dimClass) ? 1 : -1;
+			n = n + dif;
+			if ( n < 0 ) { n = 0; }
+			a.closest('#awaiting-mod')[ 0 == n ? 'addClass' : 'removeClass' ]('count-0');
+			updateCount(a, n);
+			dashboardTotals();
+		});
+	};
+
+	// Send current total, page, per_page and url
+	delBefore = function( settings, list ) {
+		var cl = $(settings.target).attr('className'), id, el, n, h, a, author, action = false;
+
+		settings.data._total = totalInput.val() || 0;
+		settings.data._per_page = perPageInput.val() || 0;
+		settings.data._page = pageInput.val() || 0;
+		settings.data._url = document.location.href;
+
+		if (! $(settings.target).parent().hasClass('undo')) {
+			showUndo(settings, list);
+		}
+		
 		return settings;
 	};
 
@@ -159,7 +201,7 @@ setCommentsList = function() {
 			spam = -1;
 
 		$('span.pending-count').each( function() {
-			var a = $(this), n = getCount(a), unapproved = $('#' + settings.element).is('.unapproved');
+			var a = $(this), n = getCount(a), unapproved = $('#' + settings.element).is('.unapproved') || $(settings.target).parent().is('span.approve');
 
 			if ( $(settings.target).parent().is('span.unapprove') || ( ( untrash || unspam ) && unapproved ) ) { // we "deleted" an approved comment from the approved list by clicking "Unapprove"
 				n = n + 1;
@@ -243,7 +285,7 @@ setCommentsList = function() {
 		.bind('wpListDelEnd', function(e, s){
 			var id = s.element.replace(/[^0-9]+/g, '');
 
-			if ( s.target.className.indexOf(':trash=1') != -1 || s.target.className.indexOf(':spam=1') != -1 )
+			if ( getActionFromClass(s.target.className) )
 				$('#undo-' + id).fadeIn(300, function(){ $(this).show() });
 		});
 	$(listTable).bind('changePage', refillTheExtraList);
