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 fcd3ef8..4e574d8 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
@@ -47,6 +47,7 @@
 import java.util.concurrent.TimeUnit;
 import javax.ws.rs.client.WebTarget;
 import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.ConcurrentLinkedQueue;
 
 import org.glassfish.jersey.server.ResourceConfig;
 import org.glassfish.jersey.test.JerseyTest;
@@ -789,9 +790,7 @@
     @Test
     public void testExportWsProgressError () throws InterruptedException {
 
-        // TODO:
-        //   Make this threadsafe
-        final LinkedList<String> events = new LinkedList<>();
+        final ConcurrentLinkedQueue<String> events = new ConcurrentLinkedQueue<>();
         // final int eventCount = 3;
 
         // Expect messages:
@@ -820,10 +819,10 @@
         Thread.sleep(2000);
 
         // Check error
-        assertEquals(events.getFirst(), "Process:init");
-        assertEquals(events.get(1), "Error:HTTP 400 Bad Request");
-        assertEquals(events.getLast(), "Process:done");
-        assertEquals(events.size(), 3);
+        assertEquals(events.poll(), "Process:init");
+        assertEquals(events.poll(), "Error:HTTP 400 Bad Request");
+        assertEquals(events.poll(), "Process:done");
+        assertTrue(events.isEmpty());
         eventSource.close();
     };
 
@@ -864,8 +863,8 @@
         // https://github.com/jersey/jersey/blob/master/examples/
         //   server-sent-events-jersey/src/test/java/org/glassfish/
         //   jersey/examples/sse/jersey/ServerSentEventsTest.java
+        final ConcurrentLinkedQueue<String> events = new ConcurrentLinkedQueue<>();
 
-        final LinkedList<String> events = new LinkedList<>();
 
         // Create SSE client
         Client client = ClientBuilder
@@ -891,17 +890,22 @@
         Thread.sleep(3000);
 
         // Check error
-        assertEquals(events.getFirst(), "Process:init");
-        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);
+        assertEquals(events.poll(), "Process:init");
+        assertTrue(events.contains("Progress:0"));
+        assertTrue(events.contains("Progress:56"));
+        events.poll();
+        events.poll();
+        assertTrue(events.peek().startsWith("Relocate:"));
+        assertTrue(events.peek().contains(";"));
+
+        String rel = events.poll();
+
+        assertEquals(events.poll(), "Process:done");
+        assertTrue(events.isEmpty());
         eventSource.close();
 
         // Now fetch the file!
-        String[] splits = events.get(3).substring(9).split(";");
+        String[] splits = rel.substring(9).split(";");
         String fileLoc = splits[0];        
         String filename = splits[1];
         Response response = target("/export/" + fileLoc).queryParam("fname", filename).request().get();
