Implement publish/subscribe event model