diff --git a/i18n_entityreference/i18n_entityreference.info b/i18n_entityreference/i18n_entityreference.info
new file mode 100644
index 0000000..86c57b4
--- /dev/null
+++ b/i18n_entityreference/i18n_entityreference.info
@@ -0,0 +1,12 @@
+name = Synchronize entity references
+description = Synchronizes entity reference fields accross translations of the same content.
+dependencies[] = i18n_sync
+dependencies[] = translation
+dependencies[] = entityreference
+
+package = Multilingual - Internationalization
+
+version = "7.x-1.x"
+core = "7.x"
+project = "i18n_contrib"
+
diff --git a/i18n_entityreference/i18n_entityreference.module b/i18n_entityreference/i18n_entityreference.module
new file mode 100644
index 0000000..10da21d
--- /dev/null
+++ b/i18n_entityreference/i18n_entityreference.module
@@ -0,0 +1,95 @@
+<?php
+/**
+ * @file
+ * Drupal module. Synchronize entityreference fields.
+ *
+ * See http://drupal.org/node/1688156
+ */
+
+/**
+ * Implements hook_field_info_alter().
+ */
+function i18n_entityreference_field_info_alter(&$fields) {
+  if (isset($fields['entityreference'])) {
+    $fields['entityreference']['i18n_sync_callback'] = 'i18n_entityreference_field_entityreference_sync';
+  }
+}
+
+/**
+ * Sync a entity reference field (i18n_sync_callback)
+ */
+function i18n_entityreference_field_entityreference_sync($entity_type, $entity, $field, $instance, $langcode, &$items, $source_entity, $source_language) {
+  foreach ($items as $delta => &$reference) {
+    if ($reference_node = entity_load_single($field['settings']['target_type'], $reference['target_id'])) {
+      $reference['target_id'] = i18n_entityreference_entityreference_translate_field($reference_node, $reference['target_id'], $langcode);
+    }
+  }
+}
+
+/**
+ * Helper function for translating entity reference field.
+ *
+ * We try to use entity translations for reference, otherwise fallback to default value.
+ *
+ * TODO: check if this example is correct for entity reference, this could be different
+ * Example:
+ *   English A references English B and English C.
+ *   English A and B are translated to German A and B, but English C is not.
+ *   The synchronization from English A to German A would reference German B and English C.
+ */
+function i18n_entityreference_entityreference_translate_field(&$reference_node, $default_value, $langcode) {
+  if (isset($reference_node->tnid) && translation_supported_type($reference_node->type)) {
+    // This content type has translations, find the one.
+    // TODO: Not sure if translation_node_get_translations is the correct one, is there a special one for entities ?
+    if (($reference_trans = translation_node_get_translations($reference_node->tnid)) && isset($reference_trans[$langcode])) {
+      return $reference_trans[$langcode]->nid;
+    }
+    else {
+      // No requested language found, just copy the field.
+      // TODO: not sure if we should return the default value (code from i18n_references)
+      return $default_value;
+    }
+  }
+  else {
+    // Content type without language, just copy the field.
+    return $default_value;
+  }
+}
+
+
+/**
+ * Implements hook_field_attach_prepare_translation_alter().
+ *
+ * The code base of this function was taken from the sandbox module
+ * -> http://drupal.org/sandbox/svendecabooter/1736970
+ * Improved it to work on all entities and reusing the already implemented helper function above.
+ *
+ * Loops over all available fields on the to-be-translated entity
+ * and finds entity_reference fields.
+ * If found, adds a reference to the translated entity, or removes reference if not.
+ */
+function i18n_entityreference_field_attach_prepare_translation_alter(&$entity, $context) {
+
+  $entity_type = $context['entity_type'];
+  $source_entity = $context['source_entity'];
+
+  // Determine the list of instances to iterate on.
+  list(, , $bundle) = entity_extract_ids($entity_type, $source_entity);
+  $instances = field_info_instances($entity_type, $bundle);
+  if (!empty($instances)) {
+    foreach($instances as $field_info) {
+      $field = field_info_field($field_info['field_name']);
+      if ($field['type'] == 'entityreference' && isset($entity->{$field_info['field_name']})) {
+        // iterate over languages.
+        foreach($entity->{$field_info['field_name']} as $language => &$items) {
+          // $reference called by reference, to simplify code
+          foreach ($items as $index => &$reference) {
+            if ($reference_node = entity_load_single($field['settings']['target_type'], $reference['target_id'])) {
+              $reference['target_id'] = i18n_entityreference_entityreference_translate_field($reference_node, $reference['target_id'], $context['langcode']);
+            }
+          }
+        }
+      }
+    }
+  }
+}
