Added a lot of comments