change from interface to abstract class