this can be removed because its an abstract class