As impasses occur before previous impasses are resolved, a hierarchy of contexts are built, one on top of the other. This is the context stack. One of the curious things about Soar is that decisions may be made at any time for any member of the context stack. For example, a change to the state could be proposed for the second goal in the stack, regardless of how many previous subgoals had been created below it. If this change resolved the impasse at that level in the context stack, then the context stack below that particular goal's place in the context stack would be removed, along with any working memory elements created by those contexts. Thus, within the context stack, all slots are available and appropriate for any decision above it in the context.