abstract classes and exceptions