add more interfaces and abstract classes