diff --git a/content_taxonomy.module b/content_taxonomy.module
index 6868f20..41befb0 100644
--- a/content_taxonomy.module
+++ b/content_taxonomy.module
@@ -126,27 +126,25 @@ function content_taxonomy_field($op, &$node, $field, &$node_field, $teaser, $pag
       return $additions;
       break;
       
-    case 'update':
-      global $cleared;
-      if (!is_array($cleared[$node->nid]) || !$cleared[$node->nid]) {
-        unset($node->taxonomy);
-        $cleared[$node->nid] = true;
-      }
-      
-    case 'insert':
+    case 'validate':
       if (isset($field['save']) && $field['save'] != 'cck_table') {
+        $tv = array();
         if (is_array($node_field['tids'])) {
           foreach ($node_field['tids'] as $tid) {
-            $node->taxonomy[$field['vid']][$tid] = $tid;
+            $tv[$tid] = $tid;
           }
         }
         elseif (is_array($node_field) && $field['save'] == 'both') {
           foreach ($node_field as $tid => $value) {
-            $node->taxonomy[$field['vid']][$tid] = $tid;
+            $tv[$tid] = $tid;
           }
         }       
+        content_taxonomy_taxvals((int)$node->nid, $field['vid'], $tv); 
       }
+      break;
       
+    case 'update':
+    case 'insert':
       //widget specific saving of additional data
       $widget_type = $field['widget']['type'];
       $function = $widget_type ."_field_insert";
@@ -161,6 +159,35 @@ function content_taxonomy_field($op, &$node, $field, &$node_field, $teaser, $pag
   }
 }
 
+function content_taxonomy_taxvals($nid, $vid = null, $vals = null) {
+  static $tax_vals = array();
+
+  if (isset($vals)) {
+    $tax_vals[$nid][$vid] = $vals;
+  }
+  if (isset($vid)) {
+    return $tax_vals[$nid][$vid];
+  }
+  if (isset($nid)) {
+    return $tax_vals[$nid];
+  }
+  return $tax_vals;
+}
+
+function content_taxonomy_nodeapi(&$node, $op) {
+  if ($op != 'submit') return;
+  $tv = content_taxonomy_taxvals((int) $node->nid);
+  if (isset($tv)) {
+    if (isset($node->taxonomy)) {
+      foreach ($tv as $vid => $tids) {
+        $node->taxonomy[$vid] = $tids;
+      }
+    }
+    else {
+      $node->taxonomy = $tv;
+    }
+  }
+}
 
 /**
  * Implementation of hook_field_formatter_info().
