diff --git a/templates/opera2an.xslt b/templates/opera2an.xslt
index 82c023e8e2056f11f0444441594f3dcabd89ee5a..023fae88392aa93082108ae600028f10419f2e53 100644
--- a/templates/opera2an.xslt
+++ b/templates/opera2an.xslt
@@ -62,13 +62,24 @@
   </debateBody>
 </xsl:template>
 
-<xsl:template match="tei:sg">
+<xsl:template match="tei:sg[not(tei:stage)]">
   <speech by="#{translate(tei:singer[1]/@who,' ','-')}">
     <xsl:apply-templates/>
   </speech>
 </xsl:template>
 
-<xsl:template match="tei:sg/tei:stage" />
+<xsl:key name="stageKey" match="tei:sg/*[not(self::tei:singer|self::tei:stage)]"
+         use="concat(generate-id(..), '|', generate-id(preceding-sibling::tei:stage[1]))" />
+
+<xsl:template match="tei:sg[tei:stage]">
+  <xsl:for-each select="*[generate-id() = generate-id(key('stageKey', concat(generate-id(..), '|', generate-id(preceding-sibling::tei:stage[1])))[1])]">
+    <xsl:apply-templates select="preceding-sibling::tei:stage[1]" />
+    <speech by="#{translate(../tei:singer[1]/@who,' ','-')}">
+      <xsl:apply-templates select="../tei:singer[1]" />
+      <xsl:apply-templates select="key('stageKey', concat(generate-id(..), '|', generate-id(preceding-sibling::tei:stage[1])))" />
+    </speech>
+  </xsl:for-each>
+</xsl:template>
 
 <xsl:template match="tei:stage">
   <narrative>