diff --git a/src/main/java/de/ids_mannheim/korap/web/KustvaktServer.java b/src/main/java/de/ids_mannheim/korap/web/KustvaktServer.java
new file mode 100644
index 0000000..86e9da9
--- /dev/null
+++ b/src/main/java/de/ids_mannheim/korap/web/KustvaktServer.java
@@ -0,0 +1,88 @@
+package de.ids_mannheim.korap.web;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Set;
+
+import de.ids_mannheim.korap.config.BeansFactory;
+import de.ids_mannheim.korap.config.ContextHolder;
+import de.ids_mannheim.korap.config.KustvaktClassLoader;
+import de.ids_mannheim.korap.exceptions.KustvaktException;
+import de.ids_mannheim.korap.web.service.BootableBeanInterface;
+
+/**
+ * pu
+ * 
+ * @author hanl
+ * @date 28/01/2014
+ */
+public class KustvaktServer extends KustvaktBaseServer {
+
+    public static final String API_VERSION = "v0.1";
+    
+    public static void main (String[] args) throws Exception {
+        KustvaktServer server = new KustvaktServer();
+        kargs = server.readAttributes(args);
+
+        if (kargs.getConfig() != null)
+            BeansFactory.loadFileContext(kargs.getConfig());
+        else
+            BeansFactory.loadClasspathContext("default-config.xml");
+
+        kargs.setRootPackages(new String[] { "de.ids_mannheim.korap.web.utils",
+                "de.ids_mannheim.korap.web.service.full" });
+        rootPackages = "de.ids_mannheim.korap.web.utils;"
+                + "de.ids_mannheim.korap.web.service.full";
+        server.start();
+    }
+
+    @Override
+    protected void setup () {
+        Set<Class<? extends BootableBeanInterface>> set = KustvaktClassLoader
+                .loadSubTypes(BootableBeanInterface.class);
+
+        ContextHolder context = BeansFactory.getKustvaktContext();
+        if (context == null)
+            throw new RuntimeException("Beans could not be loaded!");
+
+        List<BootableBeanInterface> list = new ArrayList<>(set.size());
+//        for (Class cl : set) {
+//            BootableBeanInterface iface;
+//            
+//            try {
+//                iface = (BootableBeanInterface) cl.newInstance();
+//                if (iface instanceof CollectionLoader){
+//                	continue;
+//                }
+//                list.add(iface);
+//            }
+//            catch (InstantiationException | IllegalAccessException e) {
+//                continue;
+//            }
+//        }
+        System.out.println("Found boot loading interfaces: " + list);
+
+        while (!list.isEmpty()) {
+            loop: for (BootableBeanInterface iface : new ArrayList<>(list)) {
+                try {
+                    for (Class dep : iface.getDependencies()) {
+                        if (set.contains(dep))
+                            continue loop;
+                    }
+                    iface.load(context);
+                    list.remove(iface);
+                    set.remove(iface.getClass());
+                    System.out.println("Done with interface "
+                            + iface.getClass().getSimpleName());
+                }
+                catch (KustvaktException e) {
+                    // don't do anything!
+                    System.out.println("An error occurred in class "
+                            + iface.getClass().getSimpleName() + "!\n");
+                    e.printStackTrace();
+                    System.exit(-1);
+                }
+            }
+        }
+    }
+}
diff --git a/src/main/resources/kustvakt.conf b/src/main/resources/kustvakt.conf
new file mode 100644
index 0000000..3ef0604
--- /dev/null
+++ b/src/main/resources/kustvakt.conf
@@ -0,0 +1,55 @@
+## index dir
+krill.indexDir= src/test/resources/sample-index
+
+krill.index.commit.count = 134217000
+krill.index.commit.log = log/krill.commit.log
+krill.index.commit.auto = 500
+krill.index.relations.max = 100
+
+kustvakt.default.pos = tt
+kustvakt.default.lemma = tt
+kustvakt.default.token = opennlp
+kustvakt.default.dep = mate
+kustvakt.default.const = mate
+
+kustvakt.management.registration=enable
+
+kustvakt.regex.free = CC-BY.*
+kustvakt.regex.public = CC-BY.*|ACA.*
+kustvakt.regex.all = CC-BY.*|ACA.*|QAO.*
+
+# server
+server.port=8089
+server.host=localhost
+
+# user configuration
+# user.config = user.conf
+
+ldap.config = file-path-to-ldap-config
+
+## options referring to the security module!
+
+## token expiration time in minutes!
+security.longTokenTTL=150D
+security.tokenTTL=72H
+security.shortTokenTTL=45M
+
+kustvakt.security.jwt.issuer=korap.ids-mannheim.de
+
+## specifies the user data field that is used to salt user passwords
+security.passcode.salt=salt
+
+security.idleTimeoutDuration = 25M
+security.multipleLogIn = true
+security.loginAttemptNum = 3
+security.authAttemptTTL = 45M
+
+security.encryption.loadFactor = 8
+security.validation.stringLength = 150
+security.validation.emailLength = 50
+security.encryption.algo=BCRYPT
+security.sharedSecret=sharedSecret
+security.adminToken=adminToken
+
+## applicable: rewrite, foundry, filter, deny
+security.rewrite.strategies=filter, foundry, rewrite
\ No newline at end of file
diff --git a/src/test/resources/kustvakt-test.conf b/src/test/resources/kustvakt-test.conf
new file mode 100644
index 0000000..dce2127
--- /dev/null
+++ b/src/test/resources/kustvakt-test.conf
@@ -0,0 +1,66 @@
+## index dir
+#krill.indexDir = src/main/resources/index-goe-lucene5
+krill.indexDir = src/test/resources/sample-index
+
+krill.index.commit.count = 134217000
+krill.index.commit.log = log/krill.commit.log
+krill.index.commit.auto = 500
+krill.index.relations.max = 100
+
+kustvakt.default.pos = tt
+kustvakt.default.lemma = tt
+kustvakt.default.token = opennlp
+kustvakt.default.dep = mate
+kustvakt.default.const = mate
+
+kustvakt.management.registration=enable
+
+kustvakt.regex.free = CC-BY.*
+kustvakt.regex.public = CC-BY.*|ACA.*
+kustvakt.regex.all = CC-BY.*|ACA.*|QAO.*
+
+# port&host added 06.02.17/FB
+server.port=8089
+server.host=localhost
+
+# init user
+kustvakt.init.user.id = 1000
+kustvakt.init.user.username = kustvakt
+kustvakt.init.user.password = kustvakt2015
+kustvakt.init.user.email = kustvakt@ids-mannheim.de
+kustvakt.init.user.country = Germany
+kustvakt.init.user.address = Mannheim
+kustvakt.init.user.firstname = Kustvakt
+kustvakt.init.user.lastname = KorAP
+kustvakt.init.user.institution = IDS Mannheim
+kustvakt.init.user.admin = true
+
+# user configuration
+# user.config = user.conf
+
+ldap.config = /home/elma/.config/ldap.conf
+
+## options referring to the security module!
+
+## token expiration time in minutes!
+security.longTokenTTL = 1D
+security.tokenTTL = 9S
+security.shortTokenTTL = 5S
+
+## specifies the user data field that is used to salt user passwords
+security.passcode.salt=accountCreation
+
+security.idleTimeoutDuration = 25M
+security.multipleLogIn = true
+security.loginAttemptNum = 3
+security.authAttemptTTL = 45M
+
+security.encryption.loadFactor = 8
+security.validation.stringLength = 150
+security.validation.emailLength = 50
+security.encryption.algo=BCRYPT
+security.sharedSecret=nHim5JB-YqkX7sS55jayGBnga8WmqgpkzieGe8UhojE
+security.adminToken=f61d02c04a0f18d60172f7b990955824
+
+## applicable: rewrite, foundry, filter, deny
+security.rewrite.strategies=filter, foundry, rewrite
\ No newline at end of file
