Index: wp-includes/post-template.php
===================================================================
--- wp-includes/post-template.php	(revision 23494)
+++ wp-includes/post-template.php	(working copy)
@@ -1300,23 +1300,32 @@
 	if ( !in_array( $revision->post_type, array( 'post', 'page', 'revision' ) ) )
 		return false;
 
+	$author = get_the_author_meta( 'display_name', $revision->post_author );
 	/* translators: revision date format, see http://php.net/date */
-	$datef = _x( 'j F, Y @ G:i', 'revision date format');
-	/* translators: 1: date */
+	$datef = _x( 'j F, Y @ G:i:s', 'revision date format');
+
+	$gravatar = get_avatar( $revision->post_author, 18 );
+
+	$date = date_i18n( $datef, strtotime( $revision->post_modified ) );
+	
+	$revision_date_author = sprintf(
+		'%s %s, %s %s (%s)',
+		$gravatar,
+		$author,
+		human_time_diff( strtotime( $revision->post_modified ), current_time( 'timestamp' ) ),
+		__( ' ago ' ),
+		$date
+	);
+
 	$autosavef = __( '%1$s [Autosave]' );
-	/* translators: 1: date */
 	$currentf  = __( '%1$s [Current Revision]' );
 
-	$date = date_i18n( $datef, strtotime( $revision->post_modified ) );
-	if ( $link && current_user_can( 'edit_post', $revision->ID ) && $link = get_edit_post_link( $revision->ID ) )
-		$date = "<a href='$link'>$date</a>";
-
 	if ( !wp_is_post_revision( $revision ) )
-		$date = sprintf( $currentf, $date );
+		$revision_date_author = sprintf( $currentf, $revision_date_author );
 	elseif ( wp_is_post_autosave( $revision ) )
-		$date = sprintf( $autosavef, $date );
+		$revision_date_author = sprintf( $autosavef, $revision_date_author );
 
