diff --git a/core/modules/taxonomy/src/Plugin/views/argument_validator/TermName.php b/core/modules/taxonomy/src/Plugin/views/argument_validator/TermName.php
index d5a7a7e..92d985d 100644
--- a/core/modules/taxonomy/src/Plugin/views/argument_validator/TermName.php
+++ b/core/modules/taxonomy/src/Plugin/views/argument_validator/TermName.php
@@ -69,22 +69,26 @@ public function validateArgument($argument) {
     if ($this->options['transform']) {
       $argument = str_replace('-', ' ', $argument);
     }
-    $terms = $this->termStorage->loadByProperties(array('name' => $argument));
 
-    if (!$terms) {
-      // Returned empty array no terms with the name.
-      return FALSE;
+    // If bundles is set then restrict the loaded terms to the given bundles.
+    if (!empty($this->options['bundles'])) {
+      $terms = $this->termStorage->loadByProperties(array('name' => $argument, 'vid' => $this->options['bundles']));
     }
-
-    // Not knowing which term will be used if more than one is returned check
-    // each one.
-    foreach ($terms as $term) {
-      if (!$this->validateEntity($term)) {
-        return FALSE;
-      }
+    else {
+      $terms = $this->termStorage->loadByProperties(array('name' => $argument));
     }
 
-    return TRUE;
+    if (!empty($terms)) {
+      // $terms are already bundle tested but we need to test access control.
+      foreach ($terms as $term) {
+       if ($this->validateEntity($term)) {
+         // We only need one of the terms to be valid, so return TRUE when we
+         // find one.
+         return TRUE;
+       }
+     }
+    }
+    return FALSE;
   }
 
 }
diff --git a/core/modules/taxonomy/src/Tests/Views/ArgumentValidatorTermNameTest.php b/core/modules/taxonomy/src/Tests/Views/ArgumentValidatorTermNameTest.php
new file mode 100644
index 0000000..a406115
--- /dev/null
+++ b/core/modules/taxonomy/src/Tests/Views/ArgumentValidatorTermNameTest.php
@@ -0,0 +1,110 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\taxonomy\Tests\Views\ArgumentValidatorTermNameTest.
+ */
+
+namespace Drupal\taxonomy\Tests\Views;
+
+use Drupal\Core\Language\LanguageInterface;
+use Drupal\views\Views;
+use Drupal\taxonomy\Entity\Vocabulary;
+
+/**
+ * Tests the plugin of the taxonomy: term argument validator.
+ *
+ * @group taxonomy
+ * @see Views\taxonomy\Plugin\views\argument_validator\Term
+ */
+class ArgumentValidatorTermNameTest extends TaxonomyTestBase {
+
+  /**
+   * Stores the taxonomy term used by this test.
+   *
+   * @var array
+   */
+  protected $terms = [];
+
+  /**
+   * Stores the taxonomy names used by this test.
+   *
+   * @var array
+   */
+  protected $names = [];
+
+  /**
+   * The vocabulary used for creating terms that will interfere with "tags".
+   *
+   * @var \Drupal\taxonomy\VocabularyInterface
+   */
+  protected $vocabulary2;
+
+  /**
+   * Stores the taxonomy IDs used by this test.
+   *
+   * @var array
+   */
+  protected $ids = [];
+
+  /**
+   * Modules to enable.
+   *
+   * @var array
+   */
+  public static $modules = ['taxonomy', 'taxonomy_test_views', 'views_test_config'];
+
+  /**
+   * Views used by this test.
+   *
+   * @var array
+   */
+  public static $testViews = ['taxonomy_term_name_argument_test'];
+
+  protected function setUp() {
+    parent::setUp();
+
+    // Create a second vocabulary for duplicate term.
+    $this->vocabulary2 = Vocabulary::create(array(
+      'name' => 'Other vocabulary tags',
+      'vid' => 'other_testing_tags',
+    ));
+    $this->vocabulary2->save();
+
+    // Add a term to the new vocabulary with the same name as a term in the
+    // first vocabulary.
+    $settings = [
+      'name' => $this->term1->getName(),
+      'description' => $this->term1->getDescription(),
+      'vid' => $this->vocabulary2->id(),
+      'langcode' => LanguageInterface::LANGCODE_NOT_SPECIFIED,
+    ];
+    $this->createTerm($settings);
+  }
+
+  /**
+   * Tests the term argument validator plugin.
+   */
+  public function testArgumentValidatorTermName() {
+    $view = Views::getView('taxonomy_term_name_argument_test');
+    $view->initHandlers();
+
+    // Test a term that exists in only one vocabulary.
+    $this->assertTrue($view->argument['name']->setArgument($this->term2->getName()));
+    $this->assertEqual($view->argument['name']->getTitle(), $this->term2->label());
+    $view->argument['name']->validated_title = NULL;
+    $view->argument['name']->argument_validated = NULL;
+
+    // Test a term that exists in at least two vocabularies.
+    $this->assertTrue($view->argument['name']->setArgument($this->term1->getName()));
+    $this->assertEqual($view->argument['name']->getTitle(), $this->term1->label());
+    $view->argument['name']->validated_title = NULL;
+    $view->argument['name']->argument_validated = NULL;
+
+    // Pass in an invalid term.
+    $this->assertFalse($view->argument['name']->setArgument(rand(1000, 10000)));
+    $view->argument['name']->validated_title = NULL;
+    $view->argument['name']->argument_validated = NULL;
+  }
+
+}
diff --git a/core/modules/taxonomy/tests/modules/taxonomy_test_views/test_views/views.view.taxonomy_term_name_argument_test.yml b/core/modules/taxonomy/tests/modules/taxonomy_test_views/test_views/views.view.taxonomy_term_name_argument_test.yml
new file mode 100644
index 0000000..f955da1
--- /dev/null
+++ b/core/modules/taxonomy/tests/modules/taxonomy_test_views/test_views/views.view.taxonomy_term_name_argument_test.yml
@@ -0,0 +1,180 @@
+langcode: en
+status: true
+dependencies:
+  module:
+    - taxonomy
+    - user
+id: taxonomy_term_name_argument_test
+label: taxonomy_term_name_argument_test
+module: views
+description: ''
+tag: ''
+base_table: taxonomy_term_field_data
+base_field: tid
+core: 8.x
+display:
+  default:
+    display_plugin: default
+    id: default
+    display_title: Master
+    position: 0
+    display_options:
+      access:
+        type: perm
+        options:
+          perm: 'access content'
+      cache:
+        type: tag
+        options: {  }
+      query:
+        type: views_query
+        options:
+          disable_sql_rewrite: false
+          distinct: false
+          replica: false
+          query_comment: ''
+          query_tags: {  }
+      exposed_form:
+        type: basic
+        options:
+          submit_button: Apply
+          reset_button: false
+          reset_button_label: Reset
+          exposed_sorts_label: 'Sort by'
+          expose_sort_order: true
+          sort_asc_label: Asc
+          sort_desc_label: Desc
+      pager:
+        type: full
+        options:
+          items_per_page: 10
+          offset: 0
+          id: 0
+          total_pages: null
+          expose:
+            items_per_page: false
+            items_per_page_label: 'Items per page'
+            items_per_page_options: '5, 10, 20, 40, 60'
+            items_per_page_options_all: false
+            items_per_page_options_all_label: '- All -'
+            offset: false
+            offset_label: Offset
+          tags:
+            previous: '‹ previous'
+            next: 'next ›'
+            first: '« first'
+            last: 'last »'
+          quantity: 9
+      style:
+        type: default
+        options:
+          grouping: {  }
+          row_class: ''
+          default_row_class: true
+          uses_fields: false
+      row:
+        type: 'entity:taxonomy_term'
+        options:
+          relationship: none
+          view_mode: default
+      fields:
+        name:
+          id: name
+          table: taxonomy_term_field_data
+          field: name
+          label: ''
+          alter:
+            alter_text: false
+            make_link: false
+            absolute: false
+            trim: false
+            word_boundary: false
+            ellipsis: false
+            strip_tags: false
+            html: false
+          hide_empty: false
+          empty_zero: false
+          relationship: none
+          group_type: group
+          admin_label: ''
+          exclude: false
+          element_type: ''
+          element_class: ''
+          element_label_type: ''
+          element_label_class: ''
+          element_label_colon: true
+          element_wrapper_type: ''
+          element_wrapper_class: ''
+          element_default_classes: true
+          empty: ''
+          hide_alter_empty: true
+          plugin_id: field
+          type: string
+          settings:
+            link_to_entity: true
+          entity_type: taxonomy_term
+          entity_field: name
+      filters: {  }
+      sorts: {  }
+      header: {  }
+      footer: {  }
+      empty: {  }
+      relationships: {  }
+      arguments:
+        name:
+          id: name
+          table: taxonomy_term_field_data
+          field: name
+          relationship: none
+          group_type: group
+          admin_label: ''
+          default_action: ignore
+          exception:
+            value: all
+            title_enable: false
+            title: All
+          title_enable: false
+          title: ''
+          default_argument_type: fixed
+          default_argument_options:
+            argument: ''
+          default_argument_skip_url: false
+          summary_options:
+            base_path: ''
+            count: true
+            items_per_page: 25
+            override: false
+          summary:
+            sort_order: asc
+            number_of_records: 0
+            format: default_summary
+          specify_validation: true
+          validate:
+            type: taxonomy_term_name
+            fail: 'not found'
+          validate_options:
+            bundles:
+              views_testing_tags: views_testing_tags
+            operation: view
+            access: false
+          glossary: false
+          limit: 0
+          case: none
+          path_case: none
+          transform_dash: false
+          break_phrase: false
+          add_table: false
+          require_value: false
+          entity_type: taxonomy_term
+          entity_field: name
+          plugin_id: string
+      rendering_language: '***LANGUAGE_entity_translation***'
+      display_extenders: {  }
+    cache_metadata:
+      contexts:
+        - 'languages:language_content'
+        - 'languages:language_interface'
+        - url
+        - 'url.query_args.pagers:0'
+        - user.permissions
+      cacheable: false
