--- taxonomy.module.old	2010-08-06 13:10:57.000000000 +0200
+++ taxonomy.module	2010-09-04 12:59:31.202649445 +0200
@@ -626,12 +626,22 @@ function taxonomy_node_get_terms_by_voca
 /**
  * Find all terms associated with the given node, ordered by vocabulary and term weight.
  */
-function taxonomy_node_get_terms($node, $key = 'tid') {
+define('RESET_NONE',0);
+define('RESET_THIS',1);
+define('RESET_ALL',2);
+function taxonomy_node_get_terms($node, $key = 'tid', $reset = RESET_NONE) {
   static $terms;
+  
+  if($reset == RESET_ALL) {
+    $terms = array();
+  } elseif($reset == RESET_THIS && is_array($terms) && isset($terms[$node->vid])) {
+    unset($terms[$node->vid]);
+  }
 
   if (!isset($terms[$node->vid][$key])) {
     $result = db_query(db_rewrite_sql('SELECT t.* FROM {term_node} r INNER JOIN {term_data} t ON r.tid = t.tid INNER JOIN {vocabulary} v ON t.vid = v.vid WHERE r.vid = %d ORDER BY v.weight, t.weight, t.name', 't', 'tid'), $node->vid);
     $terms[$node->vid][$key] = array();
+
     while ($term = db_fetch_object($result)) {
       $terms[$node->vid][$key][$term->$key] = $term;
     }
@@ -699,6 +709,8 @@ function taxonomy_node_save($node, $term
         }
       }
     }
+    // Reset terms for next node load...
+    taxonomy_node_get_terms($node->nid, 'tid', RESET_THIS);
   }
 
   if (is_array($terms)) {
