diff --git src/wp-admin/includes/image-edit.php src/wp-admin/includes/image-edit.php
index f8a9d50..97c888d 100644
--- wp-admin/includes/image-edit.php
+++ wp-admin/includes/image-edit.php
@@ -131,17 +131,33 @@ function wp_image_editor($post_id, $msg = false) {
 	<p id="imgedit-save-target-<?php echo $post_id; ?>">
 		<strong><?php _e('Apply changes to:'); ?></strong><br />
 
-		<label class="imgedit-label">
-		<input type="radio" name="imgedit-target-<?php echo $post_id; ?>" value="all" checked="checked" />
-		<?php _e('All image sizes'); ?></label>
+		<?php
+		$image_sizes = get_intermediate_image_sizes();
+		$image_sizes[] = 'full';
+
+		/** This filter is documented in wp-admin/includes/media.php */
+		$image_size_names = apply_filters( 'image_size_names_choose', array(
+			'thumbnail'      => __( 'Thumbnail' ),
+			'medium'         => __( 'Medium' ),
+			'large'          => __( 'Large' ),
+			'post-thumbnail' => __( 'Featured Image' ),
+			'full'           => __( 'Full Size' ),
+		) );
+
+		foreach ( $image_sizes as $image_size ) {
+			if ( ! isset( $image_size_names[ $image_size ] ) ) {
+				continue;
+			}
+			?>
+
+			<label class="imgedit-label">
+			<input type="checkbox" name="imgedit-target-<?php echo $post_id; ?>" value="<?php echo esc_attr( $image_size ); ?>" checked="checked" />
+			<?php echo esc_html( $image_size_names[ $image_size ] ); ?></label>
 
-		<label class="imgedit-label">
-		<input type="radio" name="imgedit-target-<?php echo $post_id; ?>" value="thumbnail" />
-		<?php _e('Thumbnail'); ?></label>
+			<?php
+		}
+		?>
 
-		<label class="imgedit-label">
-		<input type="radio" name="imgedit-target-<?php echo $post_id; ?>" value="nothumb" />
-		<?php _e('All sizes except thumbnail'); ?></label>
 	</p>
 	</div>
 
@@ -655,7 +671,7 @@ function wp_save_image( $post_id ) {
 	global $_wp_additional_image_sizes;
 
 	$return = new stdClass;
-	$success = $delete = $scaled = $nocrop = false;
+	$success = $scaled = false;
 	$post = get_post( $post_id );
 
 	$img = wp_get_image_editor( _load_image_to_edit_path( $post_id, 'full' ) );
@@ -666,9 +682,18 @@ function wp_save_image( $post_id ) {
 
 	$fwidth = !empty($_REQUEST['fwidth']) ? intval($_REQUEST['fwidth']) : 0;
 	$fheight = !empty($_REQUEST['fheight']) ? intval($_REQUEST['fheight']) : 0;
-	$target = !empty($_REQUEST['target']) ? preg_replace('/[^a-z0-9_-]+/i', '', $_REQUEST['target']) : '';
+	$target = !empty($_REQUEST['target']) ? $_REQUEST['target'] : array();
 	$scale = !empty($_REQUEST['do']) && 'scale' == $_REQUEST['do'];
 
+	if ( ! is_array( $target ) ) {
+		$target = array( $target );
+	}
+
+	// Sanitize image sizes
+	foreach( $target as &$image_size ) {
+		$image_size = preg_replace( '/[^a-z0-9_-]+/i', '', $image_size );
+	}
+
 	if ( $scale && $fwidth > 0 && $fheight > 0 ) {
 		$size = $img->get_size();
 		$sX = $size['width'];
@@ -715,10 +740,7 @@ function wp_save_image( $post_id ) {
 	if ( defined('IMAGE_EDIT_OVERWRITE') && IMAGE_EDIT_OVERWRITE &&
 		isset($backup_sizes['full-orig']) && $backup_sizes['full-orig']['file'] != $path_parts['basename'] ) {
 
-		if ( 'thumbnail' == $target )
-			$new_path = "{$path_parts['dirname']}/{$filename}-temp.{$path_parts['extension']}";
-		else
-			$new_path = $path;
+		$new_path = $path;
 	} else {
 		while( true ) {
 			$filename = preg_replace( '/-e([0-9]+)$/', '', $filename );
@@ -738,7 +760,7 @@ function wp_save_image( $post_id ) {
 		return $return;
 	}
 
-	if ( 'nothumb' == $target || 'all' == $target || 'full' == $target || $scaled ) {
+	if ( in_array( 'full', $target ) || $scaled ) {
 		$tag = false;
 		if ( isset($backup_sizes['full-orig']) ) {
 			if ( ( !defined('IMAGE_EDIT_OVERWRITE') || !IMAGE_EDIT_OVERWRITE ) && $backup_sizes['full-orig']['file'] != $path_parts['basename'] )
@@ -758,20 +780,25 @@ function wp_save_image( $post_id ) {
 		$meta['width'] = $size['width'];
 		$meta['height'] = $size['height'];
 
-		if ( $success && ('nothumb' == $target || 'all' == $target) ) {
-			$sizes = get_intermediate_image_sizes();
-			if ( 'nothumb' == $target )
-				$sizes = array_diff( $sizes, array('thumbnail') );
-		}
-
 		$return->fw = $meta['width'];
 		$return->fh = $meta['height'];
-	} elseif ( 'thumbnail' == $target ) {
-		$sizes = array( 'thumbnail' );
-		$success = $delete = $nocrop = true;
 	}
+	else {
+		$success = true;
+	}
+
+	/**
+	 * Previously there were radio buttons under "Apply changes to:"
+	 * and when you selected "Thumbnail", it would turn off cropping.
+	 * We want to preserve this behaviour here for now.
+	 */
+	$nocrop = in_array( 'thumbnail', $target ) && 1 == count( $target );
+
+	if ( $success && ! $scaled ) {
+		$sizes = get_intermediate_image_sizes();
+		// Excludes 'full' and any incorrect image sizes
+		$sizes = array_intersect( $sizes, $target );
 
-	if ( isset( $sizes ) ) {
 		$_sizes = array();
 
 		foreach ( $sizes as $size ) {
@@ -810,7 +837,7 @@ function wp_save_image( $post_id ) {
 		wp_update_attachment_metadata( $post_id, $meta );
 		update_post_meta( $post_id, '_wp_attachment_backup_sizes', $backup_sizes);
 
-		if ( $target == 'thumbnail' || $target == 'all' || $target == 'full' ) {
+		if ( ! $scaled ) {
 			// Check if it's an image edit from attachment edit screen
 			if ( ! empty( $_REQUEST['context'] ) && 'edit-attachment' == $_REQUEST['context'] ) {
 				$thumb_url = wp_get_attachment_image_src( $post_id, array( 900, 600 ), true );
@@ -824,12 +851,9 @@ function wp_save_image( $post_id ) {
 				}
 			}
 		}
-	} else {
-		$delete = true;
 	}
 
-	if ( $delete ) {
-
+	if ( ! $success || ( ! $scaled && ! in_array( 'full', $target ) ) ) {
 		/** This filter is documented in wp-admin/custom-header.php */
 		$delpath = apply_filters( 'wp_delete_file', $new_path );
 		@unlink( $delpath );
diff --git src/wp-admin/js/image-edit.js src/wp-admin/js/image-edit.js
index 7bf2928..b8ae4a5 100644
--- wp-admin/js/image-edit.js
+++ wp-admin/js/image-edit.js
@@ -68,7 +68,11 @@ var imageEdit = window.imageEdit = {
 	},
 
 	getTarget : function(postid) {
-		return $('input[name="imgedit-target-' + postid + '"]:checked', '#imgedit-save-target-' + postid).val() || 'full';
+		var target = new Array();
+	 	$('input[name="imgedit-target-' + postid + '"]:checked', '#imgedit-save-target-' + postid).each(function() {
+		 	target.push(jQuery(this).val());
+	 	});
+	 	return target;
 	},
 
 	scaleChanged : function(postid, x) {
