added some description in comments.