added ObserverListener