Conclusions and future work Separation of concerns is also helpful for defining and understanding programming language primitives. In earlier papers we expressed the semantics of a traversal strategy through a set of paths in the class graph. This required a heavier definitional approach. In this paper we separate the issues: we define the FIRST predicate basically at the level of object graphs, only referring to paths in object graphs and using an existential quantifier over object graphs. And only later, to compute FIRST, we refer to paths in the class graph. This separation of basic semantics from efficiently computing the semantics leads to a concise definition of the meaning of a traversal specification basically only referring to object graphs. The paper also systematically derives the efficient computation of FIRST. The conciseness is also helped by the observation that a relational formalism is the right approach to express the non-standard path concept needed. The paper achieves another separation of concerns: In earlier works we defined the meaning of a traversal specification for an object graph to be traversal history: an ordered sequence of nodes and edges describing the visiting order. In this paper, we separate the definition of the traversal history into two parts: first we define the subgraph of the object graph selected by the traversal specification (using FIRST and search) and then we may use any traversal approach we choose, e.g., depth-first, to define a traversal history. This separation of traversal graph from traversal history leads to a more concise and understandable definition of the concept. The paper presents a graph-based crosscutting technology. We have two graphs: a class graph and a strategy graph that crosscut each other based on a map function. We have implemented an efficient algorithm to compute the crosscut of the two graphs \cite{strategies-tr:LP97} and we will explore further applications and extensions of this approach to aspect-oriented software development.