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 2346d43..ca924e1 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
@@ -40,8 +40,6 @@
 
     private ObjectMapper mapper = new ObjectMapper();
 
-    private LinkedList<JsonNode> matches;
-
     private Writer writer;
 
     private File file;
@@ -268,10 +266,6 @@
      */
     public boolean init (String resp) throws IOException, JsonParseException {
 
-        this.file = null;
-
-        matches = new LinkedList();
-
         if (resp == null)
             return false;
 
@@ -295,7 +289,12 @@
             };
         };
 
-        writer = new StringWriter();
+        // In case the writer is already set (e.g. forceFile() was issued),
+        // write in the header
+        if (writer == null) {
+            this.file = null;
+            writer = new StringWriter();
+        };
 
         this.writeHeader(writer);
 
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 df3e53c..59f6807 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
@@ -383,9 +383,11 @@
 
                         if (eventOutput.isClosed())
                             return;
+                        
                         eventBuilder.name("Relocate");
-                        eventBuilder.data(exp.getExportID());
+                        eventBuilder.data(exp.getExportID() + ";" + exp.getFileName());
                         eventOutput.write(eventBuilder.build());
+                        
                     } catch (Exception e) {
                         try {
                             if (eventOutput.isClosed())
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 6bbcc00..594df85 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
@@ -892,14 +892,15 @@
         assertEquals(events.get(1), "Progress:0");
         assertEquals(events.get(2), "Progress:56");
         assertTrue(events.get(3).startsWith("Relocate:"));
+        assertTrue(events.get(3).contains(";"));
         assertEquals(events.getLast(), "Process:done");
         assertEquals(events.size(), 5);
         eventSource.close();
 
         // Now fetch the file!
-        String fileLoc = events.get(3).substring(9);
-        
-        String filename = "ExampleHui";
+        String[] splits = events.get(3).substring(9).split(";");
+        String fileLoc = splits[0];        
+        String filename = splits[1];
         Response response = target("/export/" + fileLoc).queryParam("fname", filename).request().get();
 
         String str = response.readEntity(String.class);
@@ -928,6 +929,60 @@
 
 
     @Test
+    public void testExportWsProgressSinglePage () throws InterruptedException {
+        mockClient.reset().when(
+            request()
+            .withMethod("GET")
+            .withPath("/api/v1.0/search")
+            )
+            .respond(
+                response()
+                .withHeader("Content-Type: application/json; charset=utf-8")
+                .withBody(getFixture("response_water.json"))
+                .withStatusCode(200)
+                );
+
+        final LinkedList<String> events = new LinkedList<>();
+
+        // Create SSE client
+        Client client = ClientBuilder
+            .newBuilder()
+            .register(SseFeature.class)
+            .build();
+
+        EventSource eventSource = EventSource
+            .target(target("/export")
+                    .queryParam("q", "Wasser")
+                    .queryParam("ql","poliqarp")
+                    .queryParam("hitc","1")
+                    .queryParam("format","json"))
+            .reconnectingEvery(300, TimeUnit.SECONDS)
+            .build();
+
+        EventListener listener = inboundEvent -> {
+            events.add(inboundEvent.getName() + ":" + inboundEvent.readData(String.class));
+        };
+
+        eventSource.register(listener);
+        eventSource.open();
+
+        Thread.sleep(3000);
+
+        // Check error
+        assertEquals(events.getFirst(), "Process:init");
+        assertEquals(events.get(1), "Progress:0");
+        assertTrue(events.get(2).startsWith("Relocate:"));       
+        assertEquals(events.getLast(), "Process:done");
+        assertEquals(events.size(), 4);
+        eventSource.close();
+
+        String fileLoc = events.get(2).substring(9);
+        assertTrue(fileLoc.length() > 5);
+        assertTrue(fileLoc.contains(";"));
+    };
+    
+
+    @Test
     public void testFileServingError () {
         String fileLoc = "hjGHJghjgHJGhjghj";
         Response response = target("/export/" + fileLoc).request().get();
