Replaced use of interfaces with abstract base classes