diff --git a/i18n_string/i18n_string.inc b/i18n_string/i18n_string.inc
index 3136aad..1053a7b 100644
--- a/i18n_string/i18n_string.inc
+++ b/i18n_string/i18n_string.inc
@@ -1110,10 +1110,16 @@ class i18n_string_object_wrapper extends i18n_object_wrapper {
       $info = is_array($info) ? $info : array('title' => $info);
       $field_name = isset($info['field']) ? $info['field'] : $field;
       $value = $this->get_field($field_name);
+      if ( is_array($value) && isset($value['value']) ) {
+        $format = isset($value['format']) ? $value['format'] :  NULL;
+        $value = $value['value'];
+      } else {
+        $format = isset($info['format'])? $info['format'] : NULL;
+      }
       $strings[$this->get_textgroup()][$string_type][$object_id][$field] = array(
         'string' => is_array($value) || isset($info['empty']) && $value === $info['empty'] ? NULL : $value,
         'title' => $info['title'],
-        'format' => isset($info['format']) ? $this->get_field($info['format']) : NULL,
+        'format' => $format,
         'name' => array_merge($object_keys, array($field)),
       );
     }
diff --git a/i18n_string/i18n_string.module b/i18n_string/i18n_string.module
index 9c232c0..4fc1dc2 100644
--- a/i18n_string/i18n_string.module
+++ b/i18n_string/i18n_string.module
@@ -533,6 +533,9 @@ function i18n_string_multiple($operation, $name, $strings, $options = array()) {
  *   - 'sanitize default' Whether to filter the default value if no translation found, default is FALSE
  */
 function i18n_string_translate($name, $string, $options = array()) {
+  if ( is_array($string) && isset($string['value']) ) {
+    $string = $string['value'];
+  }
   if (is_array($string)) {
     return i18n_string_translate_list($name, $string, $options);
   }
diff --git a/i18n_string/i18n_string.pages.inc b/i18n_string/i18n_string.pages.inc
index 28005d6..5c50488 100644
--- a/i18n_string/i18n_string.pages.inc
+++ b/i18n_string/i18n_string.pages.inc
@@ -204,8 +204,9 @@ function i18n_string_translate_page_form_strings($strings, $langcode) {
     $default_value = $item->format_translation($langcode, array('langcode' => $langcode, 'sanitize' => FALSE, 'debug' => FALSE));
     $form[$item->get_name()] = array(
       '#title' => $item->get_title(),
-      '#type' => 'textarea',
+      '#type' => $item->format? 'text_format' : 'textarea',
       '#default_value' => $default_value,
+      '#format' => $item->format? $item->format : NULL,
       '#disabled' => $disabled,
       '#description' => $description . _i18n_string_translate_format_help($format_id),
       //'#i18n_string_format' => $source ? $source->format : 0,
@@ -226,6 +227,11 @@ function i18n_string_translate_page_form_submit($form, &$form_state) {
   foreach ($form_state['values']['strings'] as $name => $value) {
     $count++;
     list($textgroup, $context) = i18n_string_context(explode(':', $name));
+
+    if ( is_array($value) && isset($value['value']) ) {
+      $value = $value['value'];
+    }
+    
     $result = i18n_string_textgroup($textgroup)->update_translation($context, $form_state['values']['langcode'], $value);
     $success += ($result ? 1 : 0);
   }
