added abstract class stuff