refactor
add sync