diff --git a/core/includes/form.inc b/core/includes/form.inc
index 513615c..449e77c 100644
--- a/core/includes/form.inc
+++ b/core/includes/form.inc
@@ -2628,6 +2628,23 @@ function _form_options_flatten($array) {
 }
 
 /**
+ * Process simplified form wrappers for overlay.
+ */
+function form_process_simplified_form($element) {
+  if (!empty($element['#simplified']) && module_invoke('overlay', 'get_mode') == 'child') {
+    $element['advanced_fields_start'] = array(
+      '#markup' => '<details class="form-wrapper simplified-form"><summary role="button">' . t('Advanced settings') . '</summary><div class="details-wrapper">',
+        '#weight' => 1,
+    );
+    $element['advanced_fields_end'] = array(
+      '#markup' => '</div></details>',
+      '#weight' => 100,
+    );
+  }
+  return $element;
+}
+
+/**
  * Processes a select list form element.
  *
  * This process callback is mandatory for select fields, since all user agents
diff --git a/core/misc/edit.png b/core/misc/edit.png
new file mode 100644
index 0000000..d176245
--- /dev/null
+++ b/core/misc/edit.png
@@ -0,0 +1,3 @@
+PNG
+
+   IHDR         !-  #IDATxڵ́@EєKH)%XHDDĀ(Fl,ᗐۻ0BI>80LҿfPԠȾjpŰG.E4־kdpa:Ǐǣ79Bp08OTYv;C	n8!C	fcp(#=^Uu%_V9T{l\Vy/X,E{n>Zwf5x@EQ t:C[L&9jȳ/$UW5    IENDB`
\ No newline at end of file
diff --git a/core/modules/block/block.admin.inc b/core/modules/block/block.admin.inc
index e5e8d76..de0b656 100644
--- a/core/modules/block/block.admin.inc
+++ b/core/modules/block/block.admin.inc
@@ -78,7 +78,7 @@ function block_admin_edit(Block $entity) {
   }
 
   // Get the block subject for the page title.
-  drupal_set_title(t("Configure %label block in %theme", array('%label' => $entity->label(), '%theme' => $theme_title)), PASS_THROUGH);
+  drupal_set_title(t("Edit %label block in %theme", array('%label' => $entity->label(), '%theme' => $theme_title)), PASS_THROUGH);
 
   return entity_get_form($entity);
 }
diff --git a/core/modules/block/block.module b/core/modules/block/block.module
index 6bc94f2..8d8ff75 100644
--- a/core/modules/block/block.module
+++ b/core/modules/block/block.module
@@ -129,14 +129,14 @@ function block_menu() {
     'file' => 'block.admin.inc',
   );
   $items['admin/structure/block/manage/%block'] = array(
-    'title' => 'Configure block',
+    'title' => 'Edit block',
     'page callback' => 'block_admin_edit',
     'page arguments' => array(4),
     'access arguments' => array('administer blocks'),
     'file' => 'block.admin.inc',
   );
   $items['admin/structure/block/manage/%block/configure'] = array(
-    'title' => 'Configure block',
+    'title' => 'Edit block',
     'type' => MENU_DEFAULT_LOCAL_TASK,
     'context' => MENU_CONTEXT_INLINE,
   );
diff --git a/core/modules/block/lib/Drupal/block/BlockBase.php b/core/modules/block/lib/Drupal/block/BlockBase.php
index 9e5bf6c..36a3f43 100644
--- a/core/modules/block/lib/Drupal/block/BlockBase.php
+++ b/core/modules/block/lib/Drupal/block/BlockBase.php
@@ -233,6 +233,8 @@ public function form($form, &$form_state) {
       '#type' => 'value',
       '#value' => $definition['module'],
     );
+    // Make form simplified if in contextual administration.
+    $form['#simplified'] = TRUE;
 
     $form['label'] = array(
       '#type' => 'textfield',
@@ -262,6 +264,7 @@ public function form($form, &$form_state) {
       '#default_value' => $entity->get('region'),
       '#empty_value' => BLOCK_REGION_NONE,
       '#options' => system_region_list($entity->get('theme'), REGIONS_VISIBLE),
+      '#weight' => 5,
     );
 
     // Visibility settings.
diff --git a/core/modules/contextual/contextual.base-rtl.css b/core/modules/contextual/contextual.base-rtl.css
deleted file mode 100644
index 147a567..0000000
--- a/core/modules/contextual/contextual.base-rtl.css
+++ /dev/null
@@ -1,9 +0,0 @@
-
-/**
- * @file
- * RTL base styles for the Contextual module.
- */
-
-.contextual .trigger {
-  text-align: left;
-}
diff --git a/core/modules/contextual/contextual.base.css b/core/modules/contextual/contextual.base.css
index cbec804..8452f52 100644
--- a/core/modules/contextual/contextual.base.css
+++ b/core/modules/contextual/contextual.base.css
@@ -4,35 +4,36 @@
  * Generic base styles for contextual module.
  */
 
