updated with proper observables