added massive amounts of documentation