private -> public
optimize: multithreads
update nowfm then modify
refactor error handling