Huge refactor

Major steps to get us where we need to be