revamp eventlist to be strictly an interface