refactor publisher -> observablevalue