diff --git a/shs.module b/shs.module
index de30c9d..3ac65eb 100644
--- a/shs.module
+++ b/shs.module
@@ -325,10 +325,11 @@ function shs_field_widget_afterbuild($element, &$form_state) {
   }
 
   $parents = array();
-  // Get value from element.
-  if (!empty($form_state['values'][$element['#field_name']][$element['#language']][$element['#delta']]['tid'])) {
+  // Get default value from form state and set it to element.
+  $default_value = drupal_array_get_nested_value($form_state['values'], $element['#parents']);
+  if ($default_value) {
     // Use value from form_state (for example for fields with cardinality = -1).
-    $element['#default_value'] = $form_state['values'][$element['#field_name']][$element['#language']][$element['#delta']];
+    $element['#default_value'] = array('tid' => $default_value);
   }
 
   // Add main Javascript behavior and style only once.
@@ -387,13 +388,12 @@ function shs_field_widget_afterbuild($element, &$form_state) {
  */
 function shs_field_widget_validate($element, &$form_state, $form) {
   $field_name = $element['#field_name'];
-  $field_language = $element['#language'];
+  $instance = field_widget_instance($element, $form_state);
 
-  if (empty($form_state['field'][$field_name][$field_language]['instance']['widget'])) {
+  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?
@@ -401,7 +401,7 @@ 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']);
+    $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)));
