diff --git src/wp-includes/css/media-views.css src/wp-includes/css/media-views.css
index c339723..787a74f 100644
--- src/wp-includes/css/media-views.css
+++ src/wp-includes/css/media-views.css
@@ -1807,7 +1807,7 @@
 	left: 440px;
 }
 
-.advanced,
+.advanced-section,
 .link-settings {
 	margin-top: 10px;
 }
diff --git src/wp-includes/js/media-models.js src/wp-includes/js/media-models.js
index 53eefdf..1dd7196 100644
--- src/wp-includes/js/media-models.js
+++ src/wp-includes/js/media-models.js
@@ -360,7 +360,12 @@ window.wp = window.wp || {};
 
 			if ( attributes.attachment_id ) {
 				this.attachment = Attachment.get( attributes.attachment_id );
-				this.dfd = this.attachment.fetch();
+				if ( this.attachment.get( 'url' ) ) {
+					this.dfd = $.Deferred();
+					this.dfd.resolve();
+				} else {
+					this.dfd = this.attachment.fetch();
+				}
 				this.bindAttachmentListeners();
 			}
 
diff --git src/wp-includes/js/media-views.js src/wp-includes/js/media-views.js
index 5713cf1..4465297 100644
--- src/wp-includes/js/media-views.js
+++ src/wp-includes/js/media-views.js
@@ -32,6 +32,13 @@
 	}());
 
 	/**
+	 * A shared event bus used to provide hooks into
+	 * the media workflows that 3rd-party devs can use to hook
+	 * in.
+	 */
+	media.hooks = _.extend( {}, Backbone.Events );
+
+	/**
 	 * Makes it easier to bind events using transitions.
 	 *
 	 * @param {string} selector
@@ -2753,7 +2760,7 @@
 		bindHandlers: function() {
 			media.view.MediaFrame.Select.prototype.bindHandlers.apply( this, arguments );
 			this.on( 'menu:create:image-details', this.createMenu, this );
-			this.on( 'content:render:image-details', this.renderImageDetailsContent, this );
+			this.on( 'content:create:image-details', this.imageDetailsContent, this );
 			this.on( 'content:render:edit-image', this.editImageContent, this );
 			this.on( 'menu:render:image-details', this.renderMenu, this );
 			this.on( 'toolbar:render:image-details', this.renderImageDetailsToolbar, this );
@@ -2786,15 +2793,12 @@
 			]);
 		},
 
-		renderImageDetailsContent: function() {
-			var view = new media.view.ImageDetails({
+		imageDetailsContent: function( options ) {
+			options.view = new media.view.ImageDetails({
 				controller: this,
 				model: this.state().image,
 				attachment: this.state().image.attachment
-			}).render();
-
-			this.content.set( view );
-
+			});
 		},
 
 		editImageContent: function() {
@@ -6256,23 +6260,26 @@
 			if ( this.model.attachment && 'pending' === this.model.dfd.state() ) {
 				this.model.dfd.done( function() {
 					media.view.Settings.AttachmentDisplay.prototype.render.apply( self, args );
-					self.resetFocus();
-					self.toggleLinkSettings();
+					self.postRender();
 				} ).fail( function() {
 					self.model.attachment = false;
 					media.view.Settings.AttachmentDisplay.prototype.render.apply( self, args );
-					self.resetFocus();
-					self.toggleLinkSettings();
+					self.postRender();
 				} );
 			} else {
 				media.view.Settings.AttachmentDisplay.prototype.render.apply( this, arguments );
-				setTimeout( function() { self.resetFocus(); }, 10 );
-				self.toggleLinkSettings();
+				this.postRender();
 			}
 
 			return this;
 		},
 
+		postRender: function() {
+			setTimeout( _.bind( this.resetFocus, this ), 10 );
+			this.toggleLinkSettings();
+			this.trigger( 'post-render' );
+		},
+
 		resetFocus: function() {
 			this.$( '.link-to-custom' ).blur();
 			this.$( '.embed-media-settings' ).scrollTop( 0 );
@@ -6323,14 +6330,14 @@
 		},
 
 		toggleAdvanced: function( event ) {
-			var $advanced = $( event.target ).closest( '.advanced' );
+			var $advanced = $( event.target ).closest( '.advanced-section' );
 			event.preventDefault();
 			if ( $advanced.hasClass('advanced-visible') ) {
 				$advanced.removeClass('advanced-visible');
-				$advanced.find('div').addClass('hidden');
+				$advanced.find('.advanced-settings').addClass('hidden');
 			} else {
 				$advanced.addClass('advanced-visible');
-				$advanced.find('div').removeClass('hidden');
+				$advanced.find('.advanced-settings').removeClass('hidden');
 			}
 		},
 
diff --git src/wp-includes/js/tinymce/plugins/wpeditimage/plugin.js src/wp-includes/js/tinymce/plugins/wpeditimage/plugin.js
index a6c3502..5991b54 100644
--- src/wp-includes/js/tinymce/plugins/wpeditimage/plugin.js
+++ src/wp-includes/js/tinymce/plugins/wpeditimage/plugin.js
@@ -201,6 +201,7 @@ tinymce.PluginManager.add( 'wpeditimage', function( editor ) {
 			metadata.linkClassName = link.className;
 		}
 
+
 		return metadata;
 	}
 
@@ -338,25 +339,44 @@ tinymce.PluginManager.add( 'wpeditimage', function( editor ) {
 			dom.remove( captionNode );
 		}
 
+		if ( wp.media.hooks ) {
+			wp.media.hooks.trigger( 'editor:image-update', {
+				editor: editor,
+				metadata: imageData,
+				image: imageNode
+			} );
+		}
+
 		editor.nodeChanged();
 		// Refresh the toolbar
 		addToolbar( imageNode );
 	}
 
 	function editImage( img ) {
-		var frame, callback;
+		var frame, callback, metadata;
 
 		if ( typeof wp === 'undefined' || ! wp.media ) {
 			editor.execCommand( 'mceImage' );
 			return;
 		}
 
+		metadata = extractImageData( img );
+
+		// Manipulate the metadata by reference that is fed into the PostImage model used in the media modal
+		wp.media.hooks.trigger( 'editor:image-edit', {
+			editor: editor,
+			metadata: metadata,
+			image: img
+		} );
+
 		frame = wp.media({
 			frame: 'image',
 			state: 'image-details',
-			metadata: extractImageData( img )
+			metadata: metadata
 		} );
 
+		wp.media.hooks.trigger( 'editor:frame-create', { frame: frame } );
+
 		callback = function( imageData ) {
 			editor.focus();
 			editor.undoManager.transact( function() {
@@ -373,6 +393,7 @@ tinymce.PluginManager.add( 'wpeditimage', function( editor ) {
 		});
 
 		frame.open();
+
 	}
 
 	function removeImage( node ) {
diff --git src/wp-includes/media-template.php src/wp-includes/media-template.php
index a284d8d..5a49ae3 100644
--- src/wp-includes/media-template.php
+++ src/wp-includes/media-template.php
@@ -755,28 +755,32 @@ function wp_print_media_templates() {
 						</select>
 						<input type="text" class="link-to-custom" data-setting="linkUrl" />
 					</div>
-					<div class="advanced">
+					<div class="advanced-section">
 						<h3><a class="advanced-toggle" href="#"><?php _e('Advanced Options'); ?></a></h3>
-						<div class="hidden">
-							<label class="setting title-text">
-								<span><?php _e('Image Title Attribute'); ?></span>
-								<input type="text" data-setting="title" value="{{ data.model.title }}" />
-							</label>
-							<label class="setting extra-classes">
-								<span><?php _e('Image CSS Class'); ?></span>
-								<input type="text" data-setting="extraClasses" value="{{ data.model.extraClasses }}" />
-							</label>
-							<div class="setting link-target">
-								<label><input type="checkbox" data-setting="linkTargetBlank" value="_blank" <# if ( data.model.linkTargetBlank ) { #>checked="checked"<# } #>><?php _e( 'Open link in a new window/tab' ); ?></label>
+						<div class="advanced-settings hidden">
+							<div class="advanced-image">
+								<label class="setting title-text">
+									<span><?php _e('Image Title Attribute'); ?></span>
+									<input type="text" data-setting="title" value="{{ data.model.title }}" />
+								</label>
+								<label class="setting extra-classes">
+									<span><?php _e('Image CSS Class'); ?></span>
+									<input type="text" data-setting="extraClasses" value="{{ data.model.extraClasses }}" />
+								</label>
+							</div>
+							<div class="advanced-link">
+								<div class="setting link-target">
+									<label><input type="checkbox" data-setting="linkTargetBlank" value="_blank" <# if ( data.model.linkTargetBlank ) { #>checked="checked"<# } #>><?php _e( 'Open link in a new window/tab' ); ?></label>
+								</div>
+								<label class="setting link-rel">
+									<span><?php _e('Link Rel'); ?></span>
+									<input type="text" data-setting="linkRel" value="{{ data.model.linkClassName }}" />
+								</label>
+								<label class="setting link-class-name">
+									<span><?php _e('Link CSS Class'); ?></span>
+									<input type="text" data-setting="linkClassName" value="{{ data.model.linkClassName }}" />
+								</label>
 							</div>
-							<label class="setting link-rel">
-								<span><?php _e('Link Rel'); ?></span>
-								<input type="text" data-setting="linkRel" value="{{ data.model.linkClassName }}" />
-							</label>
-							<label class="setting link-class-name">
-								<span><?php _e('Link CSS Class'); ?></span>
-								<input type="text" data-setting="linkClassName" value="{{ data.model.linkClassName }}" />
-							</label>
 						</div>
 					</div>
 				</div>
