diff --git data_taxonomy/data_taxonomy.module data_taxonomy/data_taxonomy.module
index 23e300b..10115c7 100644
--- data_taxonomy/data_taxonomy.module
+++ data_taxonomy/data_taxonomy.module
@@ -67,8 +67,12 @@ function data_taxonomy_feeds_data_processor_targets_alter(&$fields, $data_table)
       foreach ($info['vocabulary_modules'] as $module) {
         $vocabulary = _data_taxonomy_vocabulary_load_by_module($module);
         $fields['data_taxonomy:'. $module] = array(
-          'name' => t('Taxonomy: @vocabulary', array("@vocabulary" => $vocabulary->name)),
-          'description' => t('Map to taxonomy terms of @vocabulary vocabulary.', array("@vocabulary" => $vocabulary->name)),
+          'name' => t('Term ids: @vocabulary', array("@vocabulary" => $vocabulary->name)),
+          'description' => t('Map to term ids to @vocabulary vocabulary.', array("@vocabulary" => $vocabulary->name)),
+        );
+        $fields['data_taxonomy_term:'. $module] = array(
+          'name' => t('Term names: @vocabulary', array("@vocabulary" => $vocabulary->name)),
+          'description' => t('Map term names to @vocabulary vocabulary.', array("@vocabulary" => $vocabulary->name)),
         );
       }
     }
@@ -76,8 +80,12 @@ function data_taxonomy_feeds_data_processor_targets_alter(&$fields, $data_table)
       foreach ($info['vocabularies'] as $vid) {
         $vocabulary = taxonomy_vocabulary_load($vid);
         $fields['data_taxonomy:'. $vid] = array(
-          'name' => t('Taxonomy: @vocabulary', array("@vocabulary" => $vocabulary->name)),
-          'description' => t('Map to taxonomy terms of @vocabulary vocabulary.', array("@vocabulary" => $vocabulary->name)),
+          'name' => t('Term ids: @vocabulary', array("@vocabulary" => $vocabulary->name)),
+          'description' => t('Map to term ids to @vocabulary vocabulary.', array("@vocabulary" => $vocabulary->name)),
+        );
+        $fields['data_taxonomy_term:'. $vid] = array(
+          'name' => t('Term names: @vocabulary', array("@vocabulary" => $vocabulary->name)),
+          'description' => t('Map term names to @vocabulary vocabulary.', array("@vocabulary" => $vocabulary->name)),
         );
       }
     }
@@ -97,6 +105,13 @@ function data_taxonomy_data_insert($record, $table_name) {
             db_query("INSERT INTO {data_taxonomy}(id, data_table_name, tid) VALUES(%d, '%s', %d)", $id, $table_name, $tid);
           }
         }
+        elseif(is_array($record['data_taxonomy_term:'. $module])) {
+          $target_vocab = _data_taxonomy_vocabulary_load_by_module($module);
+          $tids = data_taxonomy_lookup_tids($record['data_taxonomy_term:' . $module], $target_vocab);
+          foreach ($tids as $tid) {
+            db_query("INSERT INTO {data_taxonomy}(id, data_table_name, tid) VALUES(%d, '%s', %d)", $id, $table_name, $tid);
+          }
+        }
       }
     }
     else {
@@ -106,6 +121,13 @@ function data_taxonomy_data_insert($record, $table_name) {
             db_query("INSERT INTO {data_taxonomy}(id, data_table_name, tid) VALUES(%d, '%s', %d)", $id, $table_name, $tid);
           }
         }
+        elseif (is_array($record['data_taxonomy_term:'. $vid])) {
+          $target_vocab = taxonomy_vocabulary_load($vid);
+          $tids = data_taxonomy_lookup_tids($record['data_taxonomy_term:' . $module], $target_vocab);
+          foreach ($tids as $tid) {
+            db_query("INSERT INTO {data_taxonomy}(id, data_table_name, tid) VALUES(%d, '%s', %d)", $id, $table_name, $tid);
+          }
+        }
       }
     }
   }
