added some comments and abstract requirements