Most of the abstractions are done, I need to start working on
initialization