diff --git a/import/taxonomy_csv.import.admin.inc b/import/taxonomy_csv.import.admin.inc
index b3d2d1c..8acdf0b 100644
--- a/import/taxonomy_csv.import.admin.inc
+++ b/import/taxonomy_csv.import.admin.inc
@@ -719,6 +719,7 @@ function taxonomy_csv_import_form($form, &$form_state) {
     '#options'       => array(
       TAXONOMY_CSV_EXISTING_UPDATE => t('Update it and merge fields (avoid duplicate terms, recommended)'),
       TAXONOMY_CSV_EXISTING_IGNORE => t('Ignore it and create a new term (duplicate terms may be created)'),
+      TAXONOMY_CSV_EXISTING_UPDATE_REFERENCED => t('Ignore duplicates of the term, merge referenced terms'),
     ),
     '#default_value' => $list_previous_values['update_or_ignore'],
     '#description'   => t('This option allows to set what previous imported terms will become if a new line contains the same terms.') . ' ' . t('Usually, it indicates an error or a unoptimized source, unless you allow duplicates.'),
@@ -1203,9 +1204,9 @@ function _taxonomy_csv_import_check_options(&$options) {
   }
 
   if (!$options['update_or_ignore']) {
-    $messages['update_or_ignore'] = t('Please set what will become existing terms.');
+    $messages['update_or_ignore'] = t('Please set what will become of existing terms.');
   }
-  elseif ($options['update_or_ignore'] == TAXONOMY_CSV_EXISTING_IGNORE
+  elseif ($options['update_or_ignore'] != TAXONOMY_CSV_EXISTING_UPDATE
       && ($options['import_format'] == TAXONOMY_CSV_FORMAT_POLYHIERARCHY
         || ($options['import_format'] == TAXONOMY_CSV_FORMAT_STRUCTURE && $options['structure_type'] == TAXONOMY_CSV_FORMAT_POLYHIERARCHY)
         )
diff --git a/import/taxonomy_csv.import.line.api.inc b/import/taxonomy_csv.import.line.api.inc
index 4ba8f36..9846e63 100644
--- a/import/taxonomy_csv.import.line.api.inc
+++ b/import/taxonomy_csv.import.line.api.inc
@@ -49,7 +49,7 @@ function taxonomy_csv_line_import($line, $options, $previous_items = array(), $t
       case TAXONOMY_CSV_FORMAT_STRUCTURE:
       case TAXONOMY_CSV_FORMAT_TREE:
         // Internally, tree import format use ignore_previous and not update.
-        if ($options['update_or_ignore'] == TAXONOMY_CSV_EXISTING_UPDATE) {
+        if ($options['update_or_ignore'] != TAXONOMY_CSV_EXISTING_IGNORE_PREVIOUS) {
           $options['update_or_ignore'] = TAXONOMY_CSV_EXISTING_IGNORE_PREVIOUS;
         }
         $result = taxonomy_csv_line_import_structure($line, $options, $previous_items, $terms_count);
@@ -200,7 +200,7 @@ function taxonomy_csv_line_import_structure($line, $options, $previous_items = a
         // With TAXONOMY_CSV_EXISTING_IGNORE, parent terms (so all terms but the
         // last on this line) are always updated because they are successive
         // parents of a child.
-        $current_result = ($options['update_or_ignore'] == TAXONOMY_CSV_EXISTING_IGNORE && ($c < count($line) - 1)) ?
+        $current_result = ($options['update_or_ignore'] != TAXONOMY_CSV_EXISTING_UPDATE_REFERENCED && ($c < count($line) - 1)) ?
           taxonomy_csv_term_import($term, TAXONOMY_CSV_EXISTING_IGNORE_PREVIOUS, $parent_tid) :
           taxonomy_csv_term_import($term, $options['update_or_ignore'], $parent_tid);
         break;
@@ -483,6 +483,7 @@ function taxonomy_csv_line_import_translate($line, $options, $terms_count = 0) {
             $options['update_or_ignore'] = TAXONOMY_CSV_EXISTING_IGNORE;
             break;
           case TAXONOMY_CSV_EXISTING_IGNORE:
+          case TAXONOMY_CSV_EXISTING_UPDATE_REFERENCED:
             break;
         }
       }
@@ -608,6 +609,7 @@ function taxonomy_csv_term_import($term, $update_or_ignore = TAXONOMY_CSV_EXISTI
       break;
 
     case TAXONOMY_CSV_EXISTING_IGNORE:
+    case TAXONOMY_CSV_EXISTING_UPDATE_REFERENCED:
       // Nothing to do: keep the term.
       break;
   }
@@ -690,7 +692,13 @@ function _taxonomy_csv_term_field_import($term, $update_or_ignore = TAXONOMY_CSV
             // @todo Use undefined language or term language?
             $referenced_term->language = $term->language;
             // @todo Increase term count.
-            $current_result = taxonomy_csv_term_import($referenced_term, $update_or_ignore);
+            // The term itself is created ignoring any duplicates,
+            // but referenced terms are merged.
+            if ($update_or_ignore == TAXONOMY_CSV_EXISTING_UPDATE_REFERENCED) {
+              $current_result = taxonomy_csv_term_import($referenced_term, TAXONOMY_CSV_EXISTING_UPDATE);            
+            } else {
+              $current_result = taxonomy_csv_term_import($referenced_term, $update_or_ignore);            
+            }
             if (!$current_result['tid']) {
               $messages[] = 402; // Unable to import a field term.
               return $messages;
diff --git a/taxonomy_csv.api.inc b/taxonomy_csv.api.inc
index 8a82b02..4ac2f38 100644
--- a/taxonomy_csv.api.inc
+++ b/taxonomy_csv.api.inc
@@ -20,10 +20,11 @@ define('TAXONOMY_CSV_FORMAT_TRANSLATE',     'translate');
 /**
  * Available import options.
  */
-define('TAXONOMY_CSV_EXISTING_UPDATE',          'update');
-define('TAXONOMY_CSV_EXISTING_IGNORE',          'ignore');
+define('TAXONOMY_CSV_EXISTING_UPDATE',            'update');
+define('TAXONOMY_CSV_EXISTING_IGNORE',            'ignore');
+define('TAXONOMY_CSV_EXISTING_UPDATE_REFERENCED', 'update_referenced');
 // Internal use only.
-define('TAXONOMY_CSV_EXISTING_IGNORE_PREVIOUS', 'ignore_previous');
+define('TAXONOMY_CSV_EXISTING_IGNORE_PREVIOUS',   'ignore_previous');
 
 /**
  * List of process levels matching watchdog levels.