-	return $date;
+	return $revision_date_author;
 }
 
 /**
@@ -1461,3 +1470,75 @@
 	endif;
 
 }
+
+
+/**
+ * Display information about a post's revisions as well as a link into the revisions system
+ *
+ *
+ * @package WordPress
+ * @subpackage Post_Revisions
+ * @since 3.6.0
+ *
+ * @uses wp_get_post_revisions()
+ * @uses get_post()
+ * @uses post_type_supports()
+ * @uses wp_post_revision_title()
+ *
+ * @param int|object $post_id Post ID or post object.
+ * @return null
+ */
+function wp_post_revisions_meta( $post_id = 0 ) {
+	if ( !$post = get_post( $post_id ) )
+		return;
+
+	$the_revisions = wp_get_post_revisions( $post_id );
+	$the_revisions_count = count( $the_revisions ) - 1;
+	if ( post_type_supports( $post->post_type, 'revisions' ) && $the_revisions_count ) {
+	?>
+		<div id="post-revisions-meta">
+			<div id="revisions-meta-stored">
+				<?php printf( _n( 'There is %d stored revisions for this post.', 'There are %d stored revisions for this post.', $the_revisions_count ), $the_revisions_count ); ?>
+			</div>
+			<div id="revisions-meta-mostrecent">
+				<?php printf( __( ' Most recent revision by %s.' ), wp_post_revision_title( array_shift( $the_revisions ) ) ); ?>
+			</div>
+			<?php if ( $the_revisions_count > 1 ) { ?> 
+				<div id="revisions-meta-oldest">
+					<?php printf( __( ' Oldest revision by %s.' ), wp_post_revision_title( array_pop( $the_revisions ) ) ); ?>
+				</div>
+			<?php 
+			} //only show link if more than one revision, TODO get working with one revision only
+
+			if ( $restoredfrommeta = get_post_meta( $post->ID, '_post_restored_from', true ) ) {
+				$author = get_the_author_meta( 'display_name', $restoredfrommeta[ 'restored_by_user' ] );
+				/* translators: revision date format, see http://php.net/date */
+				$datef = _x( 'j F, Y @ G:i:s', 'revision date format');
+				$date = date_i18n( $datef, strtotime( $restoredfrommeta[ 'restored_time' ] ) );
+				$timesince = human_time_diff( $restoredfrommeta[ 'restored_time' ], current_time( 'timestamp' ) ) . __( ' ago ' );
+				?>
+				<div id="revisions-meta-restored">
+					<?php
+					printf( 'Previously restored from Revision ID %d, %s by %s (%s)',
+						 $restoredfrommeta[ 'restored_revision_id'],
+						 $timesince,
+						 $author,
+						 $date );
+					?>
+				</div>
+				<?php
+			}
+			?>
+
+			<div id="revisions-meta-link" ]>
+				<a href="<?php printf( 'revision.php?revision=%s&postid=%s&action=edit', key( $the_revisions ), $post->ID )?>" class="edit-revisions hide-if-no-js">
+					<?php _e( 'View and compare revisions' ); ?>
+				</a>
+			
+			</div>
+		</div>
+	<?php
+
+
+	}
+}
Index: wp-includes/js/template.js
===================================================================
--- wp-includes/js/template.js	(revision 0)
+++ wp-includes/js/template.js	(revision 0)
@@ -0,0 +1,29 @@
+window.wp = window.wp || {};
+
+(function ($) {
+	var template;
+	/**
+	 * wp.template( id )
+	 *
+	 * Fetches a template by id.
+	 *
+	 * @param  {string} id   A string that corresponds to a DOM element with an id prefixed with "tmpl-".
+	 *                       For example, "attachment" maps to "tmpl-attachment".
+	 * @return {function}    A function that lazily-compiles the template requested.
+	 */
+	template = wp.template = _.memoize(function ( id ) {
+		var compiled,
+			options = {
+				evaluate:    /<#([\s\S]+?)#>/g,
+				interpolate: /\{\{\{([\s\S]+?)\}\}\}/g,
+				escape:      /\{\{([^\}]+?)\}\}(?!\})/g,
+				variable:    'data'
+			};
+
+		return function ( data ) {
+			compiled = compiled || _.template( $( '#tmpl-' + id ).html(), null, options );
+			return compiled( data );
+		};
+	});
+
+}(jQuery));
Index: wp-includes/js/revisions.js
===================================================================
--- wp-includes/js/revisions.js	(revision 0)
+++ wp-includes/js/revisions.js	(revision 0)
@@ -0,0 +1,526 @@
+window.wp = window.wp || {};
+
+(function($) {
+	wp.revisions = {
+
+		views : {},
+
+		Model : Backbone.Model.extend({
+			defaults: {
+				ID : 0,
+				revision_date_author : '',
+				revisiondiff : '',
+				restoreaction: '',
+				diff_max : 0,
+				diff_count : 0,
+				diff_revision_to : 0,
+				revision_from_date_author : '',
+			}
+		}),
+
+		app: _.extend({}, Backbone.Events),
+
+		App : Backbone.Router.extend({
+			_revisionDifflView : null,
+			_revisions : null,
+			_left_handle_revisions : null,
+			_right_handle_revisions : null,
+			_revisionsInteractions : null,
+			_revisionsOptions : null,
+			_left_diff : 0,
+			_right_diff : 1,
+			_autosaves : false,
+			_showsplitview : true,
+			_compareoneortwo : 1,
+			left_model_loading : false,		//keep track of model loads
+			right_model_loading : false,	//disallow slider interaction, also repeat loads, while loading
+
+			//TODO add ability to arrive on specific revision
+			routes : {
+				"viewrevision/:revision": "viewrevision",
+			},
+
+			viewrevision : function( revision ) {
+				//coming soon
+			},
+
+			start_left_model_loading : function() {
+				this.left_model_loading = true;
+				$('.revisiondiffcontainer').addClass('leftmodelloading');
+			},
+
+			stop_left_model_loading : function() {
+				this.left_model_loading = false;
+				$('.revisiondiffcontainer').removeClass('leftmodelloading');
+			},
+
+			start_right_model_loading : function() {
+				this.right_model_loading = true;
+				$('.revisiondiffcontainer').addClass('rightmodelloading');
+			},
+
+			stop_right_model_loading : function() {
+				this.right_model_loading = false;
+				$('.revisiondiffcontainer').removeClass('rightmodelloading');
+			},
+
+			reloadmodel : function() {
+				if ( 2 == this._compareoneortwo ) {
+					this.reloadleftright();
+				} else {
+					this.reloadmodelsingle();
+				}
+			},
+
+			reloadmodelsingle : function() {
+				var self = this;
+				self._revisions.url = ajaxurl +	'?action=revisions-data&compareto=' + postid +
+											'&showautosaves=' + self.self_autosaves +
+											'&showsplitview=' +  REVAPP._showsplitview;
+				self.start_right_model_loading();
+				this._revisions.fetch({ //reload revision data
+					success : function() {
+						self.stop_right_model_loading();
+						var revisioncount = self._revisions.length;
+						if ( self._right_diff > revisioncount ) //if right handle past rightmost, move
+							self._right_diff = revisioncount;
+						//TODO add a test for matchind left revision and push left, testing
+						//also reset the slider values here
+
+						self._revisionView.render();
+						$( '#slider' ).slider( 'option', 'max', revisioncount-1 ); //TODO test this
+					},
+
+					error : function () {
+						self.stop_right_model_loading();
+						window.console && console.log( 'Error loading revision data' );
+					}
+
+				});
+			},
+
+			reloadleftright : function() {
+				var self = this;
+				self.start_left_model_loading();
+				self.start_right_model_loading();
+
+				self._left_handle_revisions = new wp.revisions.Collection();
+				self._right_handle_revisions = new wp.revisions.Collection();
+
+				if ( 0 == self._left_diff ) {
+					self._right_handle_revisions.url =
+						ajaxurl +
+						'?action=revisions-data&compareto=' + postid +
+						'&postid=' + postid +
+						'&showautosaves=' + self._autosaves +
+						'&showsplitview=' +  self._showsplitview;
+				} else {
+					self._right_handle_revisions.url =
+						ajaxurl +
+						'?action=revisions-data&compareto=' + self._revisions.at( self._left_diff - 1 ).get( 'ID' ) +
+						'&postid=' + postid +
+						'&showautosaves=' + self._autosaves +
+						'&showsplitview=' +  self._showsplitview;
+				}
+
+				self._left_handle_revisions.url =
+					ajaxurl +
+					'?action=revisions-data&compareto=' + self._revisions.at( self._right_diff - 1 ).get( 'ID' ) +
+					'&postid=' + postid +
+					'&showautosaves=' + self._autosaves +
+					'&showsplitview=' +  self._showsplitview;
+
+				self._left_handle_revisions.fetch({
+
+					xhr: function() {
+						var xhr = $.ajaxSettings.xhr();
+						xhr.onprogress = self.handleProgress;
+						return xhr;
+					},
+
+					handleProgress: function(evt){
+						var percentComplete = 0;
+						if (evt.lengthComputable) {
+							percentComplete = evt.loaded / evt.total;
+							window.console && console.log( Math.round( percentComplete * 100) + "%" );
+						}
+					},
+
+					success : function(){
+						self.stop_left_model_loading();
+					},
+
+					error : function () {
+						window.console && console.log( 'Error loading revision data' );
+						self.stop_left_model_loading();
+					}
+				});
+
+				self._right_handle_revisions.fetch({
+					
+					success : function(){
+						self.stop_right_model_loading();
+					},
+
+					error : function () {
+						window.console && console.log( 'Error loading revision data' );
+						self.stop_right_model_loading();
+					}
+				});
+			},
+
+			/*
+			 * initialize the revision appl;ication
+			 */
+			initialize : function( options ) {
+				var self = this; //store the application instance
+				if (this._revisions === null) {
+					self._autosaves = '';
+					self._revisions = new wp.revisions.Collection(); //set up collection
+					self.start_right_model_loading();
+					self._revisions.fetch({ //load revision data
+
+						success : function() {
+							self.stop_right_model_loading();
+							self.revisionDiffSetup();
+						}
+					});
+				}
+				return this;
+			},
+
+			revisionDiffSetup : function() {
+				var self = this, slider;
+
+				this._revisionView = new wp.revisions.views.View({
+					model : this._revisions
+				});
+				this._revisionView.render();
+
+				this._revisionsInteractions = new wp.revisions.views.Interact({
+					model : this._revisions
+				});
+				this._revisionsInteractions.render();
+
+				this._revisionsOptions = new wp.revisions.views.Options({
+					model : this._revisions
+				});
+				this._revisionsOptions.render();
+
+			}
+		})
+	};
+
+	wp.revisions.Collection = Backbone.Collection.extend({
+		model : wp.revisions.Model,
+		url : ajaxurl +	'?action=revisions-data&compareto=' + postid + '&showautosaves=false&showsplitview=true'
+	});
+
+	_.extend(wp.revisions.views, {
+		//
+		//primary revision diff view
+		//
+		View : Backbone.View.extend({
+			el : $('#backbonerevisionsdiff')[0],
+			tagName : 'revisionvview',
+			className : 'revisionview-container',
+			template : wp.template('revision'),
+			revvapp : null,
+			comparetwochecked : '',
+			draggingleft : false,
+
+			initialize : function(){
+			},
+
+			//
+			//render the revisions
+			//
+			render : function() {
+				var addhtml = '';
+				//compare two revisions mode?
+				if ( 2 == REVAPP._compareoneortwo ) {
+					this.comparetwochecked = 'checked';
+					if ( this.draggingleft ) {
+							if ( this.model.at( REVAPP._left_diff ) ) {
+							addhtml = this.template( _.extend(
+								this.model.at( REVAPP._left_diff ).toJSON(),
+								{ comparetwochecked : this.comparetwochecked } //keep the checkmark checked
+							) );
+						}
+					} else { //dragging right handle
+						var thediff = REVAPP._right_diff;
+						if ( this.model.at( thediff ) ) {
+							addhtml = this.template( _.extend(
+								this.model.at( thediff ).toJSON(),
+								{ comparetwochecked : this.comparetwochecked } //keep the checkmark checked
+							) );
+						}
+					}
+				} else { //end compare two revisions mode, eg only one slider handel
+					this.comparetwochecked = '';
+					if ( this.model.at( REVAPP._right_diff - 1 ) ) {
+						addhtml = this.template( _.extend(
+							this.model.at( REVAPP._right_diff-1 ).toJSON(),
+							{ comparetwochecked : this.comparetwochecked } //keep the checkmark checked
+						) );
+					}
+				}
+				this.$el.html( addhtml );
+				return this;
+			},
+
+			//the compare two button is in this view, add the interaction here
+			events : {
+				'click #comparetwo' : 'clickcomparetwo'
+			},
+
+			//
+			//turn on/off the compare two mmode
+			//
+			clickcomparetwo : function(){
+				self = this;
+				if ( $( 'input#comparetwo' ).is( ':checked' ) ) {
+					REVAPP._compareoneortwo = 2 ;
+					REVAPP.reloadleftright();
+				} else {
+					REVAPP._compareoneortwo = 1 ;
+					REVAPP._revisionView.draggingleft = false;
+					REVAPP._left_diff = 0;
+					REVAPP.reloadmodelsingle();
+				}
+				REVAPP._revisionsInteractions.render();
+			}
+		}),
+
+		//
+		//options view for show autosaves and show split view options
+		//
+		Options : Backbone.View.extend({
+			el : $('#backbonerevisionsoptions')[0],
+			tagName : 'revisionoptionsview',
+			className : 'revisionoptions-container',
+			template : wp.template('revisionoptions'),
+
+			initialize : function() {
+			},
+
+			//render the options view
+			render : function() {
+				var addhtml = this.template;
+				this.$el.html( addhtml );
+				return this;
+			},
+
+			//add options interactions
+			events : {
+				'click #toggleshowautosaves' : 'toggleshowautosaves',
+				'click #showsplitview' : 'showsplitview'
+			},
+
+			//
+			//toggle include autosaves 
+			//
+			toggleshowautosaves : function() {
+				var self = this;
+				if ( $( '#toggleshowautosaves' ).is( ':checked' ) ) {
+					REVAPP._autosaves = true ;
+				} else {
+					REVAPP._autosaves = false ;
+				}
+				//refresh the model data
+
+				REVAPP.reloadmodel();
+				//TODO check for two handle mode
+				
+			},
+
+			//
+			//toggle showing the split diff view
+			//
+			showsplitview :  function() {
+				var self = this;
+
+				if ( $( 'input#showsplitview' ).is( ':checked' ) ) {
+					REVAPP._showsplitview = 'true';
+					$('.revisiondiffcontainer').addClass('diffsplit');
+				} else {
+					REVAPP._showsplitview = '';
+					$('.revisiondiffcontainer').removeClass('diffsplit');
+				}
+
+				REVAPP.reloadmodel();
+			}
+		}),
+
+		//
+		//main interactions view
+		//
+		Interact : Backbone.View.extend({
+			el : $('#backbonerevisionsinteract')[0],
+			tagName : 'revisionvinteract',
+			className : 'revisionvinteract-container',
+			template : wp.template('revisionvinteract'),
+
+			initialize : function() {
+			},
+
+			render : function() {
+				var self = this;
+
+				var addhtml = this.template;
+				this.$el.html( addhtml );
+				$( '#diff_max, #diff_maxof' ).html( this.model.length );
+				$( '#diff_count' ).html( REVAPP._right_diff );
+				$( '#diff_left_count_inner' ).html( 0 == REVAPP._left_diff ? '' : 'revision' + REVAPP._left_diff );
+
+				var modelcount = REVAPP._revisions.length;
+
+				slider = $("#slider");
+				if ( 1 == REVAPP._compareoneortwo ) {
+					//set up the slider with a single handle
+					slider.slider({
+						value : REVAPP._right_diff-1,
+						min : 0,
+						max : modelcount-1,
+						step : 1,
+
+						//slide interactions for one handles slider
+						slide : function( event, ui ) {
+							if ( REVAPP.right_model_loading ) //left model stoll loading, prevent sliding left handle
+										return false;
+
+							REVAPP._right_diff =( ui.value+1 );
+							$( '#diff_count' ).html( REVAPP._right_diff );
+							REVAPP._revisionView.render();
+						}
+					});
+					$( '.revisiondiffcontainer' ).removeClass( 'comparetwo' );
+				} else { //comparing more than one, eg 2
+					//set up the slider with two handles
+					slider.slider({
+						values : [ REVAPP._left_diff, REVAPP._right_diff + 1 ],
+						min : 1,
+						max : modelcount+1,
+						step : 1,
+						range: true,
+
+						//in two handled mode when user starts dragging, swap in precalculated diff for handle
+						start : function (event, ui ) {
+							var index = $( ui.handle ).index(); //0 (left) or 1 (right)
+
+							switch ( index ) {
+								case 1: //left handle drag
+									if ( REVAPP.left_model_loading ) //left model stoll loading, prevent sliding left handle
+										return false;
+
+									if ( REVAPP._revisionView.model !== REVAPP._left_handle_revisions &&
+											null != REVAPP._left_handle_revisions )
+										REVAPP._revisionView.model = REVAPP._left_handle_revisions;
+
+									REVAPP._revisionView.draggingleft = true;
+									break;
+
+								case 2: //right
+									if ( REVAPP.right_model_loading ) //right model stoll loading, prevent sliding right handle
+										return false;
+
+									//one extra spot at left end when comparing two
+									if ( REVAPP._revisionView.model !== REVAPP._right_handle_revisions &&
+											null != REVAPP._right_handle_revisions )
+										REVAPP._revisionView.model = REVAPP._right_handle_revisions;
+
+									REVAPP._revisionView.draggingleft = false;
+									REVAPP._right_diff = ui.values[1] - 1 ;
+									break;
+							}
+						},
+
+						//when sliding in two handled mode change appropriate value
+						slide : function( event, ui ) {
+							if ( ui.values[0] == ui.values[1] ) //prevent compare to self
+								return false;
+
+							var index = $( ui.handle ).index(); //0 (left) or 1 (right)
+
+							switch ( index ) {
+								case 1: //left
+									if ( REVAPP.left_model_loading ) //left model stoll loading, prevent sliding left handle
+										return false;
+
+									REVAPP._left_diff = ui.values[0] - 1; //one extra spot at left end when comparing two
+									break;
+
+								case 2: //right
+									if ( REVAPP.right_model_loading ) //right model stoll loading, prevent sliding right handle
+										return false;
+
+									REVAPP._right_diff = ui.values[1] - 1 ;
+									break;
+							}
+
+							$( '#diff_count' ).html( REVAPP._right_diff );
+
+							if ( 0 == REVAPP._left_diff ) {
+								$( '.revisiondiffcontainer' ).addClass( 'currentversion' );
+
+							} else {
+								$( '.revisiondiffcontainer' ).removeClass( 'currentversion' );
+								$( '#diff_left_count_inner' ).html( REVAPP._left_diff );
+							}
+
+							REVAPP._revisionView.render(); //render the diff view
+						},
+
+						//when the user stops sliding  in 2 handle mode, recalculate diffs
+						stop : function( event, ui ) {
+							if ( 2 == REVAPP._compareoneortwo ) {
+								//calculate and generate a diff for comparing to the left handle
+								//and the right handle, swap out when dragging
+								if ( ! (REVAPP.left_model_loading && REVAPP.right_model.loading ) ) {
+									REVAPP.reloadleftright();
+								}
+							}
+						}
+					});
+					$( '.revisiondiffcontainer' ).addClass( 'comparetwo' );
+				}
+
+				return this;
+			},
+
+			//next and previous buttons, only available in compare one mode
+			events : {
+				'click #next' : 'nextrevision',
+				'click #previous' : 'previousrevision'
+			},
+
+			//go to the next revision
+			nextrevision : function() {
+				if ( REVAPP._right_diff < this.model.length ) //unless at right boundry
+					REVAPP._right_diff = REVAPP._right_diff + 1 ;
+
+				REVAPP._revisionView.render();
+
+				$( '#diff_count' ).html( REVAPP._right_diff );
+				$( '#slider' ).slider( 'value', REVAPP._right_diff - 1 ).trigger( 'slide' );
+			},
+
+			//go the the previous revision
+			previousrevision : function() {
+				if ( REVAPP._right_diff > 1 ) //unless at left boundry
+						REVAPP._right_diff = REVAPP._right_diff - 1 ;
+
+				REVAPP._revisionView.render();
+
+				$( '#diff_count' ).html( REVAPP._right_diff );
+				$( '#slider' ).slider( 'value', REVAPP._right_diff - 1 ).trigger( 'slide' );
+			}
+		})
+	});
+
+	//instantiate Revision Application
+	REVAPP = new wp.revisions.App();
+	//TODO consider enable back button to step back thru states?
+	Backbone.history.start();
+
+}(jQuery));
Index: wp-includes/wp-diff.php
===================================================================
--- wp-includes/wp-diff.php	(revision 23494)
+++ wp-includes/wp-diff.php	(working copy)
@@ -59,6 +59,8 @@
 	 */
 	var $inline_diff_renderer = 'WP_Text_Diff_Renderer_inline';
 
