using registerDisposable rather than registerDisposeCallbakc