Added a whole bunch of documentation