Added watcher component and tests

As requested =)