some modification + unit test (begin)