updated with abstractj comments