added Observer Design Pattern