moved custom exceptions into own class