diff --git a/core/config/schema/core.data_types.schema.yml b/core/config/schema/core.data_types.schema.yml
index a06e3ad..e97d589 100644
--- a/core/config/schema/core.data_types.schema.yml
+++ b/core/config/schema/core.data_types.schema.yml
@@ -776,6 +776,9 @@ entity_reference_selection:
     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.'
 
 entity_reference_selection.*:
   type: entity_reference_selection
diff --git a/core/lib/Drupal/Core/Entity/Plugin/EntityReferenceSelection/SelectionBase.php b/core/lib/Drupal/Core/Entity/Plugin/EntityReferenceSelection/SelectionBase.php
index f33fe2a..f6c374f 100644
--- a/core/lib/Drupal/Core/Entity/Plugin/EntityReferenceSelection/SelectionBase.php
+++ b/core/lib/Drupal/Core/Entity/Plugin/EntityReferenceSelection/SelectionBase.php
@@ -116,6 +116,7 @@ public function buildConfigurationForm(array $form, FormStateInterface $form_sta
         'field' => '_none',
       ),
       'auto_create' => FALSE,
+      'auto_create_bundle' => NULL,
     );
 
     if ($entity_type->hasKey('bundle')) {
@@ -128,11 +129,23 @@ public function buildConfigurationForm(array $form, FormStateInterface $form_sta
         '#type' => 'checkboxes',
         '#title' => $this->t('Bundles'),
         '#options' => $bundle_options,
-        '#default_value' => (!empty($selection_handler_settings['target_bundles'])) ? $selection_handler_settings['target_bundles'] : array(),
+        '#default_value' => $selection_handler_settings['target_bundles'],
         '#required' => TRUE,
         '#size' => 6,
         '#multiple' => TRUE,
         '#element_validate' => array('_entity_reference_element_validate_filter'),
+        '#ajax' => TRUE,
+        '#limit_validation_errors' => array(),
+      );
+
+      $form['target_bundles_update'] = array(
+        '#type' => 'submit',
+        '#value' => $this->t('Update bundles'),
+        '#limit_validation_errors' => array(),
+        '#attributes' => array(
+          'class' => array('js-hide'),
+        ),
+        '#submit' => array('entity_reference_settings_ajax_submit'),
       );
     }
     else {
@@ -201,13 +214,39 @@ public function buildConfigurationForm(array $form, FormStateInterface $form_sta
       }
     }
 
+    $form['auto_create'] = array(
+      '#type' => 'checkbox',
+      '#title' => $this->t("Create referenced entities if they don't already exist"),
+      '#default_value' => $selection_handler_settings['auto_create'],
+    );
+
+    if ($entity_type->hasKey('bundle')) {
+      $bundles = array_intersect_key($bundle_options, $selection_handler_settings['target_bundles']);
+      $form['auto_create_bundle'] = array(
+        '#type' => 'select',
+        '#title' => $this->t('Store new items in'),
+        '#options' => $bundles,
+        '#default_value' => $selection_handler_settings['auto_create_bundle'],
+        '#access' => count($bundles) > 1,
+        '#states' => array(
+          'visible' => array(
+            ':input[name="field[settings][handler_settings][auto_create]"]' => array('checked' => TRUE),
+          ),
+        ),
+      );
+    }
+
     return $form;
   }
 
   /**
    * {@inheritdoc}
    */
