added a bunch of documenatation