added machine interface and abstract base class