Implemented a few interfaces and changed the methods to work with them instead of working with concrete classes