added event-bus-like functionality