add more documentation to the source code