Index: wp-admin/includes/ajax-actions.php
===================================================================
--- wp-admin/includes/ajax-actions.php	(revision 23884)
+++ wp-admin/includes/ajax-actions.php	(working copy)
@@ -2130,15 +2130,15 @@
 	if ( 0 != $single_revision_id ) {
 		$right_revision = get_post( $single_revision_id );
 
-	if ( 0 == $compare_to )
+		if ( 0 == $compare_to )
 			$left_revision = get_post( $post_id );
 
-	// make sure the right revision is the most recent
-	if ( $compare_two_mode && $right_revision->ID < $left_revision->ID ) {
-		$temp = $left_revision;
-		$left_revision = $right_revision;
-		$right_revision = $temp;
-	}
+		// make sure the right revision is the most recent
+		if ( $compare_two_mode && $right_revision->ID < $left_revision->ID ) {
+			$temp = $left_revision;
+			$left_revision = $right_revision;
+			$right_revision = $temp;
+		}
 
 		$linesadded=0;
 		$linesdeleted=0;
@@ -2191,7 +2191,6 @@
 	$previous_revision_id = 0;
 
 	foreach ( $revisions as $revision ) :
-		//error_log( ( $show_autosaves  ));
 		if ( empty( $show_autosaves ) && wp_is_post_autosave( $revision ) )
 				continue;
 
Index: wp-admin/js/revisions.js
===================================================================
--- wp-admin/js/revisions.js	(revision 23884)
+++ wp-admin/js/revisions.js	(working copy)
@@ -1,772 +1,789 @@
 window.wp = window.wp || {};
 
 (function($) {
-	wp.revisions = {
+	var Revision, Revisions, Diff, l10n, revisions;
 
-		views: {},
+	revisions = wp.revisions = function() {
+		Diff = revisions.Diff = new Diff();
+	};
 
-		Model: Backbone.Model.extend({
-			idAttribute: 'ID',
-			urlRoot: ajaxurl +	'?action=revisions-data' +
-				'&show_autosaves=true&show_split_view=true&nonce=' + wpRevisionsSettings.nonce,
-			defaults: {
-				ID: 0,
-				revision_date_author: '',
-				revision_date_author_short: '',
-				revisiondiff: '<div class="diff-loading"><div class="spinner"></div></div>',
-				restoreaction: '',
-				revision_from_date_author: '',
-				revision_toload: false,
-				lines_added: 0,
-				lines_deleted: 0,
-				scope_of_changes: 'none',
-				previous_revision_id: 0
-			},
+	_.extend( revisions, { model: {}, view: {}, controller: {} } );
 
-			url: function() {
-				if ( 1 === REVAPP._compareOneOrTwo ) {
-					return this.urlRoot +
-						'&single_revision_id=' + this.id +
-						'&compare_to=' + this.get( 'previous_revision_id' ) +
-						'&post_id=' + wpRevisionsSettings.post_id;
-				} else {
-					return this.urlRoot +
-				'&single_revision_id=' + this.id;
-				}
+	// Link any localized strings.
+	l10n = revisions.model.l10n = typeof wpRevisionsL10n === 'undefined' ? {} : wpRevisionsL10n;
 
-			}
+	// Link any settings.
+	revisions.model.settings = l10n.settings || {};
+	delete l10n.settings;
 
-		}),
 
-		app: _.extend({}, Backbone.Events),
+	/**
+	 * ========================================================================
+	 * CONTROLLERS
+	 * ========================================================================
+	 */
 
-		App: Backbone.Router.extend({
-			_revisions: null,
-			_leftHandleRevisions: null,
-			_rightHandleRevisions: null,
-			_revisionsInteractions: null,
-			_revisionsOptions: null,
-			_leftDiff: 1,
-			_rightDiff: 1,
-			_autosaves: true,
-			_showSplitView: true,
-			_compareOneOrTwo: 1,
-			_leftModelLoading: false,	// keep track of model loads
-			_rightModelLoading: false,	// disallow slider interaction, also repeat loads, while loading
-			_tickmarkView: null, // the slider tickmarks
+	/**
+	 * wp.revisions.controller.Diff
+	 *
+	 * Controlls the diff
+	 */
+	Diff = revisions.controller.Diff = Backbone.Model.extend( {
+		rightDiff: 1,
+		leftDiff: 1,
+		revisions: null,
+		leftHandleRevisions: null,
+		rightHandleRevisions: null,
+		revisionsInteractions: null,
+		revisionsOptions: null,
+		autosaves: true,
+		showSplitView: true,
+		singleRevision: true,
+		leftModelLoading: false,	// keep track of model loads
+		rightModelLoading: false,	// disallow slider interaction, also repeat loads, while loading
+		tickmarkView: null, // the slider tickmarks
+		slider: null, // the slider instance
 
-			routes: {
-			},
+		constructor: function() {
+			this.slider = new revisions.view.Slider();
+			if ( null === this.revisions ) {
+				this.revisions = new Revisions(); // set up collection
+				this.startRightModelLoading();
 
-			reloadToLoadRevisions: function( model_collection, reverse_direction ) {
-				var self = this,
-				    revisionsToLoad = model_collection.where( { revision_toload: true } ),
-				    delay = 0;
-				// match slider to passed revision_id
-				_.each( revisionsToLoad, function( theModel ) {
-					if ( theModel.get( 'ID' )  == wpRevisionsSettings.revision_id ) {
-						self._rightDiff = self._revisions.indexOf( theModel ) + 1;
+				var self = this;
+				this.revisions.fetch({ // load revision data
+					success: function() {
+						self.stopRightModelLoading();
+						self.completeApplicationSetup();
 					}
-
 				});
-				_.each( revisionsToLoad, function( theModel ) {
-						theModel.urlRoot = model_collection.url;
-						_.delay( function() {
-							theModel.fetch( {
-								update: true,
-								add: false,
-								remove: false,
-								success: function( model ) {
-									model.set( 'revision_toload', 'false' );
+			}
+		},
 
-									// stop spinner when all models are loaded
-									if ( 0 === model_collection.where( { revision_toload: true } ).length )
-										self.stopModelLoadingSpinner();
+		reloadToLoadRevisions: function( models, reverse_direction ) {
+			var self = this,
+				revisionsToLoad = models.where( { revision_toload: true } ),
+				delay = 0;
 
-									self._tickmarkView.render();
+			// match slider to passed revision_id
+			_.each( revisionsToLoad, function( theModel ) {
+				if ( theModel.get( 'ID' ) == revisions.model.settings.revision_id )
+					self.rightDiff = self.revisions.indexOf( theModel ) + 1;
+			});
 
-									var total_changes = model.get( 'lines_added' ) + model.get( 'lines_deleted'),
-									    scope_of_changes = 'vsmall';
+			_.each( revisionsToLoad, function( theModel ) {
+					theModel.urlRoot = models.url();
+					_.delay( function() {
+						theModel.fetch( {
+							update: true,
+							add: false,
+							remove: false,
+							success: function( model ) {
+								model.set( 'revision_toload', 'false' );
 
-									// Note: hard coded scope of changes
-									// TODO change to dynamic based on range of values
-									if  ( total_changes > 1 && total_changes <= 3 ) {
-										scope_of_changes = 'small';
-									} else if(total_changes > 3 && total_changes <= 5 ) {
-										scope_of_changes = 'med';
-									} else if(total_changes > 5 && total_changes <= 10 ) {
-										scope_of_changes = 'large';
-									} else if(total_changes > 10 ) {
-										scope_of_changes = 'vlarge';
-									}
-									model.set( 'scope_of_changes', scope_of_changes );
-									if ( 0 !== self._rightDiff &&
-										model.get( 'ID' ) === self._revisions.at( self._rightDiff - 1 ).get( 'ID' ) ) {
-										// reload if current model refreshed
-										self._revisionView.render();
-									}
+								// stop spinner when all models are loaded
+								if ( 0 === models.where( { revision_toload: true } ).length )
+									self.stopModelLoadingSpinner();
 
+								self.tickmarkView.render();
+
+								var total_changes = model.get( 'lines_added' ) + model.get( 'lines_deleted'),
+									scope_of_changes = 'vsmall';
+
+								// Note: hard coded scope of changes
+								// TODO change to dynamic based on range of values
+								if  ( total_changes > 1 && total_changes <= 3 ) {
+									scope_of_changes = 'small';
+								} else if( total_changes > 3 && total_changes <= 5 ) {
+									scope_of_changes = 'med';
+								} else if( total_changes > 5 && total_changes <= 10 ) {
+									scope_of_changes = 'large';
+								} else if( total_changes > 10 ) {
+									scope_of_changes = 'vlarge';
 								}
-						} );
-						}, delay ) ;
-						delay = delay + 150; // stagger model loads to avoid hammering server with requests
-					}
-				);
-			},
+								model.set( 'scope_of_changes', scope_of_changes );
+								if ( 0 !== self.rightDiff &&
+									model.get( 'ID' ) === self.revisions.at( self.rightDiff - 1 ).get( 'ID' ) ) {
+									// reload if current model refreshed
+									self.revisionView.render();
+								}
 
-			startLeftModelLoading: function() {
-				this._leftModelLoading = true;
-				$('.revisiondiffcontainer').addClass('leftmodelloading');
-			},
+							}
+					} );
+					}, delay ) ;
+					delay = delay + 150; // stagger model loads to avoid hammering server with requests
+				}
+			);
+		},
 
-			stopLeftModelLoading: function() {
-				this._leftModelLoading = false;
-			},
+		startLeftModelLoading: function() {
+			this.leftModelLoading = true;
+			$('.revisiondiffcontainer').addClass('leftmodelloading');
+		},
 
-			startRightModelLoading: function() {
-				this._rightModelLoading = true;
-				$('.revisiondiffcontainer').addClass('rightmodelloading');
-			},
+		stopLeftModelLoading: function() {
+			this.leftModelLoading = false;
+		},
 
-			stopRightModelLoading: function() {
-				this._rightModelLoading = false;
-			},
+		startRightModelLoading: function() {
+			this.rightModelLoading = true;
+			$('.revisiondiffcontainer').addClass('rightmodelloading');
+		},
 
-			stopModelLoadingSpinner: function() {
-				$('.revisiondiffcontainer').removeClass('rightmodelloading');
-				$('.revisiondiffcontainer').removeClass('leftmodelloading');
-			},
+		stopRightModelLoading: function() {
+			this.rightModelLoading = false;
+		},
 
-			reloadModel: function() {
-				if ( 2 === this._compareOneOrTwo ) {
-					this.reloadLeftRight();
-				} else {
-					this.reloadModelSingle();
-				}
-			},
+		stopModelLoadingSpinner: function() {
+			$('.revisiondiffcontainer').removeClass('rightmodelloading');
+			$('.revisiondiffcontainer').removeClass('leftmodelloading');
+		},
 
-			// load the models for the single handle mode
-			reloadModelSingle: function() {
-				var self = this;
-				self._revisions.url = ajaxurl +	'?action=revisions-data&compare_to=' + wpRevisionsSettings.post_id +
-											'&show_autosaves=' + self._autosaves +
-											'&show_split_view=' +  self._showSplitView +
-											'&nonce=' + wpRevisionsSettings.nonce;
-				self.startRightModelLoading();
-				self._revisions.fetch({ // reload revision data
-					success: function() {
-						console.log('loaded');
-						// self.stopRightModelLoading();
-						// REVAPP._rightDiff -= 1;
-						var revisionCount = self._revisions.length;
-						self._revisionView.model = self._revisions;
-						self._revisionView.render();
-						self.reloadToLoadRevisions( self._revisions );
-						self._tickmarkView.model = self._revisions;
-						self._tickmarkView.render();
-						$( '#slider' ).slider( 'option', 'max', revisionCount - 1 ); // TODO: test this, if autosave option changed
-						$( '#slider' ).slider( 'value', self._rightDiff - 1 ).trigger( 'slide' );
+		reloadModel: function() {
+			if ( this.singleRevision ) {
+				this.reloadModelSingle();
+			} else {
+				this.reloadLeftRight();
+			}
+		},
 
-					},
+		// load the models for the single handle mode
+		reloadModelSingle: function() {
+			var self = this;
 
-					error: function() {
-						self.stopRightModelLoading();
-					}
+			// TODO: Only updates the query args yet
+			self.revisions.reload({
+				'showAutosaves': self.autosaves,
+				'showSplitView': self.showSplitView
+			});
 
-				});
-			},
+			self.startRightModelLoading();
+			self.revisions.fetch({ // reload revision data
+				success: function() {
+					var revisionCount = self.revisions.length;
+					self.revisionView.model = self.revisions;
+					self.revisionView.render();
+					self.reloadToLoadRevisions( self.revisions );
+					self.tickmarkView.model = self.revisions;
+					self.tickmarkView.render();
+					self.slider.refresh({
+						'max': revisionCount - 1,
+						'value': self.rightDiff - 1
+					}, true);
+				},
 
-			// load the models for the left handle
-			reloadLeft: function() {
-				var self = this;
-				self.startLeftModelLoading();
-				self._leftHandleRevisions = new wp.revisions.Collection();
+				error: function() {
+					self.stopRightModelLoading();
+				}
 
-				self._leftHandleRevisions.url =
-					ajaxurl +
-					'?action=revisions-data&compare_to=' + self._revisions.at( self._rightDiff - 1 ).get( 'ID' ) +
-					'&post_id=' + wpRevisionsSettings.post_id +
-					'&show_autosaves=' + REVAPP._autosaves +
-					'&show_split_view=' +  REVAPP._showSplitView +
-					'&nonce=' + wpRevisionsSettings.nonce +
-					'&right_handle_at='  + ( self._rightDiff );
+			});
+		},
 
-				self._leftHandleRevisions.fetch({
+		// load the models for the left handle
+		reloadLeft: function() {
+			var self = this;
+			self.startLeftModelLoading();
+			self.leftHandleRevisions = new Revisions({
+				'compareTo': self.revisions.at( self.leftDiff ).get( 'ID' ),
+				'showAutosaves': self.autosaves,
+				'showSplitView': self.showSplitView,
+				'rightHandleAt': self.rightDiff
+			});
 
-					success: function(){
-						self.stopLeftModelLoading();
-						self.reloadToLoadRevisions( self._leftHandleRevisions );
-						self._tickmarkView.model = self._leftHandleRevisions;
-						$( '#slider' ).slider( 'option', 'max', self._revisions.length );
-						// ensure right handle not beyond length, in particular if viewing autosaves is switched from on to off
-						// the number of models in the collection might get shorter, this ensures right handle is not beyond last model
-						if ( self._rightDiff > self._revisions.length )
-							self._rightDiff = self._revisions.length;
-						},
+			self.leftHandleRevisions.fetch({
+				success: function(){
+					self.stopLeftModelLoading();
+					self.reloadToLoadRevisions( self.leftHandleRevisions );
+					self.tickmarkView.model = self.leftHandleRevisions;
+					self.slider.refresh({
+						'max': self.revisions.length
+					});
+					// ensure right handle not beyond length, in particular if viewing autosaves is switched from on to off
+					// the number of models in the collection might get shorter, this ensures right handle is not beyond last model
+					if ( self.rightDiff > self.revisions.length )
+						self.rightDiff = self.revisions.length;
+					},
 
-					error: function() {
-						self.stopLeftModelLoading();
-					}
-				});
-			},
+				error: function() {
+					self.stopLeftModelLoading();
+				}
+			});
+		},
 
-			// load the models for the right handle
-			reloadRight: function() {
-				var self = this;
-				self.startRightModelLoading();
-				self._rightHandleRevisions = new wp.revisions.Collection();
+		// load the models for the right handle
+		reloadRight: function() {
+			var self = this;
+			self.startRightModelLoading();
+			self.rightHandleRevisions = new Revisions({
+				'compareTo': self.revisions.at( self.leftDiff ).get( 'ID' ) - 1,
+				'showAutosaves': self.autosaves,
+				'showSplitView': self.showSplitView
+			});
 
-					self._rightHandleRevisions.url =
-						ajaxurl +
-						'?action=revisions-data&compare_to=' + ( self._revisions.at( self._leftDiff ).get( 'ID' ) - 1 )+
-						'&post_id=' + wpRevisionsSettings.post_id +
-						'&show_autosaves=' + REVAPP._autosaves +
-						'&show_split_view=' +  REVAPP._showSplitView +
-						'&nonce=' + wpRevisionsSettings.nonce;
+			self.rightHandleRevisions.fetch({
+				success: function(){
+					self.stopRightModelLoading();
+					self.reloadToLoadRevisions( self.rightHandleRevisions );
+					self.tickmarkView.model = self.rightHandleRevisions;
+					self.slider.refresh({
+						'max': self.revisions.length,
+						'values': [ self.leftDiff, self.rightDiff]
+					}, true);
+				},
 
-				self._rightHandleRevisions.fetch({
+				error: function( response ) {
+					self.stopRightModelLoading();
+				}
+			});
 
-					success: function(){
-						self.stopRightModelLoading();
-						self.reloadToLoadRevisions( self._rightHandleRevisions );
-						self._tickmarkView.model = self._rightHandleRevisions;
-						$( '#slider' ).slider( 'option', 'max', self._revisions.length );
-						$( '#slider' ).slider( 'values', [ REVAPP._leftDiff, REVAPP._rightDiff] ).trigger( 'slide' );
+		},
 
-						// REVAPP._revisionView.render();
+		reloadLeftRight: function() {
+			this.startRightModelLoading();
+			this.startLeftModelLoading();
+			this.reloadLeft();
+			this.reloadRight();
+		},
 
-					},
+		// TODO: New view
+		addTooltip: function( handle, message ) {
 
-					error: function( response ) {
-						self.stopRightModelLoading();
+			handle.attr( 'title', '' ).tooltip({
+				track: false,
+
+				position: {
+					my: "left-30 top-66",
+					at: "top left",
+					using: function( position, feedback ) {
+						$( this ).css( position );
+						$( "<div>" )
+						.addClass( "arrow" )
+						.addClass( feedback.vertical )
+						.addClass( feedback.horizontal )
+						.appendTo( $( this ) );
 					}
-				});
+				},
+				show: false,
+				hide: false,
+				content:  function() {
+					return message;
+				}
 
-			},
+			} );
+		},
 
-			reloadLeftRight: function() {
-				this.startRightModelLoading();
-				this.startLeftModelLoading();
-				this.reloadLeft();
-				this.reloadRight();
-			},
+		completeApplicationSetup: function() {
+			this.revisionView = new revisions.view.Diff({
+				model: this.revisions
+			});
+			this.revisionView.render();
 
-			/*
-			 * initialize the revision application
-			 */
-			initialize: function( options ) {
-				var self = this; // store the application instance
-				if (this._revisions === null) {
-					self._revisions = new wp.revisions.Collection(); // set up collection
-					self.startRightModelLoading();
-					self._revisions.fetch({ // load revision data
+			this.reloadToLoadRevisions( this.revisions );
 
-						success: function() {
-							self.stopRightModelLoading();
-							// self._rightHandleRevisions = self._revisions;
-							self.completeApplicationSetup();
-						}
-					});
-				}
-				return this;
-			},
+			this.revisionsInteractions = new revisions.view.Interact({
+				model: this.revisions
+			});
+			this.revisionsInteractions.render();
 
-			addTooltip: function( handle, message ) {
+			this.tickmarkView = new revisions.view.Tickmarks({
+				model: this.revisions
+			});
+			this.tickmarkView.render();
+			this.tickmarkView.resetTicks();
 
-				handle.attr( 'title', '' ).tooltip({
-					track: false,
+		}
+	});
 
-					position: {
-						my: "left-30 top-66",
-						at: "top left",
-						using: function( position, feedback ) {
-							$( this ).css( position );
-							$( "<div>" )
-							.addClass( "arrow" )
-							.addClass( feedback.vertical )
-							.addClass( feedback.horizontal )
-							.appendTo( $( this ) );
-						}
-					},
-					show: false,
-					hide: false,
-					content:  function() {
-						return message;
-					}
 
-				} );
-			},
-/**/
+	/**
+	 * ========================================================================
+	 * VIEWS
+	 * ========================================================================
+	 */
 
-			completeApplicationSetup: function() {
-				this._revisionView = new wp.revisions.views.View({
-					model: this._revisions
-				});
-				this._revisionView.render();
-				$( '#slider' ).slider( 'option', 'max', this._revisions.length - 1 );
+	/**
+	 * wp.revisions.view.Slider
+	 *
+	 * The slider
+	 */
+	revisions.view.Slider = Backbone.View.extend({
+		el: $( '#slider' ),
+		singleRevision: true,
 
-				this.reloadToLoadRevisions( this._revisions );
+		initialize: function( options ) {
+			this.options = _.defaults( options || {}, {
+				value: 0,
+				min: 0,
+				max: 1,
+				step: 1
+			});
+		},
 
-				this._revisionsInteractions = new wp.revisions.views.Interact({
-					model: this._revisions
-				});
-				this._revisionsInteractions.render();
+		slide: function( event, ui ) {
+			if ( this.singleRevision ) {
+				Diff.rightDiff = ( ui.value + 1 );
+				Diff.revisionView.render();
+			} else {
+				if ( ui.values[0] === ui.values[1] ) // prevent compare to self
+					return false;
 
-				this._tickmarkView = new wp.revisions.views.Tickmarks({
-					model: this._revisions
-				});
-				this._tickmarkView.render();
-				this._tickmarkView.resetTicks();
+				var index = $( ui.handle ).index(); // 0 (left) or 2 (right)
+				switch ( index ) {
+					case 0: // left
+						if ( Diff.leftModelLoading ) // left model still loading, prevent sliding left handle
+							return false;
 
+						Diff.leftDiff = ui.values[0];
+						break;
 
-				/*
-				.on( 'mouseup', function( event ) {
-					REVAPP._keep_tooltip_open = false;
-					$( this ).find('.ui-slider-tooltip').hide();
-				} ).on( 'mousedown', function( event ) {
-					REVAPP._keep_tooltip_open = true;
-				} ).on( 'mouseout', function( event ) {
-					if ( REVAPP._keep_tooltip_open)
-						event.stopImmediatePropagation();
-					});
-				*/
-				/*
-				// Options hidden for now, moving to screen options
-				this._revisionsOptions = new wp.revisions.views.Options({
-					model: this._revisions
-				});
-				this._revisionsOptions.render();
-				*/
+					case 2: // right
+						if ( Diff.rightModelLoading ) // right model still loading, prevent sliding right handle
+							return false;
 
-			}
-		})
-	};
+						Diff.rightDiff = ui.values[1];
+						break;
+				}
 
-	wp.revisions.Collection = Backbone.Collection.extend({
-		model: wp.revisions.Model,
-		url: ajaxurl +	'?action=revisions-data&compare_to=' + wpRevisionsSettings.post_id +
-			'&show_autosaves=true&show_split_view=true&nonce=' + wpRevisionsSettings.nonce,
+				if ( 0 === Diff.leftDiff ) {
+					$( '.revisiondiffcontainer' ).addClass( 'currentversion' );
+				} else {
+					$( '.revisiondiffcontainer' ).removeClass( 'currentversion' );
+				}
 
-		initialize: function() {
+				Diff.revisionView.render();
 			}
-	} );
+		},
 
-	_.extend(wp.revisions.views, {
+		start: function( event, ui ) {
+			// Not needed in one mode
+			if ( this.singleRevision )
+				return;
 
-		// Ticks inside slider view
-		Tickmarks: Backbone.View.extend({
-			el: $('#diff-slider-ticks')[0],
-			tagName: 'diff-slider-ticks-view',
-			className: 'diff-slider-ticks-container',
-			template: wp.template('revision-ticks'),
-			model: wp.revisions.Model,
+			var index = $( ui.handle ).index(); // 0 (left) or 2 (right)
+			switch ( index ) {
+				case 0: // left handle drag
+					if ( Diff.leftModelLoading ) // left model still loading, prevent sliding left handle
+						return false;
 
-			resetTicks: function() {
-				var sliderMax = $( '#slider' ).slider( 'option', 'max');
-				var sliderWidth = $( '#slider' ).width();
-				var adjustMax = ( 2 === REVAPP._compareOneOrTwo ) ? 1 : 0;
-				var tickWidth = Math.floor( sliderWidth / ( sliderMax - adjustMax ) );
+					Diff.revisionView.draggingLeft = true;
 
-				// TODO: adjust right margins for wider ticks so they stay centered on handle stop point
+					if ( Diff.revisionView.model !== Diff.leftHandleRevisions &&
+							null !== Diff.leftHandleRevisions ) {
+						Diff.revisionView.model = Diff.leftHandleRevisions;
+						Diff.tickmarkView.model = Diff.leftHandleRevisions;
+						Diff.tickmarkView.render();
+					}
 
-				// set minimum and maximum widths for tick marks
-				tickWidth = (tickWidth > 50 ) ? 50 : tickWidth;
-				tickWidth = (tickWidth < 10 ) ? 10 : tickWidth;
+					Diff.leftDiffStart = ui.values[ 0 ];
+					break;
 
-				sliderWidth = tickWidth * (sliderMax - adjustMax ) + 1;
+				case 2: // right
+					if ( Diff.rightModelLoading || 0 === Diff.rightHandleRevisions.length) // right model still loading, prevent sliding right handle
+						return false;
 
-				$( '#slider' ).width( sliderWidth );
-				$( '.diff-slider-ticks-wrapper' ).width( sliderWidth );
-				$( '#diffslider' ).width( sliderWidth );
-				$( '#diff-slider-ticks' ).width( sliderWidth );
+					if ( Diff.revisionView.model !== Diff.rightHandleRevisions &&
+							null !== Diff.rightHandleRevisions ) {
+						Diff.revisionView.model = Diff.rightHandleRevisions;
+						Diff.tickmarkView.model = Diff.rightHandleRevisions;
+						Diff.tickmarkView.render();
+					}
 
-				var aTickWidth = $( '.revision-tick' ).width();
+					Diff.revisionView.draggingLeft = false;
+					Diff.rightDiffStart = ui.values[1];
+					break;
+			}
+		},
 
-				if ( tickWidth !==  aTickWidth ) { // is the width already set correctly?
-					$( '.revision-tick' ).each( function( ) {
-						$(this).css( 'margin-right', tickWidth - 1 + 'px'); // space the ticks out using right margin
-					});
+		stop: function( event, ui ) {
+			// Not needed in one mode
+			if ( this.singleRevision )
+				return;
 
-					if( 2 === REVAPP._compareOneOrTwo ) {
-						$( '.revision-tick' ).first().remove(); // TODO - remove the check
-					}
-					$( '.revision-tick' ).last().css( 'margin-right', '0' ); // last tick gets no right margin
-				}
+			// calculate and generate a diff for comparing to the left handle
+			// and the right handle, swap out when dragging
+			var index = $( ui.handle ).index(); // 0 (left) or 1 (right)
 
-			},
+			switch ( index ) {
+				case 1: // left
+					// left handle dragged & changed, reload right handle model
+					if ( Diff.leftDiffStart !== ui.values[0] )
+						Diff.reloadRight();
 
-			// render the tickmark view
-			render: function() {
-				var self = this;
+					break;
 
-				if ( null !== self.model ) {
-					var addHtml = "";
-					_.each ( self.model.models, function( theModel ) {
-						addHtml = addHtml + self.template ( theModel.toJSON() );
-					});
-					self.$el.html( addHtml );
+				case 2: // right
+					// right handle dragged & changed, reload left handle model if changed
+					if ( Diff.rightDiffStart !== ui.values[1] )
+						Diff.reloadLeft();
 
-				}
-				self.resetTicks();
-				return self;
+					break;
 			}
-		}),
+		},
 
-		// primary revision diff view
-		View: Backbone.View.extend({
-			el: $('#backbonerevisionsdiff')[0],
-			tagName: 'revisionvview',
-			className: 'revisionview-container',
-			template: wp.template('revision'),
-			comparetwochecked: '',
-			draggingLeft: false,
+		addTooltip: function() {
+			// Own view?
+		},
 
-			// render the revisions
-			render: function() {
-				var addHtml = '';
-				var thediff;
-				// compare two revisions mode?
+		width: function() {
+			return $( '#slider' ).width();
+		},
 
-				if ( 2 === REVAPP._compareOneOrTwo ) {
+		setWidth: function( width ) {
+			return $( '#slider' ).width( width );
+		},
 
-					this.comparetwochecked = 'checked';
-					if ( this.draggingLeft ) {
-						thediff = REVAPP._leftDiff -1;
-						if ( this.model.at( thediff ) ) {
-							addHtml = this.template( _.extend(
-								this.model.at( thediff ).toJSON(),
-								{ comparetwochecked: this.comparetwochecked } // keep the checkmark checked
-							) );
-						}
-					} else { // dragging right handle
-						thediff = REVAPP._rightDiff -1;
-						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 handle
-					this.comparetwochecked = '';
-					if ( this.model.at( REVAPP._rightDiff - 1 ) ) {
-						addHtml = this.template( _.extend(
-							this.model.at( REVAPP._rightDiff - 1 ).toJSON(),
-							{ comparetwochecked: this.comparetwochecked } // keep the checkmark unchecked
-						) );
-					}
-				}
-				this.$el.html( addHtml );
-				if ( this.model.length < 3 ) {
-					$( 'div#comparetworevisions' ).hide(); // don't allow compare two if fewer than three revisions
-				}
-				if ( this.model.length < 2 ) {
-					$( 'div#diffslider' ).hide(); // don't allow compare two if fewer than three revisions
-					$( 'div.diff-slider-ticks-wrapper' ).hide();
-				}
+		refresh: function( options, slide ) {
+			$( '#slider' ).slider( 'option', options );
 
-				// add tooltips to the handles
-				if ( 2 === REVAPP._compareOneOrTwo ) {
-					REVAPP.addTooltip ( $( 'a.ui-slider-handle.left-handle' ),
-						( REVAPP._leftDiff < 0 ) ? '' : REVAPP._revisions.at( REVAPP._leftDiff - 1 ).get( 'revision_date_author_short' ) );
-					REVAPP.addTooltip ( $( 'a.ui-slider-handle.right-handle' ),
-						( REVAPP._rightDiff > REVAPP._revisions.length ) ? '' : REVAPP._revisions.at( REVAPP._rightDiff - 1 ).get( 'revision_date_author_short' ) );
-				} else {
-					REVAPP.addTooltip ( $( 'a.ui-slider-handle' ),
-						( REVAPP._rightDiff > REVAPP._revisions.length ) ? '' : REVAPP._revisions.at( REVAPP._rightDiff - 1 ).get( 'revision_date_author_short' ) );
-				}
+			// Triggers the slide event
+			if ( slide )
+				$( '#slider' ).trigger( 'slide' );
+		},
 
-				// hide the restore button when on the last sport/current post data
-				if (  REVAPP._rightDiff === REVAPP._revisions.length ){
-					$( '.restore-button' ).hide();
-				} else {
-					$( '.restore-button' ).show();
-				}
+		option: function( key ) {
+			return $( '#slider' ).slider( 'option', key );
+		},
 
-				return this;
-			},
+		render: function() {
+			var self = this;
+			// this.$el doesn't work, why?
+			$( '#slider' ).slider( {
+				slide: $.proxy( self.slide, self ),
+				start: $.proxy( self.start, self ),
+				stop: $.proxy( self.stop, self )
+			} );
 
-			// the compare two button is in this view, add the interaction here
-			events: {
-				'click #comparetwo': 'clickcomparetwo'
-			},
+			// Set options
+			this.refresh( this.options );
+		}
+	});
 
-			// turn on/off the compare two mmode
-			clickcomparetwo: function(){
-				self = this;
+	/**
+	 * wp.revisions.view.Tickmarks
+	 *
+	 * The slider tickmarks.
+	 */
+	revisions.view.Tickmarks = Backbone.View.extend({
+		el: $('#diff-slider-ticks'),
+		template: wp.template('revision-ticks'),
+		model: Revision,
 
-				if ( $( 'input#comparetwo' ).is( ':checked' ) ) { // compare 2 mode
-					REVAPP._compareOneOrTwo = 2 ;
+		resetTicks: function() {
+			var sliderMax = Diff.slider.option( 'max' );
+			var sliderWidth = Diff.slider.width();
+			var adjustMax = Diff.singleRevision ? 0 : 1;
+			var tickWidth = Math.floor( sliderWidth / ( sliderMax - adjustMax ) );
 
-					if ( 1 === REVAPP._rightDiff )
-						REVAPP._rightDiff = 2;
-						REVAPP._revisionView.draggingLeft = false;
+			// TODO: adjust right margins for wider ticks so they stay centered on handle stop point
 
-						wpRevisionsSettings.revision_id = ''; // reset passed revision id so switching back to one handle mode doesn't re-select revision
-						REVAPP.reloadLeftRight();
-						REVAPP._revisionView.model = REVAPP._rightHandleRevisions;
+			// set minimum and maximum widths for tick marks
+			tickWidth = (tickWidth > 50 ) ? 50 : tickWidth;
+			tickWidth = (tickWidth < 10 ) ? 10 : tickWidth;
 
-					} else { // compare one mode
-						REVAPP._compareOneOrTwo = 1 ;
-						REVAPP._revisionView.draggingLeft = false;
-						// REVAPP._leftDiff = 0;
-						// REVAPP._rightDiff = (REVAPP._revisions.length <= REVAPP._rightDiff ) ? REVAPP._rightDiff + 1 : REVAPP._rightDiff + 1;
-						REVAPP.reloadModelSingle();
-					}
-					// REVAPP._revisionView.render();
-					REVAPP._revisionsInteractions.render();
-					REVAPP._tickmarkView.render();
+			sliderWidth = tickWidth * (sliderMax - adjustMax ) + 1;
 
-			}
-		}),
+			//$( '#slider' ).width( sliderWidth );
+			Diff.slider.setWidth( sliderWidth );
+			$( '.diff-slider-ticks-wrapper' ).width( sliderWidth );
+			$( '#diffslider' ).width( sliderWidth );
+			$( '#diff-slider-ticks' ).width( sliderWidth );
 
-		// options view for show autosaves and show split view options
-		/* DISABLED for now
-		Options: Backbone.View.extend({
-			el: $('#backbonerevisionsoptions')[0],
-			tagName: 'revisionoptionsview',
-			className: 'revisionoptions-container',
-			template: wp.template('revisionoptions'),
+			var aTickWidth = $( '.revision-tick' ).width();
 
-			// render the options view
-			render: function() {
-				var addHtml = this.template;
-				this.$el.html( addHtml );
-				return this;
-			},
+			if ( tickWidth !== aTickWidth ) { // is the width already set correctly?
+				$( '.revision-tick' ).each( function( ) {
+					$(this).css( 'margin-right', tickWidth - 1 + 'px'); // space the ticks out using right margin
+				});
 
-			// 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 ;
+				if( ! Diff.singleRevision ) {
+					$( '.revision-tick' ).first().remove(); // TODO - remove the check
 				}
+				$( '.revision-tick' ).last().css( 'margin-right', '0' ); // last tick gets no right margin
+			}
 
-				// refresh the model data
-				REVAPP.reloadModel();
-			},
+		},
 
-			// toggle showing the split diff view
-			showsplitview:  function() {
-				var self = this;
+		// render the tickmark view
+		render: function() {
+			var self = this;
 
-				if ( $( 'input#showsplitview' ).is( ':checked' ) ) {
-					REVAPP._showSplitView = 'true';
-					$('.revisiondiffcontainer').addClass('diffsplit');
-				} else {
-					REVAPP._showSplitView = '';
-					$('.revisiondiffcontainer').removeClass('diffsplit');
-				}
+			if ( null !== self.model ) {
+				var addHtml = "";
+				_.each ( self.model.models, function( theModel ) {
+					addHtml = addHtml + self.template ( theModel.toJSON() );
+				});
+				self.$el.html( addHtml );
 
-				REVAPP.reloadModel();
 			}
-		}),
-		*/
-		// main interactions view
-		Interact: Backbone.View.extend({
-			el: $('#backbonerevisionsinteract')[0],
-			tagName: 'revisionvinteract',
-			className: 'revisionvinteract-container',
-			template: wp.template('revisionvinteract'),
+			self.resetTicks();
+			return self;
+		}
+	});
 
-			initialize: function() {
-			},
+	/**
+	 * wp.revisions.view.Interact
+	 *
+	 * Next/Prev buttons and the slider
+	 */
+	// TODO: Change Interact to something else.
+	revisions.view.Interact = Backbone.View.extend({
+		el: $('#backbonerevisionsinteract'),
+		template: wp.template('revision-interact'),
 
-			render: function() {
-				var self = this;
+		// next and previous buttons, only available in compare one mode
+		events: {
+			'click #next':     'nextRevision',
+			'click #previous': 'previousRevision'
+		},
 
-				var addHtml = this.template;
-				this.$el.html( addHtml );
+		render: function() {
+			var self = this;
 
-				var modelcount = REVAPP._revisions.length;
+			var addHtml = this.template;
+			this.$el.html( addHtml );
 
-				slider = $( "#slider" );
-				if ( 1 === REVAPP._compareOneOrTwo ) {
-					// set up the slider with a single handle
-					slider.slider({
-						value: REVAPP._rightDiff - 1,
-						min: 0,
-						max: modelcount - 1,
-						step: 1,
+			var modelcount = Diff.revisions.length;
 
+			Diff.slider.singleRevision = Diff.singleRevision;
+			Diff.slider.render();
 
-						// slide interactions for one handles slider
-						slide: function( event, ui ) {
+			if ( Diff.singleRevision ) {
+				Diff.slider.refresh({
+					value: Diff.rightDiff - 1,
+					min: 0,
+					max: modelcount - 1
+				});
 
-							REVAPP._rightDiff = ( ui.value + 1 );
-							REVAPP._revisionView.render();
-							/*
-							$( 'a.ui-slider-handle' ).tooltip( {
-								content: REVAPP._revisions.at( ui.value ).get( 'revision_date_author_short' ),
-								position: {
-								my: "top-65",
-								using: function( position, feedback ) {
-									$( this ).css( position );
-									$( "<div>" )
-									.addClass( "arrow" )
-									.addClass( feedback.vertical )
-									.addClass( feedback.horizontal )
-									.appendTo( this );
-									}
-								}
-							});// .trigger( 'close' ).trigger( 'open' );
-*/
-							}
-					});
-					$( '.revisiondiffcontainer' ).removeClass( 'comparetwo' );
+				$( '.revisiondiffcontainer' ).removeClass( 'comparetwo' );
 
-				} else { // comparing more than one, eg 2
-					// set up the slider with two handles
-					slider.slider({
-						values: [ REVAPP._leftDiff, REVAPP._rightDiff + 1 ],
-						min: 1,
-						max: modelcount + 1,
-						step: 1,
-						range: true,
+			} else {
+				Diff.slider.refresh({
+					values: [ Diff.leftDiff, Diff.rightDiff + 1 ],
+					min: 1,
+					max: modelcount + 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._leftModelLoading ) // left model still loading, prevent sliding left handle
-										return false;
+				$( '.revisiondiffcontainer' ).addClass( 'comparetwo' );
+				$( '#diffslider a.ui-slider-handle' ).first().addClass( 'left-handle' ).next().addClass( 'right-handle' );
 
-									REVAPP._revisionView.draggingLeft = true;
+			}
 
-									if ( REVAPP._revisionView.model !== REVAPP._leftHandleRevisions &&
-											null !== REVAPP._leftHandleRevisions ) {
-										REVAPP._revisionView.model = REVAPP._leftHandleRevisions;
-										REVAPP._tickmarkView.model = REVAPP._leftHandleRevisions;
-										REVAPP._tickmarkView.render();
-									}
+			return this;
+		},
 
-									REVAPP._leftDiffStart = ui.values[ 0 ];
-									break;
+		// go to the next revision
+		nextRevision: function() {
+			if ( Diff.rightDiff < this.model.length ) // unless at right boundry
+				Diff.rightDiff = Diff.rightDiff + 1 ;
 
-								case 2: // right
-									if ( REVAPP._rightModelLoading || 0 === REVAPP._rightHandleRevisions.length) // right model still loading, prevent sliding right handle
-										return false;
+			Diff.revisionView.render();
 
-									if ( REVAPP._revisionView.model !== REVAPP._rightHandleRevisions &&
-											null !== REVAPP._rightHandleRevisions ) {
-										REVAPP._revisionView.model = REVAPP._rightHandleRevisions;
-										REVAPP._tickmarkView.model = REVAPP._rightHandleRevisions;
-										REVAPP._tickmarkView.render();
-									}
+			Diff.slider.refresh({
+				value: Diff.rightDiff - 1
+			}, true );
+		},
 
-									REVAPP._revisionView.draggingLeft = false;
-									REVAPP._rightDiffStart = ui.values[1];
-									break;
-							}
-						},
+		// go the the previous revision
+		previousRevision: function() {
+			if ( Diff.rightDiff > 1 ) // unless at left boundry
+				Diff.rightDiff = Diff.rightDiff - 1 ;
 
-						// 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;
+			Diff.revisionView.render();
 
-							var index = $( ui.handle ).index(); // 0 (left) or 1 (right)
+			Diff.slider.refresh({
+				value: Diff.rightDiff - 1
+			}, true );
+		}
+	});
 
-							switch ( index ) {
-								case 1: // left
-									if ( REVAPP._leftModelLoading ) // left model still loading, prevent sliding left handle
-										return false;
+	/**
+	 * wp.revisions.view.Diff
+	 *
+	 * Next/Prev buttons and the slider
+	 */
+	revisions.view.Diff = Backbone.View.extend({
+		el: $('#backbonerevisionsdiff'),
+		template: wp.template('revision'),
+		comparetwochecked: '',
+		draggingLeft: false,
 
-									REVAPP._leftDiff = ui.values[0];
-									break;
+		// the compare two button is in this view, add the interaction here
+		events: {
+			'click #comparetwo': 'compareTwo',
+			'click #restore':    'restore'
+		},
 
-								case 2: // right
-									if ( REVAPP._rightModelLoading ) // right model still loading, prevent sliding right handle
-										return false;
+		// render the revisions
+		render: function() {
+			var addHtml = '';
+			var thediff;
 
-									REVAPP._rightDiff = ui.values[1];
-									break;
-							}
+			// compare two revisions mode?
+			if ( ! Diff.singleRevision ) {
+				this.comparetwochecked = 'checked';
+				if ( this.draggingLeft ) {
+					thediff = Diff.leftDiff - 1;
+					if ( this.model.at( thediff ) ) {
+						addHtml = this.template( _.extend(
+							this.model.at( thediff ).toJSON(),
+							{ comparetwochecked: this.comparetwochecked } // keep the checkmark checked
+						) );
+					}
+				} else { // dragging right handle
+					thediff = Diff.rightDiff -1;
+					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 handle
+				this.comparetwochecked = '';
+				if ( this.model.at( Diff.rightDiff - 1 ) ) {
+					addHtml = this.template( _.extend(
+						this.model.at( Diff.rightDiff - 1 ).toJSON(),
+						{ comparetwochecked: this.comparetwochecked } // keep the checkmark unchecked
+					) );
+				}
+			}
+			this.$el.html( addHtml );
+			if ( this.model.length < 3 ) {
+				$( 'div#comparetworevisions' ).hide(); // don't allow compare two if fewer than three revisions
+			}
+			if ( this.model.length < 2 ) {
+				$( 'div#diffslider' ).hide(); // don't allow compare two if fewer than three revisions
+				$( 'div.diff-slider-ticks-wrapper' ).hide();
+			}
 
-							if ( 0 === REVAPP._leftDiff ) {
-								$( '.revisiondiffcontainer' ).addClass( 'currentversion' );
+			// add tooltips to the handles
+			if ( ! Diff.singleRevision ) {
+				Diff.addTooltip ( $( 'a.ui-slider-handle.left-handle' ),
+					( Diff.leftDiff < 0 ) ? '' : Diff.revisions.at( Diff.leftDiff - 1 ).get( 'revision_date_author_short' ) );
+				Diff.addTooltip ( $( 'a.ui-slider-handle.right-handle' ),
+					( Diff.rightDiff > Diff.revisions.length ) ? '' : Diff.revisions.at( Diff.rightDiff - 1 ).get( 'revision_date_author_short' ) );
+			} else {
+				Diff.addTooltip ( $( 'a.ui-slider-handle' ),
+					( Diff.rightDiff > Diff.revisions.length ) ? '' : Diff.revisions.at( Diff.rightDiff - 1 ).get( 'revision_date_author_short' ) );
+			}
 
-							} else {
-								$( '.revisiondiffcontainer' ).removeClass( 'currentversion' );
-							}
+			// hide the restore button when on the last sport/current post data
+			if (  Diff.rightDiff === Diff.revisions.length ){
+				$( '.restore-button' ).hide();
+			} else {
+				$( '.restore-button' ).show();
+			}
 
-							REVAPP._revisionView.render();
+			return this;
+		},
 
-						},
+		// turn on/off the compare two mmode
+		compareTwo: function() {
+			self = this;
 
-						// 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 ( $( 'input#comparetwo' ).is( ':checked' ) ) { // compare 2 mode
+				Diff.singleRevision = false ;
 
-								var index = $( ui.handle ).index(); // 0 (left) or 1 (right)
+				if ( 1 === Diff.rightDiff )
+					Diff.rightDiff = 2;
 
-								switch ( index ) {
-									case 1: // left
+				Diff.revisionView.draggingLeft = false;
 
-										// left handle dragged & changed, reload right handle model
-										if ( REVAPP._leftDiffStart !== ui.values[0] )
-											REVAPP.reloadRight();
+				revisions.model.settings.revision_id = ''; // reset passed revision id so switching back to one handle mode doesn't re-select revision
+				Diff.reloadLeftRight();
+				Diff.revisionView.model = Diff.rightHandleRevisions;
 
-										break;
+			} else { // compare one mode
+				Diff.singleRevision = true;
+				Diff.revisionView.draggingLeft = false;
+				Diff.reloadModelSingle();
+			}
+			Diff.revisionsInteractions.render();
+			Diff.tickmarkView.render();
+		},
 
-									case 2: // right
-										// REVAPP._rightDiff =  ( 1 >= REVAPP._rightDiff ) ? 1 : REVAPP._rightDiff - 1;
-										// right handle dragged & changed, reload left handle model if changed
-										if ( REVAPP._rightDiffStart !== ui.values[1] )
-											REVAPP.reloadLeft();
+		restore: function() {
+			document.location = $( '#restore' ).data( 'link' );
+		}
+	});
 
-										break;
-								}
-							}
-						}
-					});
-					$( '.revisiondiffcontainer' ).addClass( 'comparetwo' );
-					$( '#diffslider a.ui-slider-handle' ).first().addClass( 'left-handle' ).next().addClass( 'right-handle' );
-				}
 
-				return this;
-			},
+	/**
+	 * ========================================================================
+	 * MODELS
+	 * ========================================================================
+	 */
 
-			// next and previous buttons, only available in compare one mode
-			events: {
-				'click #next': 'nextRevision',
-				'click #previous': 'previousRevision'
-			},
+	/**
+	 * wp.revisions.Revision
+	 */
+	Revision = revisions.model.Revision = Backbone.Model.extend({
+		idAttribute: 'ID',
+		urlRoot: ajaxurl +	'?action=revisions-data' +
+			'&show_autosaves=true&show_split_view=true&nonce=' + revisions.model.settings.nonce,
+		defaults: {
+			ID: 0,
+			revision_date_author: '',
+			revision_date_author_short: '',
+			revisiondiff: '<div class="diff-loading"><div class="spinner"></div></div>',
+			restoreaction: '',
+			revision_from_date_author: '',
+			revision_toload: false,
+			lines_added: 0,
+			lines_deleted: 0,
+			scope_of_changes: 'none',
+			previous_revision_id: 0
+		},
 
-			// go to the next revision
-			nextRevision: function() {
-				if ( REVAPP._rightDiff < this.model.length ) // unless at right boundry
-					REVAPP._rightDiff = REVAPP._rightDiff + 1 ;
+		url: function() {
+			if ( Diff.singleRevision ) {
+				return this.urlRoot +
+					'&single_revision_id=' + this.id +
+					'&compare_to=' + this.get( 'previous_revision_id' ) +
+					'&post_id=' + revisions.model.settings.post_id;
+			} else {
+				return this.urlRoot + '&single_revision_id=' + this.id;
+			}
 
-				REVAPP._revisionView.render();
+		}
+	});
 
-				$( '#slider' ).slider( 'value', REVAPP._rightDiff - 1 ).trigger( 'slide' );
-			},
+	/**
+	 * wp.revisions.Revisions
+	 */
+	Revisions = revisions.Revisions = Backbone.Collection.extend({
+		model: Revision,
+		urlRoot: ajaxurl + '?action=revisions-data',
 
-			// go the the previous revision
-			previousRevision: function() {
-				if ( REVAPP._rightDiff > 1 ) // unless at left boundry
-					REVAPP._rightDiff = REVAPP._rightDiff - 1 ;
+		initialize: function( models, options ) {
+			this.options = _.defaults( options || {}, {
+				'compareTo': revisions.model.settings.post_id,
+				'showAutosaves': true,
+				'showSplitView': true,
+				'rightHandleAt': 0,
+				'nonce': revisions.model.settings.nonce
+			});
+		},
 
-				REVAPP._revisionView.render();
+		url: function() {
+			return this.urlRoot +
+				'&compare_to=' + this.options.compareTo +
+				'&show_autosaves=' + this.options.showAutosaves +
+				'&show_split_view=' + this.options.showSplitView +
+				'&right_handle_at=' + this.options.rightHandleAt +
+				'&nonce=' + this.options.nonce;
+		},
 
-				$( '#slider' ).slider( 'value', REVAPP._rightDiff - 1 ).trigger( 'slide' );
-			}
-		})
-	});
+		reload: function( options ) {
+			this.options = _.defaults( options || {}, this.options );
 
-	// instantiate Revision Application
-	REVAPP = new wp.revisions.App();
+			// TODO
+			//this.fetch();
+		}
 
+	} );
+
+	$( wp.revisions );
+
 }(jQuery));
Index: wp-admin/revision.php
===================================================================
--- wp-admin/revision.php	(revision 23884)
+++ wp-admin/revision.php	(working copy)
@@ -79,13 +79,21 @@
 
 require_once( './admin-header.php' );
 
-//TODO - Some of the translations below split things into multiple strings that are contextually related and this makes it pretty impossible for RTL translation.
-//TODO can we pass the context in a better way
-$wpRevisionsSettings = array( 'post_id' => $post->ID,
-						'nonce' => wp_create_nonce( 'revisions-ajax-nonce' ),
-						'revision_id' => $revision_id );
-wp_localize_script( 'revisions', 'wpRevisionsSettings', $wpRevisionsSettings );
+$strings = array(
+	'diffFromTitle' => _x( 'From: %s', 'revision from title'  ),
+	'diffToTitle'   => _x( 'To: %s', 'revision to title' )
+);
 
+$settings = array(
+	'post_id'     => $post->ID,
+	'nonce'       => wp_create_nonce( 'revisions-ajax-nonce' ),
+	'revision_id' => $revision_id
+);
+
+$strings['settings'] = $settings;
+
+wp_localize_script( 'revisions', 'wpRevisionsL10n', $strings );
+
 $comparetworevisionslink = get_edit_post_link( $revision->ID );
 ?>
 
@@ -126,7 +134,7 @@
 			<div class="diff-to-title"><?php _e( 'To:' ); ?></div>{{{ data.revision_date_author }}}
 		</div>
 		<div id="diffrestore">
-			<input class="button button-primary restore-button" onClick="document.location='{{{ data.restoreaction }}}'" type="submit" id="restore" value="<?php esc_attr_e( 'Restore This Revision' )?>" />
+			<input id="restore" class="button button-primary" data-link="{{{ data.restoreaction }}}" type="button" id="restore" value="<?php esc_attr_e( 'Restore This Revision' )?>" />
 		</div>
 		<div id="comparetworevisions">
 			<input type="checkbox" id="comparetwo" value="comparetwo" {{{ data.comparetwochecked }}} name="comparetwo"/>
@@ -141,7 +149,7 @@
 	<div>{{{ data.revisiondiff }}}</div>
 </script>
 
-<script id="tmpl-revisionvinteract" type="text/html">
+<script id="tmpl-revision-interact" type="text/html">
 	<div id="diffheader">
 		<div id="diffprevious"><input class="button" type="submit" id="previous" value="<?php esc_attr_e( 'Previous' ); ?>" />
 		</div>
@@ -153,22 +161,10 @@
 		</div>
 	</div>
 </script>
+
 <script id="tmpl-revision-ticks" type="text/html">
 	<div class="revision-tick revision-toload{{{ data.revision_toload }}} revision-scopeofchanges-{{{ data.scope_of_changes }}}">
 	</div>
 </script>
 <?php
-/*
-TODO Convert these into screen options
-<script id="tmpl-revisionoptions" type="text/html">
-	<div id="revisionoptions">
-		<div id="showsplitviewoption">
-			<input type='checkbox' id="show_split_view" 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>
-*/
-require_once( './admin-footer.php' );
\ No newline at end of file
+require_once( './admin-footer.php' );
