Added new base abstract class for implementations to extend