diff --git a/README.md b/README.md
index 8816a7f..282a730 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,6 @@
 # KalamarExportPlugin
 
-#Setup
+## Setup
 
 The jar file is located in the ```target/``` folder
 
diff --git a/plugin/src/main/java/de/ids_mannheim/korap/plkexport/ExWSConf.java b/plugin/src/main/java/de/ids_mannheim/korap/plkexport/ExWSConf.java
index 3bd8e03..dc30d54 100644
--- a/plugin/src/main/java/de/ids_mannheim/korap/plkexport/ExWSConf.java
+++ b/plugin/src/main/java/de/ids_mannheim/korap/plkexport/ExWSConf.java
@@ -8,11 +8,15 @@
  */
 package de.ids_mannheim.korap.plkexport;
 
+import java.io.*;
+import java.lang.String;
+import java.util.Properties;
+
 public class ExWSConf {
     /*
      * maximum hits to be exported
      * TODO: Define this constants after discussing it. 
-     * Maybe we need an distinction between user at the IDS and external user
+     * Maybe we need a distinction between users at the IDS and external users
      * See also: https://www.ids-mannheim.de/cosmas2/script-app/hilfe/sitzung.html
      */
     public static final int MAX_EXP_LIMIT = 10000;
@@ -21,4 +25,43 @@
     public static final int VERSION_MAJOR = 0;
     public static final int VERSION_MINOR = 1;
     public static final int VERSION_PATCHLEVEL= 0;
+
+    private static Properties prop;
+
+    // Load properties from file
+    public static Properties properties (String propFile) {
+
+        if (prop != null)
+            return prop;
+
+        if (propFile == null)
+            propFile = "exportPlugin.conf";
+
+        InputStream iFile;
+        try {
+            iFile = new FileInputStream(propFile);
+            prop = new Properties();
+            prop.load(iFile);
+        }
+        catch (IOException t) {
+            try {
+                iFile = ExWSConf.class.getClassLoader()
+                    .getResourceAsStream(propFile);
+
+                if (iFile == null) {
+                    System.err.println("Unable to load properties.");
+                    return null;
+                };
+
+                prop = new Properties();
+                prop.load(iFile);
+                iFile.close();
+            }
+            catch (IOException e) {
+                System.err.println(e.getLocalizedMessage());
+                return null;
+            };
+        };
+        return prop;
+    };
 }
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 b02a1e4..d053fc9 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
@@ -6,6 +6,7 @@
 import java.util.Collection;
 import java.util.Iterator;
 import java.util.LinkedList;
+import java.util.Properties;
 
 import javax.ws.rs.BadRequestException;
 import javax.ws.rs.FormParam;
@@ -34,6 +35,8 @@
 @Path("/")
 public class IdsExportService {
 
+    Properties properties = ExWSConf.properties(null);
+    
     /**
      * WebService calls Kustvakt Search Webservices and returns
      * response as json(all of the response) and
@@ -74,8 +77,10 @@
         ResponseBuilder builder;
         Client client = ClientBuilder.newClient();
 
-
-        String url = "http://localhost:8089/api/v1.0/search?context=sentence"
+        String port = properties.getProperty("api.port", "8089");
+        String host = properties.getProperty("api.host", "localhost");
+        
+        String url = "http://" + host + ":" + port + "/api/v1.0/search?context=sentence"
                 + "&q=" + URLEncoder.encode(q, "UTF-8") + "&ql=" + ql;
 
         if (il != null) {
@@ -85,6 +90,7 @@
         else {
             url = url + "&cutoff=1" + "&count=" + ExWSConf.MAX_EXP_LIMIT;
         }
+
         WebTarget resource = client.target(url);
         String resp = resource.request(MediaType.APPLICATION_JSON)
                 .get(String.class);
diff --git a/plugin/src/main/java/de/ids_mannheim/korap/plkexport/PluginServer.java b/plugin/src/main/java/de/ids_mannheim/korap/plkexport/PluginServer.java
index 1d09d8a..2815125 100644
--- a/plugin/src/main/java/de/ids_mannheim/korap/plkexport/PluginServer.java
+++ b/plugin/src/main/java/de/ids_mannheim/korap/plkexport/PluginServer.java
@@ -1,8 +1,6 @@
 package de.ids_mannheim.korap.plkexport;
 
 import java.io.File;
-import java.io.FileInputStream;
-import java.io.InputStream;
 import java.util.Properties;
 
 import org.eclipse.jetty.server.Handler;
@@ -20,26 +18,10 @@
 
 
         ServletContextHandler contextHandler = new ServletContextHandler(
-                ServletContextHandler.NO_SESSIONS);
+            ServletContextHandler.NO_SESSIONS);
         contextHandler.setContextPath("/");
 
-        Properties properties = new Properties();
-        File f = new File("exportPlugin.conf");
-        InputStream in = null;
-        
-        if (!f.exists()) {
-            String rootPath = Thread.currentThread().getContextClassLoader()
-                    .getResource("").getPath();
-            String appConfigPath = rootPath + "exportPlugin.conf";
-            in = new FileInputStream(appConfigPath);
-        }
-        else {
-            in = new FileInputStream(f);
-        }
-   
-        
-        properties.load(in);
-        in.close();
+        Properties properties = ExWSConf.properties(null);
         
         //Default: Server is available under http://localhost:7070/
         String portStr = properties.getProperty("server.port", "7070");
diff --git a/plugin/src/main/resources/exportPlugin.conf b/plugin/src/main/resources/exportPlugin.conf
index c9d18db..f2d907c 100644
--- a/plugin/src/main/resources/exportPlugin.conf
+++ b/plugin/src/main/resources/exportPlugin.conf
@@ -3,3 +3,6 @@
 #Server Configuration
 server.port=7777
 server.host=localhost
+
+api.port=80
+api.host=korap.ids-mannheim.de
\ No newline at end of file
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 57c1d91..698c3dd 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
@@ -6,6 +6,7 @@
 import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
+import java.util.Properties;
 
 import javax.ws.rs.client.Entity;
 import javax.ws.rs.core.Application;
@@ -20,6 +21,7 @@
 import org.junit.Test;
 
 import de.ids_mannheim.korap.plkexport.IdsExportService;
+import de.ids_mannheim.korap.plkexport.ExWSConf;
 
 /*
  * TODO Find a way to test efficiently the starting of the PluginServer with host and port of the config-file
@@ -52,6 +54,10 @@
 
         String message;
 
+        Properties properties = ExWSConf.properties(null);
+        properties.setProperty("api.host", "localhost");
+        properties.setProperty("api.port", "8089");
+
         Response responsejson = target("/export").request()
                 .post(Entity.form(frmap));
         assertEquals("Request JSON: Http Response should be 200: ",
