one more refactor; simplify watcher struct