encapsulate event