@@ -131,11 +153,19 @@ function data_taxonomy_data_update($record, $table_name) {
     if ($info['vocabulary_method'] == 'module') {
       foreach ($info['vocabulary_modules'] as $module) {
         if (is_array($record['data_taxonomy:'. $module])) {
-          db_query("DELETE dt FROM {data_taxonomy} dt JOIN {term_data} td ON dt.tid = td.tid JOIN {vocabulary} v ON td.vid = v.vid WHERE v.module = %d", $module);
+          db_query("DELETE dt FROM {data_taxonomy} dt JOIN {term_data} td ON dt.tid = td.tid JOIN {vocabulary} v ON td.vid = v.vid WHERE v.module = '%s'", $module);
           foreach ($record['data_taxonomy:'. $module] as $tid) {
             db_query("INSERT INTO {data_taxonomy}(id, data_table_name, tid) VALUES(%d, '%s', %d)", $id, $table_name, $tid);
           }
         }
+        elseif (is_array($record['data_taxonomy_term:'. $module])) {
+          db_query("DELETE dt FROM {data_taxonomy} dt JOIN {term_data} td ON dt.tid = td.tid JOIN {vocabulary} v ON td.vid = v.vid WHERE v.module = '%s'", $module);
+          $target_vocab = _data_taxonomy_vocabulary_load_by_module($module);
+          $tids = data_taxonomy_lookup_tids($record['data_taxonomy_term:' . $module], $target_vocab);
+          foreach ($tids as $tid) {
+            db_query("INSERT INTO {data_taxonomy}(id, data_table_name, tid) VALUES(%d, '%s', %d)", $id, $table_name, $tid);
+          }
+        }
       }
     }
     else {
@@ -146,6 +176,14 @@ function data_taxonomy_data_update($record, $table_name) {
             db_query("INSERT INTO {data_taxonomy}(id, data_table_name, tid) VALUES(%d, '%s', %d)", $id, $table_name, $tid);
           }
         }
+        elseif (is_array($record['data_taxonomy_term:'. $vid])) {
+          db_query("DELETE dt FROM {data_taxonomy} dt JOIN {term_data} td ON dt.tid = td.tid WHERE td.vid = %d", $vid);
+          $target_vocab = taxonomy_vocabulary_load($vid);
+          $tids = data_taxonomy_lookup_tids($record['data_taxonomy_term:' . $module], $target_vocab);
+          foreach ($tids as $tid) {
+            db_query("INSERT INTO {data_taxonomy}(id, data_table_name, tid) VALUES(%d, '%s', %d)", $id, $table_name, $tid);
+          }
+        }
       }
     }
   }
@@ -166,6 +204,49 @@ function data_taxonomy_get_info($data_table) {
 }
 
 /**
+ * Accepts an array of words and returns an array of respective tids for terms
+ * inside the target vocabulary. Creates new terms as neccessary.
+ *
+ * @param $words is an array of strings that may or may not be existing terms.
+ * @param $target_vocab is the target vocabulary object.
+ */
+function data_taxonomy_lookup_tids($words, $target_vocab) {
+  $tids = array();
+  foreach ($words as $key => $word) {
+
+    // Look up the term in the target vocab
+    if (is_array($word)) {
+      $term_matches = _data_taxonomy_get_term_by_name($word['name'], $target_vocab->vid);
+    }
+    else {
+      $term_matches = _data_taxonomy_get_term_by_name($word, $target_vocab->vid);
+    }
+    $term = $term_matches[0];
+
+    // If the term doesn't exist in the target vocabulary, we create it.
+    if (!$term->tid) {
+      $new_term = array();
+      if (is_array($word)) {
+        $new_term = $word;
+      }
+      else {
+        $new_term['name'] = $word;
+      }
+      $new_term['vid'] = $target_vocab->vid;
+      // Ensure that this term will be created
+      unset($new_term['tid']);
+      taxonomy_save_term($new_term);
+      $tid = db_last_insert_id('term_data', 'tid');
+      $tids[] = $tid;
+    }
+    else {
+      $tids[] = $term->tid;
+    }
+  }
+  return $tids;
+}
+
+/**
  * Form callback for tagging.
  */
 function data_taxonomy_tagging_form(&$form_state, $vid, $id, $data_table, $path, $args) {
@@ -395,6 +476,28 @@ function _data_taxonomy_vocabulary_load_by_module($module) {
 }
 
 /**
+ * Lookup a term by it's name and (optionally) by its vid.
+ *
+ * Similar to taxonomy_get_term_by_name(), but allows you to specify a vid to
+ * filter on.
+ */
+function _data_taxonomy_get_term_by_name($name, $vid = NULL){
+  $matched_terms = taxonomy_get_term_by_name($name);
+  $terms = array();
+  if (isset($vid)) {
+    foreach ($matched_terms as $matched_term) {
+      if ($matched_term->vid == $vid) {
+        $terms[] = $matched_term;
+      }
+    }
+  }
+  else {
+    $terms = $matched_terms;
+  }
+  return $terms;
+}
+
+/**
  * Preprocessor for theme('data_taxonomy_tagging_form').
  */
 function template_preprocess_data_taxonomy_tagging_form(&$vars) {
