watcher thread