using abstract class
code cleanup