Added component observer pattern