Moved to using observing_ptr. Note: I can't test if this works because input
is utterly broken. There is also a load of craziness going on, see my
comment.