diff --git a/resources/xproc/fulltext/prepare-mets.xsl b/resources/xproc/fulltext/prepare-mets.xsl
index 5ccd3d1457771783f2a5bcbb2e89101950dd85b8..542cbcacf4502384968d14794d3193e3a5bbc049 100644
--- a/resources/xproc/fulltext/prepare-mets.xsl
+++ b/resources/xproc/fulltext/prepare-mets.xsl
@@ -1,21 +1,39 @@
 <xsl:transform version="2.0"
+               exclude-result-prefixes="#all"
                xmlns:mets="http://www.loc.gov/METS/"
+               xmlns:fun="http://selbstzeugnisse.hab.de/ns"
                xmlns:xlink="http://www.w3.org/1999/xlink"
                xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 
+  <xsl:param name="target" select="'html'"/>
+
+  <xsl:output method="xml" indent="yes"/>
+
   <xsl:template match="mets:mets">
     <transformations>
-      <xsl:for-each select="//mets:div[ancestor-or-self::mets:div/@ID = //mets:behaviorSec[@ID = 'html']/mets:behavior/@STRUCTID][mets:fptr]">
-        <xsl:variable name="metsId" select="@ID"/>
-        <xsl:variable name="fileId" select="mets:fptr/@FILEID"/>
-        <xsl:if test="//mets:file[@ID = $fileId][@MIMETYPE = 'application/tei+xml'] and $metsId != 'home'">
-          <xsl:variable name="metsIds" select="ancestor-or-self::mets:div[@ID = //mets:behaviorSec[@ID = 'html']/mets:behavior/@STRUCTID]/@ID"/>
-          <transformation id="{@ID}"
-                          source="{//mets:file[@ID = $fileId][@MIMETYPE = 'application/tei+xml']/mets:FLocat/@xlink:href}"
-                          stylesheet="{(//mets:behaviorSec[@ID = 'html']/mets:behavior[@STRUCTID = $metsIds])[1]/mets:mechanism/@xlink:href}"/>
+      <xsl:for-each select="//mets:div[@ID and @ID != 'home']">
+        <xsl:if test="//mets:file[@ID = current()/mets:fptr/@FILEID]/@MIMETYPE = 'application/tei+xml'">
+          <xsl:variable name="candidates" select="//mets:behaviorSec[@ID = $target]//mets:behavior[mets:interfaceDef/@xlink:href = 'http://www.w3.org/TR/xslt']"/>
+          <xsl:variable name="behavior" select="fun:select-behavior(reverse(ancestor-or-self::mets:div), $candidates)"/>
+          <xsl:if test="$behavior">
+            <transformation id="{@ID}" stylesheet="{$behavior/mets:mechanism/@xlink:href}" source="{//mets:file[@ID = current()/mets:fptr/@FILEID]/mets:FLocat/@xlink:href}"/>
+          </xsl:if>
         </xsl:if>
       </xsl:for-each>
     </transformations>
   </xsl:template>
 
+  <xsl:function name="fun:select-behavior" as="element(mets:behavior)?">
+    <xsl:param name="divisions" as="element(mets:div)+"/>
+    <xsl:param name="behaviors" as="element(mets:behavior)*"/>
+    <xsl:choose>
+      <xsl:when test="$divisions[1]/@ID = $behaviors/@STRUCTID">
+        <xsl:sequence select="$behaviors[@STRUCTID = $divisions[1]/@ID][1]"/>
+      </xsl:when>
+      <xsl:when test="count($divisions) gt 1">
+        <xsl:sequence select="fun:select-behavior($divisions[position() gt 1], $behaviors)"/>
+      </xsl:when>
+    </xsl:choose>
+  </xsl:function>
+
 </xsl:transform>