diff --git a/reference_usermerge.module b/reference_usermerge.module
index ca332e4..6adc1bb 100644
--- a/reference_usermerge.module
+++ b/reference_usermerge.module
@@ -1,49 +1,117 @@
 <?php
+
+/**
+ * @file
+ */
+
+/**
+ * Implements hook_usermerge_merge_users().
+ */
 function reference_usermerge_usermerge_merge_users($user_to_delete, $user_to_keep) {
-  if ( $fields = _reference_usermerge_make_table_names() ) {
-    foreach ( $fields as $field => $tables ) {
-      foreach ( $tables as $table ) {
-        db_update($table)
-          ->fields(array(
-                  $field . '_uid' => $user_to_keep->uid,
-          ))
-          ->condition($field . '_uid', $user_to_delete->uid, '=')
-          ->execute();
-      }
-    }
+  _reference_usermerge_merge_user_references($user_to_delete, $user_to_keep);
+  _reference_usermerge_merge_entity_references($user_to_delete, $user_to_keep);
+  drupal_flush_all_caches();
+}
+
+/**
+ * Apply mergeuser to user_reference fields.
+ */
+function _reference_usermerge_merge_user_references($user_to_delete, $user_to_keep) {
+  $fields = _reference_usermerge_get_userreference_fields();
+  $tables = _reference_usermerge_make_table_names($fields);
+  _reference_usermerge_update_tables($tables, 'uid', $user_to_delete->uid, $user_to_keep->uid);
+}
+
+/**
+ * Apply mergeuser to entityreference fields.
+ */
+function _reference_usermerge_merge_entity_references($user_to_delete, $user_to_keep) {
+  $fields = _reference_usermerge_get_entityreference_fields();
+  $tables = _reference_usermerge_make_table_names($fields);
+  _reference_usermerge_update_tables($tables, 'target_id', $user_to_delete->uid, $user_to_keep->uid);
+}
+
+/**
+ * Create table names from the field names.
+ */
+function _reference_usermerge_make_table_names(array $fields) {
+  $tables = array();
+
+  foreach ($fields as $field) {
+    $tables[$field] = array(
+      'field_data_' . $field,
+      'field_revision_' . $field,
+    );
   }
 
-  field_cache_clear();
+  return $tables;
 }
 
-function _reference_usermerge_get_reference_fields() {
+/**
+ * Update all field tables to replace one user for another.
+ *
+ * @param array $field_tables
+ *   Key is the field name e.g. "field_my_field"
+ *   Value is an array of tables for that field, usually
+ *   array(
+ *     "field_data_field_my_field",
+ *     "field_revision_field_my_field",
+ *   );
+ * @param string $key
+ *   The key related to the type of field. This is either
+ *   'uid' for user reference and 'target_id' for entity reference
+ * @param int $delete_uid
+ *   The uid of the user to replace
+ * @param int $keep_uid
+ *   The uid of the user who is now the target
+ */
+function _reference_usermerge_update_tables(array $field_tables, $key, $delete_uid, $keep_uid) {
+  foreach ($field_tables as $field => $tables) {
+    $field_key = "{$field}_{$key}";
+
+    foreach ($tables as $table) {
+      db_update($table)
+        ->fields(array(
+          $field_key => $keep_uid,
+        ))
+        ->condition($field_key, $delete_uid, '=')
+        ->execute();
+    }
+  }
+}
+
+/**
+ * Get all user reference fields.
+ */
+function _reference_usermerge_get_userreference_fields() {
   $fields = field_info_instances();
 
   $user_fields = array();
 
-  foreach ( $fields['node'] as $nodetype => $fieldlist ) {
-    foreach ( $fieldlist as $field => $properties ) {
-      if ( $properties['widget']['module'] == 'user_reference' ) {
+  foreach ($fields['node'] as $nodetype => $fieldlist) {
+    foreach ($fieldlist as $field => $properties) {
+      if ($properties['widget']['module'] == 'user_reference') {
         $user_fields[$field] = $field;
       }
     }
   }
 
-  if ( count($user_fields) ) {
-    return $user_fields;
-  }
+  return $user_fields;
 }
 
-function _reference_usermerge_make_table_names() {
-  $fields = _reference_usermerge_get_reference_fields();
+/**
+ * Get all entity reference fields which reference users.
+ */
+function _reference_usermerge_get_entityreference_fields() {
+  $fields = field_info_fields();
 
-  if ( count($fields) ) {
-    $tables = array();
-    foreach ( $fields as $field ) {
-      $tables[$field] = array('field_data_' . $field, 'field_revision_' . $field);
-    }
+  $user_fields = array();
 
-    return $tables;
+  foreach ($fields as $field_name => $field) {
+    if ($field['module'] == 'entityreference' && $field['settings']['target_type'] == 'user') {
+      $user_fields[$field_name] = $field_name;
+    }
   }
-}
 
+  return $user_fields;
+}
