update
fix initial code
new tests
fix explantion
how it is used