diff --git a/includes/forum.node_convert.inc b/includes/forum.node_convert.inc
index 36fb439..b1c1a9c 100644
--- a/includes/forum.node_convert.inc
+++ b/includes/forum.node_convert.inc
@@ -20,7 +20,6 @@ function forum_node_convert_change($data, $op) {
   elseif ($op == 'delete') {
     if ($data['node']->type == 'forum') {
       db_query('DELETE FROM {forum} WHERE nid = %d', $data['node']->nid);
-      db_query('DELETE FROM {term_node} WHERE nid = %d', $data['node']->nid);
     }
   }
   elseif ($op == 'options') {
diff --git a/node_convert.module b/node_convert.module
index 4be599d..1781d7d 100755
--- a/node_convert.module
+++ b/node_convert.module
@@ -625,6 +625,15 @@ function node_convert_node_convert($nid, $dest_node_type, $source_fields, $dest_
       $additional_data['body'], $additional_data['teaser'], $node->nid, $node->vid);
     }
   }
+
+  // Remove any taxonomy terms from vocabularies that the new type doesn't have
+  $args = $vocabulary_ids = array_keys(taxonomy_get_vocabularies($dest_node_type));
+  array_unshift($args, $node->nid);
+  db_query('DELETE tn.* FROM {term_node} tn INNER JOIN {term_data} td ON tn.tid = td.tid WHERE tn.nid = %d AND td.vid NOT IN (' . db_placeholders($vocabulary_ids) . ')', $args);
+  // Taxonomy terms are cached, so we need to clear that cache or else the
+  // node_load() below will have bad data that will get saved right back
+  taxonomy_node_get_terms($node, 'tid', TRUE);
+
   // We collate date to send to the hook implementations
   $data = array(
     'node' => $node,
