documentation and example usage