Hi Doug: I have been thinking about your insight: The more fine-grained the predicates, the better the concerns can be separated. I made the example below. It uses a fine-grained predicate in the sense that we can ask whether we are in a specific subtraversal. Below I use a pseudo syntax but something like this is expressible in Fred especially if the AP Library would be in Scheme. My question is: how do you express this nicely in BOP? You said that you use variables to abbreviate predicates. Is that enough? traversal function t determined by: S={A->B B->D A->C C->D} if method-name = t and if following S1={A->B B->D} and before D {f1(S1.A, S1.B, S1.D;} // S1.A is an A-object, etc. if following S1={A->B B->D} and before D and p(S1.B) {f7(S1.A, S1.B, S1.D;} if following S2={A->C C->D} and before D {f1(S2.A, S2.C, S2.D} if following S2={A->C C->D} and before C {f3(S2.A, S2.C)} if following S2={A->C C->D} and around C {if (cond) {f3(S2.A, S2.C); subtraversal.apply(); xx}} How easy is it in the current Fred to express such predicates? We would like to avoid the code duplication in the above pseudo code. The branches allow us to flexibly express under which circumstances a piece of code needs to be called. How can you bring a nice structure into expressing the circumstances? -- Karl