Igor, I like the general drift of your proposal, except that I think it need not involve the EngineConfigurationFactory. Let me play it back in abstract form to make sure we are in synch.
1. EngineConfiguration should provide a method which returns a "version stamp" representing the *current* configuration -- logically a snapshot. 2. MessageContext is responsible for hiding the complexities of versioning from handlers. Conversely, handlers should access the engine configuration via the message context so the message context can sort out versioning. 3. The engine should know nothing about versioning. (Not totally convinced of this, but it's a good objective!) May I propose an improvement? Instead of exposing a "version stamp" interface/class, let's use EngineConfiguration! So EngineConfiguration would support a method (which could be called getCurrentVersion if you prefer): public EngineConfiguration getSnapshot(); Glyn