refactor the interface
change docs