+	var $_showsplitview = null;
+
 	/**
 	 * Constructor - Call parent constructor with params array.
 	 *
@@ -70,6 +72,8 @@
 	 */
 	function __construct( $params = array() ) {
 		parent::__construct( $params );
+		if ( isset( $params[ 'showsplitview' ] ) )
+			$this -> _showsplitview = $params[ 'showsplitview' ];
 	}
 
 	/**
@@ -98,7 +102,8 @@
 	 * @return string
 	 */
 	function addedLine( $line ) {
-		return "<td>+</td><td class='diff-addedline'>{$line}</td>";
+		return "<td class='diff-addedline'>{$line}</td>";
+
 	}
 
 	/**
@@ -108,7 +113,7 @@
 	 * @return string
 	 */
 	function deletedLine( $line ) {
-		return "<td>-</td><td class='diff-deletedline'>{$line}</td>";
+		return "<td class='diff-deletedline'>{$line}</td>";
 	}
 
 	/**
@@ -118,7 +123,7 @@
 	 * @return string
 	 */
 	function contextLine( $line ) {
-		return "<td> </td><td class='diff-context'>{$line}</td>";
+		return "<td class='diff-context'>{$line}</td>";
 	}
 
 	/**
@@ -127,7 +132,7 @@
 	 * @return string
 	 */
 	function emptyLine() {
-		return '<td colspan="2">&nbsp;</td>';
+		return '<td>&nbsp;</td>';
 	}
 
 	/**
@@ -142,8 +147,12 @@
 		$r = '';
 		foreach ($lines as $line) {
 			if ( $encode )
-				$line = htmlspecialchars( $line );
-			$r .= '<tr>' . $this->emptyLine() . $this->addedLine( $line ) . "</tr>\n";
+				$line = wp_kses_post( $line );
+			if ( ! $this->_showsplitview ) {
+				$r .= '<tr>' . $this->addedLine( $line ) . "</tr>\n";
+			} else {
+				$r .= '<tr>' . $this->emptyLine() . $this->emptyLine() . $this->addedLine( $line ) . "</tr>\n";
+			}
 		}
 		return $r;
 	}
@@ -160,8 +169,13 @@
 		$r = '';
 		foreach ($lines as $line) {
 			if ( $encode )
-				$line = htmlspecialchars( $line );
-			$r .= '<tr>' . $this->deletedLine( $line ) . $this->emptyLine() . "</tr>\n";
+				$line = wp_kses_post( $line );
+			if ( ! $this->_showsplitview ) {
+				$r .= '<tr>' . $this->deletedLine( $line ) . "</tr>\n";
+			} else {
+				$r .= '<tr>' . $this->deletedLine( $line ) . $this->emptyLine() . $this->emptyLine() . "</tr>\n";
+			}
+
 		}
 		return $r;
 	}
@@ -178,9 +192,12 @@
 		$r = '';
 		foreach ($lines as $line) {
 			if ( $encode )
-				$line = htmlspecialchars( $line );
-			$r .= '<tr>' .
-				$this->contextLine( $line ) . $this->contextLine( $line ) . "</tr>\n";
+				$line = wp_kses_post( $line );
+			if (  ! $this->_showsplitview ) {
+				$r .= '<tr>' . $this->contextLine( $line ) . "</tr>\n";
+			} else {
+				$r .= '<tr>' . $this->contextLine( $line ) . $this->emptyLine() . $this->contextLine( $line )  . "</tr>\n";
+			}
 		}
 		return $r;
 	}
@@ -264,7 +281,11 @@
 			} elseif ( $final_rows[$row] < 0 ) { // Final is blank. This is really a deleted row.
 				$r .= $this->_deleted( array($orig_line), false );
 			} else { // A true changed row.
-				$r .= '<tr>' . $this->deletedLine( $orig_line ) . $this->addedLine( $final_line ) . "</tr>\n";
+				if ( ! $this->_showsplitview ) {
+					$r .= '<tr>' . $this->deletedLine( $orig_line ) . "</tr><tr>" . $this->addedLine( $final_line ) . "</tr>\n";
+				} else {
+					$r .= '<tr>' . $this->deletedLine( $orig_line ) . $this->emptyLine() . $this->addedLine( $final_line ) . "</tr>\n";
+				}
 			}
 		}
 
Index: wp-includes/css/jquery-ui-slider.css
===================================================================
--- wp-includes/css/jquery-ui-slider.css	(revision 0)
+++ wp-includes/css/jquery-ui-slider.css	(revision 0)
@@ -0,0 +1,544 @@
+/*! jQuery UI - v1.10.1 - 2013-02-15
+* http://jqueryui.com
+* Includes: jquery.ui.core.css, jquery.ui.slider.css
+* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Trebuchet%20MS%2CTahoma%2CVerdana%2CArial%2Csans-serif&fwDefault=bold&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=f6a828&bgTextureHeader=gloss_wave&bgImgOpacityHeader=35&borderColorHeader=e78f08&fcHeader=ffffff&iconColorHeader=ffffff&bgColorContent=eeeeee&bgTextureContent=highlight_soft&bgImgOpacityContent=100&borderColorContent=dddddd&fcContent=333333&iconColorContent=222222&bgColorDefault=f6f6f6&bgTextureDefault=glass&bgImgOpacityDefault=100&borderColorDefault=cccccc&fcDefault=1c94c4&iconColorDefault=ef8c08&bgColorHover=fdf5ce&bgTextureHover=glass&bgImgOpacityHover=100&borderColorHover=fbcb09&fcHover=c77405&iconColorHover=ef8c08&bgColorActive=ffffff&bgTextureActive=glass&bgImgOpacityActive=65&borderColorActive=fbd850&fcActive=eb8f00&iconColorActive=ef8c08&bgColorHighlight=ffe45c&bgTextureHighlight=highlight_soft&bgImgOpacityHighlight=75&borderColorHighlight=fed22f&fcHighlight=363636&iconColorHighlight=228ef1&bgColorError=b81900&bgTextureError=diagonals_thick&bgImgOpacityError=18&borderColorError=cd0a0a&fcError=ffffff&iconColorError=ffd27a&bgColorOverlay=666666&bgTextureOverlay=diagonals_thick&bgImgOpacityOverlay=20&opacityOverlay=50&bgColorShadow=000000&bgTextureShadow=flat&bgImgOpacityShadow=10&opacityShadow=20&thicknessShadow=5px&offsetTopShadow=-5px&offsetLeftShadow=-5px&cornerRadiusShadow=5px
+* Copyright (c) 2013 jQuery Foundation and other contributors Licensed MIT */
+
+/* Layout helpers
+----------------------------------*/
+.ui-helper-hidden {
+	display: none;
+}
+.ui-helper-hidden-accessible {
+	border: 0;
+	clip: rect(0 0 0 0);
+	height: 1px;
+	margin: -1px;
+	overflow: hidden;
+	padding: 0;
+	position: absolute;
+	width: 1px;
+}
+.ui-helper-reset {
+	margin: 0;
+	padding: 0;
+	border: 0;
+	outline: 0;
+	line-height: 1.3;
+	text-decoration: none;
+	font-size: 100%;
+	list-style: none;
+}
+.ui-helper-clearfix:before,
+.ui-helper-clearfix:after {
+	content: "";
+	display: table;
+	border-collapse: collapse;
+}
+.ui-helper-clearfix:after {
+	clear: both;
+}
+.ui-helper-clearfix {
+	min-height: 0; /* support: IE7 */
+}
+.ui-helper-zfix {
+	width: 100%;
+	height: 100%;
+	top: 0;
+	left: 0;
+	position: absolute;
+	opacity: 0;
+	filter:Alpha(Opacity=0);
+}
+
+.ui-front {
+	z-index: 100;
+}
+
+
+/* Interaction Cues
+----------------------------------*/
+.ui-state-disabled {
+	cursor: default !important;
+}
+
+
+/* Icons
+----------------------------------*/
+
+/* states and images */
+.ui-icon {
+	display: block;
+	text-indent: -99999px;
+	overflow: hidden;
+	background-repeat: no-repeat;
+}
+
+
+/* Misc visuals
+----------------------------------*/
+
+/* Overlays */
+.ui-widget-overlay {
+	position: fixed;
+	top: 0;
+	left: 0;
+	width: 100%;
+	height: 100%;
+}
+.ui-slider {
+	position: relative;
+	text-align: left;
+}
+.ui-slider .ui-slider-handle {
+	position: absolute;
+	z-index: 2;
+	width: 1.2em;
+	height: 1.2em;
+	cursor: default;
+}
+.ui-slider .ui-slider-range {
+	position: absolute;
+	z-index: 1;
+	font-size: .7em;
+	display: block;
+	border: 0;
+	background-position: 0 0;
+}
+
+/* For IE8 - See #6727 */
+.ui-slider.ui-state-disabled .ui-slider-handle,
+.ui-slider.ui-state-disabled .ui-slider-range {
+	filter: inherit;
+}
+
+.ui-slider-horizontal {
+	height: .8em;
+}
+.ui-slider-horizontal .ui-slider-handle {
+	top: -.3em;
+	margin-left: -.6em;
+}
+.ui-slider-horizontal .ui-slider-range {
+	top: 0;
+	height: 100%;
+}
+.ui-slider-horizontal .ui-slider-range-min {
+	left: 0;
+}
+.ui-slider-horizontal .ui-slider-range-max {
+	right: 0;
+}
+
+.ui-slider-vertical {
+	width: .8em;
+	height: 100px;
+}
+.ui-slider-vertical .ui-slider-handle {
+	left: -.3em;
+	margin-left: 0;
+	margin-bottom: -.6em;
+}
+.ui-slider-vertical .ui-slider-range {
+	left: 0;
+	width: 100%;
+}
+.ui-slider-vertical .ui-slider-range-min {
+	bottom: 0;
+}
+.ui-slider-vertical .ui-slider-range-max {
+	top: 0;
+}
+
+/* Component containers
+----------------------------------*/
+.ui-widget {
+	font-family: Trebuchet MS,Tahoma,Verdana,Arial,sans-serif;
+	font-size: 1.1em;
+}
+.ui-widget .ui-widget {
+	font-size: 1em;
+}
+.ui-widget input,
+.ui-widget select,
+.ui-widget textarea,
+.ui-widget button {
+	font-family: Trebuchet MS,Tahoma,Verdana,Arial,sans-serif;
+	font-size: 1em;
+}
+.ui-widget-content {
+	border: 1px solid #dddddd;
+	background: #eeeeee url(../images/ui-bg_highlight-soft_100_eeeeee_1x100.png) 50% top repeat-x;
+	color: #333333;
+}
+.ui-widget-content a {
+	color: #333333;
+}
+.ui-widget-header {
+	border: 1px solid #e78f08;
+	background: #f6a828 url(../images/ui-bg_gloss-wave_35_f6a828_500x100.png) 50% 50% repeat-x;
+	color: #ffffff;
+	font-weight: bold;
+}
+.ui-widget-header a {
+	color: #ffffff;
+}
+
+/* Interaction states
+----------------------------------*/
+.ui-state-default,
+.ui-widget-content .ui-state-default,
+.ui-widget-header .ui-state-default {
+	border: 1px solid #cccccc;
+	background: #f6f6f6 url(../images/ui-bg_glass_100_f6f6f6_1x400.png) 50% 50% repeat-x;
+	font-weight: bold;
+	color: #1c94c4;
+}
+.ui-state-default a,
+.ui-state-default a:link,
+.ui-state-default a:visited {
+	color: #1c94c4;
+	text-decoration: none;
+}
+.ui-state-hover,
+.ui-widget-content .ui-state-hover,
+.ui-widget-header .ui-state-hover,
+.ui-state-focus,
+.ui-widget-content .ui-state-focus,
+.ui-widget-header .ui-state-focus {
+	border: 1px solid #fbcb09;
+	background: #fdf5ce url(../images/ui-bg_glass_100_fdf5ce_1x400.png) 50% 50% repeat-x;
+	font-weight: bold;
+	color: #c77405;
+}
+.ui-state-hover a,
+.ui-state-hover a:hover,
+.ui-state-hover a:link,
+.ui-state-hover a:visited {
+	color: #c77405;
+	text-decoration: none;
+}
+.ui-state-active,
+.ui-widget-content .ui-state-active,
+.ui-widget-header .ui-state-active {
+	border: 1px solid #fbd850;
+	background: #ffffff url(../images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x;
+	font-weight: bold;
+	color: #eb8f00;
+}
+.ui-state-active a,
+.ui-state-active a:link,
+.ui-state-active a:visited {
+	color: #eb8f00;
+	text-decoration: none;
+}
+
+/* Interaction Cues
+----------------------------------*/
+.ui-state-highlight,
+.ui-widget-content .ui-state-highlight,
+.ui-widget-header .ui-state-highlight {
+	border: 1px solid #fed22f;
+	background: #ffe45c url(../images/ui-bg_highlight-soft_75_ffe45c_1x100.png) 50% top repeat-x;
+	color: #363636;
+}
+.ui-state-highlight a,
+.ui-widget-content .ui-state-highlight a,
+.ui-widget-header .ui-state-highlight a {
+	color: #363636;
+}
+.ui-state-error,
+.ui-widget-content .ui-state-error,
+.ui-widget-header .ui-state-error {
+	border: 1px solid #cd0a0a;
+	background: #b81900 url(../images/ui-bg_diagonals-thick_18_b81900_40x40.png) 50% 50% repeat;
+	color: #ffffff;
+}
+.ui-state-error a,
+.ui-widget-content .ui-state-error a,
+.ui-widget-header .ui-state-error a {
+	color: #ffffff;
+}
+.ui-state-error-text,
+.ui-widget-content .ui-state-error-text,
+.ui-widget-header .ui-state-error-text {
+	color: #ffffff;
+}
+.ui-priority-primary,
+.ui-widget-content .ui-priority-primary,
+.ui-widget-header .ui-priority-primary {
+	font-weight: bold;
+}
+.ui-priority-secondary,
+.ui-widget-content .ui-priority-secondary,
+.ui-widget-header .ui-priority-secondary {
+	opacity: .7;
+	filter:Alpha(Opacity=70);
+	font-weight: normal;
+}
+.ui-state-disabled,
+.ui-widget-content .ui-state-disabled,
+.ui-widget-header .ui-state-disabled {
+	opacity: .35;
+	filter:Alpha(Opacity=35);
+	background-image: none;
+}
+.ui-state-disabled .ui-icon {
+	filter:Alpha(Opacity=35); /* For IE8 - See #6059 */
+}
+
+/* Icons
+----------------------------------*/
+
+/* states and images */
+.ui-icon {
+	width: 16px;
+	height: 16px;
+	background-position: 16px 16px;
+}
+.ui-icon,
+.ui-widget-content .ui-icon {
+	background-image: url(../images/ui-icons_222222_256x240.png);
+}
+.ui-widget-header .ui-icon {
+	background-image: url(../images/ui-icons_ffffff_256x240.png);
+}
+.ui-state-default .ui-icon {
+	background-image: url(../images/ui-icons_ef8c08_256x240.png);
+}
+.ui-state-hover .ui-icon,
+.ui-state-focus .ui-icon {
+	background-image: url(../images/ui-icons_ef8c08_256x240.png);
+}
+.ui-state-active .ui-icon {
+	background-image: url(../images/ui-icons_ef8c08_256x240.png);
+}
+.ui-state-highlight .ui-icon {
+	background-image: url(../images/ui-icons_228ef1_256x240.png);
+}
+.ui-state-error .ui-icon,
+.ui-state-error-text .ui-icon {
+	background-image: url(../images/ui-icons_ffd27a_256x240.png);
+}
+
+/* positioning */
+.ui-icon-carat-1-n { background-position: 0 0; }
+.ui-icon-carat-1-ne { background-position: -16px 0; }
+.ui-icon-carat-1-e { background-position: -32px 0; }
+.ui-icon-carat-1-se { background-position: -48px 0; }
+.ui-icon-carat-1-s { background-position: -64px 0; }
+.ui-icon-carat-1-sw { background-position: -80px 0; }
+.ui-icon-carat-1-w { background-position: -96px 0; }
+.ui-icon-carat-1-nw { background-position: -112px 0; }
+.ui-icon-carat-2-n-s { background-position: -128px 0; }
+.ui-icon-carat-2-e-w { background-position: -144px 0; }
+.ui-icon-triangle-1-n { background-position: 0 -16px; }
+.ui-icon-triangle-1-ne { background-position: -16px -16px; }
+.ui-icon-triangle-1-e { background-position: -32px -16px; }
+.ui-icon-triangle-1-se { background-position: -48px -16px; }
+.ui-icon-triangle-1-s { background-position: -64px -16px; }
+.ui-icon-triangle-1-sw { background-position: -80px -16px; }
+.ui-icon-triangle-1-w { background-position: -96px -16px; }
+.ui-icon-triangle-1-nw { background-position: -112px -16px; }
+.ui-icon-triangle-2-n-s { background-position: -128px -16px; }
+.ui-icon-triangle-2-e-w { background-position: -144px -16px; }
+.ui-icon-arrow-1-n { background-position: 0 -32px; }
+.ui-icon-arrow-1-ne { background-position: -16px -32px; }
+.ui-icon-arrow-1-e { background-position: -32px -32px; }
+.ui-icon-arrow-1-se { background-position: -48px -32px; }
+.ui-icon-arrow-1-s { background-position: -64px -32px; }
+.ui-icon-arrow-1-sw { background-position: -80px -32px; }
+.ui-icon-arrow-1-w { background-position: -96px -32px; }
+.ui-icon-arrow-1-nw { background-position: -112px -32px; }
+.ui-icon-arrow-2-n-s { background-position: -128px -32px; }
+.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
+.ui-icon-arrow-2-e-w { background-position: -160px -32px; }
+.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
+.ui-icon-arrowstop-1-n { background-position: -192px -32px; }
+.ui-icon-arrowstop-1-e { background-position: -208px -32px; }
+.ui-icon-arrowstop-1-s { background-position: -224px -32px; }
+.ui-icon-arrowstop-1-w { background-position: -240px -32px; }
+.ui-icon-arrowthick-1-n { background-position: 0 -48px; }
+.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
+.ui-icon-arrowthick-1-e { background-position: -32px -48px; }
+.ui-icon-arrowthick-1-se { background-position: -48px -48px; }
+.ui-icon-arrowthick-1-s { background-position: -64px -48px; }
+.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
+.ui-icon-arrowthick-1-w { background-position: -96px -48px; }
+.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
+.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
+.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
+.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
+.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
+.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
+.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
+.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
+.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
+.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
+.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
+.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
+.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
+.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
+.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
+.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
+.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
+.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
+.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
+.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
+.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
+.ui-icon-arrow-4 { background-position: 0 -80px; }
+.ui-icon-arrow-4-diag { background-position: -16px -80px; }
+.ui-icon-extlink { background-position: -32px -80px; }
+.ui-icon-newwin { background-position: -48px -80px; }
+.ui-icon-refresh { background-position: -64px -80px; }
+.ui-icon-shuffle { background-position: -80px -80px; }
+.ui-icon-transfer-e-w { background-position: -96px -80px; }
+.ui-icon-transferthick-e-w { background-position: -112px -80px; }
+.ui-icon-folder-collapsed { background-position: 0 -96px; }
+.ui-icon-folder-open { background-position: -16px -96px; }
+.ui-icon-document { background-position: -32px -96px; }
+.ui-icon-document-b { background-position: -48px -96px; }
+.ui-icon-note { background-position: -64px -96px; }
+.ui-icon-mail-closed { background-position: -80px -96px; }
+.ui-icon-mail-open { background-position: -96px -96px; }
+.ui-icon-suitcase { background-position: -112px -96px; }
+.ui-icon-comment { background-position: -128px -96px; }
+.ui-icon-person { background-position: -144px -96px; }
+.ui-icon-print { background-position: -160px -96px; }
+.ui-icon-trash { background-position: -176px -96px; }
+.ui-icon-locked { background-position: -192px -96px; }
+.ui-icon-unlocked { background-position: -208px -96px; }
+.ui-icon-bookmark { background-position: -224px -96px; }
+.ui-icon-tag { background-position: -240px -96px; }
+.ui-icon-home { background-position: 0 -112px; }
+.ui-icon-flag { background-position: -16px -112px; }
+.ui-icon-calendar { background-position: -32px -112px; }
+.ui-icon-cart { background-position: -48px -112px; }
+.ui-icon-pencil { background-position: -64px -112px; }
+.ui-icon-clock { background-position: -80px -112px; }
+.ui-icon-disk { background-position: -96px -112px; }
+.ui-icon-calculator { background-position: -112px -112px; }
+.ui-icon-zoomin { background-position: -128px -112px; }
+.ui-icon-zoomout { background-position: -144px -112px; }
+.ui-icon-search { background-position: -160px -112px; }
+.ui-icon-wrench { background-position: -176px -112px; }
+.ui-icon-gear { background-position: -192px -112px; }
+.ui-icon-heart { background-position: -208px -112px; }
+.ui-icon-star { background-position: -224px -112px; }
+.ui-icon-link { background-position: -240px -112px; }
+.ui-icon-cancel { background-position: 0 -128px; }
+.ui-icon-plus { background-position: -16px -128px; }
+.ui-icon-plusthick { background-position: -32px -128px; }
+.ui-icon-minus { background-position: -48px -128px; }
+.ui-icon-minusthick { background-position: -64px -128px; }
+.ui-icon-close { background-position: -80px -128px; }
+.ui-icon-closethick { background-position: -96px -128px; }
+.ui-icon-key { background-position: -112px -128px; }
+.ui-icon-lightbulb { background-position: -128px -128px; }
+.ui-icon-scissors { background-position: -144px -128px; }
+.ui-icon-clipboard { background-position: -160px -128px; }
+.ui-icon-copy { background-position: -176px -128px; }
+.ui-icon-contact { background-position: -192px -128px; }
+.ui-icon-image { background-position: -208px -128px; }
+.ui-icon-video { background-position: -224px -128px; }
+.ui-icon-script { background-position: -240px -128px; }
+.ui-icon-alert { background-position: 0 -144px; }
+.ui-icon-info { background-position: -16px -144px; }
+.ui-icon-notice { background-position: -32px -144px; }
+.ui-icon-help { background-position: -48px -144px; }
+.ui-icon-check { background-position: -64px -144px; }
+.ui-icon-bullet { background-position: -80px -144px; }
+.ui-icon-radio-on { background-position: -96px -144px; }
+.ui-icon-radio-off { background-position: -112px -144px; }
+.ui-icon-pin-w { background-position: -128px -144px; }
+.ui-icon-pin-s { background-position: -144px -144px; }
+.ui-icon-play { background-position: 0 -160px; }
+.ui-icon-pause { background-position: -16px -160px; }
+.ui-icon-seek-next { background-position: -32px -160px; }
+.ui-icon-seek-prev { background-position: -48px -160px; }
+.ui-icon-seek-end { background-position: -64px -160px; }
+.ui-icon-seek-start { background-position: -80px -160px; }
+/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
+.ui-icon-seek-first { background-position: -80px -160px; }
+.ui-icon-stop { background-position: -96px -160px; }
+.ui-icon-eject { background-position: -112px -160px; }
+.ui-icon-volume-off { background-position: -128px -160px; }
+.ui-icon-volume-on { background-position: -144px -160px; }
+.ui-icon-power { background-position: 0 -176px; }
+.ui-icon-signal-diag { background-position: -16px -176px; }
+.ui-icon-signal { background-position: -32px -176px; }
+.ui-icon-battery-0 { background-position: -48px -176px; }
+.ui-icon-battery-1 { background-position: -64px -176px; }
+.ui-icon-battery-2 { background-position: -80px -176px; }
+.ui-icon-battery-3 { background-position: -96px -176px; }
+.ui-icon-circle-plus { background-position: 0 -192px; }
+.ui-icon-circle-minus { background-position: -16px -192px; }
+.ui-icon-circle-close { background-position: -32px -192px; }
+.ui-icon-circle-triangle-e { background-position: -48px -192px; }
+.ui-icon-circle-triangle-s { background-position: -64px -192px; }
+.ui-icon-circle-triangle-w { background-position: -80px -192px; }
+.ui-icon-circle-triangle-n { background-position: -96px -192px; }
+.ui-icon-circle-arrow-e { background-position: -112px -192px; }
+.ui-icon-circle-arrow-s { background-position: -128px -192px; }
+.ui-icon-circle-arrow-w { background-position: -144px -192px; }
+.ui-icon-circle-arrow-n { background-position: -160px -192px; }
+.ui-icon-circle-zoomin { background-position: -176px -192px; }
+.ui-icon-circle-zoomout { background-position: -192px -192px; }
+.ui-icon-circle-check { background-position: -208px -192px; }
+.ui-icon-circlesmall-plus { background-position: 0 -208px; }
+.ui-icon-circlesmall-minus { background-position: -16px -208px; }
+.ui-icon-circlesmall-close { background-position: -32px -208px; }
+.ui-icon-squaresmall-plus { background-position: -48px -208px; }
+.ui-icon-squaresmall-minus { background-position: -64px -208px; }
+.ui-icon-squaresmall-close { background-position: -80px -208px; }
+.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
+.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
+.ui-icon-grip-solid-vertical { background-position: -32px -224px; }
+.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
+.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
+.ui-icon-grip-diagonal-se { background-position: -80px -224px; }
+
+
+/* Misc visuals
+----------------------------------*/
+
+/* Corner radius */
+.ui-corner-all,
+.ui-corner-top,
+.ui-corner-left,
+.ui-corner-tl {
+	border-top-left-radius: 4px;
+}
+.ui-corner-all,
+.ui-corner-top,
+.ui-corner-right,
+.ui-corner-tr {
+	border-top-right-radius: 4px;
+}
+.ui-corner-all,
+.ui-corner-bottom,
+.ui-corner-left,
+.ui-corner-bl {
+	border-bottom-left-radius: 4px;
+}
+.ui-corner-all,
+.ui-corner-bottom,
+.ui-corner-right,
+.ui-corner-br {
+	border-bottom-right-radius: 4px;
+}
+
+/* Overlays */
+.ui-widget-overlay {
+	background: #666666 url(../images/ui-bg_diagonals-thick_20_666666_40x40.png) 50% 50% repeat;
+	opacity: .5;
+	filter: Alpha(Opacity=50);
+}
+.ui-widget-shadow {
+	margin: -5px 0 0 -5px;
+	padding: 5px;
+	background: #000000 url(../images/ui-bg_flat_10_000000_40x100.png) 50% 50% repeat-x;
+	opacity: .2;
+	filter: Alpha(Opacity=20);
+	border-radius: 5px;
+}
Index: wp-includes/pluggable.php
===================================================================
--- wp-includes/pluggable.php	(revision 23494)
+++ wp-includes/pluggable.php	(working copy)
@@ -1713,17 +1713,21 @@
 
 	$left_lines  = explode("\n", $left_string);
 	$right_lines = explode("\n", $right_string);
