biggest refactor of the entire repo.   This design might actually work though