diff --git a/plugin/src/main/java/de/ids_mannheim/korap/plkexport/Exporter.java b/plugin/src/main/java/de/ids_mannheim/korap/plkexport/Exporter.java
index a54460f..72e4b0e 100644
--- a/plugin/src/main/java/de/ids_mannheim/korap/plkexport/Exporter.java
+++ b/plugin/src/main/java/de/ids_mannheim/korap/plkexport/Exporter.java
@@ -22,6 +22,9 @@
     public void setQueryString (String s);
     public String getCorpusQueryString ();
     public void setCorpusQueryString (String s);
+    public String getSource ();
+    public void setSource (String h, String p);
+
     public int getTotalResults ();
     public boolean hasTimeExceeded ();
     public void setMaxResults (int m);
diff --git a/plugin/src/main/java/de/ids_mannheim/korap/plkexport/IdsExportService.java b/plugin/src/main/java/de/ids_mannheim/korap/plkexport/IdsExportService.java
index c36bb7c..b9370aa 100644
--- a/plugin/src/main/java/de/ids_mannheim/korap/plkexport/IdsExportService.java
+++ b/plugin/src/main/java/de/ids_mannheim/korap/plkexport/IdsExportService.java
@@ -219,6 +219,7 @@
         exp.setMaxResults(maxResults);
         exp.setQueryString(q);
         exp.setCorpusQueryString(cq);
+        exp.setSource(host, path);
        
         // set filename based on query (if not already set)
         if (fname != null) {
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 e19bd98..c7b447f 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
@@ -41,7 +41,7 @@
     private File file;
     
     private JsonNode meta, query, collection;
-    private String fname, queryString, corpusQueryString;
+    private String fname, queryString, corpusQueryString, src;
     private boolean timeExceeded = false;
     private int totalResults = -1;
     private int maxResults = -1;
@@ -91,6 +91,21 @@
     public String getCorpusQueryString () {
         return this.corpusQueryString;
     };
+
+    public void setSource (String host, String path) {
+        StringBuilder s = new StringBuilder(32);
+        if (host != null)
+            s.append(host);
+
+        if (path != null && path.length() > 0)
+            s.append('/').append(path);
+
+        this.src = s.toString();
+    };
+
+    public String getSource () {
+        return this.src;
+    };
     
     public void setMeta (JsonNode meta) {
         this.meta = meta;
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 52e7114..d47a32d 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
@@ -175,6 +175,10 @@
             this.addInfoRow(w, "Fetched", this.getMaxResults());
         };
 
+        if (this.getSource() != null) {
+            this.addInfoRow(w, "Source", this.getSource());
+        };
+
         this.addInfoRow(w, "Export-Plugin", this.getVersion().toString());
     };
 
diff --git a/plugin/src/test/java/de/ids_mannheim/korap/plkexport/IdsExportServiceTest.java b/plugin/src/test/java/de/ids_mannheim/korap/plkexport/IdsExportServiceTest.java
index c3391a6..d316c9a 100644
--- a/plugin/src/test/java/de/ids_mannheim/korap/plkexport/IdsExportServiceTest.java
+++ b/plugin/src/test/java/de/ids_mannheim/korap/plkexport/IdsExportServiceTest.java
@@ -56,7 +56,9 @@
     private static ClientAndServer mockServer;
 	private static MockServerClient mockClient;
     private ObjectMapper mapper = new ObjectMapper();
-            
+
+    private static final String CELLSPLIT = "\\cell\\cf0\\fs18\\b0\\f1 ";
+
     @BeforeClass
     public static void startServer() {
         // Define logging rules for Mock-Server
@@ -509,13 +511,13 @@
                 Status.OK.getStatusCode(), responsertf.getStatus());
 
         str = responsertf.readEntity(String.class);
+        System.err.println(str);
         assertTrue("Page 1 content", str.contains("Ironhoof"));
         assertTrue("Page 2 content", str.contains("Sinologie"));
         assertTrue("Unicode handling", str.contains("\\u252\\'fcbersetzt"));
-        assertTrue("TotalResults1", str.contains("Count:"));
-        assertTrue("TotalResults2", str.contains("9\\cell"));
-        assertTrue("Fetched1", str.contains("Fetched:"));
-        assertTrue("Fetched2", str.contains("7\\cell"));
+        assertTrue("TotalResults", str.contains("Count:" + CELLSPLIT + "9\\cell"));
+        assertTrue("Fetched", str.contains("Fetched:" + CELLSPLIT + "7\\cell"));
+        assertTrue("Source", str.contains("Source:" + CELLSPLIT + "localhost\\cell"));
     }
 
     
diff --git a/plugin/src/test/java/de/ids_mannheim/korap/plkexport/MatchAggregatorTest.java b/plugin/src/test/java/de/ids_mannheim/korap/plkexport/MatchAggregatorTest.java
index dd97f18..52a8f71 100644
--- a/plugin/src/test/java/de/ids_mannheim/korap/plkexport/MatchAggregatorTest.java
+++ b/plugin/src/test/java/de/ids_mannheim/korap/plkexport/MatchAggregatorTest.java
@@ -101,4 +101,21 @@
         m.setFileName("Beispiel");
         assertEquals(m.getFileName(),"Beispiel");
     };
+
+    @Test
+    public void testSource () throws IOException {
+        MatchAggregator m = new MatchAggregator();
+        assertNull(m.getSource());
+        m.setSource("localhost","");
+        assertEquals(m.getSource(),"localhost");
+        m.setSource("localhost",null);
+        assertEquals(m.getSource(),"localhost");
+        m.setSource("localhost","path");
+        assertEquals(m.getSource(),"localhost/path");
+        m.setSource("","path");
+        assertEquals(m.getSource(),"/path");
+        m.setSource(null,"path");
+        assertEquals(m.getSource(),"/path");
+    };
+
 };
diff --git a/plugin/src/test/java/de/ids_mannheim/korap/plkexport/RtfExportTest.java b/plugin/src/test/java/de/ids_mannheim/korap/plkexport/RtfExportTest.java
index 799ff6c..359b8ca 100644
--- a/plugin/src/test/java/de/ids_mannheim/korap/plkexport/RtfExportTest.java
+++ b/plugin/src/test/java/de/ids_mannheim/korap/plkexport/RtfExportTest.java
@@ -14,7 +14,7 @@
 import de.ids_mannheim.korap.plkexport.JsonExporter;
 
 public class RtfExportTest {
-
+    
     @Test
     public void testInit () throws IOException {
         RtfExporter rtf = new RtfExporter();
