Major refactor broke things out into seperate modules