breaking out source files to match objects and make the code more testable