Adding a lot of documentation and commentary