-
 	$text_diff = new Text_Diff($left_lines, $right_lines);
-	$renderer  = new WP_Text_Diff_Renderer_Table();
+	$renderer  = new WP_Text_Diff_Renderer_Table( $args );
 	$diff = $renderer->render($text_diff);
 
 	if ( !$diff )
 		return '';
 
 	$r  = "<table class='diff'>\n";
-	$r .= "<col class='ltype' /><col class='content' /><col class='ltype' /><col class='content' />";
 
+	if ( isset( $args[ 'showsplitview' ] ) && 'true' == $args[ 'showsplitview' ] ) {
+		$r .= "<col class='content diffsplit left' /><col class='content diffsplit middle' /><col class='content diffsplit right' />";
+	} else {
+		$r .= "<col class='content' />";
+	}
+
 	if ( $args['title'] || $args['title_left'] || $args['title_right'] )
 		$r .= "<thead>";
 	if ( $args['title'] )
Index: wp-includes/script-loader.php
===================================================================
--- wp-includes/script-loader.php	(revision 23494)
+++ wp-includes/script-loader.php	(working copy)
@@ -270,8 +270,11 @@
 	$scripts->add( 'json2', "/wp-includes/js/json2$suffix.js", array(), '2011-02-23');
 
 	$scripts->add( 'underscore', '/wp-includes/js/underscore.min.js', array(), '1.4.4', 1 );
