diff -urp taxonomy_access/taxonomy_access.module taxonomy_access_new/taxonomy_access.module
--- taxonomy_access/taxonomy_access.module	2010-03-13 09:22:03.000000000 -0600
+++ taxonomy_access_new/taxonomy_access.module	2010-03-13 09:42:39.000000000 -0600
@@ -803,6 +803,7 @@ function _taxonomy_access_get_nodes_for_
  *    An array of node ids for which to acquire access permissions.
  */
 function _taxonomy_access_node_access_update($nids) {
+
   // Proceed only if node_access_needs_rebuild() is not already flagged.
   if (!node_access_needs_rebuild()) {
 
@@ -840,7 +841,7 @@ function _taxonomy_access_cache_affected
 
   // If we were passed a list of nodes, cache.
   if (isset($affected_nodes)) {
-    $nodes = $affected_nodes;
+    $nodes = array_merge($nodes, $affected_nodes);
   }
 
   // Otherwise, return the cached data.
Only in taxonomy_access_new: taxonomy_access.module.orig
diff -urp taxonomy_access/taxonomy_access_admin.inc taxonomy_access_new/taxonomy_access_admin.inc
--- taxonomy_access/taxonomy_access_admin.inc	2010-03-13 09:22:03.000000000 -0600
+++ taxonomy_access_new/taxonomy_access_admin.inc	2010-03-13 09:42:39.000000000 -0600
@@ -359,7 +359,7 @@ function taxonomy_access_admin_form_subm
               'DELETE FROM {term_access} WHERE rid = %d AND tid = %d', 
               $values['rid'], $tid
             );
-            _taxonomy_access_node_access_update($affected_nodes);
+            _taxonomy_access_cache_affected_nodes($affected_nodes);
           }
         }
       }
@@ -373,10 +373,17 @@ function taxonomy_access_admin_form_subm
               $values['rid'], 
               $vid
             );
-            _taxonomy_access_node_access_update($affected_nodes);
+            _taxonomy_access_cache_affected_nodes($affected_nodes);
           }
         }
       }
+
+      // Update any affected nodes.
+      $affected_nodes = _taxonomy_access_cache_affected_nodes();
+      if (!empty($affected_nodes)) {
+        _taxonomy_access_node_access_update($affected_nodes);
+      }
+
       break;
 
     case t('Add'):
@@ -393,6 +400,13 @@ function taxonomy_access_admin_form_subm
       elseif ($type == 'default') {
         taxonomy_access_defaults_update($id, $values['rid'], $new['grants']);
       }
+
+      // Update any affected nodes.
+      $affected_nodes = _taxonomy_access_cache_affected_nodes();
+      if (!empty($affected_nodes)) {
+        _taxonomy_access_node_access_update($affected_nodes);
+      }
+
       break;
 
     case t('Save all'):
@@ -417,13 +431,24 @@ function taxonomy_access_admin_form_subm
           }
         }
       }
+
+      // Update any affected nodes.
+      $affected_nodes = _taxonomy_access_cache_affected_nodes();
+      if (!empty($affected_nodes)) {
+        _taxonomy_access_node_access_update($affected_nodes);
+      }
+
       drupal_goto('admin/user/taxonomy_access');
       break;
   }
 }
 
 /**
- * Updates permissions for a role for a term
+ * Updates permissions for a role for a term.
+ * Note: This function adds nodes to the affected nodes cache.
+ * Callers should run  _taxonomy_access_node_access_update() on
+ * _taxonomy_access_cache_affected_nodes() after all changes are processed.
+ *
  * @param $tid
  *   The term to add the permission for.
  * @param $rid
@@ -460,7 +485,10 @@ function taxonomy_access_grant_update($t
   // Insert new entries.
   drupal_write_record('term_access', $row);
 
-  _taxonomy_access_node_access_update($affected_nodes);
+  // Add any affected nodes to the cache to be updated by the submit handler.
+  if (sizeof($affected_nodes) > 0) {
+    _taxonomy_access_cache_affected_nodes($affected_nodes);
+  }
 }
 
 /**
@@ -501,6 +529,10 @@ function taxonomy_access_recursive_grant
 
 /**
  * Updates default permissions for a role for a vocabulary.
+ * Note: This function adds nodes to the affected nodes cache.
+ * Callers should run  _taxonomy_access_node_access_update() on
+ * _taxonomy_access_cache_affected_nodes() after all changes are processed.
+ *
  * @param $vid
  *   The vocab to add the permission for.
  * @param $rid
@@ -545,9 +577,9 @@ function taxonomy_access_defaults_update
   // Insert new entries.
   drupal_write_record('term_access_defaults', $row);
 
-  // Update node access for any affected nodes.
+  // Add any affected nodes to the cache to be updated by the submit handler.
   if (sizeof($affected_nodes) > 0) {
-    _taxonomy_access_node_access_update($affected_nodes);
+    _taxonomy_access_cache_affected_nodes($affected_nodes);
   }
 }
 
