Major refactor broke things out into separate modules