Added a ton of documentation