Added interface, renamed abstract class, only use what needed