diff --git a/core/modules/node/lib/Drupal/node/Plugin/views/filter/Type.php b/core/modules/node/lib/Drupal/node/Plugin/views/filter/Type.php
deleted file mode 100644
index 87f7005..0000000
--- a/core/modules/node/lib/Drupal/node/Plugin/views/filter/Type.php
+++ /dev/null
@@ -1,38 +0,0 @@
-<?php
-
-/**
- * @file
- * Definition of Drupal\node\Plugin\views\filter\Type.
- */
-
-namespace Drupal\node\Plugin\views\filter;
-
-use Drupal\views\Plugin\views\filter\InOperator;
-use Drupal\Core\Annotation\Plugin;
-
-/**
- * Filter by node type.
- *
- * @ingroup views_filter_handlers
- *
- * @Plugin(
- *   id = "node_type",
- *   module = "node"
- * )
- */
-class Type extends InOperator {
-
-  function get_value_options() {
-    if (!isset($this->value_options)) {
-      $this->value_title = t('Content types');
-      $types = node_type_get_types();
-      $options = array();
-      foreach ($types as $type => $info) {
-        $options[$type] = t($info->name);
-      }
-      asort($options);
-      $this->value_options = $options;
-    }
-  }
-
-}
diff --git a/core/modules/node/node.views.inc b/core/modules/node/node.views.inc
index 8f8d75f..2668d0f 100644
--- a/core/modules/node/node.views.inc
+++ b/core/modules/node/node.views.inc
@@ -130,7 +130,7 @@ function node_views_data() {
       'id' => 'standard',
     ),
     'filter' => array(
-      'id' => 'node_type',
+      'id' => 'entity_type',
     ),
     'argument' => array(
       'id' => 'node_type',
diff --git a/core/modules/taxonomy/lib/Drupal/taxonomy/Plugin/views/filter/VocabularyVid.php b/core/modules/taxonomy/lib/Drupal/taxonomy/Plugin/views/filter/VocabularyVid.php
deleted file mode 100644
index bfa55a2..0000000
--- a/core/modules/taxonomy/lib/Drupal/taxonomy/Plugin/views/filter/VocabularyVid.php
+++ /dev/null
@@ -1,37 +0,0 @@
-<?php
-
-/**
- * @file
- * Definition of Drupal\taxonomy\Plugin\views\filter\VocabularyVid.
- */
-
-namespace Drupal\taxonomy\Plugin\views\filter;
-
-use Drupal\Core\Annotation\Plugin;
-use Drupal\views\Plugin\views\filter\InOperator;
-
-/**
- * Filter by vocabulary id.
- *
- * @ingroup views_filter_handlers
- *
- * @Plugin(
- *   id = "vocabulary_vid",
- *   module = "taxonomy"
- * )
- */
-class VocabularyVid extends InOperator {
-
-  function get_value_options() {
-    if (isset($this->value_options)) {
-      return;
-    }
-
-    $this->value_options = array();
-    $vocabularies = entity_load_multiple('taxonomy_vocabulary');
-    foreach ($vocabularies as $voc) {
-      $this->value_options[$voc->id()] = $voc->label();
-    }
-  }
-
-}
diff --git a/core/modules/taxonomy/taxonomy.views.inc b/core/modules/taxonomy/taxonomy.views.inc
index 7f87670..5f26d64 100644
--- a/core/modules/taxonomy/taxonomy.views.inc
+++ b/core/modules/taxonomy/taxonomy.views.inc
@@ -147,7 +147,7 @@ function taxonomy_views_data() {
     'title' => t('Vocabulary'),
     'help' => t('Filter the results of "Taxonomy: Term" to a particular vocabulary.'),
     'filter' => array(
-      'id' => 'vocabulary_vid',
+      'id' => 'entity_type',
     ),
   );
 
diff --git a/core/modules/views/lib/Drupal/views/Plugin/views/filter/EntityType.php b/core/modules/views/lib/Drupal/views/Plugin/views/filter/EntityType.php
new file mode 100644
index 0000000..be01405
--- /dev/null
+++ b/core/modules/views/lib/Drupal/views/Plugin/views/filter/EntityType.php
@@ -0,0 +1,79 @@
+<?php
+
+/**
+ * @file
+ * Definition of \Drupal\views\Plugin\views\filter\EntityType.
+ */
+
+namespace Drupal\views\Plugin\views\filter;
+
+use Drupal\Core\Annotation\Plugin;
+use Drupal\views\ViewExecutable;
+use Drupal\views\Plugin\views\display\DisplayPluginBase;
+
+/**
+ * Filter class which allows filtering by entity bundle types.
+ *
+ * This class provides a workaround for comment.
+ *
+ * @ingroup views_filter_handlers
+ *
+ * @Plugin(
+ *   id = "entity_type"
+ * )
+ */
+class EntityType extends InOperator {
+
+  /**
+   * The entity type for the filter.
+   *
+   * @var string
+   */
+  protected $entityType;
+
+  /**
+   * The entity info for the entity type.
+   *
+   * @var array
+   */
+  protected $entityInfo;
+
+  /**
+   * Overrides \Drupal\views\Plugin\views\filter\InOperator::init().
+   */
+  public function init(ViewExecutable $view, DisplayPluginBase $display, array &$options = NULL) {
+    parent::init($view, $display, $options);
+
+    $this->entityType = $this->getEntityType();
+    $this->entityInfo = entity_get_info($this->entityType);
+    $this->real_field = $this->entityInfo['entity_keys']['bundle'];
+  }
+
+  /**
+   * Overrides \Drupal\views\Plugin\views\filter\InOperator::get_value_options().
+   */
+  public function get_value_options() {
+    if (!isset($this->value_options)) {
+      $types = $this->entityInfo['bundles'];
+      $this->value_title = t('@entity types', array('@entity' => $this->entityInfo['label']));
+
+      $options = array();
+      foreach ($types as $type => $info) {
+        $options[$type] = $info['label'];
+      }
+
+      asort($options);
+      $this->value_options = $options;
+    }
+  }
+
+  /**
+   * Overrides \Drupal\views\Plugin\views\filter\InOperator::query().
+   */
+  public function query() {
+    // Make sure that the entity base table is in the query.
+    $this->ensureMyTable();
+    parent::query();
+  }
+
+}
