diff --git a/core/misc/simplifyform.css b/core/misc/simplifyform.css
new file mode 100644
index 0000000..64b14c0
--- /dev/null
+++ b/core/misc/simplifyform.css
@@ -0,0 +1,3 @@
+a.show-advanced-fields {
+  cursor: pointer;
+}
diff --git a/core/misc/simplifyform.js b/core/misc/simplifyform.js
new file mode 100644
index 0000000..8c177e4
--- /dev/null
+++ b/core/misc/simplifyform.js
@@ -0,0 +1,24 @@
+(function ($, window) {
+
+"use strict";
+
+/**
+ * Hide parts of the full form and make it available on a link click.
+ */
+Drupal.behaviors.simplifyFormShowAll = {
+  attach: function() {
+    $('.advanced-fields').hide();
+    var listOfLabels = [];
+    $('.advanced-fields > .form-item > label').each(function() {
+      listOfLabels.push($.trim($(this).text()));
+    });
+    // @todo: the right triangle is not RTL friendly.
+    $('.show-advanced-fields').html('&#9654; ' + Drupal.t('Optional fields (@labels)', {'@labels': listOfLabels.join(', ')}));
+    $('.show-advanced-fields').click(function() {
+      $(this).hide();
+      $('.advanced-fields').show();
+    });
+  }
+}
+
+})(jQuery, window);
diff --git a/core/modules/block/block.admin.inc b/core/modules/block/block.admin.inc
index 13f17ad..0e381c2 100644
--- a/core/modules/block/block.admin.inc
+++ b/core/modules/block/block.admin.inc
@@ -244,6 +244,9 @@ function _block_compare($ainstance, $binstance) {
  * @param string $theme
  *   (optional) The name of the theme for the block instance. If no theme is
  *   specified, the default theme will be used.
+ * @param $type
+ *   Type of form to show: 'edit' or 'configure'. Edit is an abbreviated
+ *   version of the same form.
  *
  * @see block_menu()
  * @see custom_block_menu()
@@ -252,7 +255,7 @@ function _block_compare($ainstance, $binstance) {
  *
  * @ingroup forms
  */
-function block_admin_configure($form, &$form_state, $plugin_id, $theme = NULL) {
+function block_admin_configure($form, &$form_state, $plugin_id, $theme = NULL, $type = 'configure') {
   $instance = block_load($plugin_id);
   $form['#instance'] = $instance;
   $config = $instance->getConfig();
@@ -266,6 +269,11 @@ function block_admin_configure($form, &$form_state, $plugin_id, $theme = NULL) {
     '#type' => 'value',
     '#value' => $theme,
   );
+  $form['type'] = array(
+    '#type' => 'value',
+    '#value' => $type,
+  );
+  $form['#attached']['library'][] = array('system', 'drupal.simplifyform');
   $form += $instance->form($form, $form_state);
   return $form;
 }
diff --git a/core/modules/block/block.module b/core/modules/block/block.module
index d9155c3..d61a8c4 100644
--- a/core/modules/block/block.module
+++ b/core/modules/block/block.module
@@ -131,6 +131,14 @@ function block_menu() {
   $items['admin/structure/block/manage/%/%/configure'] = array(
     'title' => 'Configure block',
     'type' => MENU_DEFAULT_LOCAL_TASK,
+  );
+  $items['admin/structure/block/manage/%/%/edit'] = array(
+    'title' => 'Edit block',
+    'page callback' => 'drupal_get_form',
+    'page arguments' => array('block_admin_configure', 4, 5, 'edit'),
+    'access arguments' => array('administer blocks'),
+    'file' => 'block.admin.inc',
+    'type' => MENU_LOCAL_TASK,
     'context' => MENU_CONTEXT_INLINE,
   );
   $items['admin/structure/block/manage/%/%/delete'] = array(
diff --git a/core/modules/block/lib/Drupal/block/BlockBase.php b/core/modules/block/lib/Drupal/block/BlockBase.php
index 7d1356b..9470403 100644
--- a/core/modules/block/lib/Drupal/block/BlockBase.php
+++ b/core/modules/block/lib/Drupal/block/BlockBase.php
@@ -275,6 +275,13 @@ public function form($form, &$form_state) {
       $form['settings']['machine_name']['#disabled'] = TRUE;
     }
 
+    if ($form['type']['#value'] == 'edit') {
+      $form['advanced_fields_begin'] = array(
+        '#markup' => '<a class="show-advanced-fields">' . t('Show all options') . '</a><div class="advanced-fields">',
+        '#weight' => 1,
+      );
+    }
+
     // Region settings.
     $form['region'] = array(
       '#type' => 'select',
@@ -283,9 +290,9 @@ public function form($form, &$form_state) {
       '#default_value' => !empty($config['region']) && $config['region'] != -1 ? $config['region'] : NULL,
       '#empty_value' => BLOCK_REGION_NONE,
       '#options' => system_region_list($theme_key, REGIONS_VISIBLE),
+      '#weight' => 5,
     );
 
-
     // Visibility settings.
     $form['visibility'] = array(
       '#type' => 'vertical_tabs',
@@ -411,6 +418,13 @@ public function form($form, &$form_state) {
     // Add specific configuration for this block type.
     $form += $this->blockForm($form, $form_state);
 
+    if ($form['type']['#value'] == 'edit') {
+      $form['advanced_fields_end'] = array(
+        '#markup' => '</div>',
+        '#weight' => 100,
+      );
+    }
+
     $form['actions'] = array('#type' => 'actions');
     $form['actions']['submit'] = array(
       '#type' => 'submit',
diff --git a/core/modules/menu/menu.admin.inc b/core/modules/menu/menu.admin.inc
index 1962ce3..b2f7ebd 100644
--- a/core/modules/menu/menu.admin.inc
+++ b/core/modules/menu/menu.admin.inc
@@ -276,7 +276,15 @@ function theme_menu_overview_form($variables) {
 }
 
 /**
- * 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())));
+  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) {
   if ($type == 'add' || empty($item)) {
@@ -293,7 +301,7 @@ 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'),
@@ -339,24 +347,35 @@ function menu_edit_item($form, &$form_state, $type, $item, $menu) {
       '#description' => l($item['link_title'], $item['href'], $item['options']),
     );
   }
+
+  // @todo Make these conditional on contextual editing.
+  $form['#attached']['library'][] = array('system', 'drupal.simplifyform');
+  $form['advanced_fields_begin'] = array(
+    '#markup' => '<a class="show-advanced-fields">' . t('Show all options') . '</a><div class="advanced-fields">',
+    '#weight' => 1,
+  );
+
   $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).
@@ -372,6 +391,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.
@@ -392,7 +412,15 @@ 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,
   );
+
+  // @todo Make this conditional on contextual editing.
+  $form['advanced_fields_end'] = array(
+    '#markup' => '</div>',
+    '#weight' => 100,
+  );
+
   $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 3d4a360..4f8590e 100644
--- a/core/modules/menu/menu.module
+++ b/core/modules/menu/menu.module
@@ -114,11 +114,12 @@ function menu_menu() {
   );
   $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),
+    'page callback' => 'menu_item_add',
+    'page arguments' => array(4),
     'access arguments' => array('administer menu'),
     'type' => MENU_LOCAL_ACTION,
     'file' => 'menu.admin.inc',
+    'context' => MENU_CONTEXT_INLINE,
   );
   $items['admin/structure/menu/manage/%menu/edit'] = array(
     'title' => 'Edit menu',
diff --git a/core/modules/system/system.module b/core/modules/system/system.module
index cdf7b90..a385e1e 100644
--- a/core/modules/system/system.module
+++ b/core/modules/system/system.module
@@ -1291,6 +1291,22 @@ function system_library_info() {
     ),
   );
 
+  // Drupal's simplified form library.
+  $libraries['drupal.simplifyform'] = array(
+    'title' => 'Drupal simplified form library',
+    'version' => VERSION,
+    'js' => array(
+      'core/misc/simplifyform.js' => array(),
+    ),
+    'css' => array(
+      'core/misc/simplifyform.css' => array(),
+    ),
+    'dependencies' => array(
+      array('system', 'jquery'),
+      array('system', 'drupal'),
+    ),
+  );
+
   // Drupal's dialog component.
   $libraries['drupal.dialog'] = array(
     'title' => 'Drupal Dialog',
