refactor api for watch