diff --git a/plugin/src/main/java/de/ids_mannheim/korap/plkexport/ExWSConf.java b/plugin/src/main/java/de/ids_mannheim/korap/plkexport/ExWSConf.java
index 10c9030..333ed60 100644
--- a/plugin/src/main/java/de/ids_mannheim/korap/plkexport/ExWSConf.java
+++ b/plugin/src/main/java/de/ids_mannheim/korap/plkexport/ExWSConf.java
@@ -11,6 +11,7 @@
 import java.io.*;
 import java.lang.String;
 import java.util.Properties;
+import java.nio.charset.StandardCharsets;
 
 public class ExWSConf {
 
@@ -32,9 +33,14 @@
 
         InputStream iFile;
         try {
-            iFile = new FileInputStream(propFile);
+
+            iFile = new FileInputStream(propFile);            
             prop = new Properties();
-            prop.load(iFile);
+            prop.load(
+                new BufferedReader(
+                    new InputStreamReader(iFile, "UTF-8")
+                    )
+                );
         }
         catch (IOException t) {
             try {
diff --git a/plugin/src/main/java/de/ids_mannheim/korap/plkexport/RtfExporter.java b/plugin/src/main/java/de/ids_mannheim/korap/plkexport/RtfExporter.java
index 3c663b2..60b18ba 100644
--- a/plugin/src/main/java/de/ids_mannheim/korap/plkexport/RtfExporter.java
+++ b/plugin/src/main/java/de/ids_mannheim/korap/plkexport/RtfExporter.java
@@ -1,8 +1,10 @@
 package de.ids_mannheim.korap.plkexport;
 
-import java.lang.StringBuffer;
-import java.nio.charset.*;
+import java.util.Properties;
 
+import java.lang.StringBuffer;
+
+import java.nio.charset.*;
 import java.nio.ByteBuffer;
 import java.nio.CharBuffer;
 import static java.nio.charset.CodingErrorAction.REPORT;
@@ -15,11 +17,15 @@
 import java.io.IOException;
 import java.io.Writer;
 
+import de.ids_mannheim.korap.plkexport.Util.*;
+
 /**
  * Streaming RTF exporter.
  */
 public class RtfExporter extends MatchAggregator implements Exporter {
 
+    private Properties prop = ExWSConf.properties(null);
+    
     // Horizontal line
     private static final String HLINE =
         "{\\pard\\brdrb\\brdrs\\brdrw2\\brsp20\\par}\n";
@@ -48,6 +54,9 @@
     
     @Override
     public void writeHeader (Writer w) throws IOException {
+
+        String footnote = Util.convertFromUTF8(prop.getProperty("rtf.footnote"));
+        
         w.append("{")
             .append("\\rtf1\\ansi\\deff0\n")
 
@@ -59,8 +68,13 @@
 
         // Footer on every page, containing the page number
         w.append("{\\footer\\pard\\qr\\fs18\\f0 ");
-        rtfText(w, "@ Institut für Deutsche Sprache, Mannheim");
-        w.append(" \\endash  \\chpgn /{\\field{\\*\\fldinst{\\fs18\\f0 NUMPAGES}}}");
+
+        if (footnote != null && footnote.length() > 0) {
+            rtfText(w, footnote);
+            w.append(" \\endash  ");
+        };
+
+        w.append("\\chpgn /{\\field{\\*\\fldinst{\\fs18\\f0 NUMPAGES}}}");
         w.append("\\par}\n");
 
         // Title
diff --git a/plugin/src/main/java/de/ids_mannheim/korap/plkexport/Service.java b/plugin/src/main/java/de/ids_mannheim/korap/plkexport/Service.java
index fc09678..972fb12 100644
--- a/plugin/src/main/java/de/ids_mannheim/korap/plkexport/Service.java
+++ b/plugin/src/main/java/de/ids_mannheim/korap/plkexport/Service.java
@@ -64,7 +64,6 @@
  *   of serving.
  * - Add date info.
  * - Add opaque source, in case source is an internal IP.
- * - Change to "Leibniz-Institut" in Copyright notice.
  * - Improve Readme.
  * - 100 matches as default for export form.
  * - Test ExWsConf.
diff --git a/plugin/src/main/java/de/ids_mannheim/korap/plkexport/Util.java b/plugin/src/main/java/de/ids_mannheim/korap/plkexport/Util.java
index 169615d..3df2fff 100644
--- a/plugin/src/main/java/de/ids_mannheim/korap/plkexport/Util.java
+++ b/plugin/src/main/java/de/ids_mannheim/korap/plkexport/Util.java
@@ -43,4 +43,34 @@
 
 		return sb.toString();
 	};
+
+    /**
+     * Convert string to utf8
+     */
+    public static String convertToUTF8(String s) {
+        if (s == null)
+            return null;
+        String out = null;
+        try {
+            out = new String(s.getBytes("UTF-8"), "ISO-8859-1");
+        } catch (java.io.UnsupportedEncodingException e) {
+            return null;
+        }
+        return out;
+    };
+
+    /**
+     * Convert string from utf8
+     */
+    public static String convertFromUTF8(String s) {
+        if (s == null)
+            return null;
+        String out = null;
+        try {
+            out = new String(s.getBytes("Windows-1252"), "UTF-8");
+        } catch (java.io.UnsupportedEncodingException e) {
+            return null;
+        }
+        return out;
+    };
 };
diff --git a/plugin/src/main/resources/exportPlugin.conf b/plugin/src/main/resources/exportPlugin.conf
index 0915b6b..ba388ea 100644
--- a/plugin/src/main/resources/exportPlugin.conf
+++ b/plugin/src/main/resources/exportPlugin.conf
@@ -25,4 +25,10 @@
 
 # The file directory to serve from
 # conf.file_dir=./files/
-# Defaults to the system's temp directory
\ No newline at end of file
+# Defaults to the system's temp directory
+
+#####################
+# RTF configuration #
+#####################
+
+rtf.footnote = @ Leibniz-Institut für Deutsche Sprache, Mannheim
\ No newline at end of file
diff --git a/plugin/src/test/java/de/ids_mannheim/korap/plkexport/RtfExporterTest.java b/plugin/src/test/java/de/ids_mannheim/korap/plkexport/RtfExporterTest.java
index 311d479..6a67950 100644
--- a/plugin/src/test/java/de/ids_mannheim/korap/plkexport/RtfExporterTest.java
+++ b/plugin/src/test/java/de/ids_mannheim/korap/plkexport/RtfExporterTest.java
@@ -22,7 +22,8 @@
         Response resp = rtf.serve().build();
         String x = (String) resp.getEntity();
         resp.close();
-        assertTrue(x.contains("\\footer\\pard\\qr\\fs18\\f0 @ Institut"));
+
+        assertTrue(x.contains("\\footer\\pard\\qr\\fs18\\f0 @ Leibniz-Institut"));
         assertTrue(x.contains("Institut f\\u252\\'fcr Deutsche"));
     };
 
diff --git a/plugin/src/test/java/de/ids_mannheim/korap/plkexport/ServiceTest.java b/plugin/src/test/java/de/ids_mannheim/korap/plkexport/ServiceTest.java
index 594df85..fcd3ef8 100644
--- a/plugin/src/test/java/de/ids_mannheim/korap/plkexport/ServiceTest.java
+++ b/plugin/src/test/java/de/ids_mannheim/korap/plkexport/ServiceTest.java
@@ -61,6 +61,9 @@
 
 import static de.ids_mannheim.korap.plkexport.Service.getClientIP;
 
+import de.ids_mannheim.korap.plkexport.Util.*;
+
+
 public class ServiceTest extends JerseyTest {
 
     private static ClientAndServer mockServer;
@@ -1003,17 +1006,6 @@
     };
 
 
-    // Convert string to utf8
-    private static String convertToUTF8(String s) {
-        String out = null;
-        try {
-            out = new String(s.getBytes("UTF-8"), "ISO-8859-1");
-        } catch (java.io.UnsupportedEncodingException e) {
-            return null;
-        }
-        return out;
-    }
-
     // Get fixture from ressources utf8 encoded
     private String getFixture (String file) {
         return getFixture(file, false);
@@ -1029,7 +1021,7 @@
         if (raw) {
             return getFileString(filepath);
         };
-        return convertToUTF8(getFileString(filepath));
+        return Util.convertToUTF8(getFileString(filepath));
     };
         
 
