diff --git a/Changes b/Changes
index a34b4b2..3eb7fa4 100644
--- a/Changes
+++ b/Changes
@@ -5,6 +5,9 @@
 - Moved service.properties to src/main/resources/properties 
 - Moved free-resources.json to src/main/resources/json
 - Enables inputting free-resources.json from data folder
+- Changed loading external kustvakt.conf and jdbc.properties 
+  to use /data folder (#598)
+
 
 
 # version 0.73
diff --git a/src/main/java/de/ids_mannheim/korap/server/KustvaktBaseServer.java b/src/main/java/de/ids_mannheim/korap/server/KustvaktBaseServer.java
index d13517c..9ad1334 100644
--- a/src/main/java/de/ids_mannheim/korap/server/KustvaktBaseServer.java
+++ b/src/main/java/de/ids_mannheim/korap/server/KustvaktBaseServer.java
@@ -1,13 +1,18 @@
 package de.ids_mannheim.korap.server;
 
 import java.io.File;
+import java.io.FileInputStream;
 import java.io.FileOutputStream;
 import java.io.IOException;
+import java.io.InputStream;
 import java.io.OutputStreamWriter;
 import java.nio.charset.StandardCharsets;
 import java.security.NoSuchAlgorithmException;
+import java.util.Properties;
 import java.util.Scanner;
 
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 import org.eclipse.jetty.server.Connector;
 import org.eclipse.jetty.server.HttpConnectionFactory;
 import org.eclipse.jetty.server.Server;
@@ -22,17 +27,20 @@
 import org.springframework.web.context.support.XmlWebApplicationContext;
 
 import de.ids_mannheim.korap.config.KustvaktConfiguration;
+import de.ids_mannheim.korap.dao.AnnotationDao;
 import de.ids_mannheim.korap.encryption.RandomCodeGenerator;
 import de.ids_mannheim.korap.exceptions.KustvaktException;
 import lombok.Getter;
 import lombok.Setter;
 
 /**
- * @author hanl
- * @date 01/06/2015
+ * @author hanl, margaretha
+ * 
  */
 public abstract class KustvaktBaseServer {
 
+    private Logger log = LogManager.getLogger(KustvaktBaseServer.class);
+    
     protected static KustvaktConfiguration config;
     protected static String springConfig = "default-config.xml";
 
@@ -76,6 +84,28 @@
         return kargs;
     }
 
+    protected void loadProperties (String path, String defaultPath) throws IOException {
+        File f = new File(path);
+        Properties properties = new Properties();
+
+        InputStream in = null;
+        if (!f.exists()) {
+            log.info("Loading kustvakt configuration from "+defaultPath);
+            in = KustvaktServer.class.getClassLoader()
+                    .getResourceAsStream(defaultPath);
+        }
+        else {
+            log.info("Loading kustvakt configuration from "+path);
+            in = new FileInputStream(f);
+        }
+
+        properties.load(in);
+        in.close();
+        
+        config = new KustvaktConfiguration();
+        config.loadBasicProperties(properties);
+    }
+    
     protected void start ()
             throws KustvaktException, IOException, NoSuchAlgorithmException {
 
diff --git a/src/main/java/de/ids_mannheim/korap/server/KustvaktLiteServer.java b/src/main/java/de/ids_mannheim/korap/server/KustvaktLiteServer.java
index d6b1c80..173a424 100644
--- a/src/main/java/de/ids_mannheim/korap/server/KustvaktLiteServer.java
+++ b/src/main/java/de/ids_mannheim/korap/server/KustvaktLiteServer.java
@@ -1,12 +1,5 @@
 package de.ids_mannheim.korap.server;
 
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.InputStream;
-import java.util.Properties;
-
-import de.ids_mannheim.korap.config.KustvaktConfiguration;
-
 public class KustvaktLiteServer extends KustvaktBaseServer {
 
     public static void main (String[] args) throws Exception {
@@ -16,22 +9,7 @@
         if (kargs == null)
             System.exit(0);
 
-        File f = new File("kustvakt-lite.conf");
-        Properties properties = new Properties();
-        InputStream in = null;
-
-        if (!f.exists()) {
-            in = KustvaktLiteServer.class.getClassLoader()
-                    .getResourceAsStream("kustvakt-lite.conf");
-        }
-        else {
-            in = new FileInputStream(f);
-        }
-
-        properties.load(in);
-        in.close();
-        config = new KustvaktConfiguration();
-        config.loadBasicProperties(properties);
+        server.loadProperties("data/kustvakt-lite.conf", "kustvakt-lite.conf");
 
         springConfig = "default-lite-config.xml";
 
diff --git a/src/main/java/de/ids_mannheim/korap/server/KustvaktServer.java b/src/main/java/de/ids_mannheim/korap/server/KustvaktServer.java
index 392190e..2dd0ae9 100644
--- a/src/main/java/de/ids_mannheim/korap/server/KustvaktServer.java
+++ b/src/main/java/de/ids_mannheim/korap/server/KustvaktServer.java
@@ -1,12 +1,5 @@
 package de.ids_mannheim.korap.server;
 
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.InputStream;
-import java.util.Properties;
-
-import de.ids_mannheim.korap.config.FullConfiguration;
-
 /**
  * pu
  * 
@@ -19,27 +12,11 @@
         KustvaktServer server = new KustvaktServer();
         kargs = server.readAttributes(args);
 
-        File f = new File("kustvakt.conf");
-        Properties properties = new Properties();
-
-        InputStream in = null;
-        if (!f.exists()) {
-            in = KustvaktServer.class.getClassLoader()
-                    .getResourceAsStream("kustvakt.conf");
-        }
-        else {
-            in = new FileInputStream(f);
-        }
-
-        properties.load(in);
-        in.close();
-
-        config = new FullConfiguration();
-        config.loadBasicProperties(properties);
-
+        // EM: why is this necessary?
         if (kargs == null)
             System.exit(0);
 
+        server.loadProperties("data/kustvakt.conf", "kustvakt.conf");
         server.start();
     }
 }
diff --git a/src/main/resources/default-config.xml b/src/main/resources/default-config.xml
index 291271c..57e2f8d 100644
--- a/src/main/resources/default-config.xml
+++ b/src/main/resources/default-config.xml
@@ -29,6 +29,7 @@
 			<array>
 				<value>classpath:kustvakt.conf</value>
 				<value>file:./kustvakt.conf</value>
+				<value>file:./data/kustvakt.conf</value>
 			</array>
 		</property>
 	</bean>
@@ -40,12 +41,14 @@
 			<array>
 				<value>classpath:properties/jdbc.properties</value>
 				<value>file:./jdbc.properties</value>
+				<value>file:./data/jdbc.properties</value>
 				<value>classpath:properties/mail.properties</value>
 				<value>file:./mail.properties</value>
 				<value>classpath:properties/hibernate.properties</value>
 
 				<value>classpath:kustvakt.conf</value>
 				<value>file:./kustvakt.conf</value>
+				<value>file:./data/kustvakt.conf</value>
 			</array>
 		</property>
 	</bean>
