Use callbacks instead of events