Added a bunch of documentation.