improve the documentation, and add some small features