Making an abstraction layer