-	$scripts->add( 'backbone', '/wp-includes/js/backbone.min.js', array('underscore','jquery'), '0.9.2', 1 );
+	$scripts->add( 'template', "/wp-includes/js/template$suffix.js", array('underscore'), '1.4.4', 1 );
+	$scripts->add( 'backbone', '/wp-includes/js/backbone.min.js', array('underscore','jquery', 'template'), '0.9.2', 1 );
 
+	$scripts->add( 'revisions', "/wp-includes/js/revisions$suffix.js", array('backbone'), '', 1 );
+
 	$scripts->add( 'imgareaselect', "/wp-includes/js/imgareaselect/jquery.imgareaselect$suffix.js", array('jquery'), '0.9.8', 1 );
 
 	$scripts->add( 'password-strength-meter', "/wp-admin/js/password-strength-meter$suffix.js", array('jquery'), false, 1 );
@@ -539,6 +542,8 @@
 	$styles->add( 'customize-controls', "/wp-admin/css/customize-controls$suffix.css", array( 'wp-admin', 'colors', 'ie' ) );
 	$styles->add( 'media-views', "/wp-includes/css/media-views$suffix.css", array( 'buttons' ) );
 	$styles->add( 'buttons', "/wp-includes/css/buttons$suffix.css" );
+	$styles->add( 'revisions', "/wp-admin/css/revisions$suffix.css" );
+	$styles->add( 'wp-jquery-ui-slider', "/wp-includes/css/jquery-ui-slider$suffix.css" );
 
 	foreach ( $rtl_styles as $rtl_style ) {
 		$styles->add_data( $rtl_style, 'rtl', true );
Index: wp-admin/admin-ajax.php
===================================================================
--- wp-admin/admin-ajax.php	(revision 23494)
+++ wp-admin/admin-ajax.php	(working copy)
@@ -42,7 +42,7 @@
 
 $core_actions_get = array(
 	'fetch-list', 'ajax-tag-search', 'wp-compression-test', 'imgedit-preview', 'oembed-cache',
-	'autocomplete-user', 'dashboard-widgets', 'logged-in',
+	'autocomplete-user', 'dashboard-widgets', 'logged-in', 'revisions-data'
 );
 
 $core_actions_post = array(
@@ -56,7 +56,7 @@
 	'save-widget', 'set-post-thumbnail', 'date_format', 'time_format', 'wp-fullscreen-save-post',
 	'wp-remove-post-lock', 'dismiss-wp-pointer', 'upload-attachment', 'get-attachment',
 	'query-attachments', 'save-attachment', 'save-attachment-compat', 'send-link-to-editor',
-	'send-attachment-to-editor', 'save-attachment-order', 'heartbeat',
+	'send-attachment-to-editor', 'save-attachment-order', 'heartbeat'
 );
 
 // Register core Ajax calls.
Index: wp-admin/includes/ajax-actions.php
===================================================================
--- wp-admin/includes/ajax-actions.php	(revision 23494)
+++ wp-admin/includes/ajax-actions.php	(working copy)
@@ -1379,7 +1379,7 @@
 	global $wp_list_table;
 
 	check_ajax_referer( 'taxinlineeditnonce', '_inline_edit' );
-	
+
 	$post_data = wp_unslash( $_POST );
 
 	$taxonomy = sanitize_key( $post_data['taxonomy'] );
@@ -2134,3 +2134,140 @@
 	wp_send_json($response);
 }
 
