convert interface to abstract class to make changes easier