refactor args, add tests
add documentation