+function wp_ajax_revisions_data() {
+
+	$compareto = isset( $_GET['compareto'] ) ? $_GET['compareto'] : 0;
+	$showautosaves = isset( $_GET['showautosaves'] ) ? $_GET['showautosaves'] : '';
+	$showsplitview = isset( $_GET['showsplitview'] ) ? $_GET['showsplitview'] : '';
+	$postid = isset( $_GET['postid'] ) ? $_GET['postid'] : '';
+
+	$comparetwomode = ( '' == $postid ) ? false : true;
+	//
+	//TODO: currently code returns all possible comparisons for the indicated 'compareto' revision
+	//however, the front end prevents users from pulling the right handle past the left or the left pass the right,
+	//so only the possible diffs need be generated
+	//
+	$alltherevisions = array();
+
+	if ( '' == $postid )
+		$postid = $compareto;
+
+	if ( ! $revisions = wp_get_post_revisions( $postid ) )
+		return;
+
+	//if we are comparing two revisions, the first 'revision' represented by the leftmost
+	//slider position is the current revision, prepend a comparison to this revision
+	if ( $comparetwomode )
+		array_unshift( $revisions, get_post( $postid ) );
+
+	$count = 1;
+	foreach ( $revisions as $revision ) :
+	if ( 'true' != $showautosaves && wp_is_post_autosave( $revision ) )
+			continue;
+
+	$revision_from_date_author = '';
+
+
+	//if ( current_user_can( 'read_post', $revision->ID ) )
+	//		continue;
+	$left_revision = get_post( $compareto );
+	$right_revision = get_post( $revision );
+
+	$author = get_the_author_meta( 'display_name', $revision->post_author );
+	/* translators: revision date format, see http://php.net/date */
+	$datef = _x( 'j F, Y @ G:i:s', 'revision date format');
+
+	$gravatar = get_avatar( $revision->post_author, 18 );
+
+	$date = date_i18n( $datef, strtotime( $revision->post_modified ) );
+	$revision_date_author = sprintf(
+		'%s %s, %s %s (%s)',
+		$gravatar,
+		$author,
+		human_time_diff( strtotime( $revision->post_modified ), current_time( 'timestamp' ) ),
+		__( ' ago ' ),
+		$date
+	);
+
+	if ( $comparetwomode ) {
+		$compareto_gravatar = get_avatar( $left_revision->post_author, 18 );
+		$compareto_author = get_the_author_meta( 'display_name', $left_revision->post_author );
+		$compareto_date = date_i18n( $datef, strtotime( $left_revision->post_modified ) );
+
+		$revision_from_date_author = sprintf(
+			'%s %s, %s %s (%s)',
+			$compareto_gravatar,
+			$compareto_author,
+			human_time_diff( strtotime( $left_revision->post_modified ), current_time( 'timestamp' ) ),
+			__( ' ago ' ),
+			$compareto_date
+		);
+	}
+
+	$restoreaction = wp_nonce_url(
+		add_query_arg(
+			array( 'revision' => $revision->ID, 
+				'action' => 'restore' ),
+				'/wp-admin/revision.php'
+		),
+		"restore-post_$compareto|$revision->ID"
+	);
+
+	//
+	//make sure the left revision is the most recent
+	//
+	if ( strtotime( $right_revision->post_modified_gmt ) < strtotime( $left_revision->post_modified_gmt ) ) {
+		$temp = $left_revision;
+		$left_revision = $right_revision;
+		$right_revision = $temp;
+	}
+
+	//
+	//compare from left to right, passed from application
+	//
+	$content='';
+	foreach ( array_keys( _wp_post_revision_fields() ) as $field ) {
+		$left_content = apply_filters( "_wp_post_revision_field_$field", $left_revision->$field, $field, $left_revision, 'left' );
+		$right_content = apply_filters( "_wp_post_revision_field_$field", $right_revision->$field, $field, $right_revision, 'right' );
+
+		add_filter( "_wp_post_revision_field_$field", 'wp_kses_post' );
+
+		$args = array();
+
+		if ( 'true' == $showsplitview )
+			 $args = array( 'showsplitview' => 'true' );
+
+		$content .= wp_text_diff( $left_content, $right_content, $args );
+	}
+
+	//if we are comparing two revisions
+	//and we are on the matching revision
+	//add an error revision indicating unable to compare to self
+	if ( $comparetwomode && $compareto == $revision->ID )
+		$alltherevisions[] = array (
+			'ID' => $revision->ID,
+			'revision_date_author' => $revision_date_author,
+			'revisiondiff' => sprintf('<div id="selfcomparisonerror">%s</div>', __( 'Cannot compare revision to itself' ) ),
+			'restoreaction' => urldecode( $restoreaction ),
+			'revision_from_date_author' => ''
+		);
+
+	//add to the return data only if there is a difference
+	if ( '' != $content )
+		$alltherevisions[] = array (
+			'ID' => $revision->ID,
+			'revision_date_author' => $revision_date_author,
+			'revisiondiff' => $content,
+			'restoreaction' => urldecode( $restoreaction ),
+			'revision_from_date_author' => $revision_from_date_author
+		);
+
+	endforeach;
+
+	//remove initial revision that only contains
+	//post title
+	//TODO remove if this is fixed and initial revision not created
+	array_pop( $alltherevisions );
+	echo json_encode( $alltherevisions );
+	exit();
+}
Index: wp-admin/includes/meta-boxes.php
===================================================================
--- wp-admin/includes/meta-boxes.php	(revision 23494)
+++ wp-admin/includes/meta-boxes.php	(working copy)
@@ -603,7 +603,7 @@
  * @param object $post
  */
 function post_revisions_meta_box($post) {
-	wp_list_post_revisions();
+	wp_post_revisions_meta();
 }
 
 // -- Page related Meta Boxes
Index: wp-admin/revision.php
===================================================================
--- wp-admin/revision.php	(revision 23494)
+++ wp-admin/revision.php	(working copy)
@@ -8,216 +8,138 @@
 
 /** WordPress Administration Bootstrap */
 require_once('./admin.php');
+wp_reset_vars( array( 'postid', 'revision', 'action' ) );
 
-wp_enqueue_script('list-revisions');
+$postid = absint( $postid );
+$redirect = '';
 
