update & unit-test