add context, update readme, add tests, refactoring