diff --git a/entityreference_filter.views.inc b/entityreference_filter.views.inc
index d88d5ac..e30ac57 100644
--- a/entityreference_filter.views.inc
+++ b/entityreference_filter.views.inc
@@ -9,35 +9,44 @@
  * Implements hook_views_data_alter().
  */
 function entityreference_filter_views_data_alter(&$data) {
+  $mappings = array();
+  _entityreference_filter_alter_entityreference_filter_mappings($mappings);
+
   foreach ($data as $table_name => $table_info) {
     foreach ($table_info as $field_name => $field_info) {
-      // Apply to entity reference and term reference fields,
-      // and node, term and user identifier fields only.
       $base_table = NULL;
-      if ($field_name === 'nid') {
-        $base_table = 'node';
-      }
-      elseif ($field_name === 'uid') {
-        $base_table = 'users';
+      // Check if the field is already mapped with a base_table.
+      if (array_key_exists($field_name, $mappings)) {
+        $base_table = $mappings[$field_name];
       }
-      elseif ($field_name === 'tid') {
-        $base_table = 'taxonomy_term_data';
-      }
-      elseif (substr($field_name, -4) === '_tid') {
-        if (isset($field_info['filter']['field_name'])) {
-          $field = field_info_field($field_info['filter']['field_name']);
-          if ((!empty($field['type'])) && ($field['type'] === 'taxonomy_term_reference')) {
-            $base_table = 'taxonomy_term_data';
+      else {
+        // Apply to entity reference and term reference fields,
+        // and node, term and user identifier fields only.
+        if ($field_name === 'nid') {
+          $base_table = 'node';
+        }
+        elseif ($field_name === 'uid') {
+          $base_table = 'users';
+        }
+        elseif ($field_name === 'tid') {
+          $base_table = 'taxonomy_term_data';
+        }
+        elseif (substr($field_name, -4) === '_tid') {
+          if (isset($field_info['filter']['field_name'])) {
+            $field = field_info_field($field_info['filter']['field_name']);
+            if ((!empty($field['type'])) && ($field['type'] === 'taxonomy_term_reference')) {
+              $base_table = 'taxonomy_term_data';
+            }
           }
         }
-      }
-      elseif (substr($field_name, -10) === '_target_id') {
-        if (isset($field_info['filter']['field_name'])) {
-          $field = field_info_field($field_info['filter']['field_name']);
-          if (!empty($field['settings']['target_type'])) {
-            $entity_info = entity_get_info($field['settings']['target_type']);
-            if (!empty($entity_info['base table'])) {
-              $base_table = $entity_info['base table'];
+        elseif (substr($field_name, -10) === '_target_id') {
+          if (isset($field_info['filter']['field_name'])) {
+            $field = field_info_field($field_info['filter']['field_name']);
+            if (!empty($field['settings']['target_type'])) {
+              $entity_info = entity_get_info($field['settings']['target_type']);
+              if (!empty($entity_info['base table'])) {
+                $base_table = $entity_info['base table'];
+              }
             }
           }
         }
@@ -64,6 +73,25 @@ function entityreference_filter_views_data_alter(&$data) {
 }
 
 /**
+ * Helper function to provide pre-defined mappings between fields and base_tables
+ *
+ * @param $mappings
+ * @todo: provide this as an hook?
+ */
+function _entityreference_filter_alter_entityreference_filter_mappings(&$mappings) {
+  // Handling commerce Product <--> Display Node references
+  $commerce_reference_fields = commerce_info_fields('commerce_product_reference');
+  foreach($commerce_reference_fields as $field_name => $field_info) {
+    // Loading just the first bundle name.
+    // @todo: provide new filters for each enabled bundle?
+    $bundle_name = key($field_info['bundles']);
+    if ($bundle_name) {
+      $mappings[$field_name . '_' . $bundle_name] = $bundle_name;
+    }
+  }
+}
+
+/**
  * Ajax callback returning ajax commands to update dependent filters.
  */
 function entityreference_filter_update_callback($view_name, $display_name, $controlling_filter) {
