implementing Event architecture