refactor of the unit tests, breaking them out into individual files
refactoring code into modules so it is easier to see dependencies and relationships
fixing tests for id