Hello and sorry for the late reply due to Eastern!
Can you please clarify what you mean on your last point? OnStop, should be called when an action is interrupted as well as when an action is normally stoped (because it finished execution). You can determine whether it was an interuption or not, by using the special OnStop override with the argument (OnStop(bool isInterrupt)) by the way.