done, need to refactor to classes for separation of concerns