For those of you who are experiencing sessioning issues, I wanted to report back to the list on my findings: Very strange things can and will begin to happen if you refer to sessions within your standard_error_message, or within any "top level" exception handling code registered with Zope. The cause seems to be in Publish.py. It does an abort(freeme=1) prior to calling the exception handler. This means the exception handler runs outside any transaction (as in, Transaction.py). Apparently this hoses the session machinery, presumably because the index[] and data[] structures are no longer guaranteed to be synchronized to each other (as they are at transaction boundaries). So, to avoid problems, do not refer to session variables within your standard_error_message. The Zope folks are looking at this abort() call; the verdict is out on whether calling abort(freeme=1) before exception handlers are invoked is a bug. Andrew (I've got the bends from diving so deep) Athan PS: I'll be putting various Zope/Python goodies at www.memeplex.com