Added even more abstraction