much more flexible if Event is a pointer