added few interfaces and abstract classes