diff --git a/core/config/schema/core.data_types.schema.yml b/core/config/schema/core.data_types.schema.yml
index 79e3f14..04e7582 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 cc1a57e..17ccada 100644
--- a/core/config/schema/core.entity.schema.yml
+++ b/core/config/schema/core.entity.schema.yml
@@ -213,6 +213,12 @@ field.widget.settings.entity_reference_autocomplete_tags:
     placeholder:
       type: label
       label: 'Placeholder'
+    auto_create:
+      type: boolean
+      label: 'Create referenced entities if they don''t already exist'
+    auto_create_bundle:
+      type: string
+      label: 'Bundle assigned to the auto-created entities.'
 
 field.widget.settings.entity_reference_autocomplete:
   type: mapping
@@ -227,6 +233,12 @@ field.widget.settings.entity_reference_autocomplete:
     placeholder:
       type: label
       label: 'Placeholder'
+    auto_create:
+      type: boolean
+      label: 'Create referenced entities if they don''t already exist'
+    auto_create_bundle:
+      type: string
+      label: 'Bundle assigned to the auto-created entities.'
 
 field.formatter.settings.boolean:
   type: mapping
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/FieldWidget/EntityReferenceAutocompleteWidget.php b/core/lib/Drupal/Core/Field/Plugin/Field/FieldWidget/EntityReferenceAutocompleteWidget.php
index 948079e..2c3803c 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,8 @@ public static function defaultSettings() {
       'match_operator' => 'CONTAINS',
       'size' => '60',
       'placeholder' => '',
+      'auto_create' => FALSE,
+      'auto_create_bundle' => NULL,
     ) + parent::defaultSettings();
   }
 
@@ -42,6 +44,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 +67,35 @@ 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.'),
     );
+    $element['auto_create'] = array(
+      '#type' => 'checkbox',
+      '#title' => $this->t("Create referenced entities if they don't already exist"),
+      '#default_value' => $this->getSetting('auto_create'),
+    );
+
+    $bundles = $this->getSelectionHandlerSetting('target_bundles');
+    if ($entity_type->hasKey('bundle') && $bundles && count($bundles) > 1) {
+      $options = array();
+      foreach (\Drupal::entityManager()->getBundleInfo($entity_type_id) as $id => $info) {
+        if (in_array($id, $bundles)) {
+          $options[$id] = $info['label'];
+        }
+      }
+
+      $selector_name = 'fields[' . $this->fieldDefinition->getName() . '][settings_edit_form][settings][auto_create]';
+      $element['auto_create_bundle'] = array(
+        '#type' => 'select',
+        '#title' => $this->t('Store new items in'),
+        '#options' => $options,
+        '#default_value' => $this->getSetting('auto_create_bundle'),
+        '#states' => array(
+          'visible' => array(
+            ':input[name="' . $selector_name . '"]' => array('checked' => TRUE),
+          ),
+        ),
+      );
+    }
+
     return $element;
   }
 
@@ -82,6 +116,24 @@ public function settingsSummary() {
       $summary[] = t('No placeholder');
     }
 
