Made some progress, I think, but messy... time to read docs on observables