everything working, still need to figure out tests and refactor