--- a/shs.module	Tue Apr 16 16:58:26 2013
+++ b/shs.module	Tue Apr 16 02:41:24 2013
@@ -388,13 +388,13 @@
  */
 function shs_field_widget_validate($element, &$form_state, $form) {
   $field_name = $element['#field_name'];
-  $field_language = $element['#language'];
 
-  if (empty($form_state['field'][$field_name][$field_language]['instance']['widget'])) {
+  $instance = field_widget_instance($element, $form_state);
+
+  if (empty($instance['widget'])) {
     return;
   }
-  $field = $form_state['field'][$field_name][$field_language];
-  $instance = $field['instance'];
+  $field = field_widget_field($element, $form_state);
   $settings = empty($instance['widget']['settings']['shs']) ? array() : $instance['widget']['settings']['shs'];
 
   // Do we want to force the user to select terms from the deepest level?
@@ -402,7 +402,7 @@
   $value = empty($element['#value']) ? 0 : $element['#value'];
   if ($force_deepest_level && $value) {
     // Get vocabulary.
-    $allowed_values = reset($field['field']['settings']['allowed_values']);
+    $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.
       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)));
