new version; smaller codebase; clean up; documentation; better corner cases handling; more robust; c++03 friendly still