More refactoring for Watcher's testability. Not done yet. Tests aren't passing.