diff --git a/i18n_field/i18n_field.module b/i18n_field/i18n_field.module
index 83d13e3..1340027 100644
--- a/i18n_field/i18n_field.module
+++ b/i18n_field/i18n_field.module
@@ -177,7 +177,7 @@ function i18n_field_field_widget_form_alter(&$element, &$form_state, $context) {
   global $language;
 
   // Skip the node type edit fields by checking for existing entity
-  if (empty($element['#entity'])) {
+  if (empty($element['#entity']) && empty($element['value']['#entity']) && empty($element[0]['#entity']) && empty($element['target_id']['#entity'])) {
     return;
   }
 
@@ -191,7 +191,6 @@ function i18n_field_field_widget_form_alter(&$element, &$form_state, $context) {
 
   // The field language may affect some variables (default) but not others (description will be in current page language)
   $i18n_langcode = empty($element['#language']) || $element['#language'] == LANGUAGE_NONE ? $language->language : $element['#language'];
-
   // Translate instance to current page language and set to form_state
   // so it will be used for validation messages later.
   $instance_current = i18n_string_object_translate('field_instance', $instance);
@@ -204,9 +203,21 @@ function i18n_field_field_widget_form_alter(&$element, &$form_state, $context) {
   if (!empty($instance_current['label']) && $instance_current['label'] != $instance['label']) {
     if (!empty($element['#title']) && $element['#title'] == $instance['label']) {
       $element['#title'] = $instance_current['label'];
+      if (isset($element['value']['#title'])) {
+        $element['value']['#title'] = $element['#title'];
+      }
+    }
+    if (!empty($element[0]['#title']) && $element[0]['#title'] == $instance['label']) {
+      $element[0]['#title'] = $instance_current['label'];
+      if (isset($element[0]['value']['#title'])) {
+        $element[0]['value']['#title'] = $element[0]['#title'];
+      }
+    }
+    if (isset($element['value']) && !empty($element['value']['#title']) && $element['value']['#title'] == check_plain($instance['label'])) {
+      $element['value']['#title'] = check_plain($instance_current['label']);
     }
-    if (isset($element['value']) && !empty($element['value']['#title']) && $element['value']['#title'] == $instance['label']) {
-      $element['value']['#title'] = $instance_current['label'];
+    if (isset($element['target_id']) && !empty($element['target_id']['#title']) && $element['target_id']['#title'] == $instance['label']) {
+      $element['target_id']['#title'] = $instance_current['label'];
     }
   }
 
@@ -216,22 +227,28 @@ function i18n_field_field_widget_form_alter(&$element, &$form_state, $context) {
     if (!empty($element['#description']) && $element['#description'] == $instance['description']) {
       $element['#description'] = $instance_current['description'];
     }
+    if (!empty($element[0]['#description'])) {
+      $element[0]['#description'] = $instance_current['description'];
+    }
     if (isset($element['value']) && !empty($element['value']['#description']) && $element['value']['#description'] == $instance['description']) {
       $element['value']['#description'] = $instance_current['description'];
     }
+    if (isset($element['target_id']) && !empty($element['target_id']['#description']) && $element['target_id']['#description'] == $instance['description']) {
+      $element['target_id']['#description'] = $instance_current['description'];
+    }
   }
 
-  // Translate list options
-  if (!empty($element['#options']) && ($translate = i18n_field_type_info($field['type'], 'translate_options')) && !empty($field['settings']['allowed_values'])) {
+  // Translate list options.
+  if ((!empty($element['#options']) || $field['type'] == 'list_boolean') && ($translate = i18n_field_type_info($field['type'], 'translate_options')) && !empty($field['settings']['allowed_values'])) {
     $element['#options'] = $translate($field, $i18n_langcode);
     if (isset($element['#properties']) && !empty($element['#properties']['empty_option'])) {
       $label = theme('options_none', array('instance' => $instance, 'option' => $element['#properties']['empty_option']));
       $element['#options'] = array('_none' => $label) + $element['#options'];
-      // For some elements, change title to new translated option
-      if (!empty($element['#title']) && $field['type'] == 'list_boolean' && !empty($element['#on_value'])) {
-        $on_value = $element['#on_value'];
-        $element['#title'] = $element['#options'][$on_value];
-      }
+    }
+    // For some elements, change title to new translated option.
+    if (!empty($element['#title']) && $field['type'] == 'list_boolean' && !empty($element['#on_value'])) {
+      $on_value = $element['#on_value'];
+      $element['#title'] = $element['#options'][$on_value];
     }
   }
 
@@ -244,8 +261,8 @@ function i18n_field_field_widget_form_alter(&$element, &$form_state, $context) {
 
   // Translate default value if exists and the current value is the default
   if (isset($element['value']['#default_value']) && ($translate = i18n_field_type_info($field['type'], 'translate_default')) &&
-      !empty($instance['default_value'][$delta]['value']) && !empty($items[$delta]['value']) &&
-      $instance['default_value'][$delta]['value'] === $items[$delta]['value']) {
+    !empty($instance['default_value'][$delta]['value']) && !empty($items[$delta]['value']) &&
+    $instance['default_value'][$delta]['value'] === $items[$delta]['value']) {
     $element['value']['#default_value'] = $translate($instance, $items[$delta]['value'], $i18n_langcode);
   }
 }
