Fix bugs in Observer Pattern, use call back instead