small refactoring
moved all custom exceptions in to there own classes and in to one place