change to abstract class