Index: jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/bundle/AbstractBundlePersistenceManager.java
===================================================================
--- jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/bundle/AbstractBundlePersistenceManager.java	(revision 573475)
+++ jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/bundle/AbstractBundlePersistenceManager.java	(working copy)
@@ -78,7 +78,7 @@
  * <li>&lt;param name="{@link #setBundleCacheSize(String) bundleCacheSize}" value="8"/>
  * </ul>
  */
-abstract public class AbstractBundlePersistenceManager implements 
+abstract public class AbstractBundlePersistenceManager implements
         PersistenceManager, CachingPersistenceManager {
 
     /** the cvs/svn id */
@@ -322,6 +322,17 @@
         }
     }
 
+    /**
+     * {@inheritDoc}
+     */
+    public void evict(Set nodeIds) {
+        for (Iterator it = nodeIds.iterator(); it.hasNext(); ) {
+            NodeId id = (NodeId) it.next();
+            bundles.remove(id);
+            missing.remove(id);
+        }
+    }
+
     //----------------------------------------------------------------< spi >---
 
     /**
Index: jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/bundle/CachingPersistenceManager.java
===================================================================
--- jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/bundle/CachingPersistenceManager.java	(revision 573475)
+++ jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/bundle/CachingPersistenceManager.java	(working copy)
@@ -16,6 +16,8 @@
  */
 package org.apache.jackrabbit.core.persistence.bundle;
 
+import java.util.Set;
+
 import org.apache.jackrabbit.core.state.ChangeLog;
 
 /**
@@ -32,4 +34,11 @@
      */
     public void onExternalUpdate(ChangeLog changes);
 
+    /**
+     * Evicts a set of nodeIds from the cache(s) of this CachingPersistenceManager.
+     *
+     * @param nodeIds the set of nodeIds to use for eviction
+     */
+    public void evict(Set nodeIds);
+
 }
\ No newline at end of file
Index: jackrabbit-core/src/main/java/org/apache/jackrabbit/core/state/SharedItemStateManager.java
===================================================================
--- jackrabbit-core/src/main/java/org/apache/jackrabbit/core/state/SharedItemStateManager.java	(revision 573475)
+++ jackrabbit-core/src/main/java/org/apache/jackrabbit/core/state/SharedItemStateManager.java	(working copy)
@@ -16,14 +16,25 @@
  */
 package org.apache.jackrabbit.core.state;
 
+import java.io.PrintStream;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Set;
+
+import javax.jcr.PropertyType;
+import javax.jcr.ReferentialIntegrityException;
+import javax.jcr.RepositoryException;
+import javax.jcr.nodetype.ConstraintViolationException;
+import javax.jcr.nodetype.NoSuchNodeTypeException;
+
 import org.apache.jackrabbit.core.ItemId;
 import org.apache.jackrabbit.core.NodeId;
 import org.apache.jackrabbit.core.PropertyId;
 import org.apache.jackrabbit.core.RepositoryImpl;
 import org.apache.jackrabbit.core.cluster.UpdateEventChannel;
-import org.apache.jackrabbit.core.persistence.PersistenceManager;
-import org.apache.jackrabbit.core.persistence.bundle.CachingPersistenceManager;
-import org.apache.jackrabbit.core.version.XAVersionManager;
 import org.apache.jackrabbit.core.nodetype.EffectiveNodeType;
 import org.apache.jackrabbit.core.nodetype.NodeDefId;
 import org.apache.jackrabbit.core.nodetype.NodeTypeConflictException;
@@ -31,26 +42,16 @@
 import org.apache.jackrabbit.core.nodetype.PropDef;
 import org.apache.jackrabbit.core.observation.EventStateCollection;
 import org.apache.jackrabbit.core.observation.EventStateCollectionFactory;
+import org.apache.jackrabbit.core.persistence.PersistenceManager;
+import org.apache.jackrabbit.core.persistence.bundle.CachingPersistenceManager;
 import org.apache.jackrabbit.core.util.Dumpable;
 import org.apache.jackrabbit.core.value.InternalValue;
+import org.apache.jackrabbit.core.version.XAVersionManager;
 import org.apache.jackrabbit.core.virtual.VirtualItemStateProvider;
 import org.apache.jackrabbit.name.QName;
-import org.apache.jackrabbit.uuid.UUID;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import javax.jcr.PropertyType;
-import javax.jcr.ReferentialIntegrityException;
-import javax.jcr.RepositoryException;
-import javax.jcr.nodetype.ConstraintViolationException;
-import javax.jcr.nodetype.NoSuchNodeTypeException;
-import java.io.PrintStream;
-import java.util.Iterator;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Set;
-import java.util.HashMap;
-
 /**
  * Shared <code>ItemStateManager</code> (SISM). Caches objects returned from a
  * <code>PersistenceManager</code>. Objects returned by this item state
@@ -748,6 +749,13 @@
                     eventChannel.updateCancelled(this);
                 }
 
+                /* if a caching PM is used, clear all cache entries involving this
+                 * changelog.
+                 */
+                if (persistMgr instanceof CachingPersistenceManager) {
+                    revertCachingPersistenceManager();
+                }
+
                 local.disconnect();
 
                 for (Iterator iter = shared.modifiedStates(); iter.hasNext();) {
@@ -779,6 +787,40 @@
         }
 
         /**
+         * Evicts all cached information for this changelog from the
+         * cache(s) of the CachingPersistenceManager that is used.
+         */
+        private void revertCachingPersistenceManager() {
+            Set nodeIds = new HashSet();
+
+            // Add the NodeIds of the modified states
+            for (Iterator iter = shared.modifiedStates(); iter.hasNext();) {
+                ItemState state = (ItemState) iter.next();
+                if (state.isNode()) {
+                    nodeIds.add(state.getId());
+                }
+            }
+
+            // Add the NodeIds of the deleted states
+            for (Iterator iter = shared.deletedStates(); iter.hasNext();) {
+                ItemState state = (ItemState) iter.next();
+                if (state.isNode()) {
+                    nodeIds.add(state.getId());
+                }
+            }
+
+            // Add the NodeIds of the added states
+            for (Iterator iter = shared.addedStates(); iter.hasNext();) {
+                ItemState state = (ItemState) iter.next();
+                if (state.isNode()) {
+                    nodeIds.add(state.getId());
+                }
+            }
+
+            ((CachingPersistenceManager) persistMgr).evict(nodeIds);
+        }
+
+        /**
          * {@inheritDoc}
          */
         public void setAttribute(String name, Object value) {
