Thinking about it, hangup should always hangup only if necessary - it may be sensible for hangup to be called at various times, but the async nature of things, may mean by the time it has been called, something else may have happened which makes it no longer necessary (or even wrong).

I think we can just merge the two functions.