A functional Watcher that still needs more testing.