some abstraction.
code a lot.