conversation through callbacks to reduce implementation dependencies