changed to abstract class