Support multiple watchers. (Major refactor)