start of abstract class