hiding communcation abstraction from the controller