diff --git wp-admin/edit-form-advanced.php wp-admin/edit-form-advanced.php
index c7e8dc6..8af539c 100644
--- wp-admin/edit-form-advanced.php
+++ wp-admin/edit-form-advanced.php
@@ -336,6 +336,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 43b2b4e..8658f23 100644
--- wp-includes/js/autosave.js
+++ wp-includes/js/autosave.js
@@ -212,11 +212,13 @@ function autosave_loading() {
 }
 
 function autosave_enable_buttons() {
-	// delay that a bit to avoid some rare collisions while the DOM is being updated.
-	setTimeout(function(){
-		jQuery(':button, :submit', '#submitpost').removeAttr('disabled');
-		jQuery('.spinner', '#submitpost').hide();
-	}, 500);
+	if ( ! wp.heartbeat.connectionLost ) {
+		// delay that a bit to avoid some rare collisions while the DOM is being updated.
+		setTimeout(function(){
+			jQuery(':button, :submit', '#submitpost').removeAttr('disabled');
+			jQuery('.spinner', '#submitpost').hide();
+		}, 500);
+	}
 }
 
 function autosave_disable_buttons() {
@@ -239,6 +241,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();
@@ -664,3 +667,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() {
