Added a bunch of documentation