add comments, hope you can understand :)