Index: wp-includes/default-filters.php
===================================================================
--- wp-includes/default-filters.php	(revision 23338)
+++ wp-includes/default-filters.php	(working copy)
@@ -123,6 +123,9 @@
 	add_filter( $filter, 'convert_chars' );
 }
 
+// Pre save Revision Version
+add_filter( 'wp_insert_post_data', '_wp_insert_post_data_revision_version', 10, 2 );
+
 // Pre save hierarchy
 add_filter( 'wp_insert_post_parent', 'wp_check_post_hierarchy_for_loops', 10, 2 );
 add_filter( 'wp_update_term_parent', 'wp_check_term_hierarchy_for_loops', 10, 3 );
Index: wp-includes/post-template.php
===================================================================
--- wp-includes/post-template.php	(revision 23338)
+++ wp-includes/post-template.php	(working copy)
@@ -1379,6 +1379,7 @@
 	$rows = $right_checked = '';
 	$class = false;
 	$can_edit_post = current_user_can( 'edit_post', $post->ID );
+
 	foreach ( $revisions as $revision ) {
 		if ( !current_user_can( 'read_post', $revision->ID ) )
 			continue;
@@ -1386,8 +1387,14 @@
 			continue;
 
 		$date = wp_post_revision_title( $revision );
-		$name = get_the_author_meta( 'display_name', $revision->post_author );
+		if ( wp_is_post_revision( $revision ) ) {
+			$revision_author_id = $revision->post_author;
+		} elseif ( !$revision_author_id = get_post_meta( $revision->ID, '_edit_last', true ) ) {
+			$revision_author_id = $revision->post_author;
+		}
 
+		$name = get_the_author_meta( 'display_name', $revision_author_id );
+
 		if ( 'form-table' == $format ) {
 			if ( $left )
 				$left_checked = $left == $revision->ID ? ' checked="checked"' : '';
Index: wp-includes/post.php
===================================================================
--- wp-includes/post.php	(revision 23338)
+++ wp-includes/post.php	(working copy)
@@ -2900,6 +2900,8 @@
 		$wpdb->update( $wpdb->posts, array( 'post_name' => $data['post_name'] ), $where );
 	}
 
+	update_post_meta( $post_ID, '_edit_last', $user_ID );
+
 	if ( is_object_in_taxonomy($post_type, 'category') )
 		wp_set_post_categories( $post_ID, $post_category );
 
@@ -4920,9 +4922,24 @@
 	$return['post_date']     = isset($post['post_modified']) ? $post['post_modified'] : '';
 	$return['post_date_gmt'] = isset($post['post_modified_gmt']) ? $post['post_modified_gmt'] : '';
 
+	$return['post_author']   = get_post_meta( $post['ID'], '_edit_last', true );
+	$return['comment_count'] = 1; // The comment_count field stores the revisioning system version
+
 	return $return;
 }
 
+function _wp_insert_post_data_revision_version( $data, $post_array ) {
+	if ( 'revision' != $data['post_type'] ) {
+		return $data;
+	}
+
+	if ( isset( $post_array['comment_count'] ) ) {
+		$data['comment_count'] = (int) $post_array['comment_count'];
+	}
+
+	return $data;
+}
+
 /**
  * Saves an already existing post as a post revision.
  *
@@ -5235,9 +5252,60 @@
 
 	if ( !$revisions = get_children( $args ) )
 		return array();
+
+	$revisions = wp_fix_post_revision_authors( $revisions, $args );
 	return $revisions;
 }
 
+function wp_fix_post_revision_authors( $revisions, $args ) {
+	$keys = array_keys( $revisions );
+	if ( 'DESC' == strtoupper( $args['order'] ) ) {
+		$keys = array_reverse( $keys );
+	}
+
+	$previous_author = false;
+	foreach ( $keys as $key ) {
+		if ( is_array( $revisions[$key] ) && isset( $revisions[$key]['comment_count'] ) ) {
+			$revision_version = $revisions[$key]['comment_count'];
+			$is_array = true;
+		} elseif ( is_object( $revisions[$key] ) && isset( $revisions[$key]->comment_count ) ) {
+			$revision_version = $revisions[$key]->comment_count;
+			$is_array = false;
+		} else {
+			continue;
+		}
+
+		if ( 1 == $revision_version ) {
+			$post_author_name = get_the_author_meta( 'display_name', $revisions[$key]->post_author );
+			continue;
+		}
+
+		if ( $is_array ) {
+			// swap
+			list(
+				$previous_author,
+				$revisions[$key]['post_author']
+			) = array(
+				$revisions[$key]['post_author'],
+				false === $previous_author ? $revisions[$key]['post_author'] : $previous_author
+			);
+			$revisions[$key]['comment_count'] = 1; // in case this data gets cached somewhere, flag it as having the fixed post_author
+		} else {
+			// swap
+			list(
+				$previous_author,
+				$revisions[$key]->post_author
+			) = array(
+				$revisions[$key]->post_author,
+				false === $previous_author ? $revisions[$key]->post_author : $previous_author
+			);
+			$revisions[$key]->comment_count = 1; // in case this data gets cached somewhere, flag it as having the fixed post_author
+		}
+	}
+
+	return $revisions;
+}
+
 function _set_preview($post) {
 
 	if ( ! is_object($post) )
Index: wp-includes/comment.php
===================================================================
--- wp-includes/comment.php	(revision 23338)
+++ wp-includes/comment.php	(working copy)
@@ -1615,6 +1615,8 @@
 		return false;
 	if ( !$post = get_post($post_id) )
 		return false;
+	if ( 'revision' == $post->post_type )
+		return false;
 
 	$old = (int) $post->comment_count;
 	$new = (int) $wpdb->get_var( $wpdb->prepare("SELECT COUNT(*) FROM $wpdb->comments WHERE comment_post_ID = %d AND comment_approved = '1'", $post_id) );
Index: wp-admin/includes/post.php
===================================================================
--- wp-admin/includes/post.php	(revision 23338)
+++ wp-admin/includes/post.php	(working copy)
@@ -241,8 +241,6 @@
 
 	add_meta( $post_ID );
 
-	update_post_meta( $post_ID, '_edit_last', $GLOBALS['current_user']->ID );
-
 	wp_update_post( $post_data );
 
 	// Now that we have an ID we can fix any attachment anchor hrefs
@@ -568,8 +566,6 @@
 
 	add_meta( $post_ID );
 
-	add_post_meta( $post_ID, '_edit_last', $GLOBALS['current_user']->ID );
-
 	// Now that we have an ID we can fix any attachment anchor hrefs
 	_fix_attachment_links( $post_ID );
 
