diff --git src/wp-admin/includes/revision.php src/wp-admin/includes/revision.php
index 9e8b6e3..af9c090 100644
--- src/wp-admin/includes/revision.php
+++ src/wp-admin/includes/revision.php
@@ -111,18 +111,57 @@ function wp_get_revision_ui_diff( $post, $compare_from, $compare_to ) {
  *
  * @since 3.6.0
  *
- * @param object|int $post                 The post object. Also accepts a post ID.
- * @param int        $selected_revision_id The selected revision ID.
- * @param int        $from                 Optional. The revision ID to compare from.
+ * @param array      $args {
+ *     Options hash for preparing data.
+ *
+ *     @type object|int $post      The post object or post ID.
+ *     @type int        $from      Optional. The revision ID to compare from. Defaults to the
+ *                                 most recent revision.
+ *     @type int        $to        The revision ID to compare to.
+ *     @type array      $revisions Optional. A group of revisions to prepare data for.
+ *                                 Defaults to all revisions of the post.
+ * }
  *
  * @return array An associative array of revision data and related settings.
  */
-function wp_prepare_revisions_for_js( $post, $selected_revision_id, $from = null ) {
-	$post = get_post( $post );
+function wp_prepare_revisions_for_js( $args = array() ) {
+	// Backwards compatibility for when this function was a string of arguments.
+	if ( ! is_array( $args ) || func_num_args() > 1 ) {
+		_deprecated_argument( __FUNCTION__, '4.1', sprintf( __( 'Arguments passed to %1$s should be in an associative array. See the inline documentation at %2$s for more details.' ), __FUNCTION__, __FILE__ ) );
+		$old_args = array( 0 => 'post', 1 => 'to', 2 => 'from' );
+		$func_args = func_get_args();
+		foreach( $old_args as $arg_num => $arg_key ) {
+			if ( isset( $func_args[$arg_num] ) ) {
+				$new_args[$arg_key] = $func_args[$arg_num];
+			}
+		}
+		$args = $new_args;
+	}
+
+	$defaults = array(
+		'from' => null,
+		'revisions' => null
+	);
+	$args = wp_parse_args( $args, $defaults );
+
+	if ( empty( $args['post'] ) ) {
+		return new WP_Error( 'revisions_post_required', __( 'Post required.' ) );
+	}
+	if ( empty( $args['to'] ) ) {
+		return new WP_Error( 'revisions_to_required', __( 'To required.' ) );
+	}
+	$post = get_post( $args['post'] );
+	$to = $args['to'];
+	$from = $args['from'];
+
 	$authors = array();
 	$now_gmt = time();
 
-	$revisions = wp_get_post_revisions( $post->ID, array( 'order' => 'ASC', 'check_enabled' => false ) );
+	$revisions = $args['revisions'];
+	if ( empty( $revisions ) ) {
+		$revisions = wp_get_post_revisions( $post->ID, array( 'order' => 'ASC', 'check_enabled' => false ) );
+	}
+
 	// If revisions are disabled, we only want autosaves and the current post.
 	if ( ! wp_revisions_enabled( $post ) ) {
 		foreach ( $revisions as $revision_id => $revision ) {
@@ -209,7 +248,7 @@ function wp_prepare_revisions_for_js( $post, $selected_revision_id, $from = null
 	// Now, grab the initial diff.
 	$compare_two_mode = is_numeric( $from );
 	if ( ! $compare_two_mode ) {
-		$found = array_search( $selected_revision_id, array_keys( $revisions ) );
+		$found = array_search( $to, array_keys( $revisions ) );
 		if ( $found ) {
 			$from = array_keys( array_slice( $revisions, $found - 1, 1, true ) );
 			$from = reset( $from );
@@ -219,17 +258,16 @@ function wp_prepare_revisions_for_js( $post, $selected_revision_id, $from = null
 	}
 
 	$from = absint( $from );
-
 	$diffs = array( array(
-		'id' => $from . ':' . $selected_revision_id,
-		'fields' => wp_get_revision_ui_diff( $post->ID, $from, $selected_revision_id ),
+		'id' => $from . ':' . $to,
+		'fields' => wp_get_revision_ui_diff( $post->ID, $from, $to ),
 	));
 
 	return array(
 		'postId'           => $post->ID,
 		'nonce'            => wp_create_nonce( 'revisions-ajax-nonce' ),
 		'revisionData'     => array_values( $revisions ),
-		'to'               => $selected_revision_id,
+		'to'               => $to,
 		'from'             => $from,
 		'diffData'         => $diffs,
 		'baseUrl'          => parse_url( admin_url( 'revision.php' ), PHP_URL_PATH ),
diff --git src/wp-admin/revision.php src/wp-admin/revision.php
index f65ae6a..1709c19 100644
--- src/wp-admin/revision.php
+++ src/wp-admin/revision.php
@@ -98,7 +98,10 @@ else
 	$parent_file = $submenu_file = 'edit.php';
 
 wp_enqueue_script( 'revisions' );
-wp_localize_script( 'revisions', '_wpRevisionsSettings', wp_prepare_revisions_for_js( $post, $revision_id, $from ) );
+wp_localize_script( 'revisions', '_wpRevisionsSettings', wp_prepare_revisions_for_js( array(
+	'post' => $post,
+	'to' => $revision_id,
+	'from' => $from ) ) );
 
 /* Revisions Help Tab */
 
diff --git src/wp-includes/images/blank.gif src/wp-includes/images/blank.gif
index 064a9e7..c493e68 100644
Binary files src/wp-includes/images/blank.gif and src/wp-includes/images/blank.gif differ
