Naming some things better and separating concerns a bit more.  Also adding docs.