added abstract class