Index: wp-admin/includes/post.php
===================================================================
--- wp-admin/includes/post.php	(revision 24220)
+++ wp-admin/includes/post.php	(working copy)
@@ -1278,11 +1278,15 @@
  * @return unknown
  */
 function wp_create_post_autosave( $post_id ) {
+	if ( ! $post = get_post( $post_id ) )
+		return;
+
 	$translated = _wp_translate_postdata( true );
 	if ( is_wp_error( $translated ) )
 		return $translated;
 
 	$post_author = get_current_user_id();
+	$new_data = $_POST;
 
 	// Store one autosave per author. If there is already an autosave, overwrite it.
 	if ( $old_autosave = wp_get_post_autosave( $post_id, $post_author ) ) {
@@ -1290,6 +1294,20 @@
 		$new_autosave['ID'] = $old_autosave->ID;
 		$new_autosave['post_author'] = $post_author;
 
+		// check to see if post content has changed before autosaving (filterable with wp_save_post_revision_check_for_changes)
+		if ( apply_filters( 'wp_save_post_revision_check_for_changes', true, $post, $new_data ) && is_array( $new_data ) ) {
+			$post_has_changed = false;
+			foreach ( array_keys( _wp_post_revision_fields() ) as $field ) {
+				if ( normalize_whitespace( $new_data[ $field ] ) != normalize_whitespace( $post[ $field ] ) ) {
+					$post_has_changed = true;
+					break;
+				}
+			}
+			// don't save revision if post unchanged
+			if ( ! $post_has_changed )
+				return;
+		}
+
 		// Auto-save revisioned meta fields.
 		foreach ( _wp_post_revision_meta_keys() as $meta_key ) {
 			if ( isset( $_POST[ $meta_key ] ) && get_post_meta( $new_autosave['ID'], $meta_key, true ) != $_POST[ $meta_key ] ) {
