Index: wp-includes/media.php
===================================================================
--- wp-includes/media.php	(revision 23052)
+++ wp-includes/media.php	(working copy)
@@ -1337,10 +1337,13 @@
 			'update' => false,
 			'delete' => false,
 		),
+		'editLink'   => false,
 	);
 
-	if ( current_user_can( 'edit_post', $attachment->ID ) )
+	if ( current_user_can( 'edit_post', $attachment->ID ) ) {
 		$response['nonces']['update'] = wp_create_nonce( 'update-post_' . $attachment->ID );
+		$response['editLink'] = get_edit_post_link( $attachment->ID, 'raw' );
+	}
 
 	if ( current_user_can( 'delete_post', $attachment->ID ) )
 		$response['nonces']['delete'] = wp_create_nonce( 'delete-post_' . $attachment->ID );
@@ -1696,10 +1699,18 @@
 				<# if ( 'image' === data.type && ! data.uploading && data.width && data.height ) { #>
 					<div class="dimensions">{{ data.width }} &times; {{ data.height }}</div>
 				<# } #>
-				<# if ( ! data.uploading && data.can.remove ) { #>
-					<div class="delete-attachment">
-						<a href="#"><?php _e( 'Delete Permanently' ); ?></a>
-					</div>
+				<# if ( ! data.uploading && ( data.can.save || data.can.remove ) ) { #>
+				<div class="modify-attachment">
+					<# if ( data.can.save ) { #>
+						<span class="edit-attachment">
+							<a href="{{ data.editLink }}&amp;image-editor" target="_blank"><?php _e( 'Edit Image' ); ?></a>
+						</span>
+					<# } #>
+					<# if ( data.can.remove ) { #>
+						<span class="delete-attachment">
+							<a href="#"><?php _e( 'Delete Permanently' ); ?></a>
+						</span>
+					<# } #>
 				<# } #>
 				<div class="compat-meta">
 					<# if ( data.compat && data.compat.meta ) { #>
Index: wp-includes/css/media-views-rtl.css
===================================================================
--- wp-includes/css/media-views-rtl.css	(revision 23052)
+++ wp-includes/css/media-views-rtl.css	(working copy)
@@ -259,6 +259,15 @@
 	float: right;
 }
 
+.attachment-info .modify-attachment span {
+	margin-right: 0;
+	margin-left: 10px;
+}
+
+.attachment-info .modify-attachment span:last-child {
+	margin-left: 0;
+}
+
 /**
  * Attachment Display Settings
  */
Index: wp-includes/css/media-views.css
===================================================================
--- wp-includes/css/media-views.css	(revision 23052)
+++ wp-includes/css/media-views.css	(working copy)
@@ -1326,19 +1326,28 @@
 	float: left;
 	font-size: 12px;
 	max-width: 100%;
+	margin-bottom: 13px;
 }
 
