refactored isObservable