Almost all of lifecycle event tests are based on the following assumption: all the listeners must finish processing events before servlet can continue its own execution. All these tests have the same model: listeners and servlets exchange information through static arraylist which is filled up by listener and then processed by servlet. I couldn't find any requirement in Sun servlet spec 2.3 on the synchronization between listener and the entity which initiated the process of adding/removing attribute from anywhere. There are requirement on .valueBound()/.valueUnbound() methods and on startup/shutdown events but nothing on attributeAdded/Removed/Replaced() etc. This is my undestanding and this could be wrong so I would really appreciate it if you could keep me posted on this.