Implementation of the Observer pattern, still needs some work