diff --git a/entityreference_view_widget.module b/entityreference_view_widget.module
index efef50b..7f25f9b 100755
--- a/entityreference_view_widget.module
+++ b/entityreference_view_widget.module
@@ -55,7 +55,7 @@ function entityreference_view_widget_field_widget_info() {
   $widgets['entityreference_view_widget'] = array(
     'label' => t('View'),
     'description' => t('An advanced, view-based widget.'),
-    'field types' => array('entityreference'),
+    'field types' => array('entityreference', 'commerce_product_reference'),
     'behaviors' => array(
       'multiple values' => FIELD_BEHAVIOR_CUSTOM,
       'default value' => FIELD_BEHAVIOR_NONE,
@@ -76,8 +76,19 @@ function entityreference_view_widget_field_widget_settings_form($field, $instanc
     // Get a list of all views that contain a "Entityreference View Widget" display.
     $options = array();
     $displays = views_get_applicable_views('entityreference view display');
+
+    if (strpos($field['type'], 'commerce_') === 0) {
+      $target_type = str_replace('_reference', '', $field['type']);
+    }
+    else {
+      $target_type = $field['settings']['target_type'];
+    }
+
     foreach ($displays as $data) {
       list($view, $display_id) = $data;
+      if ($view->base_table != $target_type) {
+        continue;
+      }
       $view_name = !empty($view->human_name) ? $view->human_name : $view->name;
       $options[$view->name . '|' . $display_id] = check_plain($view_name . ' | ' . $view->display_handler->display->display_title);
     }
@@ -136,14 +147,20 @@ function entityreference_view_widget_field_widget_form(&$form, &$form_state, $fi
   $settings = array(
     'langcode' => $langcode,
     'table_id' => $frontend_id . '-values',
-    'target_type' => $field['settings']['target_type'],
     'element' => $parents_path,
     'instance' => $instance,
     'field' => $field,
     'index' => $index,
+    'column' => key($field['columns']),
   );
   // Append the widget settings to the array.
   $settings += $instance['widget']['settings'];
+  if (strpos($field['type'], 'commerce_') === 0) {
+    $settings['target_type'] = str_replace('_reference', '', $field['type']);
+  }
+  else {
+    $settings['target_type'] = $field['settings']['target_type'];
+  }
 
   $add_more_text = ($field['cardinality'] == 1) ? t('Add item') : t('Add items');
   $element['add_more'] = array(
@@ -163,7 +180,7 @@ function entityreference_view_widget_field_widget_form(&$form, &$form_state, $fi
 
   $entity_ids = array();
   foreach ($items as $item) {
-    $entity_ids[] = $item['target_id'];
+    $entity_ids[] = $item[$settings['column']];
   }
   $element += entityreference_view_widget_rows($entity_ids, $settings);
 
@@ -266,8 +283,8 @@ function entityreference_view_widget_validate($element, &$form_state, $form) {
   if (!empty($input)) {
     $entity_ids = array();
     foreach ($input as $value) {
-      if (!empty($value['target_id'])) {
-        $entity_ids[] = $value['target_id'];
+      if (!empty($value[$settings['column']])) {
+        $entity_ids[] = $value[$settings['column']];
         $valid = TRUE;
       }
     }
@@ -394,14 +411,14 @@ function entityreference_view_widget_rows($entity_ids, $settings) {
       $name = $settings['element'] . '[' . $settings['langcode'] . '][' . $delta . ']';
 
       $rows[] = array(
-        'target_id' => array(
+        $settings['column'] => array(
           '#type' => 'checkbox',
           '#delta' => $delta,
           '#field_suffix' => '<label class="option" for="' . $frontend_id . '">' . $label . '</label>',
           '#return_value' => $entity_id,
           '#value' => $entity_id,
           '#title_display' => 'after',
-          '#name' => $name . '[target_id]',
+          '#name' => $name . '[' . $settings['column'] . ']',
           '#attributes' => array(
             'checked' => 'checked',
             'id' => $frontend_id,
@@ -516,11 +533,12 @@ function theme_entityreference_view_widget_widget($variables) {
 function theme_entityreference_view_widget_rows($variables) {
   $zebra = array('even' => 'odd');
 
+  $settings = $variables['rows']['#widget_settings'];
   foreach (element_children($variables['rows']) as $row) {
     $output[$row]  = '<tr class="draggable ' . current($zebra) . '">';
     $output[$row] .= '<td class="field-multiple-drag"></td>';
-    $output[$row] .= '<td>' . render($variables['rows'][$row]['target_id']) . '</td>';
-    if ($variables['rows']['#widget_settings']['field']['cardinality'] !== '1') {
+    $output[$row] .= '<td>' . render($variables['rows'][$row][$settings['column']]) . '</td>';
+    if ($settings['field']['cardinality'] !== '1') {
       $output[$row] .= '<td class="delta-order tabledrag-hide">' . render($variables['rows'][$row]['_weight']) . '</td>';
     }
     $output[$row] .= '</tr>';
