diff --git a/entityreference_filter.api.php b/entityreference_filter.api.php
new file mode 100644
index 0000000..d1a16ab
--- /dev/null
+++ b/entityreference_filter.api.php
@@ -0,0 +1,40 @@
+<?php
+
+/**
+ * @file
+ * This file contains no working PHP code; it exists to provide additional
+ * documentation for doxygen as well as to document hooks in the standard
+ * Drupal manner.
+ */
+
+/**
+ * Alter the Entityreference Filter field-table mappings.
+ *
+ * @param array $field_mappings
+ */
+function hook_entityreference_filter_mapping_alter(&$field_mappings) {
+  // Alter a pre-defined field to be mapped to a new base_table
+  if (array_key_exists('an_existing_taxonomy_field', $field_mappings)) {
+    $field_mappings['an_existing_taxonomy_field'] = 'taxonomy_term_data';
+  }
+}
+
+/**
+ * Define the Entityreference Filter field-table mappings.
+ *
+ * @return array
+ *  Returns an associative array ['key' => 'value'], where:
+ *    - key: the key corresponds to the field name.
+ *    - value: the value represents the base table of the field.
+ */
+function hook_entityreference_filter_mapping() {
+  return array(
+    // Define our field to be mapped as a Taxonomy field
+    'my_taxonomy_based_field' => 'taxonomy_term_data',
+    // Define our field to be mapped as a Node field
+    'my_node_based_field' => 'node',
+    // Define our field to be mapped as a USer field
+    'my_user_based_field' => 'user',
+  );
+}
+
diff --git a/entityreference_filter.module b/entityreference_filter.module
index 18ad1bc..9d186e2 100644
--- a/entityreference_filter.module
+++ b/entityreference_filter.module
@@ -70,3 +70,22 @@ function entityreference_filter_exposed_form_after_build($form) {
 
   return $form;
 }
+
+/**
+ * Implements hook_entityreference_filter_mapping() on the behalf of the
+ * Commerce module.
+ */
+function commerce_entityreference_filter_mapping() {
+  $mapping = array();
+
+  // Handling the commerce's "A bridge to node" for Product to "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.
+    $bundle_name = key($field_info['bundles']);
+    if ($bundle_name) {
+      $mapping[$field_name . '_' . $bundle_name] = $bundle_name;
+    }
+  }
+  return $mapping;
+}
diff --git a/entityreference_filter.views.inc b/entityreference_filter.views.inc
index edba7cc..2fe474e 100644
--- a/entityreference_filter.views.inc
+++ b/entityreference_filter.views.inc
@@ -9,42 +9,62 @@
  * Implements hook_views_data_alter().
  */
 function entityreference_filter_views_data_alter(&$data) {
+  // Invoking hook_entityreference_filter_mapping() to retrieve field mappings.
+  $mappings = module_invoke_all('entityreference_filter_mapping');
+
+  // Allow modules to alter the field-to-table mappings.
+  drupal_alter('entityreference_filter_mapping', $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';
-      }
-      elseif ($field_name === 'tid') {
-        $base_table = 'taxonomy_term_data';
+      // 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 === 'product_id') {
-        $base_table = 'commerce_product';
-      }
-      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 {
+        // Try to identify the base table given the field name and type.
+        // Handle "Node" fields.
+        if ($field_name === 'nid') {
+          $base_table = 'node';
+        }
+        // Handle "User" fields.
+        elseif ($field_name === 'uid') {
+          $base_table = 'users';
+        }
+        // Handle "Term" fields.
+        elseif ($field_name === 'tid') {
+          $base_table = 'taxonomy_term_data';
+        }
+        // Handle "Taxonomy Term Reference" fields.
+        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'];
+          // Handle "Entity Reference" fields.
+        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'];
+              }
             }
           }
         }
+        // Handle "Search API Combined" fields
+        elseif (strpos($field_name, 'search_api_combined_') === 0) {
+          if (isset($field_info['filter']['handler']) && $field_info['filter']['handler'] == 'SearchApiViewsHandlerFilterTaxonomyTerm') {
+            $base_table = 'taxonomy_term_data';
+          }
+        }
       }
+
       if (empty($base_table)) {
         continue;
       }
