add Observer wrapper to make subscribe(Observer[T]) work