prepare for more abstraction