--- sitemenu-5.x-1.x-dev/sitemenu.module	2007-04-19 17:57:17.000000000 +0200
+++ sitemenu-5.x-1.x-dev.fix.cache/sitemenu.module	2007-04-21 04:28:49.000000000 +0200
@@ -445,3 +445,34 @@ function sitemenu_taxonomy($op, $type, $
     cache_clear_all('sitemenu', 'cache', TRUE);
   }
 }
+
+function sitemenu_nodeapi(&$node, $op, $a3 = NULL, $a4 = NULL) {
+  // Expire the sitemenu cache when a node is inserted/deleted/updated
+  switch($op) {
+    case 'delete':
+    case 'insert':
+    case 'update':
+      $use_cache = variable_get(SITEMENU_CACHING, 1);
+      if ($use_cache) {
+        _sitemenu_clear_cache($node->type);
+        //alternatively: cache_clear_all('sitemenu', 'cache', TRUE);
+      }
+      break;
+  }
+}
+
+/**
+ * Clear the sitemenu cache for the selected node type
+ *
+ * @param string $node_type Node type name
+ */
+function _sitemenu_clear_cache($node_type) {
+  $vocabularies = _sitemenu_get_vocabularies();
+  foreach ($vocabularies as $vocabulary) {
+    $result = db_query_range("SELECT vid FROM {vocabulary_node_types} WHERE vid = %d AND type = '%s'", $vocabulary->vid, $node_type, 0, 1);
+    if ($vid = db_result($result)) {
+      $cache_id = 'sitemenu:' . $vid;
+      cache_clear_all($cache_id, 'cache', TRUE);
+    } 
+  }
+}
