Tons of refactors -- tests not working yet
Refactor