publisher/subscriber pattern added