Index: wp-admin/css/wp-admin.css
===================================================================
--- wp-admin/css/wp-admin.css	(revision 24263)
+++ wp-admin/css/wp-admin.css	(working copy)
@@ -3642,6 +3642,15 @@
 	display: block;
 }
 
+#diff-paginate {
+	text-align: center;
+	margin: 10px 0 0 0;
+}
+
+#diff-paginate input {
+	margin: 0 2px;
+}
+
 #diff-title-to strong {
 	display: none;
 }
Index: wp-admin/includes/ajax-actions.php
===================================================================
--- wp-admin/includes/ajax-actions.php	(revision 24263)
+++ wp-admin/includes/ajax-actions.php	(working copy)
@@ -2112,6 +2112,8 @@
 	$right_handle_at = ! empty( $_GET['right_handle_at'] ) ? (int) $_GET['right_handle_at'] : 0;
 	$left_handle_at = ! empty( $_GET['left_handle_at'] ) ? (int) $_GET['left_handle_at'] : 0;
 	$single_revision_id = ! empty( $_GET['single_revision_id'] ) ? absint( $_GET['single_revision_id'] ) : 0;
+	$page_size = ! empty( $_GET['page_size'] ) ? absint( $_GET['page_size'] ) : -1;
+	$page = ! empty( $_GET['page'] ) ? absint( $_GET['page'] ) : 1;
 	$compare_two_mode = (bool) $post_id;
 
 	$all_the_revisions = array();
@@ -2121,7 +2123,7 @@
 	if ( ! current_user_can( 'read_post', $post_id ) )
 		continue;
 
-	if ( ! $revisions = wp_get_post_revisions( $post_id ) )
+	if ( ! $revisions = wp_get_post_revisions( $post_id, array( 'posts_per_page' => $page_size, 'paged' => $page ) ) )
 		return;
 
 	$left_revision = get_post( $compare_to );
@@ -2183,6 +2185,12 @@
 
 	$count = -1;
 
+	// append current live revision if not on first page
+	if( $page > 1 ) {
+		$current = array_pop(wp_get_post_revisions( $post_id, array( 'numberposts' => 1 ) ));
+		$revisions[$current->ID] = $current;
+	}
+	
 	// reverse the list to start with oldest revision
 	$revisions = array_reverse( $revisions );
 
Index: wp-admin/js/revisions.js
===================================================================
--- wp-admin/js/revisions.js	(revision 24263)
+++ wp-admin/js/revisions.js	(working copy)
@@ -38,6 +38,7 @@
 		rightModelLoading: false,	// disallow slider interaction, also repeat loads, while loading
 		tickmarkView: null, // the slider tickmarks
 		slider: null, // the slider instance
+		page: null,
 
 		constructor: function() {
 			var self    = this;
@@ -568,7 +569,8 @@
 		// next and previous buttons, only available in compare one mode
 		events: {
 			'click #next':     ! isRtl ? 'nextRevision' : 'previousRevision',
-			'click #previous': ! isRtl ? 'previousRevision' : 'nextRevision'
+			'click #previous': ! isRtl ? 'previousRevision' : 'nextRevision',
+			'click .paginate': 'changePage'
 		},
 
 		render: function() {
@@ -630,7 +632,33 @@
 			Diff.slider.refresh({
 				value: Diff.rightDiff - 1
 			}, true );
-		}
+		},
+
+		changePage: function(e) {
+			// suppress event on disabled current page button
+			if( Diff.page == $( e.currentTarget ).data( 'id' ) )
+				return false;
+
+			// change page
+			Diff.page = $( e.currentTarget ).data( 'id' );
+
+			$( '.paginate' 	).removeClass( 'button-disabled' );
+			$( e.currentTarget ).addClass( 'button-disabled' );
+
+			// single handle mode
+			if ( Diff.slider.singleRevision )
+				Diff.reloadModelSingle();
+
+			// compare two mode
+			else {
+				Diff.revisions.fetch({
+					success: function() {
+						Diff.reloadLeftRight(); // load diffs for left and right handles
+						Diff.revisionView.model = Diff.rightHandleRevisions; // results in a reload of the revisionView.model
+					}
+				});
+			}
+ 		}
 	});
 
 	/**
@@ -789,6 +817,7 @@
 				'showSplitView': true,
 				'rightHandleAt': 0,
 				'leftHandleAt': 0,
+				'page_size' : revisions.model.settings.page_size,
 				'nonce': revisions.model.settings.nonce
 			});
 		},
@@ -802,6 +831,8 @@
 				'&show_split_view=' + this.options.showSplitView + // show in split view or single column view
 				'&right_handle_at=' + this.options.rightHandleAt + // mark point for comparison list
 				'&left_handle_at=' + this.options.leftHandleAt + // mark point for comparison list
+				'&page_size=' + this.options.page_size +
+				'&page=' + Diff.page +
 				'&nonce=' + this.options.nonce;
 		},
 
Index: wp-admin/revision.php
===================================================================
--- wp-admin/revision.php	(revision 24263)
+++ wp-admin/revision.php	(working copy)
@@ -78,11 +78,15 @@
 
 wp_enqueue_script( 'revisions' );
 
+$page_size = 50;
+$revisions_idx = array_flip( array_keys( wp_get_post_revisions( $post->ID ) ) );
 
 $settings = array(
 	'post_id'     => $post->ID,
 	'nonce'       => wp_create_nonce( 'revisions-ajax-nonce' ),
-	'revision_id' => $revision_id
+	'revision_id' => $revision_id,
+	'page' 		  => floor((( $revisions_idx[$revision_id] ) / $page_size))+1,
+	'page_size'   => $page_size
 );
 
 wp_localize_script( 'revisions', 'wpRevisionsSettings', $settings );
@@ -172,6 +176,14 @@
 	</div>
 
 	<div id="diff-slider" class="wp-slider"></div>
+
+	<div id="diff-paginate">
+		<?php
+		$pages = floor(count( $revisions_idx ) / $page_size)+1;
+		for( $i = 1; $i <= $pages; $i++ )
+			echo '<input class="button'.( $i == $settings['page'] ? ' button-disabled' : '' ).' paginate" type="button" value="'.( ( $i - 1 ) * $page_size + 1 ) .'-'.( ( $i == $pages ) ? count( $revisions_idx ) : $i * $page_size ).'" data-id="'.$i.'" />';
+		?>
+	</div>
 </script>
 
 <script id="tmpl-revision-ticks" type="text/html">
