diff --git a/modules/taxonomy.module b/modules/taxonomy.module
index a756654f6a72d1c72ef02930d8c8510cc60560bc..2d3eb7c72217561987d7fc177a80d7afb1b78b71 100644
--- a/modules/taxonomy.module
+++ b/modules/taxonomy.module
@@ -734,8 +734,9 @@ function taxonomy_node_save($nid, $terms) {
       // this, "somecmpany, llc", "and ""this"" w,o.rks", foo bar
       $regexp = '%(?:^|,\ *)("(?>[^"]*)(?>""[^"]* )*"|(?: [^",]*))%x';
       preg_match_all($regexp, $vid_value, $matches);
-      $typed_terms = $matches[1];
+      $typed_terms = array_unique($matches[1]);
 
+      $inserted = array();
       foreach ($typed_terms as $typed_term) {
         // If a user has escaped a term (to demonstrate that it is a group,
         // or includes a comma or quote character), we remove the escape
@@ -760,7 +761,11 @@ function taxonomy_node_save($nid, $terms) {
           $typed_term_tid = $edit['tid'];
         }
 
-        db_query('INSERT INTO {term_node} (nid, tid) VALUES (%d, %d)', $nid, $typed_term_tid);
+        // Defend against duplicate, different cased tags
+        if (!isset($inserted[$typed_term_tid])) {
+          db_query('INSERT INTO {term_node} (nid, tid) VALUES (%d, %d)', $nid, $typed_term_tid);
+          $inserted[$typed_term_tid] = TRUE;
+        }
       }
     }
   }
diff --git a/modules/taxonomy/taxonomy.module b/modules/taxonomy/taxonomy.module
index a756654f6a72d1c72ef02930d8c8510cc60560bc..2d3eb7c72217561987d7fc177a80d7afb1b78b71 100644
--- a/modules/taxonomy/taxonomy.module
+++ b/modules/taxonomy/taxonomy.module
@@ -734,8 +734,9 @@ function taxonomy_node_save($nid, $terms) {
       // this, "somecmpany, llc", "and ""this"" w,o.rks", foo bar
       $regexp = '%(?:^|,\ *)("(?>[^"]*)(?>""[^"]* )*"|(?: [^",]*))%x';
       preg_match_all($regexp, $vid_value, $matches);
-      $typed_terms = $matches[1];
+      $typed_terms = array_unique($matches[1]);
 
+      $inserted = array();
       foreach ($typed_terms as $typed_term) {
         // If a user has escaped a term (to demonstrate that it is a group,
         // or includes a comma or quote character), we remove the escape
@@ -760,7 +761,11 @@ function taxonomy_node_save($nid, $terms) {
           $typed_term_tid = $edit['tid'];
         }
 
-        db_query('INSERT INTO {term_node} (nid, tid) VALUES (%d, %d)', $nid, $typed_term_tid);
+        // Defend against duplicate, different cased tags
+        if (!isset($inserted[$typed_term_tid])) {
+          db_query('INSERT INTO {term_node} (nid, tid) VALUES (%d, %d)', $nid, $typed_term_tid);
+          $inserted[$typed_term_tid] = TRUE;
+        }
       }
     }
   }