some abstraction and more mockup