Hi Doug: Programming with abstract traversals (PAT): (using TraversalGraph arguments) with DJ we can write methods m of the form f(tg1,tg2,tg3, ...) Method m might do a traversal tg1 with a visitor v that uses tg2 and tg3 in one of the before or after methods. So m instantiates v with arguments tg2 and tg3. The goal of PAT is to keep the traversals abstract until we call the method. This might lead to a dozen traversal graph arguments, but it keeps the methods very adaptive. The adaptation happens here upon method call which is very dynamic. This is a form of component-based programming where the components are methods parameterized by traversal graphs. The methods are basically called with strategies as arguments. Maybe more appropriately, this should be called programming with abstract object graph slices (PAS): The goal of PAS is to keep the important object slices abstract and to define them at call time using strategies. Both PAT and PAS are a form of super-adaptive programmig because we can control the adaptation process using strategies. It is not that we write the strategies as part of the methods but as actual parameters. Do you see any problems with this? Do you prefer PAS or PAT? I plan to have my 50+ students to write PAS or PAT programs using DJ. -- Karl