move the implementation to the abstract class rather than the implementations