Index: src/wp-includes/js/tinymce/plugins/wordpress/plugin.js
===================================================================
--- src/wp-includes/js/tinymce/plugins/wordpress/plugin.js	(revision 36371)
+++ src/wp-includes/js/tinymce/plugins/wordpress/plugin.js	(working copy)
@@ -850,13 +850,17 @@
 
 			currentSelection = args.selection || args.element;
 
-			if ( activeToolbar ) {
+			if ( activeToolbar && activeToolbar !== args.toolbar ) {
 				activeToolbar.hide();
 			}
 
 			if ( args.toolbar ) {
-				activeToolbar = args.toolbar;
-				activeToolbar.show();
+				if ( activeToolbar !== args.toolbar ) {
+					activeToolbar = args.toolbar;
+					activeToolbar.show();
+				} else {
+					activeToolbar.reposition();
+				}
 			} else {
 				activeToolbar = false;
 			}
Index: src/wp-includes/js/tinymce/plugins/wplink/plugin.js
===================================================================
--- src/wp-includes/js/tinymce/plugins/wplink/plugin.js	(revision 36371)
+++ src/wp-includes/js/tinymce/plugins/wplink/plugin.js	(working copy)
@@ -47,11 +47,47 @@
 		}
 	} );
 
+	tinymce.ui.WPLinkInput = tinymce.ui.Control.extend( {
+		url: '',
+		renderHtml: function() {
+			return (
+				'<div id="' + this._id + '" class="wp-link-preview">' +
+					'<input type="text" value="' + this.url + '" tabindex="-1" />' +
+				'</div>'
+			);
+		},
+		setURL: function( url ) {
+			this.getEl().firstChild.value = url;
+		}
+	} );
+
 	tinymce.PluginManager.add( 'wplink', function( editor ) {
-		var toolbar;
+		var toolbar, editToolbar;
+
+		editor.on( 'preinit', function() {
+			if ( editor.wp && editor.wp._createToolbar ) {
+				toolbar = editor.wp._createToolbar( [
+					'wp_link_preview',
+					'wp_link_edit',
+					'wp_link_remove'
+				], true );
+
+				editToolbar = editor.wp._createToolbar( [
+					'wp_link_input'
+				], true );
+			}
+		} );
 
 		editor.addCommand( 'WP_Link', function() {
-			window.wpLink && window.wpLink.open( editor.id );
+			var a = editor.dom.getParent( editor.selection.getNode(), 'a' );
+
+			if ( a ) {
+				editor.dom.setAttribs( a, { 'data-wp-edit': true } );
+			} else {
+				editor.execCommand( 'mceInsertLink', false, { href: '_wp_link_placeholder' } );
+			}
+
+			editor.nodeChanged();
 		});
 
 		// WP default shortcut
@@ -99,30 +135,77 @@
 			}
 		} );
 
+		var previewInstance, inputInstance;
+
 		editor.addButton( 'wp_link_preview', {
 			type: 'WPLinkPreview',
 			onPostRender: function() {
-				var self = this;
+				previewInstance = this;
+			}
+		} );
+
+		editor.addButton( 'wp_link_input', {
+			type: 'WPLinkInput',
+			onPostRender: function() {
+				inputInstance = this;
+
+				var input = this.getEl().firstChild;
 
-				editor.on( 'wptoolbar', function( event ) {
-					var anchor = editor.dom.getParent( event.element, 'a' ),
-						$anchor,
-						href;
-
-					if ( anchor ) {
-						$anchor = editor.$( anchor );
-						href = $anchor.attr( 'href' );
-
-						if ( href && ! $anchor.find( 'img' ).length ) {
-							self.setURL( href );
-							event.element = anchor;
-							event.toolbar = toolbar;
+				editor.on( 'init', function() {
+					var a;
+
+					tinymce.$( input ).on( 'keydown', function( event ) {
+						event.keyCode === 13 && editToolbar.hide();
+					} );
+
+					editToolbar.on( 'show', function() {
+						a = editor.dom.getParent( editor.selection.getNode(), 'a' );
+					} );
+
+					editToolbar.on( 'hide', function(event) {
+						if ( ! input.value ) {
+							editor.dom.remove( a, true );
+							return;
+						}
+
+						if ( a ) {
+							editor.dom.setAttribs( a, { href: input.value, 'data-wp-edit': null } );
 						}
-					}
+
+						a = false;
+
+						editor.nodeChanged();
+						editor.focus();
+					} );
 				} );
 			}
 		} );
 
+		editor.on( 'wptoolbar', function( event ) {
+			var anchor = editor.dom.getParent( event.element, 'a' ),
+				$anchor,
+				href, edit, node;
+
+			if ( anchor ) {
+				$anchor = editor.$( anchor );
+				href = $anchor.attr( 'href' );
+				edit = $anchor.attr( 'data-wp-edit' );
+
+				if ( href === '_wp_link_placeholder' || edit ) {
+					inputInstance.setURL( edit ? href : '' );
+					event.element = anchor;
+					event.toolbar = editToolbar;
+					// move
+					node = editToolbar.find( 'toolbar' )[0];
+					node && node.focus( true );
+				} else if ( href && ! $anchor.find( 'img' ).length ) {
+					previewInstance.setURL( href );
+					event.element = anchor;
+					event.toolbar = toolbar;
+				}
+			}
+		} );
+
 		editor.addButton( 'wp_link_edit', {
 			tooltip: 'Edit ', // trailing space is needed, used for context
 			icon: 'dashicon dashicons-edit',
@@ -134,15 +217,5 @@
 			icon: 'dashicon dashicons-no',
 			cmd: 'unlink'
 		} );
-
-		editor.on( 'preinit', function() {
-			if ( editor.wp && editor.wp._createToolbar ) {
-				toolbar = editor.wp._createToolbar( [
-					'wp_link_preview',
-					'wp_link_edit',
-					'wp_link_remove'
-				], true );
-			}
-		} );
 	} );
 } )( window.tinymce );
