made more abstract class