moved watch logic into WatchOperations trait