Added lots of documentation!