observer pattern template added