Index: wp-admin/edit-form-advanced.php
===================================================================
--- wp-admin/edit-form-advanced.php	(revision 23582)
+++ wp-admin/edit-form-advanced.php	(working copy)
@@ -168,8 +168,7 @@
 		add_meta_box('authordiv', __('Author'), 'post_author_meta_box', null, 'normal', 'core');
 }
 
-// TODO review this count() - why do we need to add it?
-if ( post_type_supports($post_type, 'revisions') && 0 < $post_ID && count ( wp_get_post_revisions( $post_ID ) ) > 1  )
+if ( post_type_supports($post_type, 'revisions') )
 	add_meta_box('revisionsdiv', __('Revisions'), 'post_revisions_meta_box', null, 'normal', 'core');
 
 do_action('add_meta_boxes', $post_type, $post);
Index: wp-admin/includes/ajax-actions.php
===================================================================
--- wp-admin/includes/ajax-actions.php	(revision 23582)
+++ wp-admin/includes/ajax-actions.php	(working copy)
@@ -1038,6 +1038,9 @@
 	$do_autosave = (bool) $_POST['autosave'];
 	$do_lock = true;
 
+	if ( ! $user_id = get_current_user_id() )
+		wp_die('-1');
+
 	$data = $alert = '';
 	/* translators: draft saved date format, see http://php.net/date */
 	$draft_saved_date_format = __('g:i:s a');
@@ -1057,13 +1060,10 @@
 		$_POST['post_status'] = 'draft';
 
 	if ( $last = wp_check_post_lock( $post->ID ) ) {
-		$do_autosave = $do_lock = false;
+		$do_lock = false;
 
 		$last_user = get_userdata( $last );
 		$last_user_name = $last_user ? $last_user->display_name : __( 'Someone' );
-		$data = __( 'Autosave disabled.' );
-
-		$supplemental['disable_autosave'] = 'disable';
 		$alert .= sprintf( __( '%s is currently editing this article. If you update it, you will overwrite the changes.' ), esc_html( $last_user_name ) );
 	}
 
@@ -1076,10 +1076,10 @@
 	}
 
 	if ( $do_autosave ) {
-		// Drafts and auto-drafts are just overwritten by autosave
-		if ( 'auto-draft' == $post->post_status || 'draft' == $post->post_status ) {
+		// Drafts and auto-drafts are just overwritten by autosave for the same user
+		if ( $user_id == $post->post_author && ( 'auto-draft' == $post->post_status || 'draft' == $post->post_status ) ) {
 			$id = edit_post();
-		} else { // Non drafts are not overwritten. The autosave is stored in a special post revision.
+		} else { // Non drafts are not overwritten. The autosave is stored in a special post revision for each user.
 			$revision_id = wp_create_post_autosave( $post->ID );
 			if ( is_wp_error($revision_id) )
 				$id = $revision_id;
Index: wp-admin/includes/post.php
===================================================================
--- wp-admin/includes/post.php	(revision 23582)
+++ wp-admin/includes/post.php	(working copy)
@@ -1236,11 +1236,13 @@
 	if ( is_wp_error( $translated ) )
 		return $translated;
 
-	// Only store one autosave. If there is already an autosave, overwrite it.
-	if ( $old_autosave = wp_get_post_autosave( $post_id ) ) {
+	$post_author = get_current_user_id();
+
+	// Store one autosave per author. If there is already an autosave, overwrite it.
+	if ( $old_autosave = wp_get_post_autosave( $post_id, $post_author ) ) {
 		$new_autosave = _wp_post_revision_fields( $_POST, true );
 		$new_autosave['ID'] = $old_autosave->ID;
-		$new_autosave['post_author'] = get_current_user_id();
+		$new_autosave['post_author'] = $post_author;
 		return wp_update_post( $new_autosave );
 	}
 
Index: wp-admin/post.php
===================================================================
--- wp-admin/post.php	(revision 23582)
+++ wp-admin/post.php	(working copy)
@@ -169,11 +169,11 @@
 		add_action('admin_notices', '_admin_notice_post_locked' );
 	} else {
 		$active_post_lock = wp_set_post_lock( $post->ID );
-
-		if ( 'attachment' !== $post_type )
-			wp_enqueue_script('autosave');
 	}
 
+	if ( 'attachment' !== $post_type )
+		wp_enqueue_script('autosave');
+
 	$title = $post_type_object->labels->edit_item;
 	$post = get_post($post_id, OBJECT, 'edit');
 
Index: wp-includes/revision.php
===================================================================
--- wp-includes/revision.php	(revision 23582)
+++ wp-includes/revision.php	(working copy)
@@ -135,54 +135,34 @@
  * Retrieve the autosaved data of the specified post.
  *
  * Returns a post object containing the information that was autosaved for the
- * specified post.
+ * specified post. If the optional $user_id is passed, returns the autosave for that user
+ * otherwise returns the latest autosave.
  *
  * @package WordPress
  * @subpackage Post_Revisions
  * @since 2.6.0
  *
  * @param int $post_id The post ID.
+ * @param int $user_id optional The post author ID.
  * @return object|bool The autosaved data or false on failure or when no autosave exists.
  */
-function wp_get_post_autosave( $post_id ) {
+function wp_get_post_autosave( $post_id, $user_id = 0 ) {
+	$revisions = wp_get_post_revisions($post_id);
 
-	if ( !$post = get_post( $post_id ) )
-		return false;
+	foreach ( $revisions as $revision ) {
+		if ( false !== strpos( $revision->post_name, "{$post_id}-autosave" ) ) {
+			if ( $user_id && $user_id != $revision->post_author )
+				continue;
 
-	$q = array(
-		'name' => "{$post->ID}-autosave",
-		'post_parent' => $post->ID,
-		'post_type' => 'revision',
-		'post_status' => 'inherit'
-	);
+			return $revision;
+			break;
+		}
+	}
 
-	// Use WP_Query so that the result gets cached
-	$autosave_query = new WP_Query;
-
-	add_action( 'parse_query', '_wp_get_post_autosave_hack' );
-	$autosave = $autosave_query->query( $q );
-	remove_action( 'parse_query', '_wp_get_post_autosave_hack' );
-
-	if ( $autosave && is_array($autosave) && is_object($autosave[0]) )
-		return $autosave[0];
-
 	return false;
 }
 
 /**
- * Internally used to hack WP_Query into submission.
- *
- * @package WordPress
- * @subpackage Post_Revisions
- * @since 2.6.0
- *
- * @param object $query WP_Query object
- */
-function _wp_get_post_autosave_hack( $query ) {
-	$query->is_single = false;
-}
-
-/**
  * Determines if the specified post is a revision.
  *
  * @package WordPress
@@ -211,9 +191,11 @@
 function wp_is_post_autosave( $post ) {
 	if ( !$post = wp_get_post_revision( $post ) )
 		return false;
-	if ( "{$post->post_parent}-autosave" !== $post->post_name )
-		return false;
-	return (int) $post->post_parent;
+
+	if ( false !== strpos( $post->post_name, "{$post->post_parent}-autosave" ) )
+		return (int) $post->post_parent;
+
+	return false;
 }
 
 /**
