ported to observable
use observable transform