-.attachment-info .delete-attachment a {
-	color: red;
-	padding: 2px 4px;
-	margin: -2px -4px;
+.attachment-info .modify-attachment span {
+	display: block;
+}
+
+.attachment-info .modify-attachment span:last-child {
+	margin-right: 0;
+}
+
+.attachment-info .modify-attachment span a {
 	text-decoration: none;
 	white-space: nowrap;
 }
 
+.attachment-info .delete-attachment a {
+	color: #bc0b0b;
+}
+
 .attachment-info .delete-attachment a:hover {
-	color: #fff;
-	background: red;
+	color: red;
 }
 
 /**
Index: wp-admin/includes/ajax-actions.php
===================================================================
--- wp-admin/includes/ajax-actions.php	(revision 23052)
+++ wp-admin/includes/ajax-actions.php	(working copy)
@@ -1837,9 +1837,10 @@
 		wp_send_json_error();
 
 	$query = isset( $_REQUEST['query'] ) ? (array) $_REQUEST['query'] : array();
+
 	$query = array_intersect_key( $query, array_flip( array(
 		's', 'order', 'orderby', 'posts_per_page', 'paged', 'post_mime_type',
-		'post_parent', 'post__in', 'post__not_in',
+		'post_parent', 'post__in', 'post__not_in', '_query_attachments_post_modified_gmt_since'
 	) ) );
 
 	$query['post_type'] = 'attachment';
@@ -1847,7 +1848,9 @@
 	if ( current_user_can( get_post_type_object( 'attachment' )->cap->read_private_posts ) )
 		$query['post_status'] .= ',private';
 
+	add_filter( 'posts_where', '_query_attachments_post_modified_gmt_since', 10, 2 );
 	$query = new WP_Query( $query );
+	remove_filter( 'posts_where', '_query_attachments_post_modified_gmt_since', 10 );
 
 	$posts = array_map( 'wp_prepare_attachment_for_js', $query->posts );
 	$posts = array_filter( $posts );
@@ -1855,6 +1858,17 @@
 	wp_send_json_success( $posts );
 }
 
+function _query_attachments_post_modified_gmt_since( $where, $query ) {
+	global $wpdb;
+
+	if ( $modified_since = absint( $query->get('_query_attachments_post_modified_gmt_since') ) ) {
+		$modified_since = gmdate( 'Y-m-d H:i:s', $modified_since );
+		$where .= $wpdb->prepare( " AND $wpdb->posts.post_modified_gmt > %s", $modified_since );
+	}
+
+	return $where;
+}
+
 /**
  * Save attachment attributes.
  *
Index: wp-admin/includes/image-edit.php
===================================================================
--- wp-admin/includes/image-edit.php	(revision 23052)
+++ wp-admin/includes/image-edit.php	(working copy)
@@ -191,7 +191,7 @@
 	</td></tr>
 	</tbody></table>
 	<div class="imgedit-wait" id="imgedit-wait-<?php echo $post_id; ?>"></div>
-	<script type="text/javascript">imageEdit.init(<?php echo $post_id; ?>);</script>
+	<script type="text/javascript">jQuery( function() { imageEdit.init(<?php echo $post_id; ?>); });</script>
 	<div class="hidden" id="imgedit-leaving-<?php echo $post_id; ?>"><?php _e("There are unsaved changes that will be lost. 'OK' to continue, 'Cancel' to return to the Image Editor."); ?></div>
 	</div>
 <?php
Index: wp-admin/includes/media.php
===================================================================
--- wp-admin/includes/media.php	(revision 23052)
+++ wp-admin/includes/media.php	(working copy)
@@ -2262,20 +2262,18 @@
 function edit_form_image_editor() {
 	$post = get_post();
 
+	$open = isset( $_GET['image-editor'] );
+	if ( $open )
+		require_once ABSPATH . 'wp-admin/includes/image-edit.php';
+
 	$thumb_url = false;
 	if ( $attachment_id = intval( $post->ID ) )
-		$thumb_url = wp_get_attachment_image_src( $attachment_id, array( 900, 600 ), true );
+		$thumb_url = wp_get_attachment_image_src( $attachment_id, array( 900, 450 ), true );
 
 	$filename = esc_html( basename( $post->guid ) );
 	$title = esc_attr( $post->post_title );
 	$alt_text = get_post_meta( $post->ID, '_wp_attachment_image_alt', true );
 
-	$media_dims = '';
-	$meta = wp_get_attachment_metadata( $post->ID );
-	if ( is_array( $meta ) && array_key_exists( 'width', $meta ) && array_key_exists( 'height', $meta ) )
-		$media_dims .= "<span id='media-dims-$post->ID'>{$meta['width']}&nbsp;&times;&nbsp;{$meta['height']}</span> ";
-	$media_dims = apply_filters( 'media_meta', $media_dims, $post );
-
 	$att_url = wp_get_attachment_url( $post->ID );
 
 	$image_edit_button = '';
@@ -2288,11 +2286,13 @@
 	<div class="wp_attachment_holder">
 		<div class="imgedit-response" id="imgedit-response-<?php echo $attachment_id; ?>"></div>
 
-		<div class="wp_attachment_image" id="media-head-<?php echo $attachment_id; ?>">
+		<div<?php if ( $open ) echo ' style="display:none"'; ?> class="wp_attachment_image" id="media-head-<?php echo $attachment_id; ?>">
 			<p id="thumbnail-head-<?php echo $attachment_id; ?>"><img class="thumbnail" src="<?php echo set_url_scheme( $thumb_url[0] ); ?>" style="max-width:100%" alt="" /></p>
 			<p><?php echo $image_edit_button; ?></p>
 		</div>
-		<div style="display:none" class="image-editor" id="image-editor-<?php echo $attachment_id; ?>"></div>
+		<div<?php if ( ! $open ) echo ' style="display:none"'; ?> class="image-editor" id="image-editor-<?php echo $attachment_id; ?>">
+			<?php if ( $open ) wp_image_editor( $attachment_id ); ?>
+		</div>
 	</div>
 
 	<div class="wp_attachment_details">
