diff --git a/core/config/schema/core.data_types.schema.yml b/core/config/schema/core.data_types.schema.yml
index 3d4f3a0..2a06515 100644
--- a/core/config/schema/core.data_types.schema.yml
+++ b/core/config/schema/core.data_types.schema.yml
@@ -774,9 +774,6 @@ entity_reference_selection:
         direction:
           type: string
           label: 'Sort direction'
-    auto_create:
-      type: boolean
-      label: 'Create referenced entities if they don''t already exist'
 
 entity_reference_selection.*:
   type: entity_reference_selection
diff --git a/core/config/schema/core.entity.schema.yml b/core/config/schema/core.entity.schema.yml
index 71b7ccd..af0531f 100644
--- a/core/config/schema/core.entity.schema.yml
+++ b/core/config/schema/core.entity.schema.yml
@@ -224,6 +224,9 @@ field.widget.settings.entity_reference_autocomplete_tags:
     placeholder:
       type: label
       label: 'Placeholder'
+    auto_create_bundle:
+      type: string
+      label: 'Create referenced entities of the specified bundle, if they don''t already exist.'
 
 field.widget.settings.entity_reference_autocomplete:
   type: mapping
@@ -238,6 +241,9 @@ field.widget.settings.entity_reference_autocomplete:
     placeholder:
       type: label
       label: 'Placeholder'
+    auto_create_bundle:
+      type: string
+      label: 'Create referenced entities of the specified bundle, if they don''t already exist.'
 
 field.formatter.settings.boolean:
   type: mapping
diff --git a/core/lib/Drupal/Core/Entity/Entity/EntityFormDisplay.php b/core/lib/Drupal/Core/Entity/Entity/EntityFormDisplay.php
index bee0144..351898f 100644
--- a/core/lib/Drupal/Core/Entity/Entity/EntityFormDisplay.php
+++ b/core/lib/Drupal/Core/Entity/Entity/EntityFormDisplay.php
@@ -336,4 +336,78 @@ public function getPluginCollections() {
     );
   }
 
+  /**
+   * {@inheritdoc}
+   */
+  public function calculateDependencies() {
+    parent::calculateDependencies();
+
+    foreach ($this->getEntityReferenceAutocompleteComponents() as $field_name => $bundle) {
+      $this->addDependency($bundle->getConfigDependencyKey(), $bundle->getConfigDependencyName());
+    }
+
+    return $this->dependencies;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function onDependencyRemoval(array $dependencies) {
+    $changed = parent::onDependencyRemoval($dependencies);
+
+    foreach ($this->getEntityReferenceAutocompleteComponents() as $field_name => $bundle) {
+      if (!empty($dependencies[$bundle->getConfigDependencyKey()][$bundle->getConfigDependencyName()])) {
+        $component = $this->getComponent($field_name);
+        $component['settings']['auto_create_bundle'] = NULL;
+        $this->setComponent($field_name, $component);
+        $changed = TRUE;
+      }
+    }
+
+    return $changed;
+  }
+
+  /**
+   * Provides a list of components of type 'entity_reference_autocomplete', or
+   * descendants, that have the 'auto_create_bundle' setting pointing to
+   * an existing bundle, represented as a config entity.
+   *
+   * This is a method, allowing code reusing between calculateDependencies() and
+   * onDependencyRemoval() interface methods.
+   *
+   * @return \Drupal\Core\Config\Entity\ConfigEntityInterface[]
+   *   Associative array keyed by field name and having the bundle config entity
+   *   object as value.
+   *
+   * @see \Drupal\Core\Entity\Entity\EntityFormDisplay::calculateDependencies()
+   * @see \Drupal\Core\Entity\Entity\EntityFormDisplay::onDependencyRemoval()
+   */
+  protected function getEntityReferenceAutocompleteComponents() {
+    /** @var \Drupal\Core\Field\WidgetPluginManager $widget_manager */
+    $manager = \Drupal::service('plugin.manager.field.widget');
+    $ancestor = 'Drupal\Core\Field\Plugin\Field\FieldWidget\EntityReferenceAutocompleteWidget';
+
+    $components = [];
+    foreach ($this->getComponents() as $field_name => $component) {
+      // Take into account only 'entity_reference_autocomplete' and descendants.
+      $class = !empty($component['type']) ? $manager->getDefinition($component['type'], FALSE)['class'] : FALSE;
+      if (!$class || ($class != $ancestor && !is_subclass_of($class, $ancestor))) {
+        continue;
+      }
+
+      if (!empty($component['settings']['auto_create_bundle'])) {
+        $target_type_id = $this->fieldDefinitions[$field_name]->getSetting('target_type');
+        $target_type = \Drupal::entityManager()->getDefinition($target_type_id);
+        if ($bundle_entity_type = $target_type->getBundleEntityType()) {
+          $storage = \Drupal::entityManager()->getStorage($bundle_entity_type);
+          if ($bundle = $storage->load($component['settings']['auto_create_bundle'])) {
+            $components[$field_name] = $bundle;
+          }
+        }
+      }
+    }
+
+    return $components;
+  }
+
 }
diff --git a/core/lib/Drupal/Core/Entity/Plugin/EntityReferenceSelection/SelectionBase.php b/core/lib/Drupal/Core/Entity/Plugin/EntityReferenceSelection/SelectionBase.php
index cb8c7d6..2324fc7 100644
--- a/core/lib/Drupal/Core/Entity/Plugin/EntityReferenceSelection/SelectionBase.php
+++ b/core/lib/Drupal/Core/Entity/Plugin/EntityReferenceSelection/SelectionBase.php
@@ -115,7 +115,6 @@ public function buildConfigurationForm(array $form, FormStateInterface $form_sta
       'sort' => array(
         'field' => '_none',
       ),
-      'auto_create' => FALSE,
     );
 
     if ($entity_type->hasKey('bundle')) {
diff --git a/core/lib/Drupal/Core/Field/Plugin/Field/FieldFormatter/EntityReferenceEntityFormatter.php b/core/lib/Drupal/Core/Field/Plugin/Field/FieldFormatter/EntityReferenceEntityFormatter.php
index 1328f65..4904b2d 100644
--- a/core/lib/Drupal/Core/Field/Plugin/Field/FieldFormatter/EntityReferenceEntityFormatter.php
+++ b/core/lib/Drupal/Core/Field/Plugin/Field/FieldFormatter/EntityReferenceEntityFormatter.php
@@ -143,7 +143,7 @@ public function viewElements(FieldItemListInterface $items) {
         }
       }
       else {
-        // This is an "auto_create" item.
+        // This is an auto-created item.
         $elements[$delta] = array('#markup' => $entity->label());
       }
       $depth = 0;
diff --git a/core/lib/Drupal/Core/Field/Plugin/Field/FieldWidget/EntityReferenceAutocompleteWidget.php b/core/lib/Drupal/Core/Field/Plugin/Field/FieldWidget/EntityReferenceAutocompleteWidget.php
index 948079e..030fca7 100644
--- a/core/lib/Drupal/Core/Field/Plugin/Field/FieldWidget/EntityReferenceAutocompleteWidget.php
+++ b/core/lib/Drupal/Core/Field/Plugin/Field/FieldWidget/EntityReferenceAutocompleteWidget.php
@@ -35,6 +35,7 @@ public static function defaultSettings() {
       'match_operator' => 'CONTAINS',
       'size' => '60',
       'placeholder' => '',
+      'auto_create_bundle' => NULL,
     ) + parent::defaultSettings();
   }
 
