observeOnce
merging changes from observeOnce branch