Watcher/dirty checking refactor