restored abstract class