update implementation
update doc