-wp_reset_vars(array('revision', 'left', 'right', 'action'));
-
-$revision_id = absint($revision);
-$left        = absint($left);
-$right       = absint($right);
-
-$redirect = 'edit.php';
-
-switch ( $action ) :
+switch ( $action ) {
 case 'restore' :
-	if ( !$revision = wp_get_post_revision( $revision_id ) )
+	if ( !$arevision = wp_get_post_revision( $revision ) )
 		break;
-	if ( !current_user_can( 'edit_post', $revision->post_parent ) )
+	if ( !current_user_can( 'edit_post', $arevision->post_parent ) )
 		break;
-	if ( !$post = get_post( $revision->post_parent ) )
+	if ( !$post = get_post( $arevision->post_parent ) )
 		break;
 
 	// Revisions disabled and we're not looking at an autosave
-	if ( ( ! WP_POST_REVISIONS || !post_type_supports($post->post_type, 'revisions') ) && !wp_is_post_autosave( $revision ) ) {
+	if ( ( ! WP_POST_REVISIONS || !post_type_supports($post->post_type, 'revisions') ) && ! wp_is_post_autosave( $arevision ) ) {
 		$redirect = 'edit.php?post_type=' . $post->post_type;
 		break;
 	}
+	check_admin_referer( "restore-post_$post->ID|$arevision->ID" );
 
-	check_admin_referer( "restore-post_$post->ID|$revision->ID" );
+	//store revision event in post meta
+	$restore_details = array(
+		'restored_revision_id' => $arevision->ID,
+		'restored_by_user' => get_current_user_id(),
+		'restored_time' => time()
+		);
 
-	wp_restore_post_revision( $revision->ID );
-	$redirect = add_query_arg( array( 'message' => 5, 'revision' => $revision->ID ), get_edit_post_link( $post->ID, 'url' ) );
-	break;
-case 'diff' :
-	if ( !$left_revision  = get_post( $left ) )
-		break;
-	if ( !$right_revision = get_post( $right ) )
-		break;
+	wp_add_post_meta( $post->ID, '_post_restored_from', $restore_details, true );
 
-	if ( !current_user_can( 'read_post', $left_revision->ID ) || !current_user_can( 'read_post', $right_revision->ID ) )
-		break;
+	wp_update_post_meta( $post->ID, '_edit_last', get_current_user_id() );
 
-	// If we're comparing a revision to itself, redirect to the 'view' page for that revision or the edit page for that post
-	if ( $left_revision->ID == $right_revision->ID ) {
-		$redirect = get_edit_post_link( $left_revision->ID );
-		include( './js/revisions-js.php' );
-		break;
-	}
+	$post->post_author = get_current_user_id();
 
-	// Don't allow reverse diffs?
-	if ( strtotime($right_revision->post_modified_gmt) < strtotime($left_revision->post_modified_gmt) ) {
-		$redirect = add_query_arg( array( 'left' => $right, 'right' => $left ) );
-		break;
-	}
-
-	if ( $left_revision->ID == $right_revision->post_parent ) // right is a revision of left
-		$post =& $left_revision;
-	elseif ( $left_revision->post_parent == $right_revision->ID ) // left is a revision of right
-		$post =& $right_revision;
-	elseif ( $left_revision->post_parent == $right_revision->post_parent ) // both are revisions of common parent
-		$post = get_post( $left_revision->post_parent );
-	else
-		break; // Don't diff two unrelated revisions
-
-	if ( ! WP_POST_REVISIONS || !post_type_supports($post->post_type, 'revisions') ) { // Revisions disabled
-		if (
-			// we're not looking at an autosave
-			( !wp_is_post_autosave( $left_revision ) && !wp_is_post_autosave( $right_revision ) )
-		||
-			// we're not comparing an autosave to the current post
-			( $post->ID !== $left_revision->ID && $post->ID !== $right_revision->ID )
-		) {
-			$redirect = 'edit.php?post_type=' . $post->post_type;
-			break;
-		}
-	}
-
-	if (
-		// They're the same
-		$left_revision->ID == $right_revision->ID
-	||
-		// Neither is a revision
-		( !wp_get_post_revision( $left_revision->ID ) && !wp_get_post_revision( $right_revision->ID ) )
-	)
-		break;
-
-	$post_title = '<a href="' . get_edit_post_link() . '">' . get_the_title() . '</a>';
-	$h2 = sprintf( __( 'Compare Revisions of &#8220;%1$s&#8221;' ), $post_title );
-	$title = __( 'Revisions' );
-
-	$left  = $left_revision->ID;
-	$right = $right_revision->ID;
-
-	$redirect = false;
+	wp_restore_post_revision( $arevision->ID );
+	$redirect = add_query_arg( array( 'message' => 5, 'revision' => $arevision->ID ), get_edit_post_link( $post->ID, 'url' ) );
+	wp_redirect( $redirect );
 	break;
-case 'view' :
-default :
-	if ( !$revision = wp_get_post_revision( $revision_id ) )
-		break;
-	if ( !$post = get_post( $revision->post_parent ) )
-		break;
+}
 
-	if ( !current_user_can( 'read_post', $revision->ID ) || !current_user_can( 'read_post', $post->ID ) )
-		break;
+if ( ! current_user_can( 'edit_post', $postid ) ) {
+	wp_redirect( 'edit.php' );
+	exit;
+}
 
-	// Revisions disabled and we're not looking at an autosave
-	if ( ( ! WP_POST_REVISIONS || !post_type_supports($post->post_type, 'revisions') ) && !wp_is_post_autosave( $revision ) ) {
-		$redirect = 'edit.php?post_type=' . $post->post_type;
-		break;
-	}
-
-	$post_title = '<a href="' . get_edit_post_link() . '">' . get_the_title() . '</a>';
-	$revision_title = wp_post_revision_title( $revision, false );
-	$h2 = sprintf( __( 'Revision for &#8220;%1$s&#8221; created on %2$s' ), $post_title, $revision_title );
-	$title = __( 'Revisions' );
-
-	// Sets up the diff radio buttons
-	$left  = $revision->ID;
-	$right = $post->ID;
-
-	$redirect = false;
-	break;
-endswitch;
-
-// Empty post_type means either malformed object found, or no valid parent was found.
-if ( !$redirect && empty($post->post_type) )
-	$redirect = 'edit.php';
-
-if ( !empty($redirect) ) {
-	wp_redirect( $redirect );
+if ( ! WP_POST_REVISIONS || ! post_type_supports( get_post( $postid )->post_type, 'revisions') ) { // Revisions disabled
+	wp_redirect( get_edit_post_link( $postid , '') );
 	exit;
 }
 
-// This is so that the correct "Edit" menu item is selected.
-if ( !empty($post->post_type) && 'post' != $post->post_type )
-	$parent_file = $submenu_file = 'edit.php?post_type=' . $post->post_type;
-else
-	$parent_file = $submenu_file = 'edit.php';
+wp_enqueue_style( 'revisions' );
+wp_enqueue_style( 'wp-jquery-ui-slider' );
 
-require_once( './admin-header.php' );
+wp_enqueue_script( 'jquery-ui-slider' );
+wp_enqueue_script( 'backbone' );
+wp_enqueue_script( 'revisions' );
 
-?>
+require( './admin-header.php' );
 
-<div class="wrap">
+$post_title = sprintf ('<a href="%s">%s</a>', get_edit_post_link( $postid ), get_the_title( $postid ) );
+$h2 = sprintf( __( 'Compare Revisions of &#8220;%1$s&#8221;' ), $post_title );
 
-<h2 class="long-header"><?php echo $h2; ?></h2>
-
-<table class="form-table ie-fixed">
-	<col class="th" />
-<?php if ( 'diff' == $action ) : ?>
-<tr id="revision">
-	<th scope="row"></th>
-	<th scope="col" class="th-full">
-		<span class="alignleft"><?php printf( __('Older: %s'), wp_post_revision_title( $left_revision ) ); ?></span>
-		<span class="alignright"><?php printf( __('Newer: %s'), wp_post_revision_title( $right_revision ) ); ?></span>
-	</th>
-</tr>
-<?php endif;
-
-// use get_post_to_edit filters?
-$identical = true;
-foreach ( _wp_post_revision_fields() as $field => $field_title ) :
-	if ( 'diff' == $action ) {
-		$left_content = apply_filters( "_wp_post_revision_field_$field", $left_revision->$field, $field, $left_revision, 'left' );
-		$right_content = apply_filters( "_wp_post_revision_field_$field", $right_revision->$field, $field, $right_revision, 'right' );
-		if ( !$content = wp_text_diff( $left_content, $right_content ) )
-			continue; // There is no difference between left and right
-		$identical = false;
-	} else {
-		add_filter( "_wp_post_revision_field_$field", 'htmlspecialchars' );
-		$content = apply_filters( "_wp_post_revision_field_$field", $revision->$field, $field, $revision, '' );
-	}
-	?>
-
-	<tr id="revision-field-<?php echo $field; ?>">
-		<th scope="row"><?php echo esc_html( $field_title ); ?></th>
-		<td><div class="pre"><?php echo $content; ?></div></td>
-	</tr>
-
-	<?php
-
-endforeach;
-
-if ( 'diff' == $action && $identical ) :
-
-	?>
-
-	<tr><td colspan="2"><div class="updated"><p><?php _e( 'These revisions are identical.' ); ?></p></div></td></tr>
-
-	<?php
-
-endif;
-
 ?>
+<script type="text/javascript">
+var postid = <?php echo $postid; ?>;
+</script>
 
-</table>
+<div id="backbonerevisionsoptions"></div>
 
-<br class="clear" />
-
-<h3><?php echo $title; ?></h3>
-
+<br class="clear"/>
+<div class="wrap">
+	<div class="icon32 icon32-posts-post" id="icon-edit"><br></div>
+	<div class="revisiondiffcontainer diffsplit currentversion rightmodelloading">
+		<div id="modelsloading" class="updated message"><span class="spinner" ></span> <?php _e( 'Calculating revision diffs' ); ?></div>
+		<h2 class="long-header"><?php echo $h2; ?></h2>
+		<div id="backbonerevisionsinteract"></div>
+		<div id="backbonerevisionsdiff"></div>
+<hr />
 <?php
+	$comparetworevisionslink = admin_url ( sprintf( 'revision.php?revision=%d&action=edit', $revision ) );
+?>
+	</div>
+</div>
 
-$args = array( 'format' => 'form-table', 'parent' => true, 'right' => $right, 'left' => $left );
-if ( ! WP_POST_REVISIONS || !post_type_supports($post->post_type, 'revisions') )
-	$args['type'] = 'autosave';
+<script id="tmpl-revision" type="text/html">
+	<div id="diffsubheader">
+		<span id="diff_from_current_revision"><?php _e( 'Current version' ); ?><?php _e( ' - compared to -' ); ?></span>
+		<div id="difftitlefrom">{{{ data.revision_from_date_author }}} <?php _e( ' - compared to -' ); ?></div>
+		<div id="difftitle">{{{ data.revision_date_author }}}</div>
+		<div id="diffcancel"><input class="button" onClick="document.location='<?php echo get_edit_post_link( $postid ); ?>'" type="submit" id="cancel" value="<?php esc_attr_e( 'Cancel' )?>" /></div>
+		<div id="diffrestore"><input class="button button-primary" onClick="document.location='{{{ data.restoreaction }}}'" type="submit" id="restore" value="<?php esc_attr_e( 'Restore' )?>" /></div>
+		<div id="comparetworevisions"><input type="checkbox" id="comparetwo" value="comparetwo" {{{ data.comparetwochecked }}} name="comparetwo"/> <?php esc_attr_e( 'Compare two revisions' )?></div>
+	</div>
+	<div id="removedandadded">
+		<div id="removed"><?php _e( 'Removed -' ); ?></div>
+		<div id="added"><?php _e( 'Added +' ); ?></div>
+	</div
+	<div>{{{ data.revisiondiff }}}</div>
+</script>
 
-wp_list_post_revisions( $post, $args );
+<script id="tmpl-revisionvinteract" type="text/html">
+	<div id="diffheader">
+<div id="diffprevious"><input class="button" type="submit" id="previous" value="Previous" /></div>
+			<div id="diffnext"><input class="button" type="submit" id="next" value="Next" /></div>
+			<div id="diffslider">
+	<div id="revisioncount">
+					<?php _e( 'Comparing' ); ?>
+					<span id="diff_left_count"> <?php _e( 'revision' ); ?></span> <span id="diff_left_count_inner"></span>
+					<span id="diff_left_current_revision"><?php _e( ' current version ' ); ?></span>
+					<span id="diff_revision_from">{{{ data.diff_revision_from }}}</span>
+					<?php _e( ' to revision' ); ?>
+					<span id="diff_count">{{{ data.current_diff }}}</span>
+					<?php _e( ' of ' ); ?>
+					<span id="diff_max" ></span>
+				</div>
 
-?>
+			<div id="slider"></div>
+		</div>
+	</div>
+</script>
 
-</div>
+<script id="tmpl-revisionoptions" type="text/html">
+	<div id="revisionoptions">
+		<div id="showsplitviewoption">
+			<input type='checkbox' id="showsplitview" checked="checked" value="1" /> <?php _e( 'Show split diff view' ); ?>
+		</div>
+		<div id="toggleshowautosavesoption">
+			<input type='checkbox' id="toggleshowautosaves" value="1" /> <?php _e( 'Show autosaves' ); ?>
+		</div>
+	</div>
+</script>
 
 <?php
-require_once( './admin-footer.php' );
+
+require( './admin-footer.php' );
Index: wp-admin/edit-form-advanced.php
===================================================================
--- wp-admin/edit-form-advanced.php	(revision 23494)
+++ wp-admin/edit-form-advanced.php	(working copy)
@@ -168,7 +168,7 @@
 		add_meta_box('authordiv', __('Author'), 'post_author_meta_box', null, 'normal', 'core');
 }
 
-if ( post_type_supports($post_type, 'revisions') && 0 < $post_ID && wp_get_post_revisions( $post_ID ) )
+if ( post_type_supports($post_type, 'revisions') && 0 < $post_ID && count ( wp_get_post_revisions( $post_ID ) ) > 1  )
 	add_meta_box('revisionsdiv', __('Revisions'), 'post_revisions_meta_box', null, 'normal', 'core');
 
 do_action('add_meta_boxes', $post_type, $post);
Index: wp-admin/css/colors-fresh.css
===================================================================
--- wp-admin/css/colors-fresh.css	(revision 23494)
+++ wp-admin/css/colors-fresh.css	(working copy)
@@ -1299,17 +1299,28 @@
 
 /* Diff */
 table.diff .diff-deletedline {
-	background-color: #fdd;
+	background-color: #ffe5e6;
+	color: #f2001f;
+	text-decoration: line-through;
 }
 
 table.diff .diff-deletedline del {
 	background-color: #f99;
 }
 
+table.diff .diff-deletedline-symbol {
+	color: #f2001f;
+}
+
 table.diff .diff-addedline {
-	background-color: #dfd;
+	background-color: #e9f6ea;
+	color: #00a500;
 }
 
+table.diff .diff-addedline-symbol {
+	color: #00a500;
+}
+
 table.diff .diff-addedline ins {
 	background-color: #9f9;
 }
Index: wp-admin/css/wp-admin.css
===================================================================
--- wp-admin/css/wp-admin.css	(revision 23494)
+++ wp-admin/css/wp-admin.css	(working copy)
@@ -3495,9 +3495,21 @@
 }
 
 table.diff col.content {
-	width: 50%;
+	width: auto;
 }
 
