lots of added functionality and documentation