a bunch of refactoring: hanging the repositories out to DRY...better naming conventions...adding custom exceptions...code style cleanup