(WIP) Abstraction

don't merge me