reimplementing watcher