Add a lot of documentation with doctoring