diff --git a/Changes b/Changes
index cd9bc03..4a9fcdd 100644
--- a/Changes
+++ b/Changes
@@ -1,6 +1,7 @@
 0.2.4 2021-04-27
     - Fix temporary session-riding capabilities.
     - Introduced central tinylog.
+    - Fix nullpointer in RTF export.
 
 0.2.3 2021-03-24
     - Added trail info to RTF export.
\ No newline at end of file
diff --git a/src/main/java/de/ids_mannheim/korap/plkexport/RtfExporter.java b/src/main/java/de/ids_mannheim/korap/plkexport/RtfExporter.java
index 81faa82..8422ca7 100644
--- a/src/main/java/de/ids_mannheim/korap/plkexport/RtfExporter.java
+++ b/src/main/java/de/ids_mannheim/korap/plkexport/RtfExporter.java
@@ -117,34 +117,42 @@
 
             w.append("\\line ");
 
-            // Snippet
-            w.append("{\\pard\\fs20\\f0\\qj ");
-            if (s.hasMoreLeft()) {
-                w.append("[...] ");
+            if (s != null) {
+
+                // Snippet
+                w.append("{\\pard\\fs20\\f0\\qj ");
+                if (s.hasMoreLeft()) {
+                    w.append("[...] ");
+                };
+                rtfText(w, s.getLeft());
+                w.append("{\\b ");
+                rtfText(w, s.getMark());
+                if (s.isCutted()) {
+                    w.append(" [!]");
+                };
+                w.append("}");
+                rtfText(w, s.getRight());
+                if (s.hasMoreRight()) {
+                    w.append(" [...]");
+                };
+                w.append("\\par}");
             };
-            rtfText(w, s.getLeft());
-            w.append("{\\b ");
-            rtfText(w, s.getMark());
-            if (s.isCutted()) {
-                w.append(" [!]");
-            };
-            w.append("}");
-            rtfText(w, s.getRight());
-            if (s.hasMoreRight()) {
-                w.append(" [...]");
-            };
-            w.append("\\par}");
 
             // Reference
             w.append("{\\pard");
             w.append("\\qr\\fs18\\cf2\\f0 ");
             w.append("{\\b ");
             rtfText(w, match.getTitle());
-            w.append(" von ");
-            rtfText(w, match.getAuthor());
-            w.append(" (");
-            rtfText(w, match.getPubDate());
-            w.append(")}");
+            if (match.getAuthor() != null) {
+                w.append(" von ");
+                rtfText(w, match.getAuthor());
+            };
+            if (match.getPubDate() != null) {
+                w.append(" (");
+                rtfText(w, match.getPubDate());
+                w.append(")");
+            };
+            w.append("}");
             w.append("\\par}");
 
             // TextSigle
@@ -264,6 +272,9 @@
      * Based on jrtf by Christian Ullenboom
      */
     private static void rtfText(Writer w, String rawText) throws IOException {
+        if (rawText == null)
+            return;
+
         char c;
         for (int i = 0; i < rawText.length(); i++) {
             c = rawText.charAt( i ); 
diff --git a/src/test/java/de/ids_mannheim/korap/plkexport/RtfExporterTest.java b/src/test/java/de/ids_mannheim/korap/plkexport/RtfExporterTest.java
index aa96c33..e4c5f46 100644
--- a/src/test/java/de/ids_mannheim/korap/plkexport/RtfExporterTest.java
+++ b/src/test/java/de/ids_mannheim/korap/plkexport/RtfExporterTest.java
@@ -96,6 +96,39 @@
     };
 
     @Test
+    public void testRtfText () throws IOException {
+        RtfExporter rtf = new RtfExporter();
+        rtf.init("{\"matches\":[{\"author\":\"Goethe\"}]}");
+        rtf.finish();
+
+        Response resp = rtf.serve().build();
+        String x = (String) resp.getEntity();
+        resp.close();
+
+        assertTrue(x.contains("{\\pard\\fs18\\f0"));
+
+        rtf = new RtfExporter();
+        rtf.init("{\"matches\":[{\"author\":\"\"}]}");
+        rtf.finish();
+
+        resp = rtf.serve().build();
+        x = (String) resp.getEntity();
+        resp.close();
+
+        assertTrue(x.contains("{\\pard\\fs18\\f0"));
+
+        rtf = new RtfExporter();
+        rtf.init("{\"versuch\":\"try\"}");
+        rtf.finish();
+
+        resp = rtf.serve().build();
+        x = (String) resp.getEntity();
+        resp.close();
+
+        assertTrue(x.contains("{\\pard\\fs18\\f0"));
+};
+
+    @Test
     public void testTrail () throws IOException {
 
         Properties properties = ExWSConf.properties(null);
