diff --git a/core/config/schema/core.data_types.schema.yml b/core/config/schema/core.data_types.schema.yml
index edd97ac..d72c4d6 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 where auto-created entities are stored.'
 
 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..c2e91c2 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,37 @@ 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) {
+    $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 e3fcc16..84d3cec 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;
@@ -152,7 +154,6 @@ public function testFieldAdminHandler() {
     $this->assertResponse(200);
   }
 
-
   /**
    * Tests the formatters for the Entity References
    */
@@ -161,13 +162,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');
@@ -216,17 +217,64 @@ public function testAvailableFormatters() {
   }
 
   /**
+   * Tests field settings for taxonomy term entity reference field when the
+   * field is set to auto-create the target term in more than one vocabularies.
+   */
+  public function testMultipleTargetTaxonomyVocabularies() {
+    /** @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;
 
@@ -235,7 +283,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;
     }
 
@@ -245,7 +293,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..a9b389f 100644
--- a/core/modules/entity_reference/src/Tests/EntityReferenceAutoCreateTest.php
+++ b/core/modules/entity_reference/src/Tests/EntityReferenceAutoCreateTest.php
@@ -7,7 +7,11 @@
 
 namespace Drupal\entity_reference\Tests;
 
+use Drupal\Component\Utility\Unicode;
 use Drupal\Core\Field\FieldStorageDefinitionInterface;
+use Drupal\field\Entity\FieldConfig;
+use Drupal\field\Entity\FieldStorageConfig;
+use Drupal\taxonomy\Entity\Vocabulary;
 use Drupal\simpletest\WebTestBase;
 use Drupal\node\Entity\Node;
 
@@ -18,7 +22,7 @@
  */
 class EntityReferenceAutoCreateTest extends WebTestBase {
 
-  public static $modules = array('entity_reference', 'node');
+  public static $modules = ['entity_reference', 'node', 'taxonomy'];
 
   /**
    * The name of a content type that will reference $referencedType.
@@ -82,6 +86,9 @@ protected function setUp() {
         'type' => 'entity_reference_autocomplete',
       ))
       ->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,90 @@ public function testAutoCreate() {
     $this->assertText($referencing_node->label(), 'Referencing node label found.');
     $this->assertText($referenced_node->label(), 'Referenced node label found.');
   }
+
+  /**
+   * Tests if a taxonomy term entity reference field having multiple target
+   * vocabularies is storing the term in the right destination.
+   */
+  public function testMultipleTargetTaxonomyVocabularies() {
+    /** @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());
+    FieldStorageConfig::create([
+      'field_name' => $field_name,
+      'entity_type' => 'node',
+      'settings' => array(
+        'target_type' => 'taxonomy_term',
+      ),
+      'type' => 'entity_reference',
+    ])->save();
+    FieldConfig::create([
+      'label' => $this->randomMachineName(),
+      'entity_type' => 'node',
+      'bundle' => $this->referencingType,
+      'field_name' => $field_name,
+      'settings' => [
+        'handler' => 'default',
+        '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(),
+        ],
+      ],
+    ])->save();
+    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());
+  }
+
 }
diff --git a/core/modules/taxonomy/src/Plugin/EntityReferenceSelection/TermSelection.php b/core/modules/taxonomy/src/Plugin/EntityReferenceSelection/TermSelection.php
index 61281fb..9a8d636 100644
--- a/core/modules/taxonomy/src/Plugin/EntityReferenceSelection/TermSelection.php
+++ b/core/modules/taxonomy/src/Plugin/EntityReferenceSelection/TermSelection.php
@@ -38,16 +38,9 @@ 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,
-    );
-    return $form;
 
+    return $form;
   }
 
   /**
@@ -58,7 +51,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'];