+    if ($this->getSetting('auto_create')) {
+      $entity_type_id = $this->getFieldSetting('target_type');
+      $entity_type = \Drupal::entityManager()->getDefinition($entity_type_id);
+      $bundle_id = $this->getSetting('auto_create_bundle');
+      if ($bundle_id) {
+        $bundle_type = $entity_type->getBundleEntityType();
+        $storage = \Drupal::entityManager()->getStorage($bundle_type);
+        $bundle = $storage->load($bundle_id);
+        $summary[] = $this->t('Auto-create the %entity in %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;
   }
 
@@ -106,7 +158,7 @@ public function formElement(FieldItemListInterface $items, $delta, array $elemen
       '#placeholder' => $this->getSetting('placeholder'),
     );
 
-    if ($this->getSelectionHandlerSetting('auto_create')) {
+    if ($this->getSetting('auto_create')) {
       $element['#autocreate'] = array(
         'bundle' => $this->getAutocreateBundle(),
         'uid' => ($entity instanceof EntityOwnerInterface) ? $entity->getOwnerId() : \Drupal::currentUser()->id()
@@ -144,21 +196,27 @@ public function massageFormValues(array $values, array $form, FormStateInterface
    *
    * @return string
    *   The bundle name.
+   *
+   * @throws \InvalidArgumentException
+   *   Thrown when the field allows references from multiple target bundles,
+   *   'auto_create' is enabled and 'auto_create_bundle' is not set.
    */
   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) {
+    if ($this->getSetting('auto_create') && $target_bundles = $this->getSelectionHandlerSetting('target_bundles')) {
+      // If there's only one target bundle, use it.
+      if (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);
+      // Otherwise use the target bundle stored in widget settings.
+      elseif (!$bundle = $this->getSetting('auto_create_bundle')) {
+        // If no bundle has been set as auto create target means that there is
+        // an inconsistency in entity reference field settings.
+        throw new \InvalidArgumentException(sprintf(
+          "Create referenced entities if they don't already exist option is enabled but a specific destination bundle is not set. You should re-visit 'Manage form display' and fix the widget settings of the '%s' (%s) field.",
+          $this->fieldDefinition->getLabel(),
+          $this->fieldDefinition->getName()
+        ));
       }
     }
 
diff --git a/core/modules/entity_reference/src/Tests/EntityReferenceAdminTest.php b/core/modules/entity_reference/src/Tests/EntityReferenceAdminTest.php
index 0956896..e81612f 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,94 @@ 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 there's no 'auto_create_bundle' selected.
+    $this->assertNoFieldByName("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() . "']");
+
+    $edit = [
+      "fields[$field_name][settings_edit_form][settings][auto_create]" => TRUE,
+      "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->assertTrue($settings['auto_create']);
+    $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).
+    // @todo Implement this once https://www.drupal.org/node/2553169 is in.
+    //$vocabularies[1]->delete();
+    //$form_display = EntityFormDisplay::load("node.{$this->type}.default");
+    //$settings = $form_display->getComponent($field_name)['settings'];
+    //$this->assertFalse($settings['auto_create']);
+    //$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 +460,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 +470,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..36364ca 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' => TRUE),
       ))
       ->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,110 @@ 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' => TRUE,
+          '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);
+    $handler_settings = $field_config->getSetting('handler_settings');
+
+    // 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());
+
+    // Test the case when the field config settings are inconsistent.
+    $factory->getEditable("core.entity_form_display.node.{$this->referencingType}.default")
+      ->clear("content.$field_name.settings.auto_create_bundle")
+      ->save(TRUE);
+
+    // If we use $this->drupalGet() we cannot catch the exception because the
+    // form builder runs in other PHP space. Instead we are only building the
+    // form in order to check if the exception is thrown.
+    try {
+      /** @var \Drupal\Core\Form\FormBuilderInterface $form_builder */
+      $form_builder = $this->container->get('entity.form_builder');
+      $form_builder->getForm(Node::load(1));
+      $this->fail("Missed 'auto_create_bundle' should throw \\InvalidArgumentException but it didn't.");
+    }
+    catch (\InvalidArgumentException $e) {
+      $this->assertIdentical(
+        $e->getMessage(),
+        sprintf(
+          "Create referenced entities if they don't already exist option is enabled but a specific destination bundle is not set. You should re-visit 'Manage form display' and fix the widget settings of the '%s' (%s) field.",
+          $field_config->getLabel(),
+          $field_config->getName()
+        )
+      );
+    }
+  }
+
 }
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..5e1b528 100644
--- a/core/modules/node/src/Tests/PagePreviewTest.php
+++ b/core/modules/node/src/Tests/PagePreviewTest.php
@@ -74,13 +74,16 @@ 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' => TRUE,
+          'auto_create_bundle' => NULL,
+        ),
       ))
       ->save();
 
diff --git a/core/modules/quickedit/src/Tests/QuickEditAutocompleteTermTest.php b/core/modules/quickedit/src/Tests/QuickEditAutocompleteTermTest.php
index 81eaa97..64906ab 100644
--- a/core/modules/quickedit/src/Tests/QuickEditAutocompleteTermTest.php
+++ b/core/modules/quickedit/src/Tests/QuickEditAutocompleteTermTest.php
@@ -89,13 +89,16 @@ 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' => TRUE,
+          'auto_create_bundle' => NULL,
+        ),
         '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 8f10556..d7771d6 100644
--- a/core/modules/system/src/Tests/Entity/EntityCacheTagsTestBase.php
+++ b/core/modules/system/src/Tests/Entity/EntityCacheTagsTestBase.php
@@ -265,7 +265,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/system.install b/core/modules/system/system.install
index f38af8a..2ad0beb 100644
--- a/core/modules/system/system.install
+++ b/core/modules/system/system.install
@@ -1241,3 +1241,67 @@ function system_update_8003() {
     ]
   );
 }
