completed with comments