Updated observer pattern