new classes and custom exception