diff --git a/static_field.module b/static_field.module
index 2650ca6..ec89d03 100755
--- a/static_field.module
+++ b/static_field.module
@@ -49,10 +49,23 @@ function static_field_field_instance_settings_form($field, $instance) {
       'item' => t('Yes. Display also the label'),
     ),
   );
+
   return $form;
 }
 
 /**
+ * Implements hook_field_create_instance().
+ */
+function static_field_field_create_instance($instance) {
+  if (function_exists('i18n_string')) {
+    $name = array($instance['entity_type'], 'type', $instance['bundle'], $instance['field_name']);
+    $text = $instance['settings']['text']['value'];
+    $format = $instance['settings']['text']['format'];
+    i18n_string(implode(':', $name), $text, array('update' => true, 'format' => $format));
+  }
+}
+
+/**
  * Implements hook_field_widget_info(). A dummy widget.
  */
 function static_field_field_widget_info() {
@@ -104,11 +117,15 @@ function static_field_field_formatter_info() {
 function static_field_field_formatter_view($entity_type, $entity, $field, $instance, $langcode, $items, $display) {
   $element = array();
 
-  $item_static = array('#markup' => check_markup($instance['settings']['text']['value'], $instance['settings']['text']['format']));
-  foreach ($items as $delta => $item) {
-    $element[$delta] = $item_static;
+  switch ($display['type']) {
+    case 'static_field':
+      foreach ($items as $delta => $item) {
+        $element[$delta] = array(
+          '#markup' => $item['safe_value'],
+        );
+      }
   }
-  $element[0] = $item_static;
+
   return $element;
 }
 
@@ -117,6 +134,54 @@ function static_field_field_formatter_view($entity_type, $entity, $field, $insta
  */
 function static_field_field_load($entity_type, $entities, $field, $instances, $langcode, &$items, $age) {
   foreach ($entities as $entity_id => $entity) {
-    $items[$entity_id][0]['safe_value'] = check_markup($instances[$entity_id]['settings']['text']['value'], $instances[$entity_id]['settings']['text']['format']);
+    $format = $instances[$entity_id]['settings']['text']['format'];
+    $value = $instances[$entity_id]['settings']['text']['value'];
+    if (function_exists('i18n_string')) {
+      $name = array($entity_type, $instances[$entity_id]['bundle'], $field['field_name']);
+      $options = array(
+        'langcode' => $entity->language,
+        'format' => $format,
+      );
+      $save_value = i18n_string(implode(':', $name), $value, $options);
+    } else {
+      $save_value = check_markup($value, $format);
+    }
+    $items[$entity_id][0] = array(
+      'value' => $instances[$entity_id]['settings']['text']['value'],
+      'format' => $format,
+      'safe_value' => $save_value,
+    );
+  }
+}
+
+/**
+ * Implements hook_field_delete_instance().
+ *
+ * Delete the translation set.
+ */
+function static_field_field_delete_instance($instance) {
+  if (function_exists('i18n_string_remove')) {
+    $name = array($instance['entity_type'], 'type', $instance['bundle'], $instance['field_name']);
+    i18n_string_remove(implode(':', $name));
+  }
+}
+
+/**
+ * Implements hook_field_prepare_translation().
+ *
+ * @see text_field_prepare_translation()
+ */
+function static_field_field_prepare_translation($entity_type, $entity, $field, $instance, $langcode, &$items, $source_entity, $source_langcode) {
+  // If the translating user is not permitted to use the assigned text format,
+  // we must not expose the source values.
+  $field_name = $field['field_name'];
+  if (!empty($source_entity->{$field_name}[$source_langcode])) {
+    $formats = filter_formats();
+    foreach ($source_entity->{$field_name}[$source_langcode] as $delta => $item) {
+      $format_id = $item['format'];
+      if (!empty($format_id) && !filter_access($formats[$format_id])) {
+        unset($items[$delta]);
+      }
+    }
   }
 }
