diff --git modules/taxonomy/taxonomy.module modules/taxonomy/taxonomy.module
index e5e28ee..ff1f4d3 100644
--- modules/taxonomy/taxonomy.module
+++ modules/taxonomy/taxonomy.module
@@ -1,6 +1,6 @@
 <?php
 // $Id: taxonomy.module,v 1.414.2.16 2010/08/06 11:10:57 goba Exp $
-
+$terms_node_cache = array();
 /**
  * @file
  * Enables the organization of content into categories.
@@ -627,16 +627,15 @@ function taxonomy_node_get_terms_by_vocabulary($node, $vid, $key = 'tid') {
  * Find all terms associated with the given node, ordered by vocabulary and term weight.
  */
 function taxonomy_node_get_terms($node, $key = 'tid') {
-  static $terms;
-
-  if (!isset($terms[$node->vid][$key])) {
+  global $terms_node_cache;
+  if (!isset($terms_node_cache[$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();
+    $terms_node_cache[$node->vid][$key] = array();
     while ($term = db_fetch_object($result)) {
-      $terms[$node->vid][$key][$term->$key] = $term;
+      $terms_node_cache[$node->vid][$key][$term->$key] = $term;
     }
   }
-  return $terms[$node->vid][$key];
+  return $terms_node_cache[$node->vid][$key];
 }
 
 /**
@@ -662,7 +661,10 @@ function taxonomy_node_validate(&$node) {
  * Save term associations for a given node.
  */
 function taxonomy_node_save($node, $terms) {
-
+  global $terms_node_cache;
+  // Clear the term cache for this revision of this node
+  // as we are going to change (save) the terms now.
+  unset($terms_node_cache[$node->vid]);
   taxonomy_node_delete_revision($node);
 
   // Free tagging vocabularies do not send their tids in the form,
