Improve documentation.
Add more comments