Added more abstraction