final version with comment