Making further abstraction layers. Please see the interfaces.