Index: wp-admin/css/wp-admin.css
===================================================================
--- wp-admin/css/wp-admin.css	(revision 23987)
+++ wp-admin/css/wp-admin.css	(working copy)
@@ -3424,15 +3424,23 @@
 
 #notification-dialog .post-locked-avatar {
 	float: left;
-	margin-right: 20px;
+	margin: 0 20px 20px 0;
 }
 
 #notification-dialog .currently-editing {
-	margin-bottom: 20px;
 	outline: 0;
 }
 
+#notification-dialog .locked-saving img {
+	float: left;
+	margin-right: 3px;
+}
 
+#notification-dialog-wrap.saving .locked-saving,
+#notification-dialog-wrap.saved .locked-saved {
+	display: block;
+}
+
 /*------------------------------------------------------------------------------
   11.1 - Custom Fields
 ------------------------------------------------------------------------------*/
Index: wp-admin/includes/misc.php
===================================================================
--- wp-admin/includes/misc.php	(revision 23987)
+++ wp-admin/includes/misc.php	(working copy)
@@ -574,12 +574,11 @@
 			$post_id = (int) substr( $key, 5 );
 
 			if ( current_user_can( 'edit_post', $post_id ) && ( $user_id = wp_check_post_lock( $post_id ) ) && ( $user = get_userdata( $user_id ) ) ) {
-				$send = array();
+				$send = array( 'text' => sprintf( __( '%s is currently editing' ), $user->display_name ) );
 
 				if ( ( $avatar = get_avatar( $user->ID, 18 ) ) && preg_match( "|src='([^']+)'|", $avatar, $matches ) )
 					$send['avatar_src'] = $matches[1];
 
-				$send['text'] = sprintf( __( '%s is currently editing' ), $user->display_name );
 				$checked[$key] = $send;
 			}
 		}
@@ -608,9 +607,7 @@
 		if ( !current_user_can('edit_post', $post_id) )
 			return $response;
 
-		if ( $user_id = wp_check_post_lock( $post_id ) ) {
-			$user = get_userdata( $user_id );
-
+		if ( ( $user_id = wp_check_post_lock( $post_id ) ) && ( $user = get_userdata( $user_id ) ) ) {
 			$error = array(
 				'text' => sprintf( __( '%s has taken over and is currently editing.' ), $user->display_name )
 			);
Index: wp-admin/includes/post.php
===================================================================
--- wp-admin/includes/post.php	(revision 23987)
+++ wp-admin/includes/post.php	(working copy)
@@ -1194,8 +1194,7 @@
 	if ( ! $post = get_post() )
 		return;
 
-	if ( $user = wp_check_post_lock( $post->ID ) ) {
-		$user = get_userdata( $user );
+	if ( ( $user_id = wp_check_post_lock( $post->ID ) ) && ( $user = get_userdata( $user_id ) ) ) {
 		$locked = apply_filters( 'show_post_locked_dialog', true, $post, $user );
 	} else {
 		$locked = false;
@@ -1247,6 +1246,8 @@
 		<div class="post-taken-over">
 			<div class="post-locked-avatar"></div>
 			<p class="currently-editing wp-tab-first" tabindex="0"></p>
+			<p class="locked-saving hidden"><img src="images/wpspin_light-2x.gif" width="16" height="16" /> <?php _e('Saving revision...'); ?></p>
+			<p class="locked-saved hidden"><?php _e('Revision saved.'); ?></p>
 			<p><a class="button button-primary wp-tab-last" href="<?php echo esc_url( admin_url('edit.php') ); ?>"><?php _e('Go to All Posts'); ?></a></p>
 		</div>
 		<?php
Index: wp-admin/js/post.js
===================================================================
--- wp-admin/js/post.js	(revision 23987)
+++ wp-admin/js/post.js	(working copy)
@@ -277,8 +277,18 @@
 			wrap = $('#notification-dialog-wrap');
 
 			if ( wrap.length && ! wrap.is(':visible') ) {
-				if ( typeof autosave == 'function' )
+				$(document).on('autosave-disable-buttons.post-lock', function() {
+					wrap.addClass('saving');
+				}).on('autosave-enable-buttons.post-lock', function() {
+					wrap.removeClass('saving').addClass('saved');
+					window.onbeforeunload = null;
+				});
+
+				if ( typeof autosave == 'function' ) {
+					// Save the latest changes and disable
 					autosave();
+					autosave = function(){};
+				}
 
 				if ( received.lock_error.avatar_src ) {
 					avatar = $('<img class="avatar avatar-64 photo" width="64" height="64" />').attr( 'src', received.lock_error.avatar_src.replace(/&amp;/g, '&') );
Index: wp-includes/js/autosave.js
===================================================================
--- wp-includes/js/autosave.js	(revision 23987)
+++ wp-includes/js/autosave.js	(working copy)
@@ -227,6 +227,7 @@
 }
 
 function autosave_enable_buttons() {
+	jQuery(document).trigger('autosave-enable-buttons');
 	if ( ! wp.heartbeat.connectionLost ) {
 		// delay that a bit to avoid some rare collisions while the DOM is being updated.
 		setTimeout(function(){
@@ -238,6 +239,7 @@
 }
 
 function autosave_disable_buttons() {
+	jQuery(document).trigger('autosave-disable-buttons');
 	jQuery('#submitpost').find(':button, :submit').prop('disabled', true);
 	// Re-enable 5 sec later. Just gives autosave a head start to avoid collisions.
 	setTimeout( autosave_enable_buttons, 5000 );
