Observer pattern

Initial implementation of the classic Observer pattern. This may change due to refactoring...