diff --git wp-admin/edit-form-advanced.php wp-admin/edit-form-advanced.php
index 6df9234..770c851 100644
--- wp-admin/edit-form-advanced.php
+++ wp-admin/edit-form-advanced.php
@@ -329,6 +329,12 @@ wp_nonce_field( 'meta-box-order', 'meta-box-order-nonce', false );
 wp_nonce_field( 'closedpostboxes', 'closedpostboxesnonce', false );
 ?>
 
+<div id="lost-connection-notice" class="error hidden">
+	<p id="lost-connection-message">
+	<?php _e("You have lost your connection with the server, and saving has been disabled. This message will vanish once you've reconnected."); ?>
+	</p>
+</div>
+
 <div id="poststuff">
 
 <?php
diff --git wp-includes/js/autosave.js wp-includes/js/autosave.js
index d1914d1..5e1c3f1 100644
--- wp-includes/js/autosave.js
+++ wp-includes/js/autosave.js
@@ -180,7 +180,9 @@ function autosave_parse_response(response) {
 function autosave_saved(response) {
 	blockSave = false;
 	autosave_parse_response(response); // parse the ajax response
-	autosave_enable_buttons(); // re-enable disabled form buttons
+
+	if ( ! wp.heartbeat.connectionLost )
+		autosave_enable_buttons(); // re-enable disabled form buttons
 }
 
 // called when autosaving new post
@@ -200,7 +202,7 @@ function autosave_saved_new(response) {
 			autosaveDelayPreview = false;
 			doPreview();
 		}
-	} else {
+	} else if ( ! wp.heartbeat.connectionLost ) {
 		autosave_enable_buttons(); // re-enable disabled form buttons
 	}
 }
@@ -238,8 +240,11 @@ function autosave_enable_buttons() {
 
 function autosave_disable_buttons() {
 	jQuery(':button, :submit', '#submitpost').prop('disabled', true);
-	// Re-enable 5 sec later. Just gives autosave a head start to avoid collisions.
-	setTimeout(autosave_enable_buttons, 5000);
+
+	if ( ! wp.heartbeat.connectionLost ) {
+		// Re-enable 5 sec later. Just gives autosave a head start to avoid collisions.
+		setTimeout(autosave_enable_buttons, 5000);
+	}
 }
 
 function delayed_autosave() {
@@ -256,6 +261,7 @@ autosave = function() {
 	var rich = (typeof tinymce != "undefined") && tinymce.activeEditor && !tinymce.activeEditor.isHidden(),
 		post_data, doAutoSave, ed, origStatus, successCallback;
 
+	// Disable buttons until we know the save completed.
 	autosave_disable_buttons();
 
 	post_data = wp.autosave.getPostData();
@@ -668,3 +674,16 @@ wp.autosave.local = {
 wp.autosave.local.init();
 
 }(jQuery));
+
+
+// When connection is lost, keep user from submitting changes.
+jQuery(document).on('heartbeat-connection-lost', function() {
+	autosave_disable_buttons();
+	jQuery('#lost-connection-notice').show();
+});
+
+// When connection returns, make work all the things.
+jQuery(document).on('heartbeat-connection-restored', function() {
+	autosave_enable_buttons();
+	jQuery('#lost-connection-notice').hide();
+});
diff --git wp-includes/js/heartbeat.js wp-includes/js/heartbeat.js
index a382599..1060786 100644
--- wp-includes/js/heartbeat.js
+++ wp-includes/js/heartbeat.js
@@ -28,6 +28,7 @@ window.wp = window.wp || {};
 
 		this.url = typeof ajaxurl != 'undefined' ? ajaxurl : 'wp-admin/admin-ajax.php';
 		this.autostart = true;
+		this.connectionLost = false;
 
 		if ( typeof( window.heartbeatSettings != 'undefined' ) ) {
 			settings = $.extend( {}, window.heartbeatSettings );
@@ -171,7 +172,7 @@ window.wp = window.wp || {};
 
 			// temp debug
 			if ( self.debug )
-				console.log('### blurred(), slow down...')
+				console.log('### blurred(), slow down...');
 		}
 
 		function focused() {
@@ -192,7 +193,7 @@ window.wp = window.wp || {};
 
 			// temp debug
 			if ( self.debug )
-				console.log('### focused(), speed up... ')
+				console.log('### focused(), speed up... ');
 		}
 
 		function setFrameEvents() {
