tests are passed, but

* I don't satisfied with it
* looks like tests are far from being complete