-  public function validateConfigurationForm(array &$form, FormStateInterface $form_state) { }
+  public function validateConfigurationForm(array &$form, FormStateInterface $form_state) {
+    // Don't store the 'target_bundles_update' button value into the field
+    // config settings.
+    $form_state->unsetValue(['field', 'settings', 'handler_settings', 'target_bundles_update']);
+  }
 
   /**
    * {@inheritdoc}
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 2d99619..12d5c0a 100644
--- a/core/lib/Drupal/Core/Field/Plugin/Field/FieldWidget/EntityReferenceAutocompleteWidget.php
+++ b/core/lib/Drupal/Core/Field/Plugin/Field/FieldWidget/EntityReferenceAutocompleteWidget.php
@@ -146,21 +146,23 @@ public function massageFormValues(array $values, array $form, FormStateInterface
    *
    * @return string
    *   The bundle name.
+   *
+   * @throws \InvalidArgumentException
+   *   Thrown when there's no 'auto_create_bundle' set but the entity reference
+   *   is configured to store new entities in multiple bundles.
    */
   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->getSelectionHandlerSetting('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 selection handler settings.
+      elseif (!$bundle = $this->getSelectionHandlerSetting('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("Reference auto-create is enabled on multiple target bundles but 'auto_create_bundle' is not set.");
       }
     }
 
diff --git a/core/modules/entity_reference/src/Tests/EntityReferenceAdminTest.php b/core/modules/entity_reference/src/Tests/EntityReferenceAdminTest.php
index e6718c0..4616bb2 100644
--- a/core/modules/entity_reference/src/Tests/EntityReferenceAdminTest.php
+++ b/core/modules/entity_reference/src/Tests/EntityReferenceAdminTest.php
@@ -7,6 +7,8 @@
 
 namespace Drupal\entity_reference\Tests;
 
+use Drupal\Component\Utility\Unicode;
+use Drupal\field\Entity\FieldConfig;
 use Drupal\field_ui\Tests\FieldUiTestTrait;
 use Drupal\simpletest\WebTestBase;
 use Drupal\taxonomy\Entity\Vocabulary;
@@ -158,7 +160,6 @@ public function testFieldAdminHandler() {
     $this->assertResponse(200);
   }
 
-
   /**
    * Tests the formatters for the Entity References
    */
@@ -167,13 +168,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');
@@ -222,17 +223,64 @@ 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;
+    $path = 'admin/structure/types/manage/' . $this->type . '/fields/' . $field_id;
+
+    $this->drupalGet($path);
+
+    // Expect that there's no 'auto_create_bundle' selected.
+    $this->assertNoFieldByName('field[settings][handler_settings][auto_create_bundle]');
+
+    $edit = [
+      'field[settings][handler_settings][target_bundles][' . $vocabularies[1]->id() . ']' => TRUE,
+    ];
+    // Enable the second vocabulary as a target bundle.
+    $this->drupalPostAjaxForm($path, $edit, key($edit));
+    // Expect a select element with the two vocabularies as options.
+    $this->assertFieldByXPath("//select[@name='field[settings][handler_settings][auto_create_bundle]']/option[@value='" . $vocabularies[0]->id() . "']");
+    $this->assertFieldByXPath("//select[@name='field[settings][handler_settings][auto_create_bundle]']/option[@value='" . $vocabularies[1]->id() . "']");
+
+    $edit = [
+      'field[settings][handler_settings][auto_create_bundle]' => $vocabularies[1]->id(),
+    ];
+    $this->drupalPostForm(NULL, $edit, t('Save settings'));
+
+    /** @var \Drupal\field\Entity\FieldConfig $field_config */
+    $field_config = FieldConfig::load($field_id);
+    // Expect that the target bundle has been saved in the backend.
+    $this->assertEqual($field_config->settings['handler_settings']['auto_create_bundle'], $vocabularies[1]->id());
+  }
+
+  /**
    * 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;
 
@@ -241,7 +289,7 @@ public function createEntityReferenceField($target_type, $bundle = NULL) {
 
     $storage_edit = $field_edit = array();
     $storage_edit['field_storage[settings][target_type]'] = $target_type;
-    if ($bundle) {
+    foreach ($bundles as $bundle) {
       $field_edit['field[settings][handler_settings][target_bundles][' . $bundle . ']'] = TRUE;
     }
 
@@ -251,7 +299,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..69f6491 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.
@@ -82,6 +87,9 @@ protected function setUp() {
         'type' => 'entity_reference_autocomplete',
       ))
       ->save();
+
+    $account = $this->drupalCreateUser(['access content', "create $this->referencingType content"]);
+    $this->drupalLogin($account);
   }
 
   /**
@@ -89,9 +97,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 +139,95 @@ 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\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(),
+      ],
+      'auto_create' => TRUE,
+      'auto_create_bundle' => $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'])
+      ->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::load('node.' . $this->referencingType . ".$field_name");
+    // Change the field setting to store the auto-created terms in the first
+    // vocabulary and test again.
+    $field_config->settings['handler_settings']['auto_create_bundle'] = $vocabularies[0]->id();
+    $field_config->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.
+    unset($field_config->settings['handler_settings']['auto_create_bundle']);
+    $field_config->save();
+
+    // 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(),
+        "Reference auto-create is enabled on multiple target bundles but 'auto_create_bundle' is not set."
+      );
+    }
+  }
+
 }
diff --git a/core/modules/taxonomy/src/Plugin/EntityReferenceSelection/TermSelection.php b/core/modules/taxonomy/src/Plugin/EntityReferenceSelection/TermSelection.php
index 2a3c4ad..475dd4d 100644
--- a/core/modules/taxonomy/src/Plugin/EntityReferenceSelection/TermSelection.php
+++ b/core/modules/taxonomy/src/Plugin/EntityReferenceSelection/TermSelection.php
@@ -38,7 +38,6 @@ 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(
@@ -52,7 +51,6 @@ public function buildConfigurationForm(array $form, FormStateInterface $form_sta
     $form['sort']['#access'] = FALSE;
 
     return $form;
-
   }
 
   /**
@@ -63,7 +61,7 @@ public function getReferenceableEntities($match = NULL, $match_operator = 'CONTA
       return parent::getReferenceableEntities($match , $match_operator, $limit);
     }
 
-    $options = array();
+    $options = [];
 
     $bundles = $this->entityManager->getBundleInfo('taxonomy_term');
     $handler_settings = $this->configuration['handler_settings'];
diff --git a/core/modules/taxonomy/taxonomy.module b/core/modules/taxonomy/taxonomy.module
index c1896fd..acf0429 100644
--- a/core/modules/taxonomy/taxonomy.module
+++ b/core/modules/taxonomy/taxonomy.module
@@ -69,7 +69,7 @@ function taxonomy_help($route_name, RouteMatchInterface $route_match) {
       $output .= '</ul>';
       $output .= '</dd>';
       $output .= '<dt>' . t('Adding new terms during content creation') . '</dt>';
-      $output .= '<dd>' . t('Allowing users to add new terms gradually builds a vocabulary as content is added and edited. Users can add new terms if the <em>Autocomplete term widget (tagging)</em> is chosen for a <em>Taxonomy Term reference</em> field, or if either of the two <em>Autocomplete</em> widgets is chosen for an <em>Entity reference</em> field. In this case you need to enable the <em>Create referenced entity</em> option, and restrict the field to one vocabulary.') . '</dd>';
+      $output .= '<dd>' . t('Allowing users to add new terms gradually builds a vocabulary as content is added and edited. Users can add new terms if the <em>Autocomplete term widget (tagging)</em> is chosen for a <em>Taxonomy Term reference</em> field, or if either of the two <em>Autocomplete</em> widgets is chosen for an <em>Entity reference</em> field. In this case you need to enable the <em>Create referenced entity</em> option.') . '</dd>';
       $output .= '<dt>' . t('Configuring displays and form displays ') . '</dt>';
       $output .= '<dd>' . t('The reference fields have several formatters and widgets available on the Manage display and Manage form display pages, respectively:');
       $output .= '<ul>';
