refactored
update example
update tests