diff --git a/core/includes/common.inc b/core/includes/common.inc
index 358a59a..621334d 100644
--- a/core/includes/common.inc
+++ b/core/includes/common.inc
@@ -2834,7 +2834,9 @@ function drupal_get_library($module, $name = NULL) {
           if (is_scalar($options)) {
             // The JavaScript or CSS file has been specified in shorthand
             // format, without an array of options. In this case $options is the
-            // filename.
+            // filename. Convert the shorthand version and remove the old array
+            // key.
+            unset($module_libraries[$key]['js'][$file]);
             $file = $options;
             $options = array();
           }
diff --git a/core/lib/Drupal/Core/Database/Driver/mysql/Insert.php b/core/lib/Drupal/Core/Database/Driver/mysql/Insert.php
index 233118c..c41fdf3 100644
--- a/core/lib/Drupal/Core/Database/Driver/mysql/Insert.php
+++ b/core/lib/Drupal/Core/Database/Driver/mysql/Insert.php
@@ -49,7 +49,8 @@ public function __toString() {
     // If we're selecting from a SelectQuery, finish building the query and
     // pass it back, as any remaining options are irrelevant.
     if (!empty($this->fromQuery)) {
-      return $comments . 'INSERT INTO {' . $this->table . '} (' . implode(', ', $insert_fields) . ') ' . $this->fromQuery;
+      $insert_fields_string = $insert_fields ? ' (' . implode(', ', $insert_fields) . ') ' : ' ';
+      return $comments . 'INSERT INTO {' . $this->table . '}' . $insert_fields_string . $this->fromQuery;
     }
 
     $query = $comments . 'INSERT INTO {' . $this->table . '} (' . implode(', ', $insert_fields) . ') VALUES ';
diff --git a/core/lib/Drupal/Core/Database/Driver/pgsql/Insert.php b/core/lib/Drupal/Core/Database/Driver/pgsql/Insert.php
index dffa1fd..998cbb7 100644
--- a/core/lib/Drupal/Core/Database/Driver/pgsql/Insert.php
+++ b/core/lib/Drupal/Core/Database/Driver/pgsql/Insert.php
@@ -118,7 +118,8 @@ public function __toString() {
     // If we're selecting from a SelectQuery, finish building the query and
     // pass it back, as any remaining options are irrelevant.
     if (!empty($this->fromQuery)) {
-      return $comments . 'INSERT INTO {' . $this->table . '} (' . implode(', ', $insert_fields) . ') ' . $this->fromQuery;
+      $insert_fields_string = $insert_fields ? ' (' . implode(', ', $insert_fields) . ') ' : ' ';
+      return $comments . 'INSERT INTO {' . $this->table . '}' . $insert_fields_string . $this->fromQuery;
     }
 
     $query = $comments . 'INSERT INTO {' . $this->table . '} (' . implode(', ', $insert_fields) . ') VALUES ';
diff --git a/core/lib/Drupal/Core/Database/Driver/sqlite/Insert.php b/core/lib/Drupal/Core/Database/Driver/sqlite/Insert.php
index e584943..3a0bcaa 100644
--- a/core/lib/Drupal/Core/Database/Driver/sqlite/Insert.php
+++ b/core/lib/Drupal/Core/Database/Driver/sqlite/Insert.php
@@ -40,10 +40,11 @@ public function __toString() {
     // If we're selecting from a SelectQuery, finish building the query and
     // pass it back, as any remaining options are irrelevant.
     if (!empty($this->fromQuery)) {
-      return $comments . 'INSERT INTO {' . $this->table . '} (' . implode(', ', $this->insertFields) . ') ' . $this->fromQuery;
+      $insert_fields_string = $this->insertFields ? ' (' . implode(', ', $this->insertFields) . ') ' : ' ';
+      return $comments . 'INSERT INTO {' . $this->table . '}' . $insert_fields_string . $this->fromQuery;
     }
 
     return $comments . 'INSERT INTO {' . $this->table . '} (' . implode(', ', $this->insertFields) . ') VALUES (' . implode(', ', $placeholders) . ')';
   }
 
-}
\ No newline at end of file
+}
diff --git a/core/lib/Drupal/Core/Database/Query/Insert.php b/core/lib/Drupal/Core/Database/Query/Insert.php
index 7862436..72cadb8 100644
--- a/core/lib/Drupal/Core/Database/Query/Insert.php
+++ b/core/lib/Drupal/Core/Database/Query/Insert.php
@@ -284,10 +284,11 @@ public function preExecute() {
       // first call to fields() does have an effect.
       $this->fields(array_merge(array_keys($this->fromQuery->getFields()), array_keys($this->fromQuery->getExpressions())));
     }
-
-    // Don't execute query without fields.
-    if (count($this->insertFields) + count($this->defaultFields) == 0) {
-      throw new NoFieldsException('There are no fields available to insert with.');
+    else {
+      // Don't execute query without fields.
+      if (count($this->insertFields) + count($this->defaultFields) == 0) {
+        throw new NoFieldsException('There are no fields available to insert with.');
+      }
     }
 
     // If no values have been added, silently ignore this query. This can happen
diff --git a/core/modules/editor/lib/Drupal/editor/Form/EditorImageDialog.php b/core/modules/editor/lib/Drupal/editor/Form/EditorImageDialog.php
index 0fa6249..dcc78a5 100644
--- a/core/modules/editor/lib/Drupal/editor/Form/EditorImageDialog.php
+++ b/core/modules/editor/lib/Drupal/editor/Form/EditorImageDialog.php
@@ -122,8 +122,9 @@ public function submitForm(array &$form, array &$form_state) {
 
     if (form_get_errors()) {
       unset($form['#prefix'], $form['#suffix']);
+      $status_messages = array('#theme' => 'status_messages');
       $output = drupal_render($form);
-      $output = '<div>' . theme('status_messages') . $output . '</div>';
+      $output = '<div>' . drupal_render($status_messages) . $output . '</div>';
       $response->addCommand(new HtmlCommand('#editor-image-dialog-form', $output));
     }
     else {
diff --git a/core/modules/editor/lib/Drupal/editor/Form/EditorLinkDialog.php b/core/modules/editor/lib/Drupal/editor/Form/EditorLinkDialog.php
index 4e17831..3be9c82 100644
--- a/core/modules/editor/lib/Drupal/editor/Form/EditorLinkDialog.php
+++ b/core/modules/editor/lib/Drupal/editor/Form/EditorLinkDialog.php
@@ -89,8 +89,9 @@ public function submitForm(array &$form, array &$form_state) {
 
     if (form_get_errors()) {
       unset($form['#prefix'], $form['#suffix']);
+      $status_messages = array('#theme' => 'status_messages');
       $output = drupal_render($form);
-      $output = '<div>' . theme('status_messages') . $output . '</div>';
+      $output = '<div>' . drupal_render($status_messages) . $output . '</div>';
       $response->addCommand(new HtmlCommand('#editor-link-dialog-form', $output));
     }
     else {
diff --git a/core/modules/field/lib/Drupal/field/Plugin/Type/FieldType/ConfigEntityReferenceItemBase.php b/core/modules/field/lib/Drupal/field/Plugin/Type/FieldType/ConfigEntityReferenceItemBase.php
index c451fdb..f26b151 100644
--- a/core/modules/field/lib/Drupal/field/Plugin/Type/FieldType/ConfigEntityReferenceItemBase.php
+++ b/core/modules/field/lib/Drupal/field/Plugin/Type/FieldType/ConfigEntityReferenceItemBase.php
@@ -148,6 +148,27 @@ public function instanceSettingsForm(array $form, array &$form_state) {
   }
 
   /**
+   * {@inheritdoc}
+   */
+  public function defaultValuesForm(array $element, array $form, array &$form_state) {
+    return array();
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function defaultValuesFormValidate(array $form, array &$form_state) {
+    return array();
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function defaultValuesFormSubmit(array $form, array &$form_state) {
+    return array();
+  }
+
+  /**
    * Returns the legacy callback for a given field type "hook".
    *
    * Copied from \Drupal\field\Plugin\field\field_type\LegacyConfigFieldItem,
diff --git a/core/modules/field/lib/Drupal/field/Plugin/Type/FieldType/ConfigFieldItemBase.php b/core/modules/field/lib/Drupal/field/Plugin/Type/FieldType/ConfigFieldItemBase.php
index 743ad5c..d957968 100644
--- a/core/modules/field/lib/Drupal/field/Plugin/Type/FieldType/ConfigFieldItemBase.php
+++ b/core/modules/field/lib/Drupal/field/Plugin/Type/FieldType/ConfigFieldItemBase.php
@@ -8,6 +8,7 @@
 namespace Drupal\field\Plugin\Type\FieldType;
 
 use Drupal\Core\Entity\Field\FieldItemBase;
+use Drupal\Core\Language\Language;
 
 /**
  * Base class for 'configurable field type' plugin implementations.
@@ -45,4 +46,68 @@ public function instanceSettingsForm(array $form, array &$form_state) {
     return array();
   }
 
+  /**
+   * {@inheritdoc}
+   */
+  public function defaultValuesForm(array $element, array $form, array &$form_state) {
+    $entity = $form['#entity'];
+    $entity_form_display = $form['#entity_form_display'];
+    $instance = $this->getInstance();
+    $field = $this->getInstance()->getField();
+
+    // Insert the widget. Since we do not use the "official" instance definition,
+    // the whole flow cannot use field_invoke_method().
+    $items = $entity->getNGEntity()->{$field->id};
+    if (!empty($instance['default_value'])) {
+      $items->setValue((array) $instance['default_value']);
+    }
+
+    return $entity_form_display->getRenderer($field->id)->form($entity, Language::LANGCODE_NOT_SPECIFIED, $items, $element, $form_state);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function defaultValuesFormValidate(array $form, array &$form_state) {
+    $instance = $this->getInstance();
+    $field_name = $instance['field_name'];
+    $entity = $form['#entity'];
+    $entity_form_display = $form['#entity_form_display'];
+
+    $element = $form['instance']['default_value_widget'];
+
+    // Extract the 'default value'.
+    $items = $entity->getNGEntity()->{$field_name};
+    $entity_form_display->getRenderer($this->instance->getField()->id)->extractFormValues($entity, Language::LANGCODE_NOT_SPECIFIED, $items, $element, $form_state);
+    $violations = $items->validate();
+
+    // Report errors.
+    if (count($violations)) {
+      $field_state = field_form_get_state($element['#parents'], $field_name, Language::LANGCODE_NOT_SPECIFIED, $form_state);
+      // Store reported errors in $form_state.
+      $field_state['constraint_violations'] = $violations;
+      field_form_set_state($element['#parents'], $field_name, Language::LANGCODE_NOT_SPECIFIED, $form_state, $field_state);
+
+      // Assign reported errors to the correct form element.
+      $entity_form_display->getRenderer($this->instance->getField()->id)->flagErrors($entity, Language::LANGCODE_NOT_SPECIFIED, $items, $element, $form_state);
+    }
+  }
+  /**
+   * {@inheritdoc}
+   */
+  public function defaultValuesFormSubmit(array $form, array &$form_state) {
+    $entity = $form['#entity'];
+    $entity_form_display = $form['#entity_form_display'];
+    $instance = $this->getInstance();
+    $field_name = $this->instance['field_name'];
+
+    $element = $form['instance']['default_value_widget'];
+
+    // Extract field values.
+    $items = $entity->getNGEntity()->{$field_name};
+    $entity_form_display->getRenderer($instance->getField()->id)->extractFormValues($entity, Language::LANGCODE_NOT_SPECIFIED, $items, $element, $form_state);
+
+    return $items->getValue() ?: NULL;
+  }
+
 }
diff --git a/core/modules/field/lib/Drupal/field/Plugin/Type/FieldType/ConfigFieldItemInterface.php b/core/modules/field/lib/Drupal/field/Plugin/Type/FieldType/ConfigFieldItemInterface.php
index 394ec01..6dc011f 100644
--- a/core/modules/field/lib/Drupal/field/Plugin/Type/FieldType/ConfigFieldItemInterface.php
+++ b/core/modules/field/lib/Drupal/field/Plugin/Type/FieldType/ConfigFieldItemInterface.php
@@ -89,4 +89,54 @@ public function settingsForm(array $form, array &$form_state);
    */
   public function instanceSettingsForm(array $form, array &$form_state);
 
+  /**
+   * Builds the default value widget for a given field instance.
+   *
+   * Invoked from \Drupal\field_ui\Form\FieldInstanceEditForm to allow
+   * administrators to configure instance-level default value.
+   *
+   * @param array $element
+   *   The default value form base element
+   * @param array $form
+   *   The form where the settings form is being included in.
+   * @param array $form_state
+   *   The form state of the (entire) configuration form.
+   *
+   * @return array
+   *   The form definition for the field instance default value.
+   */
+  public function defaultValuesForm(array $element, array $form, array &$form_state);
+
+  /**
+   * Validates the default value widget for a given field instance.
+   *
+   * Invoked from \Drupal\field_ui\Form\FieldInstanceEditForm to allow
+   * administrators to configure instance-level default value.
+   *
+   * @param array $form
+   *   The form where the settings form is being included in.
+   * @param array $form_state
+   *   The form state of the (entire) configuration form.
+   *
+   * @return array
+   *   The field instance default value.
+   */
+  public function defaultValuesFormValidate(array $form, array &$form_state);
+
+  /**
+   * Submits the default value widget for a given field instance.
+   *
+   * Invoked from \Drupal\field_ui\Form\FieldInstanceEditForm to allow
+   * administrators to configure instance-level default value.
+   *
+   * @param array $form
+   *   The form where the settings form is being included in.
+   * @param array $form_state
+   *   The form state of the (entire) configuration form.
+   *
+   * @return array
+   *   The field instance default value.
+   */
+  public function defaultValuesFormSubmit(array $form, array &$form_state);
+
 }
diff --git a/core/modules/field_ui/lib/Drupal/field_ui/FieldOverview.php b/core/modules/field_ui/lib/Drupal/field_ui/FieldOverview.php
index d4c392c..621c08d 100644
--- a/core/modules/field_ui/lib/Drupal/field_ui/FieldOverview.php
+++ b/core/modules/field_ui/lib/Drupal/field_ui/FieldOverview.php
@@ -9,6 +9,7 @@
 
 use Drupal\Core\Entity\EntityManager;
 use Drupal\Core\Entity\Field\FieldTypePluginManager;
+use Drupal\Core\Extension\ModuleHandlerInterface;
 use Drupal\field_ui\OverviewBase;
 use Symfony\Component\DependencyInjection\ContainerInterface;
 use Drupal\field\Plugin\Core\Entity\Field;
@@ -26,16 +27,26 @@ class FieldOverview extends OverviewBase {
   protected $fieldTypeManager;
 
   /**
+   * The module handler service.
+   *
+   * @var \Drupal\Core\Extension\ModuleHandlerInterface
+   */
+  protected $moduleHandler;
+
+  /**
    * Constructs a new FieldOverview.
    *
    * @param \Drupal\Core\Entity\EntityManager $entity_manager
    *   The entity manager.
    * @param \Drupal\Core\Entity\Field\FieldTypePluginManager $field_type_manager
    *   The field type manager
+   * @param \Drupal\Core\Extension\ModuleHandlerInterface $module_handler
+   *   The module handler to invoke hooks on.
    */
-  public function __construct(EntityManager $entity_manager, FieldTypePluginManager $field_type_manager) {
-    $this->entityManager = $entity_manager;
+  public function __construct(EntityManager $entity_manager, FieldTypePluginManager $field_type_manager, ModuleHandlerInterface $module_handler) {
+    parent::__construct($entity_manager);
     $this->fieldTypeManager = $field_type_manager;
+    $this->moduleHandler = $module_handler;
   }
 
   /**
@@ -44,7 +55,8 @@ public function __construct(EntityManager $entity_manager, FieldTypePluginManage
   public static function create(ContainerInterface $container) {
     return new static(
       $container->get('plugin.manager.entity'),
-      $container->get('plugin.manager.entity.field.field_type')
+      $container->get('plugin.manager.entity.field.field_type'),
+      $container->get('module_handler')
     );
   }
 
@@ -142,6 +154,8 @@ public function buildForm(array $form, array &$form_state, $entity_type = NULL,
         'href' => "$admin_field_path/delete",
         'attributes' => array('title' => t('Delete instance.')),
       );
+      // Allow altering the operations on this entity listing.
+      $this->moduleHandler->alter('entity_operation', $links, $instance);
       $table[$name]['operations']['data'] = array(
         '#type' => 'operations',
         '#links' => $links,
diff --git a/core/modules/field_ui/lib/Drupal/field_ui/Form/FieldInstanceEditForm.php b/core/modules/field_ui/lib/Drupal/field_ui/Form/FieldInstanceEditForm.php
index 046e012..956dc1b 100644
--- a/core/modules/field_ui/lib/Drupal/field_ui/Form/FieldInstanceEditForm.php
+++ b/core/modules/field_ui/lib/Drupal/field_ui/Form/FieldInstanceEditForm.php
@@ -187,30 +187,8 @@ public function buildForm(array $form, array &$form_state, FieldInstanceInterfac
    * {@inheritdoc}
    */
   public function validateForm(array &$form, array &$form_state) {
-    // Take the incoming values as the $this->instance definition, so that the 'default
-    // value' gets validated using the instance settings being submitted.
-    $field_name = $this->instance['field_name'];
-    $entity = $form['#entity'];
-    $entity_form_display = $form['#entity_form_display'];
-
     if (isset($form['instance']['default_value_widget'])) {
-      $element = $form['instance']['default_value_widget'];
-
-      // Extract the 'default value'.
-      $items = $entity->getNGEntity()->{$field_name};
-      $entity_form_display->getRenderer($this->instance->getField()->id)->extractFormValues($entity, Language::LANGCODE_NOT_SPECIFIED, $items, $element, $form_state);
-      $violations = $items->validate();
-
-      // Report errors.
-      if (count($violations)) {
-        $field_state = field_form_get_state($element['#parents'], $field_name, Language::LANGCODE_NOT_SPECIFIED, $form_state);
-        // Store reported errors in $form_state.
-        $field_state['constraint_violations'] = $violations;
-        field_form_set_state($element['#parents'], $field_name, Language::LANGCODE_NOT_SPECIFIED, $form_state, $field_state);
-
-        // Assign reported errors to the correct form element.
-        $entity_form_display->getRenderer($this->instance->getField()->id)->flagErrors($entity, Language::LANGCODE_NOT_SPECIFIED, $items, $element, $form_state);
-      }
+      $this->getFieldItem($form['#entity'], $this->instance['field_name'])->defaultValuesFormValidate($form, $form_state);
     }
   }
 
@@ -224,13 +202,7 @@ public function submitForm(array &$form, array &$form_state) {
 
     // Handle the default value.
     if (isset($form['instance']['default_value_widget'])) {
-      $element = $form['instance']['default_value_widget'];
-
-      // Extract field values.
-      $items = $entity->getNGEntity()->{$field_name};
-      $entity_form_display->getRenderer($this->instance->getField()->id)->extractFormValues($entity, Language::LANGCODE_NOT_SPECIFIED, $items, $element, $form_state);
-
-      $this->instance['default_value'] = $items->getValue() ?: NULL;
+      $this->instance['default_value'] = $this->getFieldItem($form['#entity'], $this->instance['field_name'])->defaultValuesFormSubmit($form, $form_state);
     }
 
     // Merge incoming values into the instance.
@@ -279,29 +251,7 @@ protected function getDefaultValueWidget($field, array &$form, &$form_state) {
     $this->instance['required'] = FALSE;
     $this->instance['description'] = '';
 
-    // Adjust the instance definition to use the default widget of this field type
-    // instead of the hidden widget.
-    // @todo Clean this up since we don't have $this->instance['widget'] anymore.
-    //   see https://drupal.org/node/2028759
-    if ($this->instance['widget']['type'] == 'hidden') {
-      $field_type = $this->fieldTypeManager->getDefinition($field['type']);
-      $default_widget = $this->widgetManager->getDefinition($field_type['default_widget']);
-
-      $this->instance['widget'] = array(
-        'type' => $default_widget['id'],
-        'settings' => $default_widget['settings'],
-        'weight' => 0,
-      );
-    }
-
-    // Insert the widget. Since we do not use the "official" instance definition,
-    // the whole flow cannot use field_invoke_method().
-    $items = $entity->getNGEntity()->{$this->instance->getField()->id};
-    if (!empty($this->instance['default_value'])) {
-      $items->setValue((array) $this->instance['default_value']);
-    }
-    $element += $entity_form_display->getRenderer($this->instance->getField()->id)->form($entity, Language::LANGCODE_NOT_SPECIFIED, $items, $element, $form_state);
-
+    $element += $this->getFieldItem($form['#entity'], $this->instance['field_name'])->defaultValuesForm($element, $form, $form_state);
     return $element;
   }
 
diff --git a/core/modules/rdf/lib/Drupal/rdf/Tests/StandardProfileTest.php b/core/modules/rdf/lib/Drupal/rdf/Tests/StandardProfileTest.php
index 39f68cc..62767a6 100644
--- a/core/modules/rdf/lib/Drupal/rdf/Tests/StandardProfileTest.php
+++ b/core/modules/rdf/lib/Drupal/rdf/Tests/StandardProfileTest.php
@@ -231,20 +231,6 @@ protected function doFrontPageRdfaTests() {
     // Test properties that are displayed in both teaser and full mode.
     $this->assertRdfaArticleProperties($graph, "Teaser");
 
-    // Title.
-    // @todo Once the title data is output consistently between full and teaser
-    //   view modes, move this to _testCommonNodeProperties().
-    $title = $this->article->get('title')->offsetGet(0)->get('value')->getValue();
-    $expected_value = array(
-      'type' => 'literal',
-      // The teaser title parses with additional whitespace.
-      'value' => "
-        $title
-      ",
-      'lang' => 'en',
-    );
-    $this->assertTrue($graph->hasProperty($this->articleUri, 'http://schema.org/name', $expected_value), "Teaser title was found (schema:name).");
-
     // @todo Once the image points to the original instead of the processed
     //   image, move this to testArticleProperties().
     $image_file = file_load($this->article->get('field_image')->offsetGet(0)->get('target_id')->getValue());
@@ -279,16 +265,6 @@ protected function doArticleRdfaTests() {
     // Test the comment properties displayed on articles.
     $this->assertRdfaNodeCommentProperties($graph);
 
-    // Title.
-    // @todo Once the title data is output consistently between full and teaser
-    //   view modes, move this to _testCommonNodeProperties().
-    $expected_value = array(
-      'type' => 'literal',
-      'value' => $this->article->get('title')->offsetGet(0)->get('value')->getValue(),
-      'lang' => 'en',
-    );
-    $this->assertTrue($graph->hasProperty($this->articleUri, 'http://schema.org/name', $expected_value), "Article title was found (schema:name).");
-
     // @todo Once the image points to the original instead of the processed
     //   image, move this to testArticleProperties().
     $expected_value = array(
@@ -320,16 +296,6 @@ protected function doPageRdfaTests() {
 
     // Test the properties that are common between pages and articles.
     $this->assertRdfaCommonNodeProperties($graph, $this->page, "Page");
-
-    // Title.
-    // @todo Once the title data is output consistently between full and teaser
-    //   view modes, move this to _testCommonNodeProperties().
-    $expected_value = array(
-      'type' => 'literal',
-      'value' => $this->page->get('title')->offsetGet(0)->get('value')->getValue(),
-      'lang' => 'en',
-    );
-    $this->assertTrue($graph->hasProperty($this->pageUri, 'http://schema.org/name', $expected_value), "Page title was found (schema:name).");
   }
 
   /**
@@ -394,6 +360,14 @@ protected function assertRdfaCommonNodeProperties($graph, NodeInterface $node, $
     $uri_info = $node->uri();
     $uri = url($uri_info['path'], array('absolute' => TRUE));
 
+    // Title.
+    $expected_value = array(
+      'type' => 'literal',
+      'value' => $node->get('title')->offsetGet(0)->get('value')->getValue(),
+      'lang' => 'en',
+    );
+    $this->assertTrue($graph->hasProperty($uri, 'http://schema.org/name', $expected_value), "$message_prefix title was found (schema:name).");
+
     // Created date.
     $expected_value = array(
       'type' => 'literal',
diff --git a/core/modules/rdf/rdf.module b/core/modules/rdf/rdf.module
index 3bce0ee..06b25a0 100644
--- a/core/modules/rdf/rdf.module
+++ b/core/modules/rdf/rdf.module
@@ -254,28 +254,17 @@ function rdf_preprocess_node(&$variables) {
   $variables['attributes']['about'] = empty($variables['node_url']) ? NULL: $variables['node_url'];
   $variables['attributes']['typeof'] = empty($bundle_mapping['types']) ? NULL : $bundle_mapping['types'];
 
-  // Adds RDFa markup to the title of the node. Because the RDFa markup is
-  // added to the <h2> tag which might contain HTML code, we specify an empty
-  // datatype to ensure the value of the title read by the RDFa parsers is a
-  // literal.
+  // Adds RDFa markup for the node title as metadata because wrapping the title
+  // with markup is not reliable and the title output is different depdending on
+  // the view mode (e.g. full vs. teaser).
   $title_mapping = $mapping->getPreparedFieldMapping('title');
-  $variables['title_attributes']['property'] = empty($title_mapping['properties']) ? NULL : $title_mapping['properties'];
-  $variables['title_attributes']['datatype'] = '';
-
-  // In full node mode, the title is not displayed by node.html.twig so it is
-  // added in the <head> tag of the HTML page.
-  if ($variables['page']) {
-    $element = array(
-      '#tag' => 'meta',
-      '#attributes' => array(
-        'content' => $variables['label'],
-        'about' => $variables['node_url'],
-      ),
+  if ($title_mapping) {
+    $title_attributes['property'] = empty($title_mapping['properties']) ? NULL : $title_mapping['properties'];
+    $title_attributes['content'] = $variables['label'];
+    $variables['title_suffix']['rdf_meta_title'] = array(
+      '#theme' => 'rdf_metadata',
+      '#metadata' => array($title_attributes),
     );
-    if (!empty($title_mapping['properties'])) {
-      $element['#attributes']['property'] = $title_mapping['properties'];
-    }
-    drupal_add_html_head($element, 'rdf_node_title');
   }
 
   // Adds RDFa markup for the relation between the node and its author.
diff --git a/core/modules/system/lib/Drupal/system/Tests/Common/JavaScriptTest.php b/core/modules/system/lib/Drupal/system/Tests/Common/JavaScriptTest.php
index 783eab2..128dc30 100644
--- a/core/modules/system/lib/Drupal/system/Tests/Common/JavaScriptTest.php
+++ b/core/modules/system/lib/Drupal/system/Tests/Common/JavaScriptTest.php
@@ -480,9 +480,10 @@ function testLibraryRender() {
     $this->assertTrue(strpos($styles, 'core/assets/vendor/farbtastic/farbtastic.css'), 'Stylesheet of library was added to the page.');
 
     $result = drupal_add_library('common_test', 'shorthand.plugin');
-    $path = drupal_get_path('module', 'common_test') . '/js/shorthand.js';
+    $path = drupal_get_path('module', 'common_test') . '/js/shorthand.js?v=0.8.3.37';
     $scripts = drupal_get_js();
     $this->assertTrue(strpos($scripts, $path), 'JavaScript specified in hook_library_info() using shorthand format (without any options) was added to the page.');
+    $this->assertEqual(substr_count($scripts, 'shorthand.js'), 1, 'Shorthand JavaScript file only added once.');
   }
 
   /**
diff --git a/core/modules/system/lib/Drupal/system/Tests/Database/DatabaseTestBase.php b/core/modules/system/lib/Drupal/system/Tests/Database/DatabaseTestBase.php
index 17d7ec0..0aa4d5b 100644
--- a/core/modules/system/lib/Drupal/system/Tests/Database/DatabaseTestBase.php
+++ b/core/modules/system/lib/Drupal/system/Tests/Database/DatabaseTestBase.php
@@ -24,6 +24,7 @@ function setUp() {
     $this->installSchema('database_test', array(
       'test',
       'test_people',
+      'test_people_copy',
       'test_one_blob',
       'test_two_blobs',
       'test_task',
diff --git a/core/modules/system/lib/Drupal/system/Tests/Database/InsertTest.php b/core/modules/system/lib/Drupal/system/Tests/Database/InsertTest.php
index 76afcf8..46f66fb 100644
--- a/core/modules/system/lib/Drupal/system/Tests/Database/InsertTest.php
+++ b/core/modules/system/lib/Drupal/system/Tests/Database/InsertTest.php
@@ -142,9 +142,9 @@ function testInsertLastInsertID() {
   }
 
   /**
-   * Tests that the INSERT INTO ... SELECT ... syntax works.
+   * Tests that the INSERT INTO ... SELECT (fields) ... syntax works.
    */
-  function testInsertSelect() {
+  function testInsertSelectFields() {
     $query = db_select('test_people', 'tp');
     // The query builder will always append expressions after fields.
     // Add the expression first to test that the insert fields are correctly
@@ -166,4 +166,26 @@ function testInsertSelect() {
     $saved_age = db_query('SELECT age FROM {test} WHERE name = :name', array(':name' => 'Meredith'))->fetchField();
     $this->assertIdentical($saved_age, '30', 'Can retrieve after inserting.');
   }
+
+  /**
+   * Tests that the INSERT INTO ... SELECT * ... syntax works.
+   */
+  function testInsertSelectAll() {
+    $query = db_select('test_people', 'tp')
+      ->fields('tp')
+      ->condition('tp.name', 'Meredith');
+
+    // The resulting query should be equivalent to:
+    // INSERT INTO test_people_copy
+    // SELECT *
+    // FROM test_people tp
+    // WHERE tp.name = 'Meredith'
+    db_insert('test_people_copy')
+      ->from($query)
+      ->execute();
+
+    $saved_age = db_query('SELECT age FROM {test_people_copy} WHERE name = :name', array(':name' => 'Meredith'))->fetchField();
+    $this->assertIdentical($saved_age, '30', 'Can retrieve after inserting.');
+  }
+
 }
diff --git a/core/modules/system/tests/modules/database_test/database_test.install b/core/modules/system/tests/modules/database_test/database_test.install
index 867d813..866d453 100644
--- a/core/modules/system/tests/modules/database_test/database_test.install
+++ b/core/modules/system/tests/modules/database_test/database_test.install
@@ -87,6 +87,37 @@ function database_test_schema() {
     ),
   );
 
+  $schema['test_people_copy'] = array(
+    'description' => 'A duplicate version of the test_people table, used for additional tests.',
+    'fields' => array(
+      'name' => array(
+        'description' => "A person's name",
+        'type' => 'varchar',
+        'length' => 255,
+        'not null' => TRUE,
+        'default' => '',
+      ),
+      'age' => array(
+        'description' => "The person's age",
+        'type' => 'int',
+        'unsigned' => TRUE,
+        'not null' => TRUE,
+        'default' => 0,
+      ),
+      'job' => array(
+        'description' => "The person's job",
+        'type' => 'varchar',
+        'length' => 255,
+        'not null' => TRUE,
+        'default' => '',
+      ),
+    ),
+    'primary key' => array('job'),
+    'indexes' => array(
+      'ages' => array('age'),
+    ),
+  );
+
   $schema['test_one_blob'] = array(
     'description' => 'A simple table including a BLOB field for testing BLOB behavior.',
     'fields' => array(
diff --git a/core/themes/bartik/css/style.css b/core/themes/bartik/css/style.css
index f758b39..2253074 100644
--- a/core/themes/bartik/css/style.css
+++ b/core/themes/bartik/css/style.css
@@ -1047,37 +1047,37 @@ ul.links {
 #footer .block {
   clear: both;
 }
-#footer ul.menu ,
-#footer ul.menu li {
+#footer .menu ,
+#footer .menu li {
   list-style: none;
   margin: 0;
   padding: 0;
 }
-#footer ul.menu li a {
+#footer .menu li a {
   float: left; /* LTR */
   padding: 0 12px;
   display: block;
   border-right: 1px solid #555; /* LTR */
   border-color: rgba(255, 255, 255, 0.15);
 }
-[dir="rtl"] #footer ul.menu li a {
+[dir="rtl"] #footer .menu li a {
   float: right;
   border-left: 1px solid #555;
   border-color: rgba(255, 255, 255, 0.15);
   border-right: none;
 }
-#footer ul.menu li.first a {
+#footer .menu li.first a {
   padding-left: 0; /* LTR */
 }
-[dir="rtl"] #footer ul.menu li.first a {
+[dir="rtl"] #footer .menu li.first a {
   padding-right: 0;
   padding-left: 12px;
 }
-#footer ul.menu li.last a {
+#footer .menu li.last a {
   padding-right: 0; /* LTR */
   border-right: none; /* LTR */
 }
-[dir="rtl"] #footer ul.menu li.last a {
+[dir="rtl"] #footer .menu li.last a {
   padding-left: 0;
   padding-right: 12px;
   border-left: none;
