Add more abstraction layers