@@ -42,6 +43,9 @@ public static function defaultSettings() {
    * {@inheritdoc}
    */
   public function settingsForm(array $form, FormStateInterface $form_state) {
+    $entity_type_id = $this->getFieldSetting('target_type');
+    $entity_type = \Drupal::entityManager()->getDefinition($entity_type_id);
+
     $element['match_operator'] = array(
       '#type' => 'radios',
       '#title' => t('Autocomplete matching'),
@@ -62,6 +66,47 @@ public function settingsForm(array $form, FormStateInterface $form_state) {
       '#default_value' => $this->getSetting('placeholder'),
       '#description' => t('Text that will be shown inside the field until a value is entered. This hint is usually a sample value or a brief description of the expected format.'),
     );
+
+    $bundles = $this->getSelectionHandlerSetting('target_bundles');
+    $has_bundle = $entity_type->hasKey('bundle');
+    // Inconsistency in field handler settings.
+    if (empty($bundles) && $has_bundle) {
+      throw new \InvalidArgumentException(sprintf(
+        "Field %s (%s) is referencing %s entities but no bundle was specified. You should re-visit the field settings and select at least one bundle.",
+        $this->fieldDefinition->getLabel(),
+        $this->fieldDefinition->getName(),
+        $entity_type->getLabel()
+      ));
+    }
+    // This entity type is not using bundles or the field has only one target
+    // bundle set.
+    elseif (!$has_bundle || count($bundles) === 1) {
+      $element['auto_create_bundle'] = array(
+        '#type' => 'checkbox',
+        '#title' => $this->t("Create referenced entities if they don't already exist"),
+        '#default_value' => $this->getSetting('auto_create_bundle'),
+        '#return_value' => $has_bundle ? key($bundles) : $entity_type->id(),
+      );
+    }
+    // Let the user select a target bundle or no auto-creation.
+    else {
+      $options = array();
+      foreach (\Drupal::entityManager()->getBundleInfo($entity_type_id) as $id => $info) {
+        if (in_array($id, $bundles)) {
+          $options[$id] = $info['label'];
+        }
+      }
+
+      $element['auto_create_bundle'] = array(
+        '#type' => 'select',
+        '#title' => $this->t("Create referenced entities if they don't already exist. Store new items in"),
+        '#options' => $options,
+        '#default_value' => $this->getSetting('auto_create_bundle'),
+        '#empty_value' => NULL,
+        '#empty_option' => $this->t('No entity auto-creation')
+      );
+    }
+
     return $element;
   }
 
@@ -82,6 +127,28 @@ public function settingsSummary() {
       $summary[] = t('No placeholder');
     }
 
+    if ($bundle_id = $this->getSetting('auto_create_bundle')) {
+      $entity_type_id = $this->getFieldSetting('target_type');
+      $entity_type = \Drupal::entityManager()->getDefinition($entity_type_id);
+      if ($entity_type->hasKey('bundle')) {
+        if ($bundle_type = $entity_type->getBundleEntityType()) {
+          $storage = \Drupal::entityManager()->getStorage($bundle_type);
+          $bundle = $storage->load($bundle_id);
+          $bundle_label = $bundle->label();
+        }
+        else {
+          $bundle_label = $bundle_id;
+        }
+        $summary[] = $this->t('Auto-create the %entity of type %bundle, if is not in selection list', ['%entity' => $entity_type->getLabel(), '%bundle' => $bundle_label]);
+      }
+      else {
+        $summary[] = $this->t('Auto-create %entity, if is not in selection list', ['%entity' => $entity_type->getLabel()]);
+      }
+    }
+    else {
+      $summary[] = $this->t('No entity auto-creation. Selection limited to list.');
+    }
+
     return $summary;
   }
 
@@ -89,7 +156,6 @@ public function settingsSummary() {
    * {@inheritdoc}
    */
   public function formElement(FieldItemListInterface $items, $delta, array $element, array &$form, FormStateInterface $form_state) {
-    $entity = $items->getEntity();
     $referenced_entities = $items->referencedEntities();
 
     $element += array(
@@ -106,9 +172,10 @@ public function formElement(FieldItemListInterface $items, $delta, array $elemen
       '#placeholder' => $this->getSetting('placeholder'),
     );
 
-    if ($this->getSelectionHandlerSetting('auto_create')) {
+    if ($bundle = $this->getSetting('auto_create_bundle')) {
+      $entity = $items->getEntity();
       $element['#autocreate'] = array(
-        'bundle' => $this->getAutocreateBundle(),
+        'bundle' => $bundle,
         'uid' => ($entity instanceof EntityOwnerInterface) ? $entity->getOwnerId() : \Drupal::currentUser()->id()
       );
     }
@@ -140,32 +207,6 @@ public function massageFormValues(array $values, array $form, FormStateInterface
   }
 
   /**
-   * Returns the name of the bundle which will be used for autocreated entities.
-   *
-   * @return string
-   *   The bundle name.
-   */
-  protected function getAutocreateBundle() {
-    $bundle = NULL;
-    if ($this->getSelectionHandlerSetting('auto_create')) {
-      // If the 'target_bundles' setting is restricted to a single choice, we
-      // can use that.
-      if (($target_bundles = $this->getSelectionHandlerSetting('target_bundles')) && count($target_bundles) == 1) {
-        $bundle = reset($target_bundles);
-      }
-      // Otherwise use the first bundle as a fallback.
-      else {
-        // @todo Expose a proper UI for choosing the bundle for autocreated
-        // entities in https://www.drupal.org/node/2412569.
-        $bundles = entity_get_bundles($this->getFieldSetting('target_type'));
-        $bundle = key($bundles);
-      }
-    }
-
-    return $bundle;
-  }
-
-  /**
    * Returns the value of a setting for the entity reference selection handler.
    *
    * @param string $setting_name
diff --git a/core/modules/entity_reference/src/Tests/EntityReferenceAdminTest.php b/core/modules/entity_reference/src/Tests/EntityReferenceAdminTest.php
index cdd56cc..10e76aa 100644
--- a/core/modules/entity_reference/src/Tests/EntityReferenceAdminTest.php
+++ b/core/modules/entity_reference/src/Tests/EntityReferenceAdminTest.php
@@ -7,7 +7,9 @@
 
 namespace Drupal\entity_reference\Tests;
 
+use Drupal\Component\Utility\Unicode;
 use Drupal\Core\Entity\Entity;
+use Drupal\Core\Entity\Entity\EntityFormDisplay;
 use Drupal\field_ui\Tests\FieldUiTestTrait;
 use Drupal\node\Entity\Node;
 use Drupal\simpletest\WebTestBase;
@@ -57,6 +59,7 @@ protected function setUp() {
       'access content',
       'administer node fields',
       'administer node display',
+      'administer node form display',
       'administer views',
       'create ' . $type_name . ' content',
       'edit own ' . $type_name . ' content',
@@ -146,7 +149,6 @@ public function testFieldAdminHandler() {
     );
     $this->drupalPostForm($bundle_path . '/fields/' . $field_name . '/storage', $edit, t('Save field settings'));
     $this->drupalGet($bundle_path . '/fields/' . $field_name);
-    $this->assertFieldByName('settings[handler_settings][auto_create]');
 
     // Switch the target type to 'user' and check that the settings specific to
     // its selection handler are displayed.
@@ -307,13 +309,13 @@ public function testAvailableFormatters() {
     Vocabulary::create(array('vid' => 'tags', 'name' => 'tags'))->save();
 
     // Create entity reference field with taxonomy term as a target.
-    $taxonomy_term_field_name = $this->createEntityReferenceField('taxonomy_term', 'tags');
+    $taxonomy_term_field_name = $this->createEntityReferenceField('taxonomy_term', ['tags']);
 
     // Create entity reference field with user as a target.
     $user_field_name = $this->createEntityReferenceField('user');
 
     // Create entity reference field with node as a target.
-    $node_field_name = $this->createEntityReferenceField('node', $this->type);
+    $node_field_name = $this->createEntityReferenceField('node', [$this->type]);
 
     // Create entity reference field with date format as a target.
     $date_format_field_name = $this->createEntityReferenceField('date_format');
@@ -362,17 +364,93 @@ public function testAvailableFormatters() {
   }
 
   /**
+   * Tests field settings for an entity reference field when the field has
+   * multiple target bundles and is set to auto-create the target entity.
+   */
+  public function testMultipleTargetBundles() {
+    /** @var \Drupal\taxonomy\Entity\Vocabulary[] $vocabularies */
+    $vocabularies = [];
+    for ($i = 0; $i < 2; $i++) {
+      $vid = Unicode::strtolower($this->randomMachineName());
+      $vocabularies[$i] = Vocabulary::create([
+        'name' => $this->randomString(),
+        'vid' => $vid,
+      ]);
+      $vocabularies[$i]->save();
+    }
+
+    // Create a new field pointing to the first vocabulary.
+    $field_name = $this->createEntityReferenceField('taxonomy_term', [$vocabularies[0]->id()]);
+    $field_name = "field_$field_name";
+    $field_id = 'node.' . $this->type . '.' . $field_name;
+    $form_display_path = 'admin/structure/types/manage/' . $this->type . '/form-display';
+    $triggering_element = $field_name . '_settings_edit';
+
+    // Set the widget of this field to 'entity_reference_autocomplete_tags'.
+    $this->drupalPostForm($form_display_path, ["fields[$field_name][type]" => 'entity_reference_autocomplete_tags'], t('Save'));
+
+    // Open the widget settings for the created field.
+    $this->drupalPostAjaxForm(NULL, [], $triggering_element);
+
+    // Expect that the 'auto_create_bundle' is a checkbox, not a select.
+    $this->assertNoFieldByXPath("//select[@name='fields[$field_name][settings_edit_form][settings][auto_create_bundle]']");
+    $this->assertFieldByXPath("//input[@type='checkbox'][@name='fields[$field_name][settings_edit_form][settings][auto_create_bundle]']");
+
+    // Go to field settings and enable the second vocabulary.
+    $field_settings_path = 'admin/structure/types/manage/' . $this->type . '/fields/' . $field_id;
+    $edit = [
+      'settings[handler_settings][target_bundles][' . $vocabularies[1]->id() . ']' => TRUE,
+    ];
+    $this->drupalPostForm($field_settings_path, $edit, t('Save settings'));
+
+    // Go back to widget settings.
+    $this->drupalPostAjaxForm($form_display_path, [], $triggering_element);
+
+    $this->assertFieldByXPath("//select[@name='fields[$field_name][settings_edit_form][settings][auto_create_bundle]']/option[@value='" . $vocabularies[0]->id() . "']");
+    $this->assertFieldByXPath("//select[@name='fields[$field_name][settings_edit_form][settings][auto_create_bundle]']/option[@value='" . $vocabularies[1]->id() . "']");
+    // The empty value (meaning no auto-creation).
+    $this->assertFieldByXPath("//select[@name='fields[$field_name][settings_edit_form][settings][auto_create_bundle]']/option[@value='']");
+
+    $edit = [
+      "fields[$field_name][settings_edit_form][settings][auto_create_bundle]" => $vocabularies[1]->id(),
+    ];
+    $this->drupalPostForm(NULL, $edit, t('Update'));
+    // Submit also the main form.
+    $this->drupalPostForm(NULL, [], t('Save'));
+
+    /** @var \Drupal\Core\Entity\Display\EntityDisplayInterface $form_display */
+    $form_display = EntityFormDisplay::load("node.{$this->type}.default");
+    $settings = $form_display->getComponent($field_name)['settings'];
+
+    // Expect that the target bundle has been saved in the backend.
+    $this->assertEqual($settings['auto_create_bundle'], $vocabularies[1]->id());
+
+    // Delete the other bundle. Field config should not be affected.
+    $vocabularies[0]->delete();
+    $form_display = EntityFormDisplay::load("node.{$this->type}.default");
+    $settings = $form_display->getComponent($field_name)['settings'];
+    $this->assertIdentical($settings['auto_create_bundle'], $vocabularies[1]->id());
+
+    // Delete the bundle set for entity auto-creation. Auto-created settings
+    // should be reset (no auto-creation).
+    $vocabularies[1]->delete();
+    $form_display = EntityFormDisplay::load("node.{$this->type}.default");
+    $settings = $form_display->getComponent($field_name)['settings'];
+    $this->assertNull($settings['auto_create_bundle']);
+  }
+
+  /**
    * Creates a new Entity Reference fields with a given target type.
    *
-   * @param $target_type
+   * @param string $target_type
    *   The name of the target type
-   * @param $bundle
-   *   Name of the bundle
-   *   Default = NULL
+   * @param string[] $bundles
+   *   A list of bundle IDs. Defaults to [].
+   *
    * @return string
    *   Returns the generated field name
    */
-  public function createEntityReferenceField($target_type, $bundle = NULL) {
+  protected function createEntityReferenceField($target_type, $bundles = []) {
     // Generates a bundle path for the newly created content type.
     $bundle_path = 'admin/structure/types/manage/' . $this->type;
 
@@ -381,7 +459,7 @@ public function createEntityReferenceField($target_type, $bundle = NULL) {
 
     $storage_edit = $field_edit = array();
     $storage_edit['settings[target_type]'] = $target_type;
-    if ($bundle) {
+    foreach ($bundles as $bundle) {
       $field_edit['settings[handler_settings][target_bundles][' . $bundle . ']'] = TRUE;
     }
 
@@ -391,7 +469,6 @@ public function createEntityReferenceField($target_type, $bundle = NULL) {
     return $field_name;
   }
 
-
   /**
    * Checks if a select element contains the specified options.
    *
diff --git a/core/modules/entity_reference/src/Tests/EntityReferenceAutoCreateTest.php b/core/modules/entity_reference/src/Tests/EntityReferenceAutoCreateTest.php
index dc87dc8..b5cb841 100644
--- a/core/modules/entity_reference/src/Tests/EntityReferenceAutoCreateTest.php
+++ b/core/modules/entity_reference/src/Tests/EntityReferenceAutoCreateTest.php
@@ -7,7 +7,10 @@
 
 namespace Drupal\entity_reference\Tests;
 
+use Drupal\Component\Utility\Unicode;
 use Drupal\Core\Field\FieldStorageDefinitionInterface;
+use Drupal\field\Entity\FieldConfig;
+use Drupal\taxonomy\Entity\Vocabulary;
 use Drupal\simpletest\WebTestBase;
 use Drupal\node\Entity\Node;
 
@@ -18,7 +21,9 @@
  */
 class EntityReferenceAutoCreateTest extends WebTestBase {
 
-  public static $modules = array('entity_reference', 'node');
+  use EntityReferenceTestTrait;
+
+  public static $modules = ['entity_reference', 'node', 'taxonomy'];
 
   /**
    * The name of a content type that will reference $referencedType.
@@ -68,8 +73,6 @@ protected function setUp() {
           'target_bundles' => array(
             $referenced->id(),
           ),
-          // Enable auto-create.
-          'auto_create' => TRUE,
         ),
       ),
     ))->save();
@@ -80,8 +83,12 @@ protected function setUp() {
     entity_get_form_display('node', $referencing->id(), 'default')
       ->setComponent('test_field', array(
         'type' => 'entity_reference_autocomplete',
+        'settings' => array('auto_create_bundle' => $referenced->id()),
       ))
       ->save();
+
+    $account = $this->drupalCreateUser(['access content', "create $this->referencingType content"]);
+    $this->drupalLogin($account);
   }
 
   /**
@@ -89,9 +96,6 @@ protected function setUp() {
    * entity.
    */
   public function testAutoCreate() {
-    $user1 = $this->drupalCreateUser(array('access content', "create $this->referencingType content"));
-    $this->drupalLogin($user1);
-
     $this->drupalGet('node/add/' . $this->referencingType);
     $this->assertFieldByXPath('//input[@id="edit-test-field-0-target-id" and contains(@class, "form-autocomplete")]', NULL, 'The autocomplete input element appears.');
 
@@ -134,4 +138,83 @@ public function testAutoCreate() {
     $this->assertText($referencing_node->label(), 'Referencing node label found.');
     $this->assertText($referenced_node->label(), 'Referenced node label found.');
   }
+
+  /**
+   * Tests if a entity reference field having multiple target bundles is storing
+   * the auto-created entity in the right destination.
+   */
+  public function testMultipleTargetBundles() {
+    /** @var \Drupal\Core\Config\ConfigFactoryInterface $factory */
+    $factory = $this->container->get('config.factory');
+
+    /** @var \Drupal\taxonomy\Entity\Vocabulary[] $vocabularies */
+    $vocabularies = [];
+    for ($i = 0; $i < 2; $i++) {
+      $vid = Unicode::strtolower($this->randomMachineName());
+      $vocabularies[$i] = Vocabulary::create([
+        'name' => $this->randomMachineName(),
+        'vid' => $vid,
+      ]);
+      $vocabularies[$i]->save();
+    }
+
+    // Create a taxonomy term entity reference field that saves the auto-created
+    // taxonomy terms in the second vocabulary from the two that were configured
+    // as targets.
+    $field_name = Unicode::strtolower($this->randomMachineName());
+    $handler_settings = [
+      'target_bundles' => [
+        $vocabularies[0]->id() => $vocabularies[0]->id(),
+        $vocabularies[1]->id() => $vocabularies[1]->id(),
+      ],
+    ];
+    $this->createEntityReferenceField('node', $this->referencingType, $field_name, $this->randomString(), 'taxonomy_term', 'default', $handler_settings);
+    /** @var \Drupal\Core\Entity\Display\EntityFormDisplayInterface $fd */
+    entity_get_form_display('node', $this->referencingType, 'default')
+      ->setComponent($field_name, [
+        'type' => 'entity_reference_autocomplete',
+        'settings' => [
+          'auto_create_bundle' => $vocabularies[1]->id(),
+        ],
+      ])
+      ->save();
+
+    $term_name = $this->randomString();
+    $edit = [
+      $field_name . '[0][target_id]' => $term_name,
+      'title[0][value]' => $this->randomString(),
+    ];
+
+    $this->drupalPostForm('node/add/' . $this->referencingType, $edit, 'Save');
+    /** @var \Drupal\taxonomy\Entity\Term $term */
+    $term = taxonomy_term_load_multiple_by_name($term_name);
+    $term = reset($term);
+
+    // The new term is expected to be stored in the second vocabulary.
+    $this->assertEqual($vocabularies[1]->id(), $term->bundle());
+
+    /** @var \Drupal\field\Entity\FieldConfig $field_config */
+    $field_config = FieldConfig::loadByName('node', $this->referencingType, $field_name);
+
+    // Change the field setting to store the auto-created terms in the first
+    // vocabulary and test again.
+    $factory->getEditable("core.entity_form_display.node.{$this->referencingType}.default")
+      ->set("content.$field_name.settings.auto_create_bundle", $vocabularies[0]->id())
+      ->save();
+
+    $term_name = $this->randomString();
+    $edit = [
+      $field_name . '[0][target_id]' => $term_name,
+      'title[0][value]' => $this->randomString(),
+    ];
+
+    $this->drupalPostForm('node/add/' . $this->referencingType, $edit, 'Save');
+    /** @var \Drupal\taxonomy\Entity\Term $term */
+    $term = taxonomy_term_load_multiple_by_name($term_name);
+    $term = reset($term);
+
+    // The second term is expected to be stored in the first vocabulary.
+    $this->assertEqual($vocabularies[0]->id(), $term->bundle());
+  }
+
 }
diff --git a/core/modules/entity_reference/src/Tests/EntityReferenceTestTrait.php b/core/modules/entity_reference/src/Tests/EntityReferenceTestTrait.php
index 1882079..4ab6df3 100644
--- a/core/modules/entity_reference/src/Tests/EntityReferenceTestTrait.php
+++ b/core/modules/entity_reference/src/Tests/EntityReferenceTestTrait.php
@@ -33,7 +33,7 @@
    *   The selection handler used by this field.
    * @param array $selection_handler_settings
    *   An array of settings supported by the selection handler specified above.
-   *   (e.g. 'target_bundles', 'sort', 'auto_create', etc).
+   *   (e.g. 'target_bundles', 'sort', etc).
    * @param int $cardinality
    *   The cardinality of the field.
    *
diff --git a/core/modules/forum/config/install/field.field.node.forum.taxonomy_forums.yml b/core/modules/forum/config/install/field.field.node.forum.taxonomy_forums.yml
index b5e7332..12fc81e 100644
--- a/core/modules/forum/config/install/field.field.node.forum.taxonomy_forums.yml
+++ b/core/modules/forum/config/install/field.field.node.forum.taxonomy_forums.yml
@@ -23,6 +23,5 @@ settings:
       forums: forums
     sort:
       field: _none
-    auto_create: true
 third_party_settings: {  }
 field_type: entity_reference
diff --git a/core/modules/node/src/Tests/PagePreviewTest.php b/core/modules/node/src/Tests/PagePreviewTest.php
index 44a280f..dd66eac 100644
--- a/core/modules/node/src/Tests/PagePreviewTest.php
+++ b/core/modules/node/src/Tests/PagePreviewTest.php
@@ -74,13 +74,13 @@ protected function setUp() {
       'target_bundles' => array(
         $this->vocabulary->id() => $this->vocabulary->id(),
       ),
-      'auto_create' => TRUE,
     );
     $this->createEntityReferenceField('node', 'page', $this->fieldName, 'Tags', 'taxonomy_term', 'default', $handler_settings, FieldStorageDefinitionInterface::CARDINALITY_UNLIMITED);
 
     entity_get_form_display('node', 'page', 'default')
       ->setComponent($this->fieldName, array(
         'type' => 'entity_reference_autocomplete_tags',
+        'settings' => array('auto_create_bundle' => $this->vocabulary->id()),
       ))
       ->save();
 
diff --git a/core/modules/quickedit/src/Tests/QuickEditAutocompleteTermTest.php b/core/modules/quickedit/src/Tests/QuickEditAutocompleteTermTest.php
index 81eaa97..50fc706 100644
--- a/core/modules/quickedit/src/Tests/QuickEditAutocompleteTermTest.php
+++ b/core/modules/quickedit/src/Tests/QuickEditAutocompleteTermTest.php
@@ -89,13 +89,13 @@ protected function setUp() {
       'target_bundles' => array(
         $this->vocabulary->id() => $this->vocabulary->id(),
       ),
-      'auto_create' => TRUE,
     );
     $this->createEntityReferenceField('node', 'article', $this->fieldName, 'Tags', 'taxonomy_term', 'default', $handler_settings, FieldStorageDefinitionInterface::CARDINALITY_UNLIMITED);
 
     entity_get_form_display('node', 'article', 'default')
       ->setComponent($this->fieldName, [
         'type' => 'entity_reference_autocomplete_tags',
+        'settings' => array('auto_create_bundle' => $this->vocabulary->id()),
         'weight' => -4,
       ])
       ->save();
diff --git a/core/modules/rdf/src/Tests/EntityReferenceFieldAttributesTest.php b/core/modules/rdf/src/Tests/EntityReferenceFieldAttributesTest.php
index 52c4e86..0890af3 100644
--- a/core/modules/rdf/src/Tests/EntityReferenceFieldAttributesTest.php
+++ b/core/modules/rdf/src/Tests/EntityReferenceFieldAttributesTest.php
@@ -51,7 +51,6 @@ protected function setUp() {
       'target_bundles' => array(
         $this->vocabulary->id() => $this->vocabulary->id(),
       ),
-      'auto_create' => TRUE,
     );
     $this->createEntityReferenceField('node', 'article', $this->fieldName, 'Tags', 'taxonomy_term', 'default', $handler_settings, FieldStorageDefinitionInterface::CARDINALITY_UNLIMITED);
 
diff --git a/core/modules/system/src/Tests/Entity/EntityCacheTagsTestBase.php b/core/modules/system/src/Tests/Entity/EntityCacheTagsTestBase.php
index ee4fcd8..6999726 100644
--- a/core/modules/system/src/Tests/Entity/EntityCacheTagsTestBase.php
+++ b/core/modules/system/src/Tests/Entity/EntityCacheTagsTestBase.php
@@ -266,7 +266,6 @@ protected function createReferenceTestEntities($referenced_entity) {
             $referenced_entity->bundle() => $referenced_entity->bundle(),
           ),
           'sort' => array('field' => '_none'),
-          'auto_create' => FALSE,
         ),
       ),
     ))->save();
diff --git a/core/modules/system/src/Tests/Entity/EntityQueryRelationshipTest.php b/core/modules/system/src/Tests/Entity/EntityQueryRelationshipTest.php
index 254bfdb..78d09d7 100644
--- a/core/modules/system/src/Tests/Entity/EntityQueryRelationshipTest.php
+++ b/core/modules/system/src/Tests/Entity/EntityQueryRelationshipTest.php
@@ -84,7 +84,6 @@ protected function setUp() {
       'target_bundles' => array(
         $vocabulary->id() => $vocabulary->id(),
        ),
-      'auto_create' => TRUE,
     );
     $this->createEntityReferenceField('entity_test', 'test_bundle', $this->fieldName, NULL, 'taxonomy_term', 'default', $handler_settings);
 
diff --git a/core/modules/system/src/Tests/Field/EntityReferenceSettingsTest.php b/core/modules/system/src/Tests/Field/EntityReferenceSettingsTest.php
new file mode 100644
index 0000000..464bdfa
--- /dev/null
+++ b/core/modules/system/src/Tests/Field/EntityReferenceSettingsTest.php
@@ -0,0 +1,106 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\system\Tests\Field\EntityReferenceSettingsTest.
+ */
+
+namespace Drupal\system\Tests\Field;
+
+use Drupal\Component\Utility\Unicode;
+use Drupal\Core\Entity\Entity\EntityFormDisplay;
+use Drupal\entity_reference\Tests\EntityReferenceTestTrait;
+use Drupal\simpletest\KernelTestBase;
+use Drupal\node\Entity\NodeType;
+use Drupal\taxonomy\Entity\Vocabulary;
+
+/**
+ * Tests entity reference field settings.
+ *
+ * @group entity_reference
+ */
+class EntityReferenceSettingsTest extends KernelTestBase {
+
+  use EntityReferenceTestTrait;
+
+  /**
+   * {@inheritdoc}
+   */
+  public static $modules = ['node', 'taxonomy', 'field', 'user', 'text', 'entity_reference'];
+
+  /**
+   * Testing node type ID.
+   *
+   * @var string
+   */
+  protected $nodeType;
+
+  /**
+   * Testing taxonomy vocabulary IDs.
+   *
+   * @var string[]
+   */
+  protected $vids = [];
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function setUp() {
+    parent::setup();
+
+    $this->installEntitySchema('node');
+    $this->installEntitySchema('taxonomy_term');
+
+    $this->nodeType = Unicode::strtolower($this->randomMachineName());
+    NodeType::create([
+      'type' => $this->nodeType,
+      'name' => $this->randomString(),
+    ])->save();
+
+    // Create 3 taxonomy vocabularies.
+    $this->vids = ['vid1', 'vid2', 'vid3'];
+    $this->vids = array_combine($this->vids, $this->vids);
+    foreach ($this->vids as $vid) {
+      Vocabulary::create([
+        'vid' => $vid,
+        'name' => $this->randomString(),
+      ])->save();
+    }
+  }
+
+  /**
+   * Tests dependencies.
+   */
+  public function testDependency() {
+    /** @var \Drupal\Core\Config\ConfigFactoryInterface $factory */
+    $factory = $this->container->get('config.factory');
+
+    $name = Unicode::strtolower($this->randomMachineName());
+    $label = $this->randomString();
+    $handler_settings = ['target_bundles' => $this->vids];
+
+    // Create an entity reference field with auto creation, targeting 3 taxonomy
+    // vocabularies.
+    $this->createEntityReferenceField('node', $this->nodeType, $name, $label, 'taxonomy_term', 'default', $handler_settings);
+    // Set the first vocabulary as 'auto_create_bundle'.
+    EntityFormDisplay::create([
+      'targetEntityType' => 'node',
+      'bundle' => $this->nodeType,
+      'mode' => 'default',
+    ])->setComponent($name, [
+      'type' => 'entity_reference_autocomplete',
+      'settings' => ['auto_create_bundle' => 'vid1'],
+    ])->save();
+
+    $display_id = "core.entity_form_display.node.{$this->nodeType}.default";
+
+    // Delete the first vocabulary.
+    Vocabulary::load('vid1')->delete();
+
+    // Reload the form display and test settings for the $name component.
+    $settings = $factory->get($display_id)->get('content.settings');
+    // 'auto_create_bundle' is NULL.
+    $this->assertNull($settings['auto_create_bundle']);
+  }
+
+}
diff --git a/core/modules/system/src/Tests/Field/Update/EntityReferenceSettingsUpdateTest.php b/core/modules/system/src/Tests/Field/Update/EntityReferenceSettingsUpdateTest.php
new file mode 100644
index 0000000..af7e4c4
--- /dev/null
+++ b/core/modules/system/src/Tests/Field/Update/EntityReferenceSettingsUpdateTest.php
@@ -0,0 +1,173 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\system\Tests\Field\Update\EntityReferenceSettingsUpdateTest.
+ */
+
+namespace Drupal\system\Tests\Field\Update;
+
+use Drupal\Component\Utility\Unicode;
+use Drupal\entity_reference\Tests\EntityReferenceTestTrait;
+use Drupal\field\Entity\FieldStorageConfig;
+use Drupal\system\Tests\Update\UpdatePathTestBase;
+
+/**
+ * Tests that field and widget settings are properly updated during database
+ * updates.
+ *
+ * @group entity_reference
+ */
+class EntityReferenceSettingsUpdateTest extends UpdatePathTestBase {
+
+  use EntityReferenceTestTrait;
+
+  /**
+   * The config factory service.
+   *
+   * @var \Drupal\Core\Config\ConfigFactoryInterface
+   */
+  protected $factory;
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function setDatabaseDumpFiles() {
+    $this->databaseDumpFiles = [
+      __DIR__ . '/../../../../tests/fixtures/update/drupal-8.bare.standard.php.gz',
+    ];
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function setUp() {
+    parent::setUp();
+    $this->factory = $this->container->get('config.factory');
+  }
+
+  /**
+   * Tests system_update_8006().
+   *
+   * @see system_update_8006()
+   */
+  public function testSystemUpdate8006() {
+    // We are testing 2 kind of entity reference fields:
+    // - The first is targeting an entity type that has bundles (taxonomy_term).
+    // - The second is a reference to an entity without bundles (user).
+
+    $field_config = $this->factory->get('field.field.node.article.field_tags');
+
+    // The legacy 'auto_create' storage setting exists and is TRUE.
+    $this->assertTrue($field_config->get('settings.handler_settings.auto_create'));
+
+    // We add also an user reference field to node article to test the case when
+    // the referenced entity is an entity type without bundle.
+    $name = $this->createUserReferenceField();
+
+    // The legacy 'auto_create' storage setting exists and is TRUE.
+    $field_config = $this->factory->get("field.field.node.article.$name");
+    $this->assertTrue($field_config->get('settings.handler_settings.auto_create'));
+
+    // Run updates.
+    $this->runUpdates();
+
+    // The 'auto_create' handler setting of field 'field_tags' no longer exists.
+    $field_config = $this->factory->get('field.field.node.article.field_tags');
+    $handler_settings = $field_config->get('settings.handler_settings');
+    $this->assertFalse(array_key_exists('auto_create', $handler_settings));
+
+    // The 'auto_create' handler setting of field $name no longer exists.
+    $field_config = $this->factory->get("field.field.node.article.$name");
+    $handler_settings = $field_config->get('settings.handler_settings');
+    $this->assertFalse(array_key_exists('auto_create', $handler_settings));
+
+    // Check the display widget settings.
+    $form_display = $this->factory->get('core.entity_form_display.node.article.default');
+
+    // 'auto_create_bundle' should be created and equal to 'tags'.
+    $this->assertIdentical($form_display->get('content.field_tags.settings.auto_create_bundle'), 'tags');
+
+    // 'auto_create_bundle' should be created and equal to 'user'. This is the
+    // case when the target entity has no bundle and we store the target entity
+    // type is instead.
+    $this->assertIdentical($form_display->get("content.$name.settings.auto_create_bundle"), 'user');
+  }
+
+  /**
+   * Creates an entity reference field referencing the 'user' entity.
+   *
+   * We are not using the FieldStorageConfig and FieldConfig API because we need
+   * to create the objects on the most low API level possible, that's why we use
+   * the Config API to build the appropriate config entities.
+   *
+   * @return string
+   *   The field name.
+   */
+  protected function createUserReferenceField() {
+    $name = Unicode::strtolower($this->randomMachineName());
+
+    $this->factory->getEditable("field.storage.node.$name")
+      ->setData([
+        'id' => "node.$name",
+        'field_name' => $name,
+        'entity_type' => 'node',
+        'type' => 'entity_reference',
+        'module' => 'entity_reference',
+        'settings' => ['target_type' => 'user'],
+        'locked' => FALSE,
+        'cardinality' => FieldStorageConfig::CARDINALITY_UNLIMITED,
+        'translatable' => TRUE,
+        'status' => TRUE,
+        'langcode' => 'en',
+        'indexes' => [],
+        'dependencies' => [
+          'module' => ['node', 'entity_reference'],
+        ],
+        'persist_with_no_fields' => FALSE,
+      ])
+      ->save(TRUE);
+    $this->factory->getEditable("field.field.node.article.$name")
+      ->setData([
+        'id' => "node.article.$name",
+        'entity_type' => 'node',
+        'bundle' => 'article',
+        'field_name' => $name,
+        'field_type' => 'entity_reference',
+        'label' => $this->randomString(),
+        'description' => $this->randomString(),
+        'required' => FALSE,
+        'default_value' => [],
+        'default_value_callback' => '',
+        'settings' => [
+          'handler' => 'default:user',
+          'handler_settings' => [
+            'auto_create' => TRUE,
+            'filter' => ['type' => '_none'],
+            'include_anonymous' => TRUE,
+          ],
+        ],
+        'status' => TRUE,
+        'langcode' => 'en',
+        'dependencies' => [
+          'config' => ["field.storage.node.$name", 'node.type.article'],
+          'module' => ['entity_reference'],
+        ],
+      ])
+      ->save(TRUE);
+
+      $this->factory->getEditable('core.entity_form_display.node.article.default')
+        ->set("content.$name.type", 'entity_reference_autocomplete')
+        ->set("content.$name.settings", [])
+        ->save(TRUE);
+
+    /** @var \Drupal\Core\Entity\EntityDefinitionUpdateManagerInterface $entity_update_manager */
+    $entity_update_manager = $this->container->get('entity.definition_update_manager');
+    // Apply field storage updates.
+    $definition = FieldStorageConfig::loadByName('node', $name);
+    $entity_update_manager->installFieldStorageDefinition($name, 'node', 'node', $definition);
+
+    return $name;
+  }
+
+}
diff --git a/core/modules/system/system.install b/core/modules/system/system.install
index 0170487..a58e7e3 100644
--- a/core/modules/system/system.install
+++ b/core/modules/system/system.install
@@ -1291,6 +1291,7 @@ function system_update_8004() {
 }
 
 /**
+<<<<<<< HEAD
  * Place local actions and tasks blocks in every theme.
  */
 function system_update_8005() {
@@ -1463,5 +1464,105 @@ function _system_update_create_block($name, $theme_name, array $values) {
 }
 
 /**
+ * Migrates the entity reference selection handler 'auto_create' setting to
+ * field widget settings.
+ */
+function system_update_8006() {
+  static $types = [];
+
+  $factory = \Drupal::configFactory();
+  /** @var \Drupal\Core\Field\FieldTypePluginManager $field_type_manager */
+  $field_type_manager = \Drupal::service('plugin.manager.field.field_type');
+  /** @var \Drupal\Core\Field\WidgetPluginManager $widget_manager */
+  $widget_manager = \Drupal::service('plugin.manager.field.widget');
+  /** @var \Drupal\Core\Entity\EntityManagerInterface $item_class */
+  $entity_manager = \Drupal::entityManager();
+  $item_class = 'Drupal\Core\Field\Plugin\Field\FieldType\EntityReferenceItem';
+  $ancestor_class = 'Drupal\Core\Field\Plugin\Field\FieldWidget\EntityReferenceAutocompleteWidget';
+
+  // Iterate on all field configs.
+  foreach ($factory->listAll('field.field.') as $field_id) {
+    $config = $factory->getEditable($field_id);
+    $class = $field_type_manager->getPluginClass($config->get('field_type'));
+
+    // Deal only with entity reference fields and descendants.
+    if ($class != $item_class && !is_subclass_of($class, $item_class)) {
+      continue;
+    }
+
+    // Get the entity type and field name.
+    list(,, $entity_type,, $field_name) = explode('.', $field_id);
+
+    // Try to load from static cache.
+    $id = "$entity_type.$field_name";
+    if (!isset($types[$id])) {
+      $storage = $factory->get("field.storage.$entity_type.$field_name");
+      $type = $storage->get('settings.target_type');
+      $bundles = $config->get('settings.handler_settings.target_bundles') ?: [];
+      $has_key = $entity_manager->getDefinition($type)->hasKey('bundle');
+      $types[$id] = ['type' => $type, 'bundles' => $bundles, 'key' => $has_key];
+    }
+
+    // Compute the destination 'auto_create_bundle' value.
+    if ($config->get('settings.handler_settings.auto_create')) {
+      // The target entity type has bundle key.
+      if ($types[$id]['key']) {
+        // Only one target bundle is set. Use it.
+        if (count($types[$id]['bundles']) === 1) {
+          $auto_create_bundle = key($types[$id]['bundles']);
+        }
+        // None or more than one target bundles are set. Until now, the first
+        // bundle from the entire entity type bundle list has been picked-up to
+        // create new entities. This was a buggy fallback but we have to
+        // preserve this behavior across the update.
+        else {
+          $all_bundles = $entity_manager->getBundleInfo($types[$id]['type']);
+          $auto_create_bundle = key($all_bundles);
+        }
+      }
+      // The target entity type has no bundle key. Use the entity type id.
+      else {
+        $auto_create_bundle = $types[$id]['type'];
+      }
+    }
+    else {
+      $auto_create_bundle = NULL;
+    }
+
+    // Iterate through all form displays.
+    foreach ($factory->listAll('core.entity_form_display.') as $display_id) {
+      $display = $factory->getEditable($display_id);
+
+      // Iterate through fields.
+      $changed = FALSE;
+      foreach ($display->get('content') as $name => $info) {
+        if ($name != $field_name) {
+          continue;
+        }
+
+        // Deal only with 'entity_reference_autocomplete' and descendants.
+        $widget_class = $widget_manager->getDefinition($info['type'])['class'];
+        if ($widget_class != $ancestor_class && !is_subclass_of($widget_class, $ancestor_class)) {
+          continue;
+        }
+
+        $display
+          ->set("content.$name.settings.auto_create_bundle", $auto_create_bundle);
+        $changed = TRUE;
+      }
+
+      if ($changed) {
+        $display->save(TRUE);
+      }
+    }
+
+    // Clear the value from selection handler settings and save the field.
+    $config
+      ->clear('settings.handler_settings.auto_create')
+      ->save(TRUE);
+  }
+}
+
+/**
  * @} End of "addtogroup updates-8.0.0-beta".
  */
diff --git a/core/modules/taxonomy/migration_templates/d6_vocabulary_field_instance.yml b/core/modules/taxonomy/migration_templates/d6_vocabulary_field_instance.yml
index 4c2c7ac..a07905d 100644
--- a/core/modules/taxonomy/migration_templates/d6_vocabulary_field_instance.yml
+++ b/core/modules/taxonomy/migration_templates/d6_vocabulary_field_instance.yml
@@ -6,7 +6,6 @@ source:
   plugin: d6_taxonomy_vocabulary_per_type
   constants:
     entity_type: node
-    auto_create: true
     selection_handler: 'default:taxonomy_term'
 process:
   entity_type: 'constants/entity_type'
@@ -17,7 +16,6 @@ process:
     source: vid
   'settings/handler': 'constants/selection_handler'
   'settings/handler_settings/target_bundles/0': @field_name
-  'settings/handler_settings/auto_create': 'constants/auto_create'
 destination:
   plugin: entity:field_config
 migration_dependencies:
diff --git a/core/modules/taxonomy/src/Plugin/EntityReferenceSelection/TermSelection.php b/core/modules/taxonomy/src/Plugin/EntityReferenceSelection/TermSelection.php
index ddf99ca..7c62d8c 100644
--- a/core/modules/taxonomy/src/Plugin/EntityReferenceSelection/TermSelection.php
+++ b/core/modules/taxonomy/src/Plugin/EntityReferenceSelection/TermSelection.php
@@ -38,21 +38,13 @@ public function entityQueryAlter(SelectInterface $query) {
    */
   public function buildConfigurationForm(array $form, FormStateInterface $form_state) {
     $form = parent::buildConfigurationForm($form, $form_state);
-
     $form['target_bundles']['#title'] = $this->t('Vocabularies');
-    // @todo: Currently allow auto-create only on taxonomy terms.
-    $form['auto_create'] = array(
-      '#type' => 'checkbox',
-      '#title' => $this->t("Create referenced entities if they don't already exist"),
-      '#default_value' => isset($this->configuration['handler_settings']['auto_create']) ? $this->configuration['handler_settings']['auto_create'] : FALSE,
-    );
 
     // Sorting is not possible for taxonomy terms because we use
     // \Drupal\taxonomy\TermStorageInterface::loadTree() to retrieve matches.
     $form['sort']['#access'] = FALSE;
 
     return $form;
-
   }
 
   /**
diff --git a/core/modules/taxonomy/src/Tests/LegacyTest.php b/core/modules/taxonomy/src/Tests/LegacyTest.php
index 06966b8..769414e 100644
--- a/core/modules/taxonomy/src/Tests/LegacyTest.php
+++ b/core/modules/taxonomy/src/Tests/LegacyTest.php
@@ -39,13 +39,13 @@ protected function setUp() {
       'target_bundles' => array(
         $vocabulary->id() => $vocabulary->id(),
       ),
-      'auto_create' => TRUE,
     );
     $this->createEntityReferenceField('node', 'article', $field_name, 'Tags', 'taxonomy_term', 'default', $handler_settings, FieldStorageDefinitionInterface::CARDINALITY_UNLIMITED);
 
     entity_get_form_display('node', 'article', 'default')
       ->setComponent($field_name, array(
         'type' => 'entity_reference_autocomplete_tags',
+        'settings' => array('auto_create_bundle' =>  $vocabulary->id()),
       ))
       ->save();
 
diff --git a/core/modules/taxonomy/src/Tests/Migrate/d6/MigrateTermNodeTestBase.php b/core/modules/taxonomy/src/Tests/Migrate/d6/MigrateTermNodeTestBase.php
index 2a47cea..d745cb8 100644
--- a/core/modules/taxonomy/src/Tests/Migrate/d6/MigrateTermNodeTestBase.php
+++ b/core/modules/taxonomy/src/Tests/Migrate/d6/MigrateTermNodeTestBase.php
@@ -44,7 +44,6 @@ protected function setUp() {
         'target_bundles' => array(
           $vocabulary->id() => $vocabulary->id(),
         ),
-        'auto_create' => TRUE,
       );
       $this->createEntityReferenceField('node', 'story', $name, NULL, 'taxonomy_term', 'default', $handler_settings, FieldStorageDefinitionInterface::CARDINALITY_UNLIMITED);
     }
diff --git a/core/modules/taxonomy/src/Tests/Migrate/d6/MigrateVocabularyEntityDisplayTest.php b/core/modules/taxonomy/src/Tests/Migrate/d6/MigrateVocabularyEntityDisplayTest.php
index 7e6c3f5..1924711 100644
--- a/core/modules/taxonomy/src/Tests/Migrate/d6/MigrateVocabularyEntityDisplayTest.php
+++ b/core/modules/taxonomy/src/Tests/Migrate/d6/MigrateVocabularyEntityDisplayTest.php
@@ -47,15 +47,14 @@ protected function setUp() {
         'entity_type' => 'node',
         'bundle' => $type,
         'required' => 1,
-          'settings' => array(
-            'handler' => 'default',
-            'handler_settings' => array(
-              'target_bundles' => array(
-                'tags' => 'tags',
-              ),
-              'auto_create' => TRUE,
+        'settings' => array(
+          'handler' => 'default',
+          'handler_settings' => array(
+            'target_bundles' => array(
+              'tags' => 'tags',
             ),
           ),
+        ),
       ))->save();
     }
 
diff --git a/core/modules/taxonomy/src/Tests/Migrate/d6/MigrateVocabularyEntityFormDisplayTest.php b/core/modules/taxonomy/src/Tests/Migrate/d6/MigrateVocabularyEntityFormDisplayTest.php
index db31790..1273d00 100644
--- a/core/modules/taxonomy/src/Tests/Migrate/d6/MigrateVocabularyEntityFormDisplayTest.php
+++ b/core/modules/taxonomy/src/Tests/Migrate/d6/MigrateVocabularyEntityFormDisplayTest.php
@@ -53,7 +53,6 @@ protected function setUp() {
             'target_bundles' => array(
               'tags' => 'tags',
             ),
-            'auto_create' => TRUE,
           ),
         ),
       ))->save();
diff --git a/core/modules/taxonomy/src/Tests/Migrate/d6/MigrateVocabularyFieldInstanceTest.php b/core/modules/taxonomy/src/Tests/Migrate/d6/MigrateVocabularyFieldInstanceTest.php
index adce33d..e7df035 100644
--- a/core/modules/taxonomy/src/Tests/Migrate/d6/MigrateVocabularyFieldInstanceTest.php
+++ b/core/modules/taxonomy/src/Tests/Migrate/d6/MigrateVocabularyFieldInstanceTest.php
@@ -88,7 +88,6 @@ public function testVocabularyFieldInstance() {
     $settings = $field->getSettings();
     $this->assertIdentical('default:taxonomy_term', $settings['handler'], 'The handler plugin ID is correct.');
     $this->assertIdentical(['tags'], $settings['handler_settings']['target_bundles'], 'The target_bundle handler setting is correct.');
-    $this->assertIdentical(TRUE, $settings['handler_settings']['auto_create'], 'The "auto_create" setting is correct.');
 
     $this->assertIdentical(array('node', 'article', 'tags'), entity_load('migration', 'd6_vocabulary_field_instance')->getIdMap()->lookupDestinationID(array(4, 'article')));
   }
diff --git a/core/modules/taxonomy/src/Tests/RssTest.php b/core/modules/taxonomy/src/Tests/RssTest.php
index 0871b4b..e4d163b 100644
--- a/core/modules/taxonomy/src/Tests/RssTest.php
+++ b/core/modules/taxonomy/src/Tests/RssTest.php
@@ -50,13 +50,13 @@ protected function setUp() {
       'target_bundles' => array(
         $this->vocabulary->id() => $this->vocabulary->id(),
       ),
-      'auto_create' => TRUE,
     );
     $this->createEntityReferenceField('node', 'article', $this->fieldName, NULL, 'taxonomy_term', 'default', $handler_settings, FieldStorageDefinitionInterface::CARDINALITY_UNLIMITED);
 
     entity_get_form_display('node', 'article', 'default')
       ->setComponent($this->fieldName, array(
         'type' => 'options_select',
+        'settings' => array('auto_create_bundle' => $this->vocabulary->id()),
       ))
       ->save();
     entity_get_display('node', 'article', 'default')
diff --git a/core/modules/taxonomy/src/Tests/TaxonomyTranslationTestTrait.php b/core/modules/taxonomy/src/Tests/TaxonomyTranslationTestTrait.php
index 4b828cf..94d1b80 100644
--- a/core/modules/taxonomy/src/Tests/TaxonomyTranslationTestTrait.php
+++ b/core/modules/taxonomy/src/Tests/TaxonomyTranslationTestTrait.php
@@ -88,7 +88,6 @@ protected function setUpTermReferenceField($translatable = FALSE) {
       'target_bundles' => array(
         $this->vocabulary->id() => $this->vocabulary->id(),
       ),
-      'auto_create' => TRUE,
     );
     $this->createEntityReferenceField('node', 'article', $this->termFieldName, NULL, 'taxonomy_term', 'default', $handler_settings, FieldStorageDefinitionInterface::CARDINALITY_UNLIMITED);
     $field_storage = FieldStorageConfig::loadByName('node', $this->termFieldName);
@@ -98,6 +97,7 @@ protected function setUpTermReferenceField($translatable = FALSE) {
     entity_get_form_display('node', 'article', 'default')
       ->setComponent($this->termFieldName, array(
         'type' => 'entity_reference_autocomplete_tags',
+        'settings' => array('auto_create_bundle' => $this->vocabulary->id()),
       ))
       ->save();
     entity_get_display('node', 'article', 'default')
diff --git a/core/modules/taxonomy/src/Tests/TermIndexTest.php b/core/modules/taxonomy/src/Tests/TermIndexTest.php
index 9fb797e..da9e426 100644
--- a/core/modules/taxonomy/src/Tests/TermIndexTest.php
+++ b/core/modules/taxonomy/src/Tests/TermIndexTest.php
@@ -59,7 +59,6 @@ protected function setUp() {
       'target_bundles' => array(
         $this->vocabulary->id() => $this->vocabulary->id(),
        ),
-      'auto_create' => TRUE,
     );
     $this->createEntityReferenceField('node', 'article', $this->fieldName1, NULL, 'taxonomy_term', 'default', $handler_settings, FieldStorageDefinitionInterface::CARDINALITY_UNLIMITED);
 
diff --git a/core/modules/taxonomy/src/Tests/TermTest.php b/core/modules/taxonomy/src/Tests/TermTest.php
index 9d06719..e0e6ce4 100644
--- a/core/modules/taxonomy/src/Tests/TermTest.php
+++ b/core/modules/taxonomy/src/Tests/TermTest.php
@@ -60,7 +60,6 @@ protected function setUp() {
       'target_bundles' => array(
         $this->vocabulary->id() => $this->vocabulary->id(),
       ),
-      'auto_create' => TRUE,
     );
     $this->createEntityReferenceField('node', 'article', $field_name, NULL, 'taxonomy_term', 'default', $handler_settings, FieldStorageDefinitionInterface::CARDINALITY_UNLIMITED);
     $this->field = FieldConfig::loadByName('node', 'article', $field_name);
@@ -222,6 +221,7 @@ function testNodeTermCreationAndDeletion() {
         'type' => 'entity_reference_autocomplete_tags',
         'settings' => array(
           'placeholder' => 'Start typing here.',
+          'auto_create_bundle' => $this->vocabulary->id(),
         ),
       ))
       ->save();
diff --git a/core/modules/taxonomy/src/Tests/TokenReplaceTest.php b/core/modules/taxonomy/src/Tests/TokenReplaceTest.php
index 4fcb0f1..5b1208d 100644
--- a/core/modules/taxonomy/src/Tests/TokenReplaceTest.php
+++ b/core/modules/taxonomy/src/Tests/TokenReplaceTest.php
@@ -44,7 +44,6 @@ protected function setUp() {
       'target_bundles' => array(
         $this->vocabulary->id() => $this->vocabulary->id(),
       ),
-      'auto_create' => TRUE,
     );
     $this->createEntityReferenceField('node', 'article', $this->fieldName, NULL, 'taxonomy_term', 'default', $handler_settings, FieldStorageDefinitionInterface::CARDINALITY_UNLIMITED);
 
diff --git a/core/modules/taxonomy/src/Tests/Views/TaxonomyTermViewTest.php b/core/modules/taxonomy/src/Tests/Views/TaxonomyTermViewTest.php
index ebe47dc..fcaeb29 100644
--- a/core/modules/taxonomy/src/Tests/Views/TaxonomyTermViewTest.php
+++ b/core/modules/taxonomy/src/Tests/Views/TaxonomyTermViewTest.php
@@ -60,7 +60,6 @@ protected function setUp() {
       'target_bundles' => array(
         $this->vocabulary->id() => $this->vocabulary->id(),
       ),
-      'auto_create' => TRUE,
     );
     $this->createEntityReferenceField('node', 'article', $this->fieldName1, NULL, 'taxonomy_term', 'default', $handler_settings, FieldStorageDefinitionInterface::CARDINALITY_UNLIMITED);
 
diff --git a/core/modules/taxonomy/src/Tests/Views/TaxonomyTestBase.php b/core/modules/taxonomy/src/Tests/Views/TaxonomyTestBase.php
index ae84b09..c98984e 100644
--- a/core/modules/taxonomy/src/Tests/Views/TaxonomyTestBase.php
+++ b/core/modules/taxonomy/src/Tests/Views/TaxonomyTestBase.php
@@ -93,13 +93,13 @@ protected function mockStandardInstall() {
       'target_bundles' => array(
         $this->vocabulary->id() => $this->vocabulary->id(),
       ),
-      'auto_create' => TRUE,
     );
     $this->createEntityReferenceField('node', 'article', $field_name, 'Tags', 'taxonomy_term', 'default', $handler_settings, FieldStorageDefinitionInterface::CARDINALITY_UNLIMITED);
 
     entity_get_form_display('node', 'article', 'default')
       ->setComponent($field_name, array(
         'type' => 'entity_reference_autocomplete_tags',
+        'settings' => array('auto_create_bundle' => $this->vocabulary->id()),
         'weight' => -4,
       ))
       ->save();
diff --git a/core/modules/views/src/Tests/DefaultViewsTest.php b/core/modules/views/src/Tests/DefaultViewsTest.php
index 3df4082..582ca9d 100644
--- a/core/modules/views/src/Tests/DefaultViewsTest.php
+++ b/core/modules/views/src/Tests/DefaultViewsTest.php
@@ -68,7 +68,6 @@ protected function setUp() {
       'target_bundles' => array(
         $vocabulary->id() => $vocabulary->id(),
       ),
-      'auto_create' => TRUE,
     );
     $this->createEntityReferenceField('node', 'page', $field_name, NULL, 'taxonomy_term', 'default', $handler_settings, FieldStorageDefinitionInterface::CARDINALITY_UNLIMITED);
 
diff --git a/core/modules/views/src/Tests/Wizard/TaggedWithTest.php b/core/modules/views/src/Tests/Wizard/TaggedWithTest.php
index b9c58f7..2195dbd 100644
--- a/core/modules/views/src/Tests/Wizard/TaggedWithTest.php
+++ b/core/modules/views/src/Tests/Wizard/TaggedWithTest.php
@@ -90,13 +90,13 @@ protected function setUp() {
       'target_bundles' => array(
         $this->tagVocabulary->id() => $this->tagVocabulary->id(),
       ),
-      'auto_create' => TRUE,
     );
     $this->createEntityReferenceField('node', $this->nodeTypeWithTags->id(), $this->tagFieldName, NULL, 'taxonomy_term', 'default', $handler_settings, FieldStorageDefinitionInterface::CARDINALITY_UNLIMITED);
 
     entity_get_form_display('node', $this->nodeTypeWithTags->id(), 'default')
       ->setComponent($this->tagFieldName, array(
         'type' => 'entity_reference_autocomplete_tags',
+        'settings' => array('auto_create_bundle' => $this->tagVocabulary->id()),
       ))
       ->save();
 
@@ -211,13 +211,13 @@ function testTaggedWithByNodeType() {
           'target_bundles' => array(
             $this->tagVocabulary->id() => $this->tagVocabulary->id(),
           ),
-          'auto_create' => TRUE,
         ),
       ),
     ))->save();
     entity_get_form_display('node', $this->nodeTypeWithoutTags->id(), 'default')
       ->setComponent($this->tagFieldName, array(
         'type' => 'entity_reference_autocomplete_tags',
+        'settings' => array('auto_create_bundle' => $this->tagVocabulary->id()),
       ))
       ->save();
 
diff --git a/core/profiles/standard/config/install/core.entity_form_display.node.article.default.yml b/core/profiles/standard/config/install/core.entity_form_display.node.article.default.yml
index 64f8efc..ab84e3a 100644
--- a/core/profiles/standard/config/install/core.entity_form_display.node.article.default.yml
+++ b/core/profiles/standard/config/install/core.entity_form_display.node.article.default.yml
@@ -37,7 +37,8 @@ content:
   field_tags:
     type: entity_reference_autocomplete_tags
     weight: 3
-    settings: {  }
+    settings:
+      auto_create_bundle: tags
     third_party_settings: {  }
   field_image:
     type: image_image
diff --git a/core/profiles/standard/config/install/field.field.node.article.field_tags.yml b/core/profiles/standard/config/install/field.field.node.article.field_tags.yml
index d69a558..d5c031c 100644
--- a/core/profiles/standard/config/install/field.field.node.article.field_tags.yml
+++ b/core/profiles/standard/config/install/field.field.node.article.field_tags.yml
@@ -15,7 +15,6 @@ settings:
       tags: tags
     sort:
       field: _none
-    auto_create: true
 status: true
 langcode: en
 dependencies:
