Index: wp-admin/edit-comments.php
===================================================================
--- wp-admin/edit-comments.php	(revision 9045)
+++ wp-admin/edit-comments.php	(working copy)
@@ -72,8 +72,10 @@
 
 $mode = ( ! isset($_GET['mode']) || empty($_GET['mode']) ) ? 'detail' : attribute_escape($_GET['mode']);
 
-$comment_status = isset($_GET['comment_status']) ? attribute_escape($_GET['comment_status']) : '';
+$comment_status = !empty($_GET['comment_status']) ? attribute_escape($_GET['comment_status']) : '';
 
+$comment_type = !empty($_GET['comment_type']) ? attribute_escape($_GET['comment_type']) : '';
+
 $post_id = isset($_GET['p']) ? (int) $_GET['p'] : 0;
 
 $search_dirty = ( isset($_GET['s']) ) ? $_GET['s'] : '';
@@ -134,13 +136,14 @@
 	);
 $class = ( '' === $comment_status ) ? ' class="current"' : '';
 $status_links[] = "<li><a href=\"edit-comments.php\"$class>".__('Show All Comments')."</a>";
+$type = ( !$comment_type && 'all' != $comment_type ) ? '' : "&amp;comment_type=$comment_type";
 foreach ( $stati as $status => $label ) {
 	$class = '';
 
 	if ( $status == $comment_status )
 		$class = ' class="current"';
 
-	$status_links[] = "<li class='$status'><a href=\"edit-comments.php?comment_status=$status\"$class>$label</a>";
+	$status_links[] = "<li class='$status'><a href=\"edit-comments.php?comment_status=$status$type\"$class>$label</a>";
 }
 
 $status_links = apply_filters( 'comment_status_links', $status_links );
@@ -150,7 +153,30 @@
 ?>
 </ul>
 
+<div class="filter">
+<form id="list-filter" action="" method="get">
+<?php if ( $comment_status ) echo "<input type='hidden' name='comment_status' value='$comment_status' />\n"; ?>
+<select name="comment_type">
+	<option value="all"><?php _e('Show all comment types'); ?></option>
 <?php
+	$comment_types = array(
+		'comment' => __('Comments'),
+		'pingback' => __('Pingbacks'),
+		'trackback' => __('Trackbacks'),
+	);
+
+	foreach ( $comment_types as $type => $label ) {
+		echo "	<option value='$type'";
+		selected( $comment_type, $type );
+		echo ">$label</option>\n";
+	}
+?>
+</select>
+<input type="submit" id="post-query-submit" value="<?php _e('Filter'); ?>" class="button-secondary" />
+</form>
+</div>
+
+<?php
 $comments_per_page = apply_filters('comments_per_page', 20, $comment_status);
 
 if ( isset( $_GET['apage'] ) )
@@ -160,7 +186,7 @@
 
 $start = $offset = ( $page - 1 ) * $comments_per_page;
 
-list($_comments, $total) = _wp_get_comment_list( $comment_status, $search_dirty, $start, $comments_per_page + 5, $post_id ); // Grab a few extra
+list($_comments, $total) = _wp_get_comment_list( $comment_status, $search_dirty, $start, $comments_per_page + 5, $post_id, $comment_type ); // Grab a few extra
 
 $comments = array_slice($_comments, 0, $comments_per_page);
 $extra_comments = array_slice($_comments, $comments_per_page);
Index: wp-admin/includes/template.php
===================================================================
--- wp-admin/includes/template.php	(revision 9045)
+++ wp-admin/includes/template.php	(working copy)
@@ -1531,7 +1531,7 @@
 	return $r;
 }
 
-function _wp_get_comment_list( $status = '', $s = false, $start, $num, $post = 0 ) {
+function _wp_get_comment_list( $status = '', $s = false, $start, $num, $post = 0, $type = '' ) {
 	global $wpdb;
 
 	$start = abs( (int) $start );
@@ -1552,6 +1552,15 @@
 	else
 		$post = '';
 
+	if ( 'comment' == $type )
+		$typesql = "AND comment_type = ''";
+	elseif ( 'pingback' == $type )
+		$typesql = "AND comment_type = 'pingback'";
+	elseif ( 'trackback' == $type )
+		$typesql = "AND comment_type = 'trackback'";
+	else
+		$typesql = '';
+
 	if ( $s ) {
 		$s = $wpdb->escape($s);
 		$comments = $wpdb->get_results("SELECT SQL_CALC_FOUND_ROWS * FROM $wpdb->comments WHERE
@@ -1561,9 +1570,10 @@
 			comment_author_IP LIKE ('%$s%') OR
 			comment_content LIKE ('%$s%') ) AND
 			$approved
+			$typesql
 			ORDER BY comment_date_gmt DESC LIMIT $start, $num");
 	} else {
-		$comments = $wpdb->get_results( "SELECT SQL_CALC_FOUND_ROWS * FROM $wpdb->comments WHERE $approved $post ORDER BY comment_date_gmt DESC LIMIT $start, $num" );
+		$comments = $wpdb->get_results( "SELECT SQL_CALC_FOUND_ROWS * FROM $wpdb->comments WHERE $approved $post $typesql ORDER BY comment_date_gmt DESC LIMIT $start, $num" );
 	}
 
 	update_comment_cache($comments);
