complete rewrite
updated tests
new docs
3.0.0