+
+/**
+ * Migrates the entity reference selection handler 'auto_create' setting to
+ * field widget settings.
+ */
+function system_update_8004() {
+  $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');
+  $item_class = 'Drupal\Core\Field\Plugin\Field\FieldType\EntityReferenceItem';
+  $widget_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 field name.
+    list(,,,, $field_name) = explode('.', $field_id);
+
+    // Get the 'auto_create' value.
+    $auto_create = $config->get('settings.handler_settings.auto_create') ?: FALSE;
+
+    // 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 != $widget_ancestor_class && !is_subclass_of($widget_class, $widget_ancestor_class)) {
+          continue;
+        }
+
+        $display
+          ->set("content.$name.settings.auto_create", $auto_create)
+          ->set("content.$name.settings.auto_create_bundle", NULL);
+        $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);
+  }
+}
diff --git a/core/modules/taxonomy/migration_templates/d6_vocabulary_entity_form_display.yml b/core/modules/taxonomy/migration_templates/d6_vocabulary_entity_form_display.yml
index 3dbc95b..f924232 100644
--- a/core/modules/taxonomy/migration_templates/d6_vocabulary_entity_form_display.yml
+++ b/core/modules/taxonomy/migration_templates/d6_vocabulary_entity_form_display.yml
@@ -10,6 +10,8 @@ source:
     options:
       type: options_select
       weight: 20
+      settings:
+        auto_create: true
 process:
   entity_type: 'constants/entity_type'
   form_mode: 'constants/form_mode'
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..52829e8 100644
--- a/core/modules/taxonomy/migration_templates/d6_vocabulary_field_instance.yml
+++ b/core/modules/taxonomy/migration_templates/d6_vocabulary_field_instance.yml
@@ -17,7 +17,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..c1086bc 100644
--- a/core/modules/taxonomy/src/Tests/LegacyTest.php
+++ b/core/modules/taxonomy/src/Tests/LegacyTest.php
@@ -39,13 +39,16 @@ 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' => TRUE,
+          'auto_create_bundle' => NULL,
+        ),
       ))
       ->save();
 
diff --git a/core/modules/taxonomy/src/Tests/Migrate/d6/MigrateTermNodeTestBase.php b/core/modules/taxonomy/src/Tests/Migrate/d6/MigrateTermNodeTestBase.php
index 0d51f64..360fee5 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 bcf6b69..cdf60d5 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 80efa09..156cf34 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 f5c02ad..e94c736 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..c683331 100644
--- a/core/modules/taxonomy/src/Tests/RssTest.php
+++ b/core/modules/taxonomy/src/Tests/RssTest.php
@@ -50,13 +50,16 @@ 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' => TRUE,
+          'auto_create_bundle' => NULL,
+        ),
       ))
       ->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..b34c023 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,10 @@ 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' => TRUE,
+          'auto_create_bundle' => NULL,
+        ),
       ))
       ->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 09a0de2..7bfcca4 100644
--- a/core/modules/taxonomy/src/Tests/TermTest.php
+++ b/core/modules/taxonomy/src/Tests/TermTest.php
@@ -46,7 +46,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);
@@ -208,6 +207,8 @@ function testNodeTermCreationAndDeletion() {
         'type' => 'entity_reference_autocomplete_tags',
         'settings' => array(
           'placeholder' => 'Start typing here.',
+          'auto_create' => TRUE,
+          'auto_create_bundle' => NULL,
         ),
       ))
       ->save();
diff --git a/core/modules/taxonomy/src/Tests/TokenReplaceTest.php b/core/modules/taxonomy/src/Tests/TokenReplaceTest.php
index ff7c8ef..5892cec 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..6efe9cc 100644
--- a/core/modules/taxonomy/src/Tests/Views/TaxonomyTestBase.php
+++ b/core/modules/taxonomy/src/Tests/Views/TaxonomyTestBase.php
@@ -93,13 +93,16 @@ 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' => TRUE,
+          'auto_create_bundle' => NULL,
+        ),
         '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..9b04fb0 100644
--- a/core/modules/views/src/Tests/Wizard/TaggedWithTest.php
+++ b/core/modules/views/src/Tests/Wizard/TaggedWithTest.php
@@ -90,13 +90,16 @@ 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' => TRUE,
+          'auto_create_bundle' => NULL,
+        ),
       ))
       ->save();
 
@@ -211,13 +214,16 @@ 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' => TRUE,
+          'auto_create_bundle' => NULL,
+        ),
       ))
       ->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..09d27fb 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,9 @@ content:
   field_tags:
     type: entity_reference_autocomplete_tags
     weight: 3
-    settings: {  }
+    settings:
+      auto_create: true
+      auto_create_bundle: null
     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:
