Have you tried raising an exception and then calling the appstate that you want to run from the except block (you can filter for a particular exception, if necessary...)?
I think that whenever you call raise, you halt the execution of 'whatever' up until the next except keyword (that sounds kind of confusing, but you probably know what I mean).
I would imagine that the default recovery system will catch exceptions that you do not catch and then execute whatever recovery (I don't use the default recovery system because it is too simple for my purposes).
Chris R Mead
The opinions expressed herein are my own personal opinions and do not represent my employer's view in any way.