diff --git wp-includes/js/autosave.js wp-includes/js/autosave.js
index 537d9b6..e57007f 100644
--- wp-includes/js/autosave.js
+++ wp-includes/js/autosave.js
@@ -179,8 +179,10 @@ function autosave_parse_response(response) {
 // called when autosaving pre-existing post
 function autosave_saved(response) {
 	blockSave = false;
-	autosave_parse_response(response); // parse the ajax response
-	autosave_enable_buttons(); // re-enable disabled form buttons
+
+	var res = autosave_parse_response(response); // parse the ajax response
+	if ( !res.errors )
+		autosave_enable_buttons(); // re-enable disabled form buttons
 }
 
 // called when autosaving new post
@@ -200,8 +202,6 @@ function autosave_saved_new(response) {
 			autosaveDelayPreview = false;
 			doPreview();
 		}
-	} else {
-		autosave_enable_buttons(); // re-enable disabled form buttons
 	}
 }
 
@@ -236,10 +236,13 @@ function autosave_enable_buttons() {
 	}, 500);
 }
 
-function autosave_disable_buttons() {
+function autosave_disable_buttons( leaveDisabled ) {
 	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 ( ! leaveDisabled ) {
+		// Re-enable 5 sec later. Just gives autosave a head start to avoid collisions.
+		setTimeout(autosave_enable_buttons, 5000);
+	}
 }
 
 function delayed_autosave() {
@@ -256,7 +259,8 @@ autosave = function() {
 	var rich = (typeof tinymce != "undefined") && tinymce.activeEditor && !tinymce.activeEditor.isHidden(),
 		post_data, doAutoSave, ed, origStatus, successCallback;
 
-	autosave_disable_buttons();
+	// Disable buttons until we know the save completed.
+	autosave_disable_buttons( true );
 
 	post_data = wp.autosave.getPostData();
 
@@ -510,6 +514,16 @@ wp.autosave.local = {
 		if ( !this.blog_id )
 			this.blog_id = typeof window.autosaveL10n != 'undefined' ? window.autosaveL10n.blog_id : 0;
 
+		// When connection is lost, keep user from submitting changes.
+		jQuery(document).on('heartbeat-connection-lost', function() {
+			autosave_disable_buttons( true ); // Leave buttons disabled.
+		});
+
+		// When connection returns, make work all the things.
+		jQuery(document).on('heartbeat-connection-restored', function() {
+			autosave_enable_buttons();
+		});
+
 		this.checkPost();
 		$(document).ready( self.run );
 	},
