Added some interfaces and abstract base classes