wrote a bunch of documentation