reworked project structure to allow for easier and better unit testing