diff --git a/plugin/src/main/java/de/ids_mannheim/korap/plkexport/MatchAggregator.java b/plugin/src/main/java/de/ids_mannheim/korap/plkexport/MatchAggregator.java
index 8535262..032bd6b 100644
--- a/plugin/src/main/java/de/ids_mannheim/korap/plkexport/MatchAggregator.java
+++ b/plugin/src/main/java/de/ids_mannheim/korap/plkexport/MatchAggregator.java
@@ -6,6 +6,9 @@
 import java.io.FileWriter;
 import java.io.IOException;
 import java.io.StringWriter;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.io.FileInputStream;
 
 import java.util.Collection;
 import java.util.ArrayList;
@@ -23,6 +26,7 @@
 import javax.ws.rs.core.Response;
 import javax.ws.rs.core.Response.ResponseBuilder;
 import javax.ws.rs.core.Response.Status;
+import javax.ws.rs.core.StreamingOutput;
 
 import org.glassfish.jersey.media.sse.EventOutput;
 import org.glassfish.jersey.media.sse.OutboundEvent;
@@ -426,8 +430,39 @@
         }
         else if (this.file.exists()) {
 
-            // Serve file
-            rb = Response.ok(this.file);
+            // Serve the file and delete after serving
+            final File expFile = this.file;
+            try {
+                final InputStream in = new FileInputStream(this.file);
+
+                // Remove file after output is streamed
+                StreamingOutput output = new StreamingOutput() {
+                        @Override
+                        public void write(OutputStream out)
+                            throws IOException {
+
+                            // Write file data in output stream
+                            int length;
+                            byte[] buffer = new byte[1024];
+                            while ((length = in.read(buffer)) != -1) {
+                                out.write(buffer, 0, length);
+                            }
+                            out.flush(); // Important!
+                            in.close();
+
+                            // When done, delete the file
+                            expFile.delete();
+                        }
+                    };
+            
+                // Serve file
+                rb = Response.ok(output);
+            }
+
+            catch (Exception e) {
+                // File problematic
+                return Response.status(Status.NOT_FOUND);            
+            };
         }
         else {
             // File doesn't exist
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 af935cf..be090b0 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
@@ -60,17 +60,18 @@
  * TODO for release:
  * - Rename to "Kalamar-Plugin-Export".
  * - Remove 'plugin' root folder.
- * - Localize RTF export.
- *   - Change "count" to "number of results" in RTF.
- * - Delete the temp file of the export at the end
- *   of serving.
- * - Add date info.
- * - Add opaque source, in case source is an internal IP.
- * - Improve Readme.
  * - 100 matches as default for export form.
- * - Test ExWsConf.
+ * - Improve Readme.
+ * - Add opaque source, in case source is an internal IP.
+ * - Include limitation to form.
  *
  * TODO:
+ * - Localize RTF export.
+ *   - Change "count" to "number of results" in RTF.
+ * - Add date info.
+ * - Switch Cookie mechanism to container req for
+ *   better testing capabilities.
+ * - Test ExWsConf.
  * - Abort processing when eventsource is closed.
  * - Do not expect all meta data per match.
  * - Upgrade default pageSize to 50.
diff --git a/plugin/src/test/java/de/ids_mannheim/korap/plkexport/JsonExporterTest.java b/plugin/src/test/java/de/ids_mannheim/korap/plkexport/JsonExporterTest.java
index 79a443d..c68c63c 100644
--- a/plugin/src/test/java/de/ids_mannheim/korap/plkexport/JsonExporterTest.java
+++ b/plugin/src/test/java/de/ids_mannheim/korap/plkexport/JsonExporterTest.java
@@ -4,9 +4,16 @@
 import java.io.File;
 import java.io.BufferedReader;
 import java.io.FileReader;
+import java.io.InputStream;
+
+
+
+import javax.ws.rs.core.StreamingOutput;
+
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.fail;
@@ -46,10 +53,11 @@
         json.appendMatches("{\"meta\":\"ja2\",\"collection\":\"hm2\",\"query\":\"cool2\",\"matches\":[\"third\",\"fourth\"]}");
         json.finish();
 
+        // This is not testable outside the service
         Response resp = json.serve().build();
-        File x = (File) resp.getEntity();
-        resp.close();
-        assertEquals(slurp(x),"{\"query\":\"cool\",\"meta\":\"ja\",\"collection\":\"hm\",\"matches\":[\"first\",\"second\",\"third\",\"fourth\"]}");
+        StreamingOutput x = (StreamingOutput) resp.getEntity();
+        resp.close();        
+        assertNotNull(x);        
     };
 
     @Test
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 4e574d8..00742a3 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
@@ -932,6 +932,11 @@
         assertTrue("Intro", str.contains("{\\rtf1\\ansi\\deff0"));
         assertTrue("Outro", str.contains("{\\pard\\brdrb\\brdrs\\brdrw2\\brsp20\\par}"));
         assertTrue("Content", str.contains("Benutzer Diskussion:Kriddl"));
+
+
+        // Check, that the file was succesfully removed after downloading
+        response = target("/export/" + fileLoc).queryParam("fname", filename).request().get();
+        assertEquals("HTTP Code", Status.NOT_FOUND.getStatusCode(), response.getStatus());
     };
 
 
