New abstract class / impl design