diff --git a/title.core.inc b/title.core.inc
index 6fae166..9f8cc1d 100644
--- a/title.core.inc
+++ b/title.core.inc
@@ -113,18 +113,14 @@ function title_field_term_description_submit(&$values, $legacy_field, $info, $la
  * Sync callback for the text field type.
  */
 function title_field_text_sync_get($entity_type, $entity, $legacy_field, $info, $langcode) {
-  $wrapper = entity_metadata_wrapper($entity_type, $entity);
-  $wrapper->language($langcode);
-  return $wrapper->{$info['field']['field_name']}->raw();
+  return $entity->{$info['field']['field_name']}[$langcode][0]['value'];
 }
 
 /**
  * Sync back callback for the text field type.
  */
 function title_field_text_sync_set($entity_type, $entity, $legacy_field, $info, $langcode) {
-  $wrapper = entity_metadata_wrapper($entity_type, $entity);
-  $wrapper->language($langcode);
-  $wrapper->{$info['field']['field_name']}->set($entity->{$legacy_field});
+  $entity->{$info['field']['field_name']}[$langcode][0]['value'] = $entity->{$legacy_field};
 }
 
 /**
@@ -132,14 +128,12 @@ function title_field_text_sync_set($entity_type, $entity, $legacy_field, $info,
  */
 function title_field_text_with_summary_sync_get($entity_type, $entity, $legacy_field, $info, $langcode) {
   $format_key = $info['additional keys']['format'];
-  $wrapper = entity_metadata_wrapper($entity_type, $entity);
-  $wrapper->language($langcode);
   $field_name = $info['field']['field_name'];
   // Return values only if there is any available to process for the current
   // language.
-  if (is_array($wrapper->{$field_name}->value())) {
-    $entity->{$format_key} = $wrapper->{$field_name}->format->raw();
-    return $wrapper->{$field_name}->value->raw();
+  if (!empty($entity->{$field_name}[$langcode]) && is_array($entity->{$field_name}[$langcode])) {
+    $entity->{$format_key} = $entity->{$field_name}[$langcode][0]['format'];
+    return $entity->{$field_name}[$langcode][0]['value'];
   }
   return NULL;
 }
@@ -149,10 +143,8 @@ function title_field_text_with_summary_sync_get($entity_type, $entity, $legacy_f
  */
 function title_field_text_with_summary_sync_set($entity_type, $entity, $legacy_field, $info, $langcode) {
   $format_key = $info['additional keys']['format'];
-  $value = array('value' => $entity->{$legacy_field}, 'format' => $entity->{$format_key});
-  $wrapper = entity_metadata_wrapper($entity_type, $entity);
-  $wrapper->language($langcode);
-  $wrapper->{$info['field']['field_name']}->set($value);
+  $item = array('value' => $entity->{$legacy_field}, 'format' => $entity->{$format_key});
+  $entity->{$info['field']['field_name']}[$langcode][0] = $item;
 }
 
 /**
diff --git a/title.info b/title.info
index fbb1bea..a6f87fd 100644
--- a/title.info
+++ b/title.info
@@ -4,4 +4,3 @@ core = 7.x
 package = Fields
 files[] = title.module
 files[] = tests/title.test
-dependencies[] = entity
diff --git a/title.module b/title.module
index aa22e7d..3ce9f99 100644
--- a/title.module
+++ b/title.module
@@ -439,6 +439,10 @@ function title_field_sync_set($entity_type, $entity, $legacy_field, $info) {
 /**
  * Provide the original entity language.
  *
+ * If a language property is defined for the current entity we synchronize the
+ * field value using the entity language, otherwise we fall back to
+ * LANGUAGE_NONE.
+ *
  * @param $entity_type
  * @param $entity
  *
@@ -446,15 +450,14 @@ function title_field_sync_set($entity_type, $entity, $legacy_field, $info) {
  *   A language code
  */
 function title_entity_language($entity_type, $entity) {
-  // If a language property is defined for the current entity we synchronize
-  // the field value using the entity language, otherwise we fall back to
-  // LANGUAGE_NONE.
-  try {
-    return entity_metadata_wrapper($entity_type, $entity)->language->value();
+  if (module_exists('entity_translation')) {
+    $handler = entity_translation_get_handler($entity_type, $entity);
+    $langcode = $handler->getLanguage();
   }
-  catch (EntityMetadataWrapperException $e) {
-    return LANGUAGE_NONE;
+  else {
+    $langcode = entity_language($entity_type, $entity);
   }
+  return !empty($langcode) ? $langcode : LANGUAGE_NONE;
 }
 
 /**
@@ -489,19 +492,22 @@ function title_field_attach_submit($entity_type, $entity, $form, &$form_state) {
     $values = &$form_state['values'];
     $values = drupal_array_get_nested_value($values, $form['#parents']);
     $fr_info = title_field_replacement_info($entity_type);
+    $langcode = title_entity_language($entity_type, $entity);
 
     foreach ($fr_info as $legacy_field => $info) {
       if (!empty($form[$legacy_field]['#field_replacement'])) {
         $field_name = $info['field']['field_name'];
-        $langcode = $form[$field_name]['#language'];
 
-        // Give a chance to operate on submitted values either.
-        if (!empty($info['callbacks']['submit'])) {
-          $info['callbacks']['submit']($values, $legacy_field, $info, $langcode);
-        }
+        // Perform synchronization only when dealing with the original values.
+        if ($langcode == $form[$field_name]['#language']) {
+          // Give a chance to operate on submitted values either.
+          if (!empty($info['callbacks']['submit'])) {
+            $info['callbacks']['submit']($values, $legacy_field, $info, $langcode);
+          }
 
-        drupal_static_reset('field_language');
-        title_field_sync_get($entity_type, $entity, $legacy_field, $info, $langcode);
+          drupal_static_reset('field_language');
+          title_field_sync_get($entity_type, $entity, $legacy_field, $info, $langcode);
+        }
       }
     }
   }
