--- project/core/src/main/java/org/hibernate/EmptyInterceptor.java	2008-07-30 11:46:34.000000000 +0200
+++ project/core/src/main/java/org/hibernate/EmptyInterceptor.java	2010-04-08 21:07:24.000000000 +0200
@@ -112,10 +112,10 @@
 		return sql;
 	}
 
-	public void onCollectionRemove(Object collection, Serializable key) throws CallbackException {}
+	public boolean onCollectionRemove(Object collection, Serializable key) throws CallbackException { return true; }
 
-	public void onCollectionRecreate(Object collection, Serializable key) throws CallbackException {}
+	public boolean onCollectionRecreate(Object collection, Serializable key) throws CallbackException { return true; }
 
-	public void onCollectionUpdate(Object collection, Serializable key) throws CallbackException {}
+	public boolean onCollectionUpdate(Object collection, Serializable key) throws CallbackException { return true; }
 	
 }
\ No newline at end of file

--- project/core/src/main/java/org/hibernate/Interceptor.java	2008-07-30 11:46:34.000000000 +0200
+++ project/core/src/main/java/org/hibernate/Interceptor.java	2010-04-08 21:06:52.000000000 +0200
@@ -84,15 +84,15 @@
 	/**
 	 * Called before a collection is (re)created.
 	 */
-	public void onCollectionRecreate(Object collection, Serializable key) throws CallbackException;
+	public boolean onCollectionRecreate(Object collection, Serializable key) throws CallbackException;
 	/**
 	 * Called before a collection is deleted.
 	 */
-	public void onCollectionRemove(Object collection, Serializable key) throws CallbackException;
+	public boolean onCollectionRemove(Object collection, Serializable key) throws CallbackException;
 	/**
 	 * Called before a collection is updated.
 	 */
-	public void onCollectionUpdate(Object collection, Serializable key) throws CallbackException;
+	public boolean onCollectionUpdate(Object collection, Serializable key) throws CallbackException;
 	/**
 	 * Called before a flush
 	 */

--- project/core/src/main/java/org/hibernate/event/def/AbstractFlushingEventListener.java	2010-03-10 03:25:04.000000000 +0100
+++ project/core/src/main/java/org/hibernate/event/def/AbstractFlushingEventListener.java	2010-04-08 21:06:14.000000000 +0200
@@ -255,39 +255,42 @@
 			CollectionEntry ce = (CollectionEntry) me.getValue();
 
 			if ( ce.isDorecreate() ) {
-				session.getInterceptor().onCollectionRecreate( coll, ce.getCurrentKey() );
-				actionQueue.addAction(
-						new CollectionRecreateAction( 
-								coll, 
-								ce.getCurrentPersister(), 
-								ce.getCurrentKey(), 
-								session 
-							)
-					);
+				if ( session.getInterceptor().onCollectionRecreate( coll, ce.getCurrentKey() ) ) {
+					actionQueue.addAction(
+							new CollectionRecreateAction( 
+									coll, 
+									ce.getCurrentPersister(), 
+									ce.getCurrentKey(), 
+									session 
+								)
+						);
+			    }
 			}
 			if ( ce.isDoremove() ) {
-				session.getInterceptor().onCollectionRemove( coll, ce.getLoadedKey() );
-				actionQueue.addAction(
-						new CollectionRemoveAction( 
-								coll, 
-								ce.getLoadedPersister(), 
-								ce.getLoadedKey(), 
-								ce.isSnapshotEmpty(coll), 
-								session 
-							)
-					);
+				if ( session.getInterceptor().onCollectionRemove( coll, ce.getLoadedKey() ) ) {
+					actionQueue.addAction(
+							new CollectionRemoveAction( 
+									coll, 
+									ce.getLoadedPersister(), 
+									ce.getLoadedKey(), 
+									ce.isSnapshotEmpty(coll), 
+									session 
+								)
+						);
+				}
 			}
 			if ( ce.isDoupdate() ) {
-				session.getInterceptor().onCollectionUpdate( coll, ce.getLoadedKey() );
-				actionQueue.addAction(
-						new CollectionUpdateAction( 
-								coll, 
-								ce.getLoadedPersister(), 
-								ce.getLoadedKey(), 
-								ce.isSnapshotEmpty(coll), 
-								session 
-							)
-					);
+				if ( session.getInterceptor().onCollectionUpdate( coll, ce.getLoadedKey() ) ) {
+					actionQueue.addAction(
+							new CollectionUpdateAction( 
+									coll, 
+									ce.getLoadedPersister(), 
+									ce.getLoadedKey(), 
+									ce.isSnapshotEmpty(coll), 
+									session 
+								)
+						);
+				}
 			}
 
 		}
