replaced concrete classes with interface