some modification + unit test (again)