diff --git a/shs.module b/shs.module
index de30c9d..d06d5ef 100644
--- a/shs.module
+++ b/shs.module
@@ -165,7 +165,7 @@ function shs_field_widget_info() {
   return array(
     'taxonomy_shs' => array(
       'label' => t('Simple hierarchical select'),
-      'field types' => array('taxonomy_term_reference'),
+      'field types' => array('taxonomy_term_reference', 'entityreference'),
       'settings' => array(
         'shs' => array(
           'node_count' => FALSE,
@@ -254,20 +254,20 @@ function shs_field_widget_error($element, $error, $form, &$form_state) {
  */
 function shs_field_widget_form(&$form, &$form_state, $field, $instance, $langcode, $items, $delta, $element) {
   // Get value.
+  $column = key($field['columns']);
   $element_value = NULL;
-  if (!empty($items[$delta]['tid'])) {
+  if (!empty($items[$delta][$column])) {
     // Use saved value from database or cache.
-    $element_value = $items[$delta]['tid'];
+    $element_value = $items[$delta][$column];
   }
-  elseif (!empty($form_state['values'][$element['#field_name']][$element['#language']][$delta]['tid'])) {
+  elseif (!empty($form_state['values'][$element['#field_name']][$element['#language']][$delta][$column])) {
     // Use value from form_state (for example for fields with cardinality = -1).
-    $element_value = $form_state['values'][$element['#field_name']][$element['#language']][$delta]['tid'];
+    $element_value = $form_state['values'][$element['#field_name']][$element['#language']][$delta][$column];
   }
 
   // Get vocabulary.
-  $allowed_values = reset($field['settings']['allowed_values']);
-  if (empty($allowed_values['vocabulary']) || ($vocabulary = taxonomy_vocabulary_machine_name_load($allowed_values['vocabulary'])) === FALSE) {
-    // No vocabulary selected yet or vocabulary not found.
+  $vocabulary_name = ($field['type'] == 'entityreference') ? key($field['settings']['handler_settings']['target_bundles']) : reset(reset($field['settings']['allowed_values']));
+  if (!$vocabulary_name || ($vocabulary = taxonomy_vocabulary_machine_name_load($vocabulary_name)) === FALSE) {
     return array();
   }
 
@@ -308,7 +308,7 @@ function shs_field_widget_form(&$form, &$form_state, $field, $instance, $langcod
     '#shs_vocabulary' => $vocabulary,
   );
 
-  return array('tid' => $element);
+  return array($column => $element);
 }
 
 /**
@@ -401,10 +401,9 @@ function shs_field_widget_validate($element, &$form_state, $form) {
   $value = empty($element['#value']) ? 0 : $element['#value'];
   if ($force_deepest_level && $value) {
     // Get vocabulary.
-    $allowed_values = reset($field['field']['settings']['allowed_values']);
-    if (empty($allowed_values['vocabulary']) || ($vocabulary = taxonomy_vocabulary_machine_name_load($allowed_values['vocabulary'])) === FALSE) {
-      // No vocabulary selected yet or vocabulary not found.
-      form_error($element, t('Vocabulary %machine_name is configured as source for field %field_name but could not be found.', array('%machine_name' => $allowed_values['vocabulary'], '%field_name' => $field_name)));
+    $vocabulary_name = ($field['type'] == 'entityreference') ? key($field['settings']['handler_settings']['target_bundles']) : reset(reset($field['settings']['allowed_values']));
+    if (!$vocabulary_name || ($vocabulary = taxonomy_vocabulary_machine_name_load($vocabulary_name)) === FALSE) {
+      form_error($element, t('Vocabulary %machine_name is configured as source for field %field_name but could not be found.', array('%machine_name' => $vocabulary_name, '%field_name' => $field_name)));
     }
     // Does the selected term has any children?
     $children = shs_term_get_children($vocabulary->vid, $value);
