Add a lot of documentation