added interfaces and abstract classes