diff --git a/web/save.cgi b/web/save.cgi
index 0c5ca5f1c3f109356a7480ff575f05273bbc6209..b4985dda6c5fc11dc791f5c6c478669a285ca9d3 100755
--- a/web/save.cgi
+++ b/web/save.cgi
@@ -84,19 +84,19 @@ f.write('<styleguide xmlns="http://heimbrauconvention.de/bjcp-styleguide/2015">\
 f.write('<!-- snippet supplied by %s from %s at %s -->\n' % (user, addr, time))
 if level == 1:
     f.write('  <category id="%s">\n' % id)
-    f.write('    <%s>%s</%s>\n' % (elem, data, elem))
+    f.write('    <%s date="%s" author="%s" source="%s">%s</%s>\n' % (elem, time, user, addr, data, elem))
     f.write('  </category>\n')
 elif level == 2:
     f.write('  <category id="%s">\n' % id1)
     f.write('    <subcategory id="%s">\n' % id)
-    f.write('      <%s>%s</%s>\n' % (elem, data, elem))
+    f.write('      <%s date="%s" author="%s" source="%s">%s</%s>\n' % (elem, time, user, addr, data, elem))
     f.write('    </subcategory>\n')
     f.write('  </category>\n')
 elif level == 3:
     f.write('  <category id="%s">\n' % id1)
     f.write('    <subcategory id="%s">\n' % id2)
     f.write('      <subcategory id="%s">\n' % id)
-    f.write('        <%s>%s</%s>\n' % (elem, data, elem))
+    f.write('        <%s date="%s" author="%s" source="%s">%s</%s>\n' % (elem, time, user, addr, data, elem))
     f.write('      </subcategory>\n')
     f.write('    </subcategory>\n')
     f.write('  </category>\n')
diff --git a/xsd/bjcp-styleguide-2015.xsd b/xsd/bjcp-styleguide-2015.xsd
index 65055268b6de395ac0a80a21123d392937907c3e..020cee9fba6428e1902d207c634dcc043c2b5431 100644
--- a/xsd/bjcp-styleguide-2015.xsd
+++ b/xsd/bjcp-styleguide-2015.xsd
@@ -42,7 +42,7 @@
   <xsd:element name="category">
     <xsd:complexType>
       <xsd:sequence>
-        <xsd:element name="name" type="xsd:string" minOccurs="0"/>
+        <xsd:element name="name" type="Text" minOccurs="0"/>
         <xsd:element name="description" type="Description" minOccurs="0"/>
         <xsd:element name="entry-instructions" type="Text" minOccurs="0"/>
         <xsd:element ref="subcategory" minOccurs="0" maxOccurs="unbounded"/>
@@ -60,7 +60,7 @@
   <xsd:element name="subcategory">
     <xsd:complexType>
       <xsd:sequence>
-        <xsd:element name="name" type="xsd:string" minOccurs="0"/>
+        <xsd:element name="name" type="Text" minOccurs="0"/>
         <xsd:element name="description" type="Description" minOccurs="0"/>
         <xsd:element name="overall-impression" type="Text" minOccurs="0"/>
         <xsd:element name="aroma" type="Text" minOccurs="0"/>
@@ -105,6 +105,9 @@
     <xsd:choice minOccurs="0" maxOccurs="unbounded">
       <xsd:element ref="p"/>
     </xsd:choice>
+    <xsd:attribute name="date" type="xsd:string"/>
+    <xsd:attribute name="author" type="xsd:string"/>
+    <xsd:attribute name="source" type="xsd:string"/>
   </xsd:complexType>
 
   <xsd:element name="tags">
@@ -309,6 +312,9 @@
       <xsd:element name="u" type="xsd:string"/>
       <xsd:element ref="a"/>
     </xsd:choice>
+    <xsd:attribute name="date" type="xsd:string"/>
+    <xsd:attribute name="author" type="xsd:string"/>
+    <xsd:attribute name="source" type="xsd:string"/>
   </xsd:complexType>
 
 
diff --git a/xsl/bjcp-2015-styleguide-merge.xsl b/xsl/bjcp-2015-styleguide-merge.xsl
index 0d74386605e18c5ddd27310cc50b7036ce7db192..acadcddfadb5f01ffdfc06b0ec1ca6eaaa8ebac0 100644
--- a/xsl/bjcp-2015-styleguide-merge.xsl
+++ b/xsl/bjcp-2015-styleguide-merge.xsl
@@ -58,9 +58,9 @@
       <xsl:value-of select="local-name(.)"/>
     </xsl:variable>
     <xsl:element name="{$name}">
-      <xsl:apply-templates select="@*"/>
       <xsl:choose>
 	<xsl:when test="(../@id = $snippetid) and ($snippetnode/bjcp:*[local-name(.)=$name])">
+	  <xsl:apply-templates select="$snippetnode/bjcp:*[local-name(.)=$name]/@*"/>
 	  <xsl:apply-templates select="$snippetnode/bjcp:*[local-name(.)=$name]/bjcp:* | $snippetnode/bjcp:*[local-name(.)=$name]/text()"/>
 	</xsl:when>
 	<xsl:otherwise>
diff --git a/xsl/bjcp-2015-styleguide-translate.xsl b/xsl/bjcp-2015-styleguide-translate.xsl
index 3f1ca6e33a3cc8f0804f556e8eb1a796f1bcfed1..fa0e9077d7a65382ec0c198768bfe9a1a2f355ef 100644
--- a/xsl/bjcp-2015-styleguide-translate.xsl
+++ b/xsl/bjcp-2015-styleguide-translate.xsl
@@ -149,9 +149,9 @@
       <xsl:value-of select="local-name(.)"/>
     </xsl:variable>
     <xsl:element name="{local-name(.)}">
-      <xsl:apply-templates select="@*"/>
       <xsl:choose>
 	<xsl:when test="dyn:evaluate($p)">
+	  <xsl:apply-templates select="dyn:evaluate($p)/@*"/>
 	  <xsl:apply-templates select="dyn:evaluate($p)/bjcp:* | dyn:evaluate($p)/text()"/>
 	</xsl:when>
 	<xsl:otherwise>