State change watcher