Add observer pattern