added comments and abstract class declarations