+table.diff col.content.diffsplit {
+	width: 48%;
+}
+
+table.diff col.diffsplit.middle {
+	width: 4%;
+}
+
+table.diff col.ltype {
+	width: 30px;
+}
+
 table.diff tr {
 	background-color: transparent;
 }
@@ -8722,3 +8734,18 @@
 .locale-lt-lt .inline-edit-row fieldset label span.input-text-wrap {
 	margin-left: 8em;
 }
+
+#revisions-meta-mostrecent, 
+#revisions-meta-stored,
+#revisions-meta-oldest,
+#revisions-meta-link,
+#revisions-meta-restored {
+	line-height: 30px;
+	height: 30px;
+	vertical-align: middle;
+	padding-right: 10px;
+}
+#revisions-meta-mostrecent img, 
+#revisions-meta-oldest img {
+vertical-align: middle;
+}
Index: wp-admin/css/revisions.css
===================================================================
--- wp-admin/css/revisions.css	(revision 0)
+++ wp-admin/css/revisions.css	(revision 0)
@@ -0,0 +1,213 @@
+/* Styles for the revision screen */
+
+.revisiondiffcontainer {
+	width: 96%;
+}
+
+.revisiondiffcontainer input.button {
+	margin: 2px;
+}
+
+#diffrestore, #diffnext, #diffcancel {
+	float: right;
+	margin-right: 5px;
+}
+
+#diffprevious, #difftitle, #difftitlefrom, #diff_from_current_revision {
+	float: left;
+	margin-left: 5px;
+	height: 35px;
+}
+
+#diffprevious, #diffnext {
+	margin-top: 7px;
+	height: 30px;
+}
+
+#diffheader, #diffsubheader {
+	clear: both;
+	width: 100%;
+}
+
+#diffheader {
+	border-bottom: 2px solid #999;
+	width: 100%;
+	height: 45px;
+	line-height: 45px;
+	padding-top: 10px;
+}
+
+#diffsubheader {
+	background-color: #eee;
+	border-bottom: 2px solid #999;
+	width: 100%;
+	height:35px;
+	line-height: 35px;
+}
+
+#diffslider {
+	width: 70%;
+	margin-left: auto;
+	margin-right: auto;
+	text-align: center;
+	height: 3.5em;
+
+}
+
+#revisioncount {
+	width: 50%;
+	margin-left: auto;
+	margin-right: auto;
+	margin-top: 0;
+	line-height: 1em;
+	height: 1em;
+	text-align: center;
+	clear: none;
+	padding: 5px;
+}
+
+.revisiondiffcontainer {
+	margin-top: 10px;
+}
+
+#diffsliderwrap {
+	width: 80%;
+	margin-left: auto;
+	margin-right: auto;
+}
+
+#diffsliderwrap #sliderinner {
+	position: relative;
+	top: 47px;
+}
+
+#removedandadded {
+	width: 100%
+	padding-bottom: 30px;
+	padding-top: 3px;
+	font-size: 16px;
+}
+
+#removed, #added {
+	width: auto;
+	text-align: left;
+	padding-left: 5px;
+	padding-right: 5px;
+	padding-top: 5px;
+	padding-bottom: 5px;
+	float: left;
+}
+
+.diffsplit #added {
+	float: right;
+	width: 47%;
+	text-align: left;
+}
+
+.diffsplit #removedandadded {
+	width: 100%;
+}
+
+#added {
+ 	padding-left: 10px;
+}
+
+#removed {
+ 	padding-left: 0px;
+ }
+
+#removed {
+	color: #d2281f;
+}
+
+#added {
+	color: #00a100;
+}
+
+#comparetworevisions {
+	float: right;
+	line-height: 35px;
+	padding-right: 5px;
+}
+
+#comparetworevisions input{
+	margin-right: 2px;
+}
+
+#difftitle img, #difftitlefrom img {
+	vertical-align: middle;
+	margin-left: 5px;
+}
+
+#showsplitviewoption, #toggleshowautosavesoption {
+	float: right;
+	padding-left: 10px;
+	padding-right: 10px;
+}
+
+#revisionoptions {
+	margin-top: 0px;
+	line-height: 40px;
+	clear: both;
+	width: 100%;
+}
+
+.comparetwo #diffprevious, .comparetwo #diffnext {
+	display: none;
+}
+
+.comparetwo #diffslider {
+	width: 95%;
+}
+
+.currentversion span#diff_left_current_revision {
+	display: inline;
+}
+
+span#diff_left_current_revision, span#diff_from_current_revision {
+	display: none;
+}
+
+span#diff_left_count, span#diff_left_count_inner {
+	display: inline;
+}
+
+.currentversion span#diff_left_count,
+.currentversion span#diff_left_count_inner,
+.currentversion #difftitlefrom {
+	display: none;
+}
+
+#difftitlefrom {
+	float: left;
+	display: none;
+}
+
+.comparetwo #difftitlefrom, .comparetwo.currentversion span#diff_from_current_revision {
+	display: inline;
+}
+.comparetwo.currentversion #difftitlefrom {
+	display: none;
+}
+
+#modelsloading {
+	float: right;
+	line-height: 30px;
+	display: none;
+	clear: none;
+	margin: 0;
+	margin-top: -40px;
+}
+
+#modelsloading .spinner {
+ 	float: left;
+ }
+
+.leftmodelloading #modelsloading,
+.rightmodelloading #modelsloading,
+.leftmodelloading #modelsloading .spinner,
+.rightmodelloading #modelsloading .spinner {
+	display: inline;
+}
+
+ 