-/**
- * Contextual links behavior.
- */
-.contextual,
-.contextual .contextual-links,
-.contextual .trigger {
+.contextual-region {
+  position: relative;
+}
+.touch .contextual .trigger {
+  display: block;
+}
+.contextual .contextual-links {
   display: none;
 }
-.touch .contextual,
-.touch .contextual .trigger,
-.no-touch .contextual-region:hover .contextual,
-.no-touch .contextual-region:hover .contextual-links-trigger-active,
-.contextual-active .contextual-links {
+.contextual-links-active .contextual-links {
   display: block;
 }
 
 /**
- * Contextual links structure.
+ * The .element-focusable class extends the .element-invisible class to allow
+ * the element to be focusable when navigated to via the keyboard.
+ *
+ * Add support for hover.
  */
-.contextual-region {
-  position: relative;
+.touch .contextual-region .element-invisible.element-focusable,
+.contextual-region:hover .element-invisible.element-focusable  {
+  clip: auto;
+  overflow: visible;
+  height: auto;
 }
-.contextual {
-  position: absolute;
-  z-index: 999;
-}
-.contextual .trigger {
-  overflow: hidden;
-  position: relative;
-  text-align: right; /* LTR */
-  z-index: 1;
+/* Override the position for contextual links. */
+.contextual-region .element-invisible.element-focusable:active,
+.contextual-region .element-invisible.element-focusable:focus,
+.contextual-region:hover .element-invisible.element-focusable,
+.contextual-region-active .element-invisible.element-focusable,
+.touch .contextual-region .element-invisible.element-focusable  {
+  position: relative !important;
 }
diff --git a/core/modules/contextual/contextual.js b/core/modules/contextual/contextual.js
index d8a4742..0759515 100644
--- a/core/modules/contextual/contextual.js
+++ b/core/modules/contextual/contextual.js
@@ -3,55 +3,177 @@
  * Attaches behaviors for the Contextual module.
  */
 
-(function ($) {
+(function ($, Drupal) {
 
 "use strict";
 
-Drupal.contextualLinks = Drupal.contextualLinks || {};
+var contextuals = [];
 
 /**
  * Attaches outline behavior for regions associated with contextual links.
  */
-Drupal.behaviors.contextualLinks = {
+Drupal.behaviors.contextual = {
   attach: function (context) {
-    $(context).find('div.contextual').once('contextual-links', function () {
-      var $wrapper = $(this);
-      var $region = $wrapper.closest('.contextual-region');
-      var $links = $wrapper.find('ul');
-      var $trigger = $('<a class="trigger" href="#" />').text(Drupal.t('Configure')).click(
-        function (e) {
-          e.preventDefault();
-          e.stopPropagation();
-          $links.stop(true, true).slideToggle(100);
-          $wrapper.toggleClass('contextual-active');
-        }
-      );
-      // Attach hover behavior to trigger and ul.contextual-links, for non touch devices only.
-      if(!Modernizr.touch) {
-        $trigger.add($links).hover(
-          function () { $region.addClass('contextual-region-active'); },
-          function () { $region.removeClass('contextual-region-active'); }
-        );
-      }
-      // Hide the contextual links when user clicks a link or rolls out of the .contextual-region.
-      $region.bind('mouseleave click', Drupal.contextualLinks.mouseleave);
-      $region.hover(
-        function() { $trigger.addClass('contextual-links-trigger-active'); },
-        function() { $trigger.removeClass('contextual-links-trigger-active'); }
-      );
-      // Prepend the trigger.
-      $wrapper.prepend($trigger);
+    $('ul.contextual-links', context).once('contextual', function () {
+      var $this = $(this);
+      var contextual = new Drupal.contextual(this, $this.closest('.contextual-region'));
+      contextuals.push(contextual);
+      $this.data('drupal-contextual', contextual);
     });
+    // Bind to global edit mode changes
+    $('body').once('contextual', function (index, element) {
+      $(document)
+        .on('drupalEditMode.contextual', toggleEditMode);
+    });
+  }
+};
+
+/**
+ * Contextual links object.
+ */
+Drupal.contextual = function($links, $region) {
+  this.$links = $links;
+  this.$region = $region;
+  this.timer = null;
+
+  this.init();
+};
+
+/**
+ * Initiates a contextual links object.
+ */
+Drupal.contextual.prototype.init = function() {
+  // Wrap the links to provide positioning and behavior attachment context.
+  this.$wrapper = $(Drupal.theme.contextualWrapper())
+    .insertBefore(this.$links)
+    .append(this.$links);
+
+  // Create and append the contextual links trigger.
+  var action = Drupal.t('Open');
+  this.$trigger = $(Drupal.theme.contextualTrigger())
+    .text(Drupal.t('@action configuration options', {'@action': action}))
+    .prependTo(this.$wrapper);
+
+  // The trigger behaviors are never detached or mutated.
+  this.$region
+    .on('click.contextual', '.contextual .trigger', $.proxy(this.triggerClickHandler, this))
+    .on('mouseleave.contextual', '.contextual', {show: false}, $.proxy(this.triggerLeaveHandler, this))
+  // Attach highlight behaviors.
+  this.attachHighlightBehaviors();
+};
+
+/**
+ *
+ */
+Drupal.contextual.prototype.attachHighlightBehaviors = function () {
+  // Bind behaviors through delegation.
+  var highlightRegion = $.proxy(this.highlightRegion, this);
+  this.$region
+    .on('mouseenter.contextual.highlight', {highlight: true}, highlightRegion)
+    .on('mouseleave.contextual.highlight', {highlight: false}, highlightRegion)
+    .on('focus.contextual.highlight', '.contextual-links a, .contextual .trigger', {highlight: true}, highlightRegion)
+    .on('blur.contextual.highlight', '.contextual-links a, .contextual .trigger', {highlight: false}, highlightRegion);
+};
+
+/**
+ *
+ */
+Drupal.contextual.prototype.detachHighlightBehaviors = function () {
+  this.$region.off('.contextual.highlight');
+};
+
+/**
+ * Toggles the highlighting of a contextual region.
+ *
+ * If the state of a contextual region is toggled to inactive, the links
+ *
+ * @param Object event
+ *   jQuery Event object.
+ */
+Drupal.contextual.prototype.highlightRegion = function(event) {
+  // Set up a timeout to delay the dismissal of the region highlight state.
+  if (!event.data.highlight && !this.timer) {
+    return this.timer = window.setTimeout($.proxy($.fn.trigger, $(event.target), 'mouseleave.contextual'), 100);
+  }
+  // Clear the timeout if the region should be highlighted and a timer exists.
+  if (event.data.highlight && this.timer) {
+    window.clearTimeout(this.timer);
   }
+  this.$region.toggleClass('contextual-region-active', event.data.highlight);
+  // Hide the links if the contextual region is inactive.
+  var state = this.$region.hasClass('contextual-region-active');
+  if (!state) {
+    this.showLinks(state);
+  }
+  // Clear the timeout.
+  this.timer = null;
+};
+
+/**
+ * Handles click on the contextual links trigger.
+ *
+ * @param Object event
+ *   jQuery Event object.
+ */
+Drupal.contextual.prototype.triggerClickHandler = function (event) {
+  event.preventDefault();
+  this.showLinks();
+};
+
+/**
+ * Handles mouseleave on the contextual links trigger.
+ *
+ * @param Object event
+ *   jQuery Event object.
+ */
+Drupal.contextual.prototype.triggerLeaveHandler = function (event) {
+  var show = event && event.data && event.data.show;
+  this.showLinks(show);
+};
+
+/**
+ * Toggles the active state of the contextual links.
+ *
+ * @param Boolean show
+ *   (optional) True if the links should be shown. False is the links should be
+ *   hidden.
+ */
+Drupal.contextual.prototype.showLinks = function(show) {
+  this.$wrapper.toggleClass('contextual-links-active', show);
+  var isOpen = this.$wrapper.hasClass('contextual-links-active');
+  var action = (isOpen) ? Drupal.t('Close') : Drupal.t('Open');
+  this.$trigger
+    .text(Drupal.t('@action configuration options', {'@action': action}));
+};
+
+/**
+ *
+ */
+function toggleEditMode (event, data) {
+  for (var i = contextuals.length - 1; i >= 0; i--) {
+    contextuals[i][(data.editable) ? 'detachHighlightBehaviors' : 'attachHighlightBehaviors']();
+    contextuals[i].$region.toggleClass('contextual-region-active', data.editable);
+  };
+}
+
+/**
+ * Wraps contextual links.
+ *
+ * @return {String}
+ *   A string representing a DOM fragment.
+ */
+Drupal.theme.contextualWrapper = function () {
+  return '<div class="contextual" aria-live="polite" aria-relevant="all" aria-atomic="false" />';
 };
 
 /**
- * Disables outline for the region contextual links are associated with.
+ * A trigger is an interactive element often bound to a click handler.
+ *
+ * @return {String}
+ *   A string representing a DOM fragment.
  */
-Drupal.contextualLinks.mouseleave = function () {
-  $(this)
-    .find('.contextual-active').removeClass('contextual-active')
-    .find('.contextual-links').hide();
+Drupal.theme.contextualTrigger = function () {
+  return '<button class="trigger element-invisible element-focusable" type="button"></button>';
 };
 
-})(jQuery);
+})(jQuery, Drupal);
diff --git a/core/modules/contextual/contextual.module b/core/modules/contextual/contextual.module
index bbb00e8..30dcacb 100644
--- a/core/modules/contextual/contextual.module
+++ b/core/modules/contextual/contextual.module
@@ -69,8 +69,6 @@ function contextual_element_info() {
     '#pre_render' => array('contextual_pre_render_links'),
     '#theme' => 'links__contextual',
     '#links' => array(),
-    '#prefix' => '<div class="contextual">',
-    '#suffix' => '</div>',
     '#attributes' => array('class' => array('contextual-links')),
     '#attached' => array(
       'library' => array(
diff --git a/core/modules/contextual/contextual.theme-rtl.css b/core/modules/contextual/contextual.theme-rtl.css
index f558ffa..ed48367 100644
--- a/core/modules/contextual/contextual.theme-rtl.css
+++ b/core/modules/contextual/contextual.theme-rtl.css
@@ -3,17 +3,26 @@
  * RTL styling for contextual module.
  */
 
+/**
+ * Contextual links wrappers.
+ */
 .contextual {
-  left: 5px;
-  right: auto;
-}
-.contextual .contextual-links {
-  border-radius: 0 4px 4px 4px;
   left: 0;
   right: auto;
 }
 
-.contextual-region .contextual .contextual-links a {
- text-align: right;
- padding: 0.4em 0.6em 0.4em 0.8em;
+/**
+ * Contextual trigger.
+ */
+.contextual .trigger {
+  float: left;
+}
+
+/**
+ * Contextual links.
+ */
+.contextual .contextual-links {
+  border-radius: 0 4px 4px 4px;
+  float: left;
+  text-align: right;
 }
diff --git a/core/modules/contextual/contextual.theme.css b/core/modules/contextual/contextual.theme.css
index 8b5956a..122234c 100644
--- a/core/modules/contextual/contextual.theme.css
+++ b/core/modules/contextual/contextual.theme.css
@@ -6,40 +6,42 @@
 /**
  * Contextual links wrappers.
  */
-.contextual-region-active {
-  outline: 1px dashed #d6d6d6;
-  outline-offset: 1px;
-}
 .contextual {
-  right: 2px; /* LTR */
+  position: absolute;
+  right: 0; /* LTR */
   top: 2px;
+  z-index: 999;
+}
+.contextual-region-active {
+  outline: 1px solid #007fff;
+  outline-offset: 1px;
 }
 
 /**
  * Contextual trigger.
  */
 .contextual .trigger {
-  background: transparent url(images/gear-select.png) no-repeat 2px 0;
-  border: 1px solid transparent;
-  height: 18px;
+  background: #ffffff url("../../misc/edit.png") no-repeat center center;
+  background-size: 16px 16px;
+  border: 1px solid #ddd;
+  border-radius: 13px;
+  box-shadow:1px 1px 2px rgba(0,0,0,0.3);
+  /* Override the .element-focusable height: auto */
+  height: 28px !important;
+  float: right; /* LTR */
   margin: 0;
-  outline: none;
   overflow: hidden;
   padding: 0 2px;
-  text-indent: 34px;
+  position: relative;
+  right: 2px;
   width: 28px;
+  text-indent: -9999px;
+  z-index: 2;
 }
-.no-touch .contextual .trigger:hover,
-.contextual-active .trigger {
-  background-position: 2px -18px;
-}
-.contextual-active .trigger {
-  background-color: #ffffff;
-  border-bottom: none;
-  border-color: #d6d6d6;
-  border-radius: 4px 4px 0 0;
-  position: relative;
-  z-index: 1;
+.contextual-links-active .trigger {
+  border-radius: 14px 14px 0 0;
+  border-bottom: 1px solid transparent;
+  box-shadow: 2px 0 0 rgba(0,0,0,0.15);
 }
 
 /**
@@ -47,17 +49,21 @@
  */
 .contextual .contextual-links {
   background-color: #fff;
-  border: 1px solid #d6d6d6;
-  border-radius: 4px 0 4px 4px; /* LTR */
+  border: 1px solid #ddd;
+  border-radius: 10px 0 10px 10px; /* LTR */
+  box-shadow: 1px 1px 2px rgba(0,0,0,0.3);
+  clear: both;
+  float: right; /* LTR */
   margin: 0;
   padding: 0.25em 0;
-  position: absolute;
-  right: 0; /* LTR */
-  text-align: left;
-  top: 18px;
+  position: relative;
+  right: 2px;
+  text-align: left; /* LTR */
+  top: -1px;
   white-space: nowrap;
+  z-index: 1;
 }
-/* Reset the li to prevent accidential overrides by a theme. */
+/* Reset the li to prevent accidental overrides by a theme. */
 .contextual-region .contextual .contextual-links li {
   background-color: #fff;
   border: none;
@@ -65,14 +71,16 @@
   list-style-image: none;
   margin: 0;
   padding: 0;
+  line-height: 100%;
 }
 .contextual-region .contextual .contextual-links a {
+  color: black !important;
   display: block;
   font-family: sans-serif;
   font-size: small;
-  line-height: 0.8em;
+  line-height: 1.8em;
   margin: 0.25em 0;
-  padding: 0.4em 0.8em 0.4em 0.6em; /* LTR */
+  padding: 0.4em 0.6em;
 }
 .contextual-region .contextual .contextual-links a,
 .no-touch .contextual-region .contextual .contextual-links a:hover,
@@ -83,5 +91,7 @@
   text-decoration: none;
 }
 .no-touch .contextual-region .contextual .contextual-links li a:hover {
-  background-color: #bfdcee;
+  color: white;
+  background-image: -webkit-linear-gradient(rgb(78,159,234) 0%,rgb(65,126,210) 100%);
+  background-image: linear-gradient(rgb(78,159,234) 0%,rgb(65,126,210) 100%);
 }
diff --git a/core/modules/edit/css/edit.css b/core/modules/edit/css/edit.css
index 37e10eb..ce3d19e 100644
--- a/core/modules/edit/css/edit.css
+++ b/core/modules/edit/css/edit.css
@@ -1,4 +1,32 @@
 /**
+ * Pencil icon.
+ */
+.edit-toolbar-container .pencil {
+  background: #fff url(../../../misc/edit.png) no-repeat center center;
+  background-size: 16px 16px;
+  border: 1px solid #ddd;
+  border-radius: 13px;
+  -moz-box-shadow: 1px 1px 2px rgba(0,0,0,0.3);
+  -webkit-box-shadow: 1px 1px 2px rgba(0,0,0,0.3);
+  box-shadow: 1px 1px 2px rgba(0,0,0,0.3);
+  height: 26px;
+  width: 26px;
+  margin: 0;
+  outline: none;
+  overflow: hidden;
+  padding:0;
+  text-indent: 34px;
+  position: absolute;
+  right: 2px; /* LTR */
+  top: 2px;
+}
+
+.edit-toolbar-container.edit-editing .pencil {
+  display: none;
+}
+
+
+/**
  * Animations.
  */
 .edit-animate-invisible {
@@ -75,10 +103,10 @@
  * Toolbar.
  */
 .icon-edit:before {
-  background-image: url("../images/icon-edit.png");
+  background-image: url("../../../misc/edit.png");
 }
 .icon-edit:active:before,
-.active .icon-edit:before {
+.active.icon-edit:before {
   background-image: url("../images/icon-edit-active.png");
 }
 .toolbar .tray.edit.active {
@@ -106,8 +134,6 @@
   z-index: 250;
   width: 100%;
   height: 100%;
-  background-color: #fff;
-  background-color: rgba(255,255,255,.5);
   top: 0;
   left: 0;
 }
@@ -122,11 +148,18 @@
 }
 .edit-field.edit-editable,
 .edit-field .edit-editable {
-  box-shadow: 0 0 1px 1px #4d9de9;
+  /**
+   * In the latest design, there's no need to indicate candidates, since they
+   * now use pencil icons.
+   * This will probably be necessary again before release.
+   */
 }
 
 /* Highlighted (hovered) editable. */
 .edit-editable.edit-highlighted {
+  z-index: 305;
+}
+.edit-editable.edit-highlighted {
   min-width: 200px;
 }
 .edit-field.edit-editable.edit-highlighted,
@@ -279,6 +312,10 @@
   bottom: 1px;
   box-shadow: 0 0 1px 1px #0199ff, 0 0 3px 3px rgba(153, 153, 153, .5);
   background: #fff;
+  display: none;
+}
+.edit-highlighted .edit-toolbar-heightfaker {
+  display: block;
 }
 
 /* The toolbar; these are not necessarily visible. */
diff --git a/core/modules/edit/js/createjs/editingWidgets/drupalcontenteditablewidget.js b/core/modules/edit/js/createjs/editingWidgets/drupalcontenteditablewidget.js
index 5671f39..caac604 100644
--- a/core/modules/edit/js/createjs/editingWidgets/drupalcontenteditablewidget.js
+++ b/core/modules/edit/js/createjs/editingWidgets/drupalcontenteditablewidget.js
@@ -29,13 +29,6 @@
     _initialize: function() {
       var that = this;
 
-      // Sets the state to 'activated' upon clicking the element.
-      this.element.on("click.edit", function(event) {
-        event.stopPropagation();
-        event.preventDefault();
-        that.options.activated();
-      });
-
       // Sets the state to 'changed' whenever the content has changed.
       var before = jQuery.trim(this.element.text());
       this.element.on('keyup paste', function (event) {
@@ -68,6 +61,7 @@
         case 'highlighted':
           break;
         case 'activating':
+          this.options.activated();
           break;
         case 'active':
           // Sets the "contenteditable" attribute to "true".
diff --git a/core/modules/edit/js/createjs/editingWidgets/formwidget.js b/core/modules/edit/js/createjs/editingWidgets/formwidget.js
index 3238566..ac89857 100644
--- a/core/modules/edit/js/createjs/editingWidgets/formwidget.js
+++ b/core/modules/edit/js/createjs/editingWidgets/formwidget.js
@@ -29,15 +29,7 @@
     /**
      * Implements Create's _initialize() method.
      */
-    _initialize: function() {
-      // Sets the state to 'activating' upon clicking the element.
-      var that = this;
-      this.element.on("click.edit", function(event) {
-        event.stopPropagation();
-        event.preventDefault();
-        that.options.activating();
-      });
-    },
+    _initialize: function() {},
 
     /**
      * Makes this PropertyEditor widget react to state changes.
diff --git a/core/modules/edit/js/views/menu-view.js b/core/modules/edit/js/views/menu-view.js
index ac7c4e4..0f9ecc8 100644
--- a/core/modules/edit/js/views/menu-view.js
+++ b/core/modules/edit/js/views/menu-view.js
@@ -64,6 +64,8 @@ Drupal.edit.views.MenuView = Backbone.View.extend({
         Drupal.toolbar.setHeight();
       }
     }
+    // Let other modules respond to the edit mode change.
+    $(document).trigger('drupalEditMode', {'editable': !isViewing});
   },
   /**
    * Handles clicks on the edit tab of the toolbar.
diff --git a/core/modules/edit/js/views/propertyeditordecoration-view.js b/core/modules/edit/js/views/propertyeditordecoration-view.js
index 0eb4e45..aabd72c 100644
--- a/core/modules/edit/js/views/propertyeditordecoration-view.js
+++ b/core/modules/edit/js/views/propertyeditordecoration-view.js
@@ -17,8 +17,6 @@ Drupal.edit.views.PropertyEditorDecorationView = Backbone.View.extend({
   _widthAttributeIsEmpty: null,
 
   events: {
-    'mouseenter.edit' : 'onMouseEnter',
-    'mouseleave.edit' : 'onMouseLeave',
     'tabIn.edit': 'onMouseEnter',
     'tabOut.edit': 'onMouseLeave'
   },
diff --git a/core/modules/edit/js/views/toolbar-view.js b/core/modules/edit/js/views/toolbar-view.js
index 90f5db7..41e15ad 100644
--- a/core/modules/edit/js/views/toolbar-view.js
+++ b/core/modules/edit/js/views/toolbar-view.js
@@ -29,7 +29,10 @@ Drupal.edit.views.ToolbarView = Backbone.View.extend({
     'click.edit button.label': 'onClickInfoLabel',
     'mouseleave.edit': 'onMouseLeave',
     'click.edit button.field-save': 'onClickSave',
-    'click.edit button.field-close': 'onClickClose'
+    'click.edit button.field-close': 'onClickClose',
+    'mouseenter .pencil': 'onPencilMouseEnter',
+    'mouseleave .pencil': 'onPencilMouseLeave',
+    'click .pencil': 'onPencilClick'
   },
 
   /**
@@ -66,19 +69,26 @@ Drupal.edit.views.ToolbarView = Backbone.View.extend({
   stateChange: function(from, to) {
     switch (to) {
       case 'inactive':
-        // Nothing happens in this stage.
+        if (from) {
+          this.remove();
+        }
         break;
       case 'candidate':
-        if (from !== 'inactive') {
+        if (from === 'inactive') {
+          this.render();
+        }
+        else {
+          // Remove all toolgroups; they're no longer necessary.
+          this.$el
+            .removeClass('edit-highlighted edit-editing')
+            .find('.edit-toolbar .edit-toolgroup').remove();
           if (from !== 'highlighted' && this.getEditUISetting('padding')) {
             this._unpad();
           }
-          this.remove();
         }
         break;
       case 'highlighted':
         // As soon as we highlight, make sure we have a toolbar in the DOM (with at least a title).
-        this.render();
         this.startHighlight();
         break;
       case 'activating':
@@ -275,6 +285,7 @@ Drupal.edit.views.ToolbarView = Backbone.View.extend({
     }
 
     this.$el
+      .addClass('edit-highlighted')
       .find('.edit-toolbar')
       // Append the "info" toolgroup into the toolbar.
       .append(Drupal.theme('editToolgroup', {
@@ -395,6 +406,10 @@ Drupal.edit.views.ToolbarView = Backbone.View.extend({
       this.$el.insertBefore(this.editor.element);
     }
 
+    // @todo: replace "Edit" with a proper (ARIA-like) string.
+    // @todo: <a> -> <button>
+    this.$el.append('<a class="pencil" href="#">Edit</a>');
+
     var that = this;
     // Animate the toolbar into visibility.
     setTimeout(function () {
@@ -421,6 +436,27 @@ Drupal.edit.views.ToolbarView = Backbone.View.extend({
       });
   },
 
+  onPencilMouseEnter: function (event) {
+    var editableEntity = this.editor.options.widget;
+    editableEntity.setState('highlighted', this.predicate);
+    event.stopPropagation();
+  },
+
+  onPencilMouseLeave: function (event) {
+    var editableEntity = this.editor.options.widget;
+    if (editableEntity.getState() === 'highlighted') {
+      editableEntity.setState('candidate', this.predicate);
+      event.stopPropagation();
+    }
+  },
+
+  onPencilClick: function (event) {
+    var editableEntity = this.editor.options.widget;
+    editableEntity.setState('activating', this.predicate);
+    event.preventDefault();
+    event.stopPropagation();
+  },
+
   /**
    * Retrieves the ID for this toolbar's container.
    *
diff --git a/core/modules/forum/lib/Drupal/forum/Tests/ForumTest.php b/core/modules/forum/lib/Drupal/forum/Tests/ForumTest.php
index d4aba03..df8a32b 100644
--- a/core/modules/forum/lib/Drupal/forum/Tests/ForumTest.php
+++ b/core/modules/forum/lib/Drupal/forum/Tests/ForumTest.php
@@ -254,7 +254,7 @@ private function doAdminTests($user) {
 
     // Add forum to the Tools menu.
     $edit = array();
-    $this->drupalPost('admin/structure/menu/manage/tools', $edit, t('Save configuration'));
+    $this->drupalPost('admin/structure/menu/manage/tools', $edit, t('Save'));
     $this->assertResponse(200);
 
     // Edit forum taxonomy.
diff --git a/core/modules/menu/lib/Drupal/menu/MenuFormController.php b/core/modules/menu/lib/Drupal/menu/MenuFormController.php
index 41e5696..49eec72 100644
--- a/core/modules/menu/lib/Drupal/menu/MenuFormController.php
+++ b/core/modules/menu/lib/Drupal/menu/MenuFormController.php
@@ -21,6 +21,7 @@ class MenuFormController extends EntityFormController {
   public function form(array $form, array &$form_state, EntityInterface $menu) {
     $form = parent::form($form, $form_state, $menu);
     $system_menus = menu_list_system_menus();
+    $form_state['menu'] = &$menu;
 
     $form['label'] = array(
       '#type' => 'textfield',
@@ -46,10 +47,23 @@ public function form(array $form, array &$form_state, EntityInterface $menu) {
       '#disabled' => !$menu->isNew() || isset($system_menus[$menu->id()]),
     );
     $form['description'] = array(
-      '#type' => 'textarea',
+      '#type' => 'textfield',
       '#title' => t('Description'),
       '#default_value' => $menu->description,
     );
+
+    // Add menu links administration form for existing menus.
+    if (!$menu->isNew() || isset($system_menus[$menu->id()])) {
+      // Form API supports to construct and validate self-contained sections
+      // within forms, but does not allow to handle the form section's submission
+      // equally separated yet. Therefore, we use a $form_state key to point to
+      // the parents of the form section.
+      // @see menu_overview_form_submit()
+      $form_state['menu_overview_form_parents'] = array('links');
+      $form['links'] = array();
+      $form['links'] = menu_overview_form($form['links'], $form_state);
+    }
+
     $form['actions'] = array('#type' => 'actions');
     $form['actions']['submit'] = array(
       '#type' => 'submit',
@@ -71,6 +85,11 @@ public function form(array $form, array &$form_state, EntityInterface $menu) {
    */
   public function save(array $form, array &$form_state) {
     $menu = $this->getEntity($form_state);
+    $system_menus = menu_list_system_menus();
+
+    if (!$menu->isNew() || isset($system_menus[$menu->id()])) {
+      menu_overview_form_submit($form, $form_state);
+    }
 
     if ($menu->isNew()) {
       // Add 'menu-' to the menu name to help avoid name-space conflicts.
diff --git a/core/modules/menu/lib/Drupal/menu/MenuListController.php b/core/modules/menu/lib/Drupal/menu/MenuListController.php
index a833dbc..b64dbd0 100644
--- a/core/modules/menu/lib/Drupal/menu/MenuListController.php
+++ b/core/modules/menu/lib/Drupal/menu/MenuListController.php
@@ -47,13 +47,8 @@ public function getOperations(EntityInterface $entity) {
     $operations = parent::getOperations($entity);
     $uri = $entity->uri();
 
-    $operations['list'] = array(
-      'title' => t('list links'),
-      'href' => $uri['path'],
-      'options' => $uri['options'],
-      'weight' => 0,
-    );
     $operations['edit']['title'] = t('edit menu');
+    $operatuins['edit']['href'] = $uri['path'];
     $operations['add'] = array(
       'title' => t('add link'),
       'href' => $uri['path'] . '/add',
diff --git a/core/modules/menu/lib/Drupal/menu/Tests/MenuTest.php b/core/modules/menu/lib/Drupal/menu/Tests/MenuTest.php
index a0d8d28..310f4ae 100644
--- a/core/modules/menu/lib/Drupal/menu/Tests/MenuTest.php
+++ b/core/modules/menu/lib/Drupal/menu/Tests/MenuTest.php
@@ -123,14 +123,14 @@ function addCustomMenuCRUD() {
     $menu->save();
 
     // Assert the new menu.
-    $this->drupalGet('admin/structure/menu/manage/' . $menu_name . '/edit');
+    $this->drupalGet('admin/structure/menu/manage/' . $menu_name);
     $this->assertRaw($label, 'Custom menu was added.');
 
     // Edit the menu.
     $new_label = $this->randomName(16);
     $menu->set('label', $new_label);
     $menu->save();
-    $this->drupalGet('admin/structure/menu/manage/' . $menu_name . '/edit');
+    $this->drupalGet('admin/structure/menu/manage/' . $menu_name);
     $this->assertRaw($new_label, 'Custom menu was edited.');
   }
 
@@ -261,10 +261,10 @@ function doMenuTests($menu_name = 'tools') {
     $this->disableMenuLink($item1);
     $edit = array();
 
-    // Note in the UI the 'mlid:x[hidden]' form element maps to enabled, or
-    // NOT hidden.
-    $edit['mlid:' . $item1['mlid'] . '[hidden]'] = TRUE;
-    $this->drupalPost('admin/structure/menu/manage/' . $item1['menu_name'], $edit, t('Save configuration'));
+    // Note in the UI the 'links[mlid:x][hidden]' form element maps to enabled,
+    // or NOT hidden.
+    $edit['links[mlid:' . $item1['mlid'] . '][hidden]'] = TRUE;
+    $this->drupalPost('admin/structure/menu/manage/' . $item1['menu_name'], $edit, t('Save'));
 
     // Verify in the database.
     $this->assertMenuLink($item1['mlid'], array('hidden' => 0));
diff --git a/core/modules/menu/menu.admin.inc b/core/modules/menu/menu.admin.inc
index de76a31..ee2e22c 100644
--- a/core/modules/menu/menu.admin.inc
+++ b/core/modules/menu/menu.admin.inc
@@ -7,6 +7,7 @@
 
 use Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException;
 use Drupal\system\Plugin\Core\Entity\Menu;
+use Drupal\Component\Utility\NestedArray;
 
 /**
  * Menu callback which shows an overview page of all the custom menus and their descriptions.
@@ -47,20 +48,35 @@ function menu_menu_edit(Menu $menu) {
 }
 
 /**
- * Form for editing an entire menu tree at once.
+ * Form constructor to edit an entire menu tree at once.
  *
  * Shows for one menu the menu links accessible to the current user and
  * relevant operations.
+ *
+ * This form constructor can be integrated as a section into another form. It
+ * relies on the following keys in $form_state:
+ * - menu: A loaded menu definition, as returned by menu_load().
+ * - menu_overview_form_parents: An array containing the parent keys to this
+ *   form.
+ * Forms integrating this section should call menu_overview_form_submit() from
+ * their form submit handler.
  */
-function menu_overview_form($form, &$form_state, $menu) {
+function menu_overview_form($form, &$form_state) {
   global $menu_admin;
+
+  // Ensure that menu_overview_form_submit() knows the parents of this form
+  // section.
+  $form['#tree'] = TRUE;
+  $form['#theme'] = 'menu_overview_form';
+  $form_state += array('menu_overview_form_parents' => array());
+
   $form['#attached']['css'] = array(drupal_get_path('module', 'menu') . '/menu.admin.css');
   $sql = "
     SELECT m.load_functions, m.to_arg_functions, m.access_callback, m.access_arguments, m.page_callback, m.page_arguments, m.title, m.title_callback, m.title_arguments, m.type, m.description, m.description_callback, m.description_arguments, ml.*
     FROM {menu_links} ml LEFT JOIN {menu_router} m ON m.path = ml.router_path
     WHERE ml.menu_name = :menu
     ORDER BY p1 ASC, p2 ASC, p3 ASC, p4 ASC, p5 ASC, p6 ASC, p7 ASC, p8 ASC, p9 ASC";
-  $result = db_query($sql, array(':menu' => $menu->id()), array('fetch' => PDO::FETCH_ASSOC));
+  $result = db_query($sql, array(':menu' => $form_state['menu']->id()), array('fetch' => PDO::FETCH_ASSOC));
   $links = array();
   foreach ($result as $item) {
     $links[] = $item;
@@ -74,20 +90,23 @@ function menu_overview_form($form, &$form_state, $menu) {
   menu_tree_check_access($tree, $node_links);
   $menu_admin = FALSE;
 
+  // Inline the add link action so it displays right above the table of links.
+  // No access check needed, since this form has the same access restriction
+  // as adding menu items to the menu.
+  $form['inline_actions'] = array(
+    '#prefix' => '<ul class="action-links">',
+    '#suffix' => '</ul>',
+  );
+  $form['inline_actions']['add'] = array(
+    '#theme' => 'menu_local_action',
+    '#link' => array(
+      'href' => 'admin/structure/menu/manage/' . $form_state['menu']->id() . '/add',
+      'title' => t('Add link'),
+    ),
+  );
   $form = array_merge($form, _menu_overview_tree_form($tree, $delta));
-  $form['#menu'] =  $menu;
+  $form['#empty_text'] = t('There are no menu links yet. <a href="@link">Add link</a>.', array('@link' => url('admin/structure/menu/manage/' . $form_state['menu']->id() .'/add')));
 
-  if (element_children($form)) {
-    $form['actions'] = array('#type' => 'actions');
-    $form['actions']['submit'] = array(
-      '#type' => 'submit',
-      '#value' => t('Save configuration'),
-      '#button_type' => 'primary',
-    );
-  }
-  else {
-    $form['#empty_text'] = t('There are no menu links yet. <a href="@link">Add link</a>.', array('@link' => url('admin/structure/menu/manage/'. $form['#menu']->id() .'/add')));
-  }
   return $form;
 }
 
@@ -183,15 +202,21 @@ function _menu_overview_tree_form($tree, $delta = 50) {
  *
  * @see menu_overview_form()
  */
-function menu_overview_form_submit($form, &$form_state) {
+function menu_overview_form_submit($complete_form, &$form_state) {
+  $parents = $form_state['menu_overview_form_parents'];
+  $input = NestedArray::getValue($form_state['input'], $parents);
+  $form = &NestedArray::getValue($complete_form, $parents);
+
   // When dealing with saving menu items, the order in which these items are
   // saved is critical. If a changed child item is saved before its parent,
   // the child item could be saved with an invalid path past its immediate
   // parent. To prevent this, save items in the form in the same order they
   // are sent by $_POST, ensuring parents are saved first, then their children.
   // See http://drupal.org/node/181126#comment-632270
-  $order = array_flip(array_keys($form_state['input'])); // Get the $_POST order.
-  $form = array_intersect_key(array_merge($order, $form), $form); // Update our original form with the new order.
+  // Get the $_POST order.
+  $order = array_flip(array_keys($input));
+  // Update our original form with the new order.
+  $form = array_intersect_key(array_merge($order, $form), $form);
 
   $updated_items = array();
   $fields = array('weight', 'plid');
@@ -219,7 +244,6 @@ function menu_overview_form_submit($form, &$form_state) {
     $item['customized'] = 1;
     menu_link_save($item);
   }
-  drupal_set_message(t('Your configuration has been saved.'));
 }
 
 /**
@@ -272,15 +296,27 @@ function theme_menu_overview_form($variables) {
   if (empty($rows)) {
     $rows[] = array(array('data' => $form['#empty_text'], 'colspan' => '7'));
   }
+  $output .= drupal_render($form['inline_actions']);
   $output .= theme('table', array('header' => $header, 'rows' => $rows, 'attributes' => array('id' => 'menu-overview')));
   $output .= drupal_render_children($form);
   return $output;
 }
 
 /**
- * Menu callback; Build the menu link editing form.
+ * Menu callback; add a new menu item.
+ */
+function menu_item_add($menu) {
+  drupal_set_title(t('Add menu item to %menu', array('%menu' => $menu->label())), PASS_THROUGH);
+  return drupal_get_form('menu_edit_item', 'add', NULL, $menu);
+}
+
+/**
+ * Form builder; Build the menu link editing form.
  */
 function menu_edit_item($form, &$form_state, $type, $item, $menu) {
+  // Make form simplified if in contextual administration.
+  $form['#simplified'] = TRUE;
+
   if ($type == 'add' || empty($item)) {
     // This is an add form, initialize the menu link.
     $item = array('link_title' => '', 'mlid' => 0, 'plid' => 0, 'menu_name' => $menu->id(), 'weight' => 0, 'link_path' => '', 'options' => array(), 'module' => 'menu', 'expanded' => 0, 'hidden' => 0, 'has_children' => 0);
@@ -295,10 +331,10 @@ function menu_edit_item($form, &$form_state, $type, $item, $menu) {
     $breadcrumb[] = l($current_title, 'admin/structure/menu/manage/' . $item['menu_name']);
     drupal_set_breadcrumb($breadcrumb);
   }
-  $form['actions'] = array('#type' => 'actions');
+  $form['actions'] = array('#type' => 'actions', '#weight' => 101);
   $form['link_title'] = array(
     '#type' => 'textfield',
-    '#title' => t('Menu link title'),
+    '#title' => t('Title'),
     '#default_value' => $item['link_title'],
     '#description' => t('The text to be used for this link in the menu.'),
     '#required' => TRUE,
@@ -341,24 +377,28 @@ function menu_edit_item($form, &$form_state, $type, $item, $menu) {
       '#description' => l($item['link_title'], $item['href'], $item['options']),
     );
   }
+
   $form['description'] = array(
     '#type' => 'textarea',
     '#title' => t('Description'),
     '#default_value' => isset($item['options']['attributes']['title']) ? $item['options']['attributes']['title'] : '',
     '#rows' => 1,
     '#description' => t('Shown when hovering over the menu link.'),
+    '#weight' => 5,
   );
   $form['enabled'] = array(
     '#type' => 'checkbox',
     '#title' => t('Enabled'),
     '#default_value' => !$item['hidden'],
     '#description' => t('Menu links that are not enabled will not be listed in any menu.'),
+    '#weight' => 6,
   );
   $form['expanded'] = array(
     '#type' => 'checkbox',
     '#title' => t('Show as expanded'),
     '#default_value' => $item['expanded'],
     '#description' => t('If selected and this menu link has children, the menu will always appear expanded.'),
+    '#weight' => 7,
   );
 
   // Generate a list of possible parents (not including this link or descendants).
@@ -374,6 +414,7 @@ function menu_edit_item($form, &$form_state, $type, $item, $menu) {
     '#options' => $options,
     '#description' => t('The maximum depth for a link and all its children is fixed at !maxdepth. Some menu links may not be available as parents if selecting them would exceed this limit.', array('!maxdepth' => MENU_MAX_DEPTH)),
     '#attributes' => array('class' => array('menu-title-select')),
+    '#weight' => 8,
   );
 
   // Get number of items in menu so the weight selector is sized appropriately.
@@ -394,7 +435,9 @@ function menu_edit_item($form, &$form_state, $type, $item, $menu) {
     '#delta' => $delta,
     '#default_value' => $item['weight'],
     '#description' => t('Optional. In the menu, the heavier links will sink and the lighter links will be positioned nearer the top.'),
+    '#weight' => 8,
   );
+
   $form['actions']['submit'] = array('#type' => 'submit', '#value' => t('Save'), '#button_type' => 'primary');
 
   return $form;
diff --git a/core/modules/menu/menu.module b/core/modules/menu/menu.module
index 7e26d50..0f11f19 100644
--- a/core/modules/menu/menu.module
+++ b/core/modules/menu/menu.module
@@ -99,36 +99,30 @@ function menu_menu() {
     'file' => 'menu.admin.inc',
   );
   $items['admin/structure/menu/manage/%menu'] = array(
-    'title' => 'Customize menu',
-    'page callback' => 'drupal_get_form',
-    'page arguments' => array('menu_overview_form', 4),
+    'title' => 'Edit menu',
+    'page callback' => 'menu_menu_edit',
+    'page arguments' => array(4),
     'title callback' => 'entity_page_label',
     'title arguments' => array(4),
     'access arguments' => array('administer menu'),
     'file' => 'menu.admin.inc',
   );
-  $items['admin/structure/menu/manage/%menu/list'] = array(
-    'title' => 'List links',
-    'weight' => -10,
-    'type' => MENU_DEFAULT_LOCAL_TASK,
-    'context' => MENU_CONTEXT_PAGE | MENU_CONTEXT_INLINE,
-  );
+  // Not officially a local action, but displayed as such in
+  // menu_overview_form().
   $items['admin/structure/menu/manage/%menu/add'] = array(
-    'title' => 'Add link',
-    'page callback' => 'drupal_get_form',
-    'page arguments' => array('menu_edit_item', 'add', NULL, 4),
+    'title' => 'Add menu item',
+    'page callback' => 'menu_item_add',
+    'page arguments' => array(4),
     'access arguments' => array('administer menu'),
-    'type' => MENU_LOCAL_ACTION,
     'file' => 'menu.admin.inc',
+    'type' => MENU_LOCAL_TASK,
+    'context' => MENU_CONTEXT_INLINE,
   );
   $items['admin/structure/menu/manage/%menu/edit'] = array(
     'title' => 'Edit menu',
-    'page callback' => 'menu_menu_edit',
-    'page arguments' => array(4),
-    'access arguments' => array('administer menu'),
-    'type' => MENU_LOCAL_TASK,
+    'type' => MENU_DEFAULT_LOCAL_TASK,
+    'weight' => -10,
     'context' => MENU_CONTEXT_PAGE | MENU_CONTEXT_INLINE,
-    'file' => 'menu.admin.inc',
   );
   $items['admin/structure/menu/manage/%menu/delete'] = array(
     'title' => 'Delete menu',
diff --git a/core/modules/overlay/overlay-child-rtl.css b/core/modules/overlay/overlay-child-rtl.css
index eeff66c..061d8a9 100644
--- a/core/modules/overlay/overlay-child-rtl.css
+++ b/core/modules/overlay/overlay-child-rtl.css
@@ -12,10 +12,6 @@ html {
   float: right;
   left: auto;
 }
-#overlay {
-  padding: 0.2em;
-  padding-left: 26px;
-}
 #overlay-close-wrapper {
   left: 0;
   right: auto;
diff --git a/core/modules/overlay/overlay-child.css b/core/modules/overlay/overlay-child.css
index 48f217d..8d63677 100644
--- a/core/modules/overlay/overlay-child.css
+++ b/core/modules/overlay/overlay-child.css
@@ -21,38 +21,23 @@
   min-height: 100px;
   min-width: 700px;
   position: relative;
-  padding: .2em;
   padding-bottom: 2em;
-  padding-right: 26px; /* LTR */
-  width: 88%;
-}
-#overlay-titlebar {
-  padding: 0 20px;
-  position: relative;
-  white-space: nowrap;
-  z-index: 100;
+  width: 50%;
 }
 #overlay-content {
-  background: #fff;
   clear: both;
   color: #000;
-  padding: .5em 1em;
+  padding: .5em;
   position: relative;
 }
 
-#overlay-title-wrapper {
-  overflow: hidden;
-}
-#overlay-title {
-  color: #fff;
-  float: left; /* LTR */
-  font-size: 20px;
-  margin: 0;
-  padding: 0.3em 0;
+#branding .breadcrumb, #branding .add-shortcut {
+  display: none;
 }
-#overlay-title:active,
-#overlay-title:focus {
-  outline: 0;
+
+body.overlay #branding h1.page-title {
+  display: block;
+  float: none;
 }
 
 .overlay #skip-link {
@@ -62,76 +47,20 @@
   color: #fff; /* This is white to contrast with the dark background behind it. */
 }
 
-#overlay-close-wrapper {
-  position: absolute;
-  right: 0; /* LTR */
-}
-#overlay-close,
-#overlay-close:hover {
-  background: transparent url(images/close.png) no-repeat; /* LTR */
-  border-top-left-radius: 0; /* LTR */
-  display: block;
-  height: 26px;
-  margin: 0;
-  padding: 0;
-  /* Replace with position:fixed to get a scrolling close button. */
-  position: absolute;
-  width: 26px;
+.form-actions {
+  text-align: right; /* LTR */
+  width: 100%;
 }
-
-/**
- * Tabs on the overlay.
- */
-#overlay-tabs {
-  line-height: 26px;
-  margin: -28px 0 0 0;
-  position: absolute;
-  right: 20px; /* LTR */
-  text-transform: uppercase;
-}
-#overlay-tabs li {
-  display: inline-block;
-  list-style: none;
-  margin: 0;
-  padding: 0;
-}
-#overlay-tabs li a,
-#overlay-tabs li a:active,
-#overlay-tabs li a:visited,
-#overlay-tabs li a:hover {
-  background-color: #a6a7a2;
-  border-radius: 8px 8px 0 0;
-  color: #000;
-  display: inline-block;
-  font-size: 11px;
-  font-weight: bold;
-  margin: 0 1px;
-  outline: 0;
-  padding: 0 14px;
-  text-decoration: none;
-}
-#overlay-tabs li.active a,
-#overlay-tabs li.active a.active,
-#overlay-tabs li.active a:active,
-#overlay-tabs li.active a:visited {
-  background-color: #fff;
-  margin-bottom: 0;
-  padding-bottom: 2px;
+.form-actions .button {
+  display: none;
 }
-#overlay-tabs li a:focus,
-#overlay-tabs li a:hover {
-  color: #fff;
-}
-#overlay-tabs li.active a:focus,
-#overlay-tabs li.active a:hover {
-  color: #000;
+.form-actions .button.button-primary {
+  margin-right: 0em; /* LTR */
+  display: inline;
 }
-
-/**
- * Add to shortcuts link
- */
-#overlay-titlebar .add-or-remove-shortcuts {
-  padding-top: 0.9em;
+.form-actions .button.overlay-close {
+  display: inline;
+  float: left;
 }
 
 /**
diff --git a/core/modules/overlay/overlay-child.js b/core/modules/overlay/overlay-child.js
index 80a8a2f..faefe91 100644
--- a/core/modules/overlay/overlay-child.js
+++ b/core/modules/overlay/overlay-child.js
@@ -163,20 +163,10 @@ Drupal.overlayChild.behaviors.tabs = function (context, settings) {
 };
 
 /**
- * If the shortcut add/delete button exists, move it to the overlay titlebar.
+ * Add cancel button to form actions.
  */
-Drupal.overlayChild.behaviors.shortcutAddLink = function (context, settings) {
-  // Remove any existing shortcut button markup from the titlebar.
-  $('#overlay-titlebar').find('.add-or-remove-shortcuts').remove();
-  // If the shortcut add/delete button exists, move it to the titlebar.
-  var $addToShortcuts = $('.add-or-remove-shortcuts');
-  if ($addToShortcuts.length) {
-    $addToShortcuts.insertAfter('#overlay-title');
-  }
-
-  $(document).bind('drupalOverlayBeforeLoad.drupal-overlay.drupal-overlay-child-loading', function () {
-    $('#overlay-titlebar').find('.add-or-remove-shortcuts').remove();
-  });
+Drupal.overlayChild.behaviors.cancelAddButton = function (context, settings) {
+  $('.form-actions', context).prepend('<input type="submit" value="Cancel" class="button overlay-close">');
 };
 
 // Workaround because of the way jQuery events works.
diff --git a/core/modules/overlay/overlay-parent.js b/core/modules/overlay/overlay-parent.js
index caf9336..8d31cbc 100644
--- a/core/modules/overlay/overlay-parent.js
+++ b/core/modules/overlay/overlay-parent.js
@@ -554,6 +554,13 @@ Drupal.overlay.eventhandlerOverrideLink = function (event) {
 
   var $target = $(event.target);
 
+  // Close the overlay when the link contains the overlay-close class.
+  if ($target.is('body') || $target.hasClass('overlay-close')) {
+    // Clearing the overlay URL fragment will close the overlay.
+    $.bbq.removeState('overlay');
+    return;
+  }
+
   // Only continue if clicked target (or one of its parents) is a link.
   if (!$target.is('a')) {
     $target = $target.closest('a');
@@ -567,10 +574,8 @@ Drupal.overlay.eventhandlerOverrideLink = function (event) {
     return;
   }
 
-  // Close the overlay when the link contains the overlay-close class.
-  if ($target.hasClass('overlay-close')) {
-    // Clearing the overlay URL fragment will close the overlay.
-    $.bbq.removeState('overlay');
+  // Only open links in the overlay if they are contextual links.
+  if (!$target.parent().parent().hasClass('contextual-links') && !$target.hasClass('button-action') && !$target.parent().hasClass('dropbutton-action')) {
     return;
   }
 
diff --git a/core/modules/overlay/templates/overlay.tpl.php b/core/modules/overlay/templates/overlay.tpl.php
index 38e6664..b17f5d5 100644
--- a/core/modules/overlay/templates/overlay.tpl.php
+++ b/core/modules/overlay/templates/overlay.tpl.php
@@ -23,15 +23,6 @@
 
 <?php print render($disable_overlay); ?>
 <div id="overlay" <?php print $attributes; ?>>
-  <div id="overlay-titlebar" class="clearfix">
-    <div id="overlay-title-wrapper" class="clearfix">
-      <h1 id="overlay-title"<?php print $title_attributes; ?>><?php print $title; ?></h1>
-    </div>
-    <div id="overlay-close-wrapper">
-      <a id="overlay-close" href="#" class="overlay-close"><span class="element-invisible"><?php print t('Close overlay'); ?></span></a>
-    </div>
-    <?php if ($tabs): ?><h2 class="element-invisible"><?php print t('Primary tabs'); ?></h2><ul id="overlay-tabs"><?php print render($tabs); ?></ul><?php endif; ?>
-  </div>
   <div id="overlay-content"<?php print $content_attributes; ?>>
     <?php print $page; ?>
   </div>
diff --git a/core/modules/system/lib/Drupal/system/Tests/Menu/BreadcrumbTest.php b/core/modules/system/lib/Drupal/system/Tests/Menu/BreadcrumbTest.php
index dcf53b0..878f71a 100644
--- a/core/modules/system/lib/Drupal/system/Tests/Menu/BreadcrumbTest.php
+++ b/core/modules/system/lib/Drupal/system/Tests/Menu/BreadcrumbTest.php
@@ -112,6 +112,7 @@ function testBreadCrumbs() {
       'admin/structure/menu' => t('Menus'),
     );
     $this->assertBreadcrumb('admin/structure/menu/manage/tools', $trail);
+    $this->assertBreadcrumb('admin/structure/menu/manage/tools/edit', $trail);
 
     $mlid_node_add = db_query('SELECT mlid FROM {menu_links} WHERE link_path = :href AND module = :module', array(
       ':href' => 'node/add',
@@ -121,7 +122,6 @@ function testBreadCrumbs() {
       'admin/structure/menu/manage/tools' => t('Tools'),
     );
     $this->assertBreadcrumb("admin/structure/menu/item/$mlid_node_add/edit", $trail);
-    $this->assertBreadcrumb('admin/structure/menu/manage/tools/edit', $trail);
     $this->assertBreadcrumb('admin/structure/menu/manage/tools/add', $trail);
 
     // Verify Node administration breadcrumbs.
diff --git a/core/modules/system/system.module b/core/modules/system/system.module
index 17015c6..7efa2b0 100644
--- a/core/modules/system/system.module
+++ b/core/modules/system/system.module
@@ -254,6 +254,7 @@ function system_element_info() {
   $types['form'] = array(
     '#method' => 'post',
     '#action' => request_uri(),
+    '#process' => array('form_process_simplified_form'),
     '#theme_wrappers' => array('form'),
   );
   $types['page'] = array(
diff --git a/core/modules/user/lib/Drupal/user/Tests/UserAccountLinksTests.php b/core/modules/user/lib/Drupal/user/Tests/UserAccountLinksTests.php
index 7190521..6780cf7 100644
--- a/core/modules/user/lib/Drupal/user/Tests/UserAccountLinksTests.php
+++ b/core/modules/user/lib/Drupal/user/Tests/UserAccountLinksTests.php
@@ -74,13 +74,13 @@ function testDisabledAccountLink() {
 
     // Verify that the 'My account' link is enabled.
     $this->drupalGet('admin/structure/menu/manage/account');
-    $this->assertFieldChecked('edit-mlid2-hidden', "The 'My account' link is enabled by default.");
+    $this->assertFieldChecked('edit-links-mlid2-hidden', "The 'My account' link is enabled by default.");
 
     // Disable the 'My account' link.
     $edit = array(
-      'mlid:2[hidden]' => FALSE,
+      'links[mlid:2][hidden]' => FALSE,
     );
-    $this->drupalPost('admin/structure/menu/manage/account', $edit, t('Save configuration'));
+    $this->drupalPost('admin/structure/menu/manage/account', $edit, t('Save'));
 
     // Get the homepage.
     $this->drupalGet('<front>');
