first pass at moving to the Observable pattern