diff --git a/Changes b/Changes
index e98910f..30d50bc 100644
--- a/Changes
+++ b/Changes
@@ -1,8 +1,11 @@
-0.3.2 2025-9-29
+0.3.3 2026-01-29
+    - Introduce announcements (diewald)
+
+0.3.2 2025-09-29
     - Bugfix: export of queries containing curly brackets (closes #61 )(hebasta)
     - CI: Build docker image also on tag push (kupietz)
     - Upgrade Jersey to 4.0.0
-    - Upgrade other dependencies following dependabot 
+    - Upgrade other dependencies following dependabot
 
 0.3.1 2024-10-9
     - Produces export template as service (hebasta)
diff --git a/pom.xml b/pom.xml
index 595c3ab..0f0d407 100644
--- a/pom.xml
+++ b/pom.xml
@@ -4,7 +4,7 @@
   <groupId>de.ids_mannheim.korap</groupId>
   <artifactId>KalamarExportPlugin</artifactId>
   <packaging>jar</packaging>
-  <version>0.3.2</version>
+  <version>0.3.3</version>
   <name>KalamarExportPlugin</name>
   <url>https://korap.ids-mannheim.de/</url>
   
diff --git a/src/main/java/de/ids_mannheim/korap/plkexport/Service.java b/src/main/java/de/ids_mannheim/korap/plkexport/Service.java
index d6c6cf3..b88f8e0 100644
--- a/src/main/java/de/ids_mannheim/korap/plkexport/Service.java
+++ b/src/main/java/de/ids_mannheim/korap/plkexport/Service.java
@@ -720,6 +720,7 @@
         templateData.put("assetPath", uri.build());
         templateData.put("defaultHitc", defaultHitc);
         templateData.put("maxHitc", maxHitc);
+        templateData.put("announcement", prop.getProperty("announcement"));
 
         // There is an error code to pass
         if (code != null) {
diff --git a/src/main/resources/assets/templates/export.ftl b/src/main/resources/assets/templates/export.ftl
index eeed57d..e009892 100644
--- a/src/main/resources/assets/templates/export.ftl
+++ b/src/main/resources/assets/templates/export.ftl
@@ -57,6 +57,11 @@
       #export input[type=radio] {
         vertical-align: top;
       }
+
+      #announcement {
+        font-weight: bold;
+        color: red;
+      }
       
       .button-group.button-panel input[type="submit"]{
         min-width: 20em;
@@ -110,7 +115,11 @@
             </div>
           </fieldset>
 
-          <p>Depending on the settings and add-ons of your browser, it may not be possible to export corpus excerpts that require authentication.</p>
+          <#if announcement??>
+            <p id="announcement">${announcement}</p>
+          </#if>
+          
+          <p>${dict.info}</p>
           
           <fieldset class="form-line">
             <legend>${dict.hitc}</legend>
diff --git a/src/main/resources/locales/export.properties b/src/main/resources/locales/export.properties
index 9066039..49dcbc9 100644
--- a/src/main/resources/locales/export.properties
+++ b/src/main/resources/locales/export.properties
@@ -5,4 +5,5 @@
 export_button = Export
 banner = Experimental
 with_ql = with
-in_cq = in
\ No newline at end of file
+in_cq = in
+info = Depending on the settings and add-ons of your browser, it may not be possible to export corpus excerpts that require authentication.
\ No newline at end of file
diff --git a/src/main/resources/locales/export_de.properties b/src/main/resources/locales/export_de.properties
index 024bec5..4a3aee5 100644
--- a/src/main/resources/locales/export_de.properties
+++ b/src/main/resources/locales/export_de.properties
@@ -8,4 +8,5 @@
 export_button = Exportieren
 banner = Experimentell
 with_ql = mit
-in_cq = in
\ No newline at end of file
+in_cq = in
+info = Abh\u00e4ngig von Ihren Browser-Einstellungen und -Erweiterungen kann der Export von Korpusbelegen, die eine Authentifizierung ben\u00f6tigen, nicht m\u00f6glich sein.
diff --git a/src/test/java/de/ids_mannheim/korap/plkexport/AssetTest.java b/src/test/java/de/ids_mannheim/korap/plkexport/AssetTest.java
index 4a7794f..94599e7 100644
--- a/src/test/java/de/ids_mannheim/korap/plkexport/AssetTest.java
+++ b/src/test/java/de/ids_mannheim/korap/plkexport/AssetTest.java
@@ -139,12 +139,33 @@
         assertTrue("Assets", str.contains("<script src=\"https://ids-mannheim.example/instance/test/js"));
         assertTrue("Assets", str.contains("<link href=\"https://ids-mannheim.example/instance/test/css"));
         assertFalse("Errors", str.contains("dynCall("));
+        assertFalse("Announcement", str.contains("<p id=\"announcement\">"));
 
         properties.setProperty("asset.host", hostTemp);
         properties.setProperty("asset.path", pathTemp != null ? pathTemp : "");
     }
 
     @Test
+    public void testFormHtmlAnnouncements () {
+        ExWSConf.clearProp();
+        Properties properties = ExWSConf.properties(null);
+        String announceTemp = properties.getProperty("announcement");
+        properties.setProperty("announcement", "Test World");
+        
+        Response responsehtml = target("/export").request(MediaType.TEXT_HTML)
+                .get();
+        assertEquals("HTTP Code",
+                Status.OK.getStatusCode(), responsehtml.getStatus());
+        String str = responsehtml.readEntity(String.class);
+        assertTrue("HTTP Body", str.contains("<title>Export</title>"));
+        assertTrue("Announcement", str.contains("<p id=\"announcement\">Test World</p>"));
+        assertTrue("Note", str.contains("on the settings"));
+
+        properties.setProperty("announcement", announceTemp != null ? announceTemp : "");
+    }
+
+    
+    @Test
     public void testFormHtmlExporters () {
         Response responsehtml = target("/export").request(MediaType.TEXT_HTML)
                 .get();
