Encapsulating a lot of the behavior behind interfaces