I don't get it. Can someone explain to me what the template for <specGrpRef> in odds/odd2odd.xsl is doing around line 489 (dev branch)? It looks like the structure is: <choose> <when test="LOCAL POINTER"> <apply-templates select="CHILDREN OF THAT WHICH IS POINTED TO"/> </when> <otherwise> <for-each select="THAT WHICH IS POINTED TO"> <!-- to set context node --> <choose> <when test="child::specGrp"> ???? <apply-templates select="child::specGrp/child::*"/> </when> <otherwise> <apply-templates select="child::*"/> </otherwise> </choose> </for-each> </otherwise> <choose> I find this bizarre, but I may be missing something here. A specGrpRef/@target is supposed to point to a <specGrp>. A <specGrp>, of course, can contain children <specGrp>s (not that any of ours do that). So it looks to me like ... ... given the following somewhere in file A.xml <specGrp xml:id="sciencyStuff"> <elementRef key="measureGrp"/> <elementRef key="measure"/> <specGrp xml:id="detailedScienceStuff"> <elementRef key="unit"/> <elementRef key="num"/> </specGrp> </specGrp> ... and the following in file B.xml <specGrpRef target="A.xml#sciencyStuff"/> then odd2odd.xsl will only process 'unit' and 'num', not 'measureGrp' and 'measure', for which I can see absolutely no reason. Am I going nuts, here? Was there a period in ODD history when a <specGrpRef> would point to the *parent* of the desired <specGrp>, not to the <specGrp> itself?