Added huge amount of documentation.