nice documentation and tests!