However, the deeper significance of program inversion is that many situations appearing in their dynamic, piecemeal executable form can be recast in their underlying serial form as a simple program. Any resumable program--one that is alternately activated and suspended--is an example of inversion. We can ask 'What is the underlying seriality of its input and output?' Once we discover the underlying seriality of the problem, we can recast the problem in serial form, and design a simple program using JSP. Then, confident of the correctness of our design, we can optimize the design using inversion. Since the inversion preserves program correctness--it is an algorithmic transformation--we can be confident about the design of the inverted (resumable) program. The recognition of resumable processes as being essentially the inversion of a serial process, together with the correctness-preserving property of the inversion transformation of a simple program, allow us to extend the range of JSP to many situations that at first glance do not appear to be amenable to it. Some examples are the design of interrupt handlers, conversation dialogues, and on-line transaction monitors among others.