I am struggling with a simple task. The following XML file
<Root>
    <Row>
        <ConceptID>1</ConceptID>
        <Concept>may be empty</Concept>
        <TermID>2481</TermID>
        <Term>screened room</Term>
        <Language>EN</Language>
        <Usage>forbidden</Usage>
        <StatusLanguage>new</StatusLanguage>
        <Source>HEKT385057</Source>
    </Row>
    <Row>
        <ConceptID>1</ConceptID>
        <Concept>may be empty</Concept>
        <TermID>6551</TermID>
        <Term>shielded room</Term>
        <Language>EN</Language>
        <Usage>allowed</Usage>
        <StatusLanguage>new</StatusLanguage>
        <Source>EKT-TD</Source>
    </Row>
    <Row>
        <ConceptID>1</ConceptID>
        <Concept>may be empty</Concept>
        <TermID>6552</TermID>
        <Term>unverseuchter Raum</Term>
        <Language>DE</Language>
        <Usage>allowed</Usage>
        <StatusLanguage>new</StatusLanguage>
        <Source>EKT-40</Source>
    </Row>
    <Row>
        <ConceptID>2</ConceptID>
        <Concept>may be also empty</Concept>
        <TermID>2482</TermID>
        <Term>low-pressure ventilator</Term>
        <Language>EN</Language>
        <Usage>allowed</Usage>
        <StatusLanguage>new</StatusLanguage>
        <Source>Birgit</Source>
    </Row>
    <Row>
        <ConceptID>2</ConceptID>
        <Concept>may be also empty</Concept>
        <TermID>2483</TermID>
        <Term>LP ventilator</Term>
        <Language>EN</Language>
        <Usage>allowed</Usage>
        <StatusLanguage>new</StatusLanguage>
        <Source>HEKT385057</Source>
    </Row>
...
</Root>
I wish to transform into a new XML file with following structure and grouping (ConceptID):
<Root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
   <NewConcept>
      <ConceptID>1</ConceptID>
      <Concept>may be empty</Concept>
      <TermG>
         <TermID>6551</TermID>
         <Term>shielded room</Term>
         <Language>EN</Language>
         <Usage>allowed</Usage>
         <StatusLanguage>new</StatusLanguage>
         <Source>EKT-TD</Source>
      </TermG>
      <TermG>
         <TermID>6552</TermID>
         <Term>unverseuchter Raum</Term>
         <Language>DE</Language>
         <Usage>allowed</Usage>
         <StatusLanguage>new</StatusLanguage>
         <Source>EKT-40</Source>
      </TermG>
      <TermG>
         <TermID>2481</TermID>
         <Term>screened room</Term>
         <Language>EN</Language>
         <Usage>forbidden</Usage>
         <StatusLanguage>new</StatusLanguage>
         <Source>HEKT385057</Source>
      </TermG>
   </NewConcept>
   <NewConcept>
      <ConceptID>2</ConceptID>
      <Concept>may be also empty</Concept>
      <TermG>
         <TermID>2482</TermID>
         <Term>low-pressure ventilator</Term>
         <Language>EN</Language>
         <Usage>allowed</Usage>
         <StatusLanguage>new</StatusLanguage>
         <Source>Birgit</Source>
      </TermG>
      <TermG>
         <TermID>2483</TermID>
         <Term>LP ventilator</Term>
         <Language>EN</Language>
         <Usage>allowed</Usage>
         <StatusLanguage>new</StatusLanguage>
         <Source>HEKT385057</Source>
      </TermG>
   </NewConcept>
...
</Root>
my current XSL file however only copies the tags into the desired structure but not the content
    <xsl:key name="concept" match="Row" use="ConceptID" />
     <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="Row[generate-id(.)=generate-id(key('concept',ConceptID)[1])]">
            <xsl:sort select="ConceptID" data-type="number"/>
            </xsl:apply-templates>
        </xsl:copy>
    </xsl:template>
    <xsl:template match="Row">
        <NewConcept>
            <xsl:apply-templates select="ConceptID" />
            <xsl:apply-templates select="Concept" />
            <xsl:for-each select="key('concept', ConceptID)">
            <xsl:sort select="Usage"/>
                <TermG>     
                    <xsl:apply-templates select="TermID" />
                    <xsl:apply-templates select="Term" />
                    <xsl:apply-templates select="Language" />
                    <xsl:apply-templates select="Usage" />
                    <xsl:apply-templates select="StatusLanguage" />
                    <xsl:apply-templates select="Source" />
                </TermG>
            </xsl:for-each>
        </NewConcept>
    </xsl:template>
yields into:
<Root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
   <NewConcept>
      <ConceptID/>
      <Concept/>
      <TermG>
         <TermID/>
         <Term/>
         <Language/>
         <Usage/>
         <StatusLanguage/>
         <Source/>
      </TermG>
      <TermG>
         <TermID/>
         <Term/>
         <Language/>
         <Usage/>
         <StatusLanguage/>
         <Source/>
      </TermG>
      <TermG>
         <TermID/>
         <Term/>
         <Language/>
         <Usage/>
         <StatusLanguage/>
         <Source/>
      </TermG>
   </NewConcept>
...
</Root>
Replacing
<xsl:apply-templates select="Row[generate-id(.)=generate-id(key('concept',ConceptID)[1])]">
    <xsl:sort select="ConceptID" data-type="number"/>
</xsl:apply-templates>
with
<xsl:apply-templates select="@*|node()"/>
gives me the correct output (structure and content), however the groups appear multiple times, depending on how man elements are in a group (three elements for example results in three times the same group). I would very much appreciate a hint that helps me to solve this task! Thank you very much.