make base classes abstract because 4.0 wants to be everything strict