Index: wp-includes/functions-post.php
===================================================================
--- wp-includes/functions-post.php	(revision 2551)
+++ wp-includes/functions-post.php	(working copy)
@@ -480,24 +480,33 @@
 	$now     = current_time('mysql');
 	$now_gmt = current_time('mysql', 1);
 
-	// Simple flood-protection
-	if ( $lasttime = $wpdb->get_var("SELECT comment_date_gmt FROM $wpdb->comments WHERE comment_author_IP = '$user_ip' OR comment_author_email = '$email' ORDER BY comment_date DESC LIMIT 1") ) {
-		$time_lastcomment = mysql2date('U', $lasttime);
-		$time_newcomment  = mysql2date('U', $now_gmt);
-		if ( ($time_newcomment - $time_lastcomment) < 15 ) {
-			do_action('comment_flood_trigger', $time_lastcomment, $time_newcomment);
-			die( __('Sorry, you can only post a new comment once every 15 seconds. Slow down cowboy.') );
+	// If user is admin or the post author, never moderate or throttle
+	if ( $user_id ) {
+		$userdata = get_userdata($user_id);
+		$post_author = $wpdb->get_var("SELECT post_author FROM $wpdb->posts WHERE ID = '$comment_post_ID' LIMIT 1");
+	}
+	if ( $userdata && ($user_id == $post_author || $userdata['user_level'] >= 9) ) {
+		$approved = 1;
+	} else {
+		// Simple flood-protection
+		if ( $lasttime = $wpdb->get_var("SELECT comment_date_gmt FROM $wpdb->comments WHERE comment_author_IP = '$user_ip' OR comment_author_email = '$email' ORDER BY comment_date DESC LIMIT 1") ) {
+			$time_lastcomment = mysql2date('U', $lasttime);
+			$time_newcomment  = mysql2date('U', $now_gmt);
+			if ( ($time_newcomment - $time_lastcomment) < 15 ) {
+				do_action('comment_flood_trigger', $time_lastcomment, $time_newcomment);
+				die( __('Sorry, you can only post a new comment once every 15 seconds. Slow down cowboy.') );
+			}
 		}
-	}
 
-	if ( check_comment($author, $email, $url, $comment, $user_ip, $user_agent, $comment_type) )
-		$approved = 1;
-	else
-		$approved = 0;
-	if ( wp_blacklist_check($author, $email, $url, $comment, $user_ip, $user_agent) )
-		$approved = 'spam';
+		if ( check_comment($author, $email, $url, $comment, $user_ip, $user_agent, $comment_type) )
+			$approved = 1;
+		else
+			$approved = 0;
+		if ( wp_blacklist_check($author, $email, $url, $comment, $user_ip, $user_agent) )
+			$approved = 'spam';
 	
-	$approved = apply_filters('pre_comment_approved', $approved);
+		$approved = apply_filters('pre_comment_approved', $approved);
+	}
 
 	$result = $wpdb->query("INSERT INTO $wpdb->comments 
 	(comment_post_ID, comment_author, comment_author_email, comment_author_url, comment_author_IP, comment_date, comment_date_gmt, comment_content, comment_approved, comment_agent, comment_type, user_id)

