needs a lot of refactoring...
updates to track