diff --git a/core/lib/Drupal/Core/Field/FieldTypePluginManager.php b/core/lib/Drupal/Core/Field/FieldTypePluginManager.php
index 905cdb4..26ade20 100644
--- a/core/lib/Drupal/Core/Field/FieldTypePluginManager.php
+++ b/core/lib/Drupal/Core/Field/FieldTypePluginManager.php
@@ -135,11 +135,13 @@ public function getUiDefinitions() {
     // Add preconfigured definitions.
     foreach ($definitions as $id => $definition) {
       if (is_subclass_of($definition['class'], '\Drupal\Core\Field\PreconfiguredFieldUiOptionsInterface')) {
-        foreach ($definition['class']::getPreconfiguredOptions() as $key => $option) {
+        foreach ($this->getPreconfiguredOptions($definition['id']) as $key => $option) {
           $definitions['field_ui:' . $id . ':' . $key] = [
             'label' => $option['label'],
           ] + $definition;
-
+          if (isset($option['description'])) {
+            $definitions['field_ui:' . $id . ':' . $key]['description'] = $option['description'];
+          }
           if (isset($option['category'])) {
             $definitions['field_ui:' . $id . ':' . $key]['category'] = $option['category'];
           }
@@ -153,6 +155,19 @@ public function getUiDefinitions() {
   /**
    * {@inheritdoc}
    */
+  public function getPreconfiguredOptions($field_type) {
+    $options = [];
+    $class = $this->getPluginClass($field_type);
+    if (is_subclass_of($class, '\Drupal\Core\Field\PreconfiguredFieldUiOptionsInterface')) {
+      $options = $class::getPreconfiguredOptions();
+      $this->moduleHandler->alter('field_ui_preconfigured_options', $options, $field_type);
+    }
+    return $options;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
   public function getPluginClass($type) {
     $plugin_definition = $this->getDefinition($type, FALSE);
     return $plugin_definition['class'];
diff --git a/core/lib/Drupal/Core/Field/FieldTypePluginManagerInterface.php b/core/lib/Drupal/Core/Field/FieldTypePluginManagerInterface.php
index 3a5c7b5..d937aab 100644
--- a/core/lib/Drupal/Core/Field/FieldTypePluginManagerInterface.php
+++ b/core/lib/Drupal/Core/Field/FieldTypePluginManagerInterface.php
@@ -85,6 +85,26 @@ public function getDefaultStorageSettings($type);
   public function getUiDefinitions();
 
   /**
+   * Returns preconfigured field options for a field type.
+   *
+   * This is a wrapper around
+   * \Drupal\Core\Field\PreconfiguredFieldUiOptionsInterface::getPreconfiguredOptions()
+   * allowing modules to alter the result of this method by implementing
+   * hook_field_ui_preconfigured_options_alter().
+   *
+   * @param string $field_type
+   *   The field type plugin ID.
+   *
+   * @return array
+   *   A multi-dimensional array as returned from
+   *   \Drupal\Core\Field\PreconfiguredFieldUiOptionsInterface::getPreconfiguredOptions().
+   *
+   * @see \Drupal\Core\Field\PreconfiguredFieldUiOptionsInterface::getPreconfiguredOptions()
+   * @see hook_field_ui_preconfigured_options_alter()
+   */
+  public function getPreconfiguredOptions($field_type);
+
+  /**
    * Returns the PHP class that implements the field type plugin.
    *
    * @param string $type
diff --git a/core/lib/Drupal/Core/Field/Plugin/Field/FieldType/EntityReferenceItem.php b/core/lib/Drupal/Core/Field/Plugin/Field/FieldType/EntityReferenceItem.php
index 70f9dc9..51c97c8 100644
--- a/core/lib/Drupal/Core/Field/Plugin/Field/FieldType/EntityReferenceItem.php
+++ b/core/lib/Drupal/Core/Field/Plugin/Field/FieldType/EntityReferenceItem.php
@@ -633,6 +633,12 @@ public static function settingsAjaxSubmit($form, FormStateInterface $form_state)
   public static function getPreconfiguredOptions() {
     $options = [];
 
+    $description = '';
+    $plugin_definition = \Drupal::service('plugin.manager.field.field_type')->getDefinition('entity_reference');
+    if (isset($plugin_definition['description'])) {
+      $description = $plugin_definition['description'];
+    }
+
     // Add all the commonly referenced entity types as distinct pre-configured
     // options.
     $entity_types = \Drupal::entityManager()->getDefinitions();
@@ -644,6 +650,7 @@ public static function getPreconfiguredOptions() {
     foreach ($common_references as $entity_type) {
       $options[$entity_type->id()] = [
         'label' => $entity_type->getLabel(),
+        'description' => $description,
         'field_storage_config' => [
           'settings' => [
             'target_type' => $entity_type->id(),
diff --git a/core/lib/Drupal/Core/Field/PreconfiguredFieldUiOptionsInterface.php b/core/lib/Drupal/Core/Field/PreconfiguredFieldUiOptionsInterface.php
index 9130e8c..35d5e6f 100644
--- a/core/lib/Drupal/Core/Field/PreconfiguredFieldUiOptionsInterface.php
+++ b/core/lib/Drupal/Core/Field/PreconfiguredFieldUiOptionsInterface.php
@@ -16,9 +16,16 @@
   /**
    * Returns preconfigured field options for a field type.
    *
+   * Note that if you want to give modules an opportunity to alter the result
+   * of this method, you should call
+   * \Drupal\Core\Field\FieldTypePluginManagerInterface::getPreconfiguredOptions()
+   * instead.
+   *
    * @return mixed[][]
    *   A multi-dimensional array with string keys and the following structure:
    *   - label: The label to show in the field type selection list.
+   *   - description: (optional) The description to be used when exposing this
+   *     field in the field type selection list.
    *   - category: (optional) The category in which to put the field label.
    *     Defaults to the category of the field type.
    *   - field_storage_config: An array with the following supported keys:
@@ -35,6 +42,7 @@
    * @see \Drupal\field\Entity\FieldStorageConfig
    * @see \Drupal\field\Entity\FieldConfig
    * @see \Drupal\Core\Entity\Display\EntityDisplayInterface::setComponent()
+   * @see \Drupal\Core\Field\FieldTypePluginManagerInterface::getPreconfiguredOptions()
    */
   public static function getPreconfiguredOptions();
 
diff --git a/core/modules/field/field.api.php b/core/modules/field/field.api.php
index 42bdd1e..130f923 100644
--- a/core/modules/field/field.api.php
+++ b/core/modules/field/field.api.php
@@ -59,6 +59,33 @@ function hook_field_info_alter(&$info) {
 }
 
 /**
+ * Perform alterations on preconfigured field options.
+ *
+ * @param array $options
+ *   Array of options as returned from
+ *   \Drupal\Core\Field\PreconfiguredFieldUiOptionsInterface::getPreconfiguredOptions().
+ * @param string $field_type
+ *   The field type plugin ID.
+ *
+ * @see \Drupal\Core\Field\PreconfiguredFieldUiOptionsInterface::getPreconfiguredOptions()
+ */
+function hook_field_ui_preconfigured_options_alter(array &$options, $field_type) {
+  // If the field is not an "entity_reference"-based field, bail out.
+  /** @var \Drupal\Core\Field\FieldTypePluginManager $field_type_manager */
+  $field_type_manager = \Drupal::service('plugin.manager.field.field_type');
+  $class = $field_type_manager->getPluginClass($field_type);
+  if (!is_a($class, 'Drupal\Core\Field\Plugin\Field\FieldType\EntityReferenceItem', TRUE)) {
+    return;
+  }
+
+  // Set the default formatter for media in entity reference fields to be the
+  // "Rendered entity" formatter.
+  if (!empty($options['media'])) {
+    $options['media']['entity_view_display']['type'] = 'entity_reference_entity_view';
+  }
+}
+
+/**
  * Forbid a field storage update from occurring.
  *
  * Any module may forbid any update for any reason. For example, the
diff --git a/core/modules/field/tests/modules/field_test/field_test.module b/core/modules/field/tests/modules/field_test/field_test.module
index cc1f9fa..9121e94 100644
--- a/core/modules/field/tests/modules/field_test/field_test.module
+++ b/core/modules/field/tests/modules/field_test/field_test.module
@@ -171,3 +171,14 @@ function field_test_entity_bundle_field_info_alter(&$fields, EntityTypeInterface
     ]);
   }
 }
+
+/**
+ * Implements hook_field_ui_preconfigured_options_alter().
+ */
+function field_test_field_ui_preconfigured_options_alter(array &$options, $field_type) {
+  if ($field_type === 'test_field_with_preconfigured_options') {
+    $options['custom_options']['entity_view_display']['settings'] = [
+      'test_formatter_setting_multiple' => 'altered dummy test string',
+    ];
+  }
+}
diff --git a/core/modules/field_ui/src/Form/FieldStorageAddForm.php b/core/modules/field_ui/src/Form/FieldStorageAddForm.php
index 97e3ce7..e397844 100644
--- a/core/modules/field_ui/src/Form/FieldStorageAddForm.php
+++ b/core/modules/field_ui/src/Form/FieldStorageAddForm.php
@@ -2,6 +2,7 @@
 
 namespace Drupal\field_ui\Form;
 
+use Drupal\Component\Utility\Html;
 use Drupal\Core\Config\ConfigFactoryInterface;
 use Drupal\Core\Entity\EntityManagerInterface;
 use Drupal\Core\Field\FieldTypePluginManagerInterface;
@@ -104,7 +105,8 @@ public function buildForm(array $form, FormStateInterface $form_state, $entity_t
 
     // Gather valid field types.
     $field_type_options = [];
-    foreach ($this->fieldTypePluginManager->getGroupedDefinitions($this->fieldTypePluginManager->getUiDefinitions()) as $category => $field_types) {
+    $ui_definitions = $this->fieldTypePluginManager->getGroupedDefinitions($this->fieldTypePluginManager->getUiDefinitions());
+    foreach ($ui_definitions as $category => $field_types) {
       foreach ($field_types as $name => $field_type) {
         $field_type_options[$category][$name] = $field_type['label'];
       }
@@ -145,6 +147,36 @@ public function buildForm(array $form, FormStateInterface $form_state, $entity_t
       ];
     }
 
+    // Show the field description, if it exists.
+    $form['description_wrapper'] = [
+      '#type' => 'container',
+      '#states' => [
+        '!visible' => [
+          ':input[name="new_storage_type"]' => ['value' => ''],
+        ],
+      ],
+    ];
+    $i = 0;
+    foreach ($ui_definitions as $category => $field_types) {
+      foreach ($field_types as $name => $field_type) {
+        if (empty($field_type['description'])) {
+          continue;
+        }
+        $form['description_wrapper']["description_{$name}_{$i}"] = [
+          '#type' => 'container',
+          '#states' => [
+            'visible' => [
+              ':input[name="new_storage_type"]' => ['value' => $name],
+            ],
+          ],
+        ];
+        $form['description_wrapper']["description_{$name}_{$i}"]['description'] = [
+          '#markup' => $field_type['description'],
+        ];
+        $i++;
+      }
+    }
+
     // Field label and field_name.
     $form['new_storage_wrapper'] = [
       '#type' => 'container',
@@ -312,14 +344,16 @@ public function submitForm(array &$form, FormStateInterface $form_state) {
         'translatable' => FALSE,
       ];
       $widget_id = $formatter_id = NULL;
+      $widget_settings = $formatter_settings = [];
 
       // Check if we're dealing with a preconfigured field.
       if (strpos($field_storage_values['type'], 'field_ui:') !== FALSE) {
         list(, $field_type, $option_key) = explode(':', $field_storage_values['type'], 3);
         $field_storage_values['type'] = $field_type;
 
-        $field_type_class = $this->fieldTypePluginManager->getDefinition($field_type)['class'];
-        $field_options = $field_type_class::getPreconfiguredOptions()[$option_key];
+        $field_definition = $this->fieldTypePluginManager->getDefinition($field_type);
+        $options = $this->fieldTypePluginManager->getPreconfiguredOptions($field_definition['id']);
+        $field_options = $options[$option_key];
 
         // Merge in preconfigured field storage options.
         if (isset($field_options['field_storage_config'])) {
@@ -340,7 +374,9 @@ public function submitForm(array &$form, FormStateInterface $form_state) {
         }
 
         $widget_id = isset($field_options['entity_form_display']['type']) ? $field_options['entity_form_display']['type'] : NULL;
+        $widget_settings = isset($field_options['entity_form_display']['settings']) ? $field_options['entity_form_display']['settings'] : [];
         $formatter_id = isset($field_options['entity_view_display']['type']) ? $field_options['entity_view_display']['type'] : NULL;
+        $formatter_settings = isset($field_options['entity_view_display']['settings']) ? $field_options['entity_view_display']['settings'] : [];
       }
 
       // Create the field storage and field.
@@ -349,8 +385,8 @@ public function submitForm(array &$form, FormStateInterface $form_state) {
         $field = $this->entityManager->getStorage('field_config')->create($field_values);
         $field->save();
 
-        $this->configureEntityFormDisplay($values['field_name'], $widget_id);
-        $this->configureEntityViewDisplay($values['field_name'], $formatter_id);
+        $this->configureEntityFormDisplay($values['field_name'], $widget_id, $widget_settings);
+        $this->configureEntityViewDisplay($values['field_name'], $formatter_id, $formatter_settings);
 
         // Always show the field settings step, as the cardinality needs to be
         // configured for new fields.
@@ -418,12 +454,20 @@ public function submitForm(array &$form, FormStateInterface $form_state) {
    *   The field name.
    * @param string|null $widget_id
    *   (optional) The plugin ID of the widget. Defaults to NULL.
+   * @param array $widget_settings
+   *   (optional) An array of widget settings. Defaults to an empty array.
    */
-  protected function configureEntityFormDisplay($field_name, $widget_id = NULL) {
+  protected function configureEntityFormDisplay($field_name, $widget_id = NULL, array $widget_settings = []) {
+    $options = [];
+    if ($widget_id) {
+      $options['type'] = $widget_id;
+      if (!empty($widget_settings)) {
+        $options['settings'] = $widget_settings;
+      }
+    }
     // Make sure the field is displayed in the 'default' form mode (using
     // default widget and settings). It stays hidden for other form modes
     // until it is explicitly configured.
-    $options = $widget_id ? ['type' => $widget_id] : [];
     entity_get_form_display($this->entityTypeId, $this->bundle, 'default')
       ->setComponent($field_name, $options)
       ->save();
@@ -436,12 +480,20 @@ protected function configureEntityFormDisplay($field_name, $widget_id = NULL) {
    *   The field name.
    * @param string|null $formatter_id
    *   (optional) The plugin ID of the formatter. Defaults to NULL.
+   * @param array $formatter_settings
+   *   (optional) An array of formatter settings. Defaults to an empty array.
    */
-  protected function configureEntityViewDisplay($field_name, $formatter_id = NULL) {
+  protected function configureEntityViewDisplay($field_name, $formatter_id = NULL, array $formatter_settings = []) {
+    $options = [];
+    if ($formatter_id) {
+      $options['type'] = $formatter_id;
+      if (!empty($formatter_settings)) {
+        $options['settings'] = $formatter_settings;
+      }
+    }
     // Make sure the field is displayed in the 'default' view mode (using
     // default formatter and settings). It stays hidden for other view
     // modes until it is explicitly configured.
-    $options = $formatter_id ? ['type' => $formatter_id] : [];
     entity_get_display($this->entityTypeId, $this->bundle, 'default')
       ->setComponent($field_name, $options)
       ->save();
diff --git a/core/modules/field_ui/src/Tests/ManageFieldsTest.php b/core/modules/field_ui/src/Tests/ManageFieldsTest.php
index d08ab03..112e392 100644
--- a/core/modules/field_ui/src/Tests/ManageFieldsTest.php
+++ b/core/modules/field_ui/src/Tests/ManageFieldsTest.php
@@ -750,6 +750,7 @@ public function testPreconfiguredFields() {
     $this->assertEqual($form_display->getComponent('field_test_custom_options')['type'], 'test_field_widget_multiple');
     $view_display = entity_get_display('node', 'article', 'default');
     $this->assertEqual($view_display->getComponent('field_test_custom_options')['type'], 'field_test_multiple');
+    $this->assertEqual($view_display->getComponent('field_test_custom_options')['settings']['test_formatter_setting_multiple'], 'altered dummy test string');
   }
 
   /**
diff --git a/core/modules/field_ui/tests/src/FunctionalJavascript/UiDescriptionsTest.php b/core/modules/field_ui/tests/src/FunctionalJavascript/UiDescriptionsTest.php
new file mode 100644
index 0000000..b257333
--- /dev/null
+++ b/core/modules/field_ui/tests/src/FunctionalJavascript/UiDescriptionsTest.php
@@ -0,0 +1,67 @@
+<?php
+
+namespace Drupal\Tests\field_ui\FunctionalJavascript;
+
+use Drupal\FunctionalJavascriptTests\JavascriptTestBase;
+
+/**
+ * Tests that the field descriptions are correctly shown on the UI.
+ *
+ * @group field_ui
+ */
+class UiDescriptionsTest extends JavascriptTestBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  protected static $modules = [
+    'field_ui',
+    'node',
+    'media',
+  ];
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function setUp() {
+    parent::setUp();
+
+    $this->drupalLogin($this->drupalCreateUser([
+      'access administration pages',
+      'administer node fields',
+      'view the administration theme',
+    ]));
+  }
+
+  /**
+   * Tests the descriptions of some fields.
+   */
+  public function testFieldDescriptions() {
+    $page = $this->getSession()->getPage();
+    $assert_session = $this->assertSession();
+
+    $node_type = $this->drupalCreateContentType();
+
+    $this->drupalGet("admin/structure/types/manage/{$node_type->id()}/fields/add-field");
+
+    // Check that the description wrapper is only visible after you select that
+    // element from the list.
+    $assert_session->optionExists('edit-new-storage-type', 'field_ui:entity_reference:node');
+    $node_description_element = $page->find('css', '.field-uientity-referencenode');
+    $this->assertFalse($node_description_element->isVisible());
+    $page->selectFieldOption('edit-new-storage-type', 'field_ui:entity_reference:node');
+    $node_description_element = $page->find('css', '.field-uientity-referencenode');
+    $this->assertTrue($node_description_element->isVisible());
+
+    // Make sure the expected texts from the plugin annotations (or overriden
+    // strings) are present on the page.
+    $manager = \Drupal::service('plugin.manager.field.field_type');
+    $file_description = $manager->getDefinition('file')['description'];
+    $assert_session->pageTextContains($file_description);
+    $image_description = $manager->getDefinition('image')['description'];
+    $assert_session->pageTextContains($image_description);
+    $media_description = 'Use a "Media" field to reference assets such as files, images, videos and more. You will be able to select which media types can be referenced in the next steps.';
+    $assert_session->pageTextContains($media_description);
+  }
+
+}
diff --git a/core/modules/file/src/Plugin/Field/FieldType/FileItem.php b/core/modules/file/src/Plugin/Field/FieldType/FileItem.php
index 542be12..df5cc4c 100644
--- a/core/modules/file/src/Plugin/Field/FieldType/FileItem.php
+++ b/core/modules/file/src/Plugin/Field/FieldType/FileItem.php
@@ -18,7 +18,7 @@
  * @FieldType(
  *   id = "file",
  *   label = @Translation("File"),
- *   description = @Translation("This field stores the ID of a file as an integer value."),
+ *   description = @Translation("Use a 'File' reference when you want to upload an arbitrary file to an entity, generally without re-usability needs. If in doubt, 'Media' references should be preferred instead."),
  *   category = @Translation("Reference"),
  *   default_widget = "file_generic",
  *   default_formatter = "file_default",
diff --git a/core/modules/image/src/Plugin/Field/FieldType/ImageItem.php b/core/modules/image/src/Plugin/Field/FieldType/ImageItem.php
index 67a15a7..19499af 100644
--- a/core/modules/image/src/Plugin/Field/FieldType/ImageItem.php
+++ b/core/modules/image/src/Plugin/Field/FieldType/ImageItem.php
@@ -18,7 +18,7 @@
  * @FieldType(
  *   id = "image",
  *   label = @Translation("Image"),
- *   description = @Translation("This field stores the ID of an image file as an integer value."),
+ *   description = @Translation("Use an 'Image' reference when you want to upload an image to on entity, generally without re-usability needs. If in doubt, 'Media' references should be preferred instead."),
  *   category = @Translation("Reference"),
  *   default_widget = "image_image",
  *   default_formatter = "image",
diff --git a/core/modules/media/media.module b/core/modules/media/media.module
index dc2d898..a83eb35 100644
--- a/core/modules/media/media.module
+++ b/core/modules/media/media.module
@@ -96,3 +96,26 @@ function template_preprocess_media(array &$variables) {
     $variables['content'][$key] = $variables['elements'][$key];
   }
 }
+
+/**
+ * Implements hook_field_ui_preconfigured_options_alter().
+ */
+function media_field_ui_preconfigured_options_alter(array &$options, $field_type) {
+  // If the field is not an "entity_reference"-based field, bail out.
+  /** @var \Drupal\Core\Field\FieldTypePluginManager $field_type_manager */
+  $field_type_manager = \Drupal::service('plugin.manager.field.field_type');
+  $class = $field_type_manager->getPluginClass($field_type);
+  if (!is_a($class, 'Drupal\Core\Field\Plugin\Field\FieldType\EntityReferenceItem', TRUE)) {
+    return;
+  }
+
+  if (!empty($options['media'])) {
+    // Set the default formatter for media in entity reference fields to be the
+    // "Rendered entity" formatter.
+    $options['media']['entity_view_display']['type'] = 'entity_reference_entity_view';
+
+    // Override the "entity_reference" field description text with a
+    // media-related one.
+    $options['media']['description'] = t('Use a "Media" field to reference assets such as files, images, videos and more. You will be able to select which media types can be referenced in the next steps.');
+  }
+}
diff --git a/core/modules/media/tests/src/Functional/MediaFunctionalTestTrait.php b/core/modules/media/tests/src/Functional/MediaFunctionalTestTrait.php
index d56e156..4fa7b54 100644
--- a/core/modules/media/tests/src/Functional/MediaFunctionalTestTrait.php
+++ b/core/modules/media/tests/src/Functional/MediaFunctionalTestTrait.php
@@ -32,6 +32,7 @@
     'administer content types',
     'administer node fields',
     'administer node form display',
+    'administer node display',
     'bypass node access',
   ];
 
diff --git a/core/modules/media/tests/src/Functional/MediaUiFunctionalTest.php b/core/modules/media/tests/src/Functional/MediaUiFunctionalTest.php
index 4aa3f00..8a0a82f 100644
--- a/core/modules/media/tests/src/Functional/MediaUiFunctionalTest.php
+++ b/core/modules/media/tests/src/Functional/MediaUiFunctionalTest.php
@@ -175,4 +175,21 @@ public function testMediaWithMultipleMediaTypes() {
     $assert_session->pageTextContains($second_media_item->getName());
   }
 
+  /**
+   * Test that media in ER fields use the Rendered Entity formatter by default.
+   */
+  public function testRenderedEntityReferencedMedia() {
+    $page = $this->getSession()->getPage();
+    $assert_session = $this->assertSession();
+
+    $this->drupalCreateContentType(['type' => 'page', 'name' => 'Page']);
+    $this->drupalGet('/admin/structure/types/manage/page/fields/add-field');
+    $page->selectFieldOption('new_storage_type', 'field_ui:entity_reference:media');
+    $page->fillField('label', 'Foo field');
+    $page->fillField('field_name', 'foo_field');
+    $page->pressButton('Save and continue');
+    $this->drupalGet('/admin/structure/types/manage/page/display');
+    $assert_session->fieldValueEquals('fields[field_foo_field][type]', 'entity_reference_entity_view');
+  }
+
 }
