make these methods pure virtual instead of giving them empty implementations