diff --git a/src/main/.DS_Store b/src/main/.DS_Store
index 6f2c378..16a3460 100644
--- a/src/main/.DS_Store
+++ b/src/main/.DS_Store
Binary files differ
diff --git a/src/main/java/de/ids_mannheim/korap/config/BeanConfiguration.java b/src/main/java/de/ids_mannheim/korap/config/BeanConfiguration.java
index c308e34..af98785 100644
--- a/src/main/java/de/ids_mannheim/korap/config/BeanConfiguration.java
+++ b/src/main/java/de/ids_mannheim/korap/config/BeanConfiguration.java
@@ -1,6 +1,9 @@
 package de.ids_mannheim.korap.config;
 
-import de.ids_mannheim.korap.interfaces.*;
+import de.ids_mannheim.korap.interfaces.AuthenticationIface;
+import de.ids_mannheim.korap.interfaces.AuthenticationManagerIface;
+import de.ids_mannheim.korap.interfaces.EncryptionIface;
+import de.ids_mannheim.korap.interfaces.db.*;
 import de.ids_mannheim.korap.web.utils.KustvaktResponseHandler;
 import org.springframework.beans.factory.NoSuchBeanDefinitionException;
 import org.springframework.context.ApplicationContext;
@@ -61,22 +64,23 @@
     }
 
     public static boolean hasContext() {
-        return beans != null;
+        return beans != null && beans.context != null;
     }
 
     public static void loadClasspathContext(String... files) {
-        if (beans == null) {
+        if (!hasContext()) {
             ApplicationContext context;
             if (files.length == 0)
                 context = new ClassPathXmlApplicationContext(config_file);
             else
                 context = new ClassPathXmlApplicationContext(files);
+
             BeanConfiguration.beans = new BeanHolderHelper(context);
         }
     }
 
     public static void loadFileContext(String filepath) {
-        if (beans == null) {
+        if (!hasContext()) {
             ApplicationContext context = new FileSystemXmlApplicationContext(
                     "file:" + filepath);
             BeanConfiguration.beans = new BeanHolderHelper(context);
@@ -84,7 +88,9 @@
     }
 
     public static void closeApplication() {
-        beans.finish();
+        if (hasContext())
+            beans.finish();
+        beans = null;
     }
 
     //todo: set response handler
@@ -98,13 +104,11 @@
         private ApplicationContext context = null;
         private DefaultHandler handler;
 
-        public BeanHolderHelper() {
-            this.handler = new DefaultHandler();
-        }
-
         private BeanHolderHelper(ApplicationContext context) {
-            this();
+            this.handler = new DefaultHandler();
             this.context = context;
+            // todo: better method?!
+            KustvaktResponseHandler.init(getAuditingProvider());
         }
 
         protected <T> T getBean(Class<T> clazz) {
@@ -130,7 +134,7 @@
         }
 
         public AuditingIface getAuditingProvider() {
-            return (AuditingIface) context.getBean(KUSTVAKT_AUDITING);
+            return (AuditingIface) getBean(KUSTVAKT_AUDITING);
         }
 
         public <T extends KustvaktConfiguration> T getConfiguration() {
@@ -165,14 +169,13 @@
             return getBean(KUSTVAKT_POLICIES);
         }
 
+        // todo: !!!!!!!!!!!!!!!!!!!!!!!!!!
         // todo: more specific --> collection provider, document provider, etc.
         public ResourceOperationIface getResourceProvider() {
             return getBean("resourceProvider");
         }
 
-
-
-        public void finish() {
+        private void finish() {
             this.getAuditingProvider().finish();
             context = null;
         }
diff --git a/src/main/java/de/ids_mannheim/korap/config/KustvaktConfiguration.java b/src/main/java/de/ids_mannheim/korap/config/KustvaktConfiguration.java
index 36f5bb2..1564e77 100644
--- a/src/main/java/de/ids_mannheim/korap/config/KustvaktConfiguration.java
+++ b/src/main/java/de/ids_mannheim/korap/config/KustvaktConfiguration.java
@@ -63,7 +63,7 @@
 
     private String default_pos;
     private String default_lemma;
-    private String default_surface;
+    private String default_token;
     private String default_dep;
     private String default_const;
 
@@ -99,8 +99,8 @@
         default_dep = properties.getProperty("kustvakt.default.dep", "mate");
         default_lemma = properties.getProperty("kustvakt.default.lemma", "tt");
         default_pos = properties.getProperty("kustvakt.default.pos", "tt");
-        default_surface = properties
-                .getProperty("kustvakt.default.opennlp", "opennlp");
+        default_token = properties
+                .getProperty("kustvakt.default.token", "opennlp");
 
         // security configuration
         expiration = TimeUtils.convertTimeToSeconds(properties
diff --git a/src/main/java/de/ids_mannheim/korap/handlers/CollectionDao.java b/src/main/java/de/ids_mannheim/korap/handlers/CollectionDao.java
index fceaf89..c961813 100644
--- a/src/main/java/de/ids_mannheim/korap/handlers/CollectionDao.java
+++ b/src/main/java/de/ids_mannheim/korap/handlers/CollectionDao.java
@@ -2,8 +2,8 @@
 
 import de.ids_mannheim.korap.exceptions.KustvaktException;
 import de.ids_mannheim.korap.exceptions.StatusCodes;
-import de.ids_mannheim.korap.interfaces.PersistenceClient;
-import de.ids_mannheim.korap.interfaces.ResourceOperationIface;
+import de.ids_mannheim.korap.interfaces.db.PersistenceClient;
+import de.ids_mannheim.korap.interfaces.db.ResourceOperationIface;
 import de.ids_mannheim.korap.resources.KustvaktResource;
 import de.ids_mannheim.korap.resources.VirtualCollection;
 import de.ids_mannheim.korap.user.User;
diff --git a/src/main/java/de/ids_mannheim/korap/handlers/DocumentDao.java b/src/main/java/de/ids_mannheim/korap/handlers/DocumentDao.java
index ce0475e..1cef65f 100644
--- a/src/main/java/de/ids_mannheim/korap/handlers/DocumentDao.java
+++ b/src/main/java/de/ids_mannheim/korap/handlers/DocumentDao.java
@@ -2,8 +2,8 @@
 
 import de.ids_mannheim.korap.exceptions.KustvaktException;
 import de.ids_mannheim.korap.exceptions.StatusCodes;
-import de.ids_mannheim.korap.interfaces.PersistenceClient;
-import de.ids_mannheim.korap.interfaces.ResourceOperationIface;
+import de.ids_mannheim.korap.interfaces.db.PersistenceClient;
+import de.ids_mannheim.korap.interfaces.db.ResourceOperationIface;
 import de.ids_mannheim.korap.resources.Document;
 import de.ids_mannheim.korap.user.User;
 import de.ids_mannheim.korap.utils.BooleanUtils;
diff --git a/src/main/java/de/ids_mannheim/korap/handlers/EntityDao.java b/src/main/java/de/ids_mannheim/korap/handlers/EntityDao.java
index fa29e59..b81dc3d 100644
--- a/src/main/java/de/ids_mannheim/korap/handlers/EntityDao.java
+++ b/src/main/java/de/ids_mannheim/korap/handlers/EntityDao.java
@@ -6,8 +6,8 @@
 import de.ids_mannheim.korap.exceptions.KustvaktException;
 import de.ids_mannheim.korap.exceptions.StatusCodes;
 import de.ids_mannheim.korap.exceptions.dbException;
-import de.ids_mannheim.korap.interfaces.EntityHandlerIface;
-import de.ids_mannheim.korap.interfaces.PersistenceClient;
+import de.ids_mannheim.korap.interfaces.db.EntityHandlerIface;
+import de.ids_mannheim.korap.interfaces.db.PersistenceClient;
 import de.ids_mannheim.korap.user.*;
 import de.ids_mannheim.korap.utils.BooleanUtils;
 import de.ids_mannheim.korap.utils.KustvaktLogger;
@@ -382,7 +382,6 @@
             this.createSettings(user.getSettings());
             return r;
         }catch (DataAccessException e) {
-            e.printStackTrace();
             jlog.error("Could not create user account with username: {}",
                     user.getUsername());
             throw new dbException(user.getUsername(), "korap_users",
diff --git a/src/main/java/de/ids_mannheim/korap/handlers/JDBCAuditing.java b/src/main/java/de/ids_mannheim/korap/handlers/JDBCAuditing.java
index 9cfbb3d..4dca815 100644
--- a/src/main/java/de/ids_mannheim/korap/handlers/JDBCAuditing.java
+++ b/src/main/java/de/ids_mannheim/korap/handlers/JDBCAuditing.java
@@ -1,8 +1,8 @@
 package de.ids_mannheim.korap.handlers;
 
 import de.ids_mannheim.korap.auditing.AuditRecord;
-import de.ids_mannheim.korap.interfaces.AuditingIface;
-import de.ids_mannheim.korap.interfaces.PersistenceClient;
+import de.ids_mannheim.korap.interfaces.db.AuditingIface;
+import de.ids_mannheim.korap.interfaces.db.PersistenceClient;
 import de.ids_mannheim.korap.user.User;
 import org.joda.time.DateTime;
 import org.joda.time.LocalDate;
diff --git a/src/main/java/de/ids_mannheim/korap/handlers/JDBCClient.java b/src/main/java/de/ids_mannheim/korap/handlers/JDBCClient.java
index 1b277d6..4f6b9e3 100644
--- a/src/main/java/de/ids_mannheim/korap/handlers/JDBCClient.java
+++ b/src/main/java/de/ids_mannheim/korap/handlers/JDBCClient.java
@@ -1,6 +1,6 @@
 package de.ids_mannheim.korap.handlers;
 
-import de.ids_mannheim.korap.interfaces.PersistenceClient;
+import de.ids_mannheim.korap.interfaces.db.PersistenceClient;
 import de.ids_mannheim.korap.utils.BooleanUtils;
 import lombok.AccessLevel;
 import lombok.Data;
diff --git a/src/main/java/de/ids_mannheim/korap/handlers/OAuth2Handler.java b/src/main/java/de/ids_mannheim/korap/handlers/OAuth2Handler.java
index c8d8281..1d571ae 100644
--- a/src/main/java/de/ids_mannheim/korap/handlers/OAuth2Handler.java
+++ b/src/main/java/de/ids_mannheim/korap/handlers/OAuth2Handler.java
@@ -2,7 +2,7 @@
 
 import de.ids_mannheim.korap.config.AuthCodeInfo;
 import de.ids_mannheim.korap.exceptions.KustvaktException;
-import de.ids_mannheim.korap.interfaces.PersistenceClient;
+import de.ids_mannheim.korap.interfaces.db.PersistenceClient;
 import de.ids_mannheim.korap.user.User;
 import net.sf.ehcache.Cache;
 import net.sf.ehcache.CacheManager;
diff --git a/src/main/java/de/ids_mannheim/korap/handlers/OAuthDb.java b/src/main/java/de/ids_mannheim/korap/handlers/OAuthDb.java
index 63485c9..1473782 100644
--- a/src/main/java/de/ids_mannheim/korap/handlers/OAuthDb.java
+++ b/src/main/java/de/ids_mannheim/korap/handlers/OAuthDb.java
@@ -4,7 +4,7 @@
 import de.ids_mannheim.korap.exceptions.KustvaktException;
 import de.ids_mannheim.korap.exceptions.StatusCodes;
 import de.ids_mannheim.korap.exceptions.dbException;
-import de.ids_mannheim.korap.interfaces.PersistenceClient;
+import de.ids_mannheim.korap.interfaces.db.PersistenceClient;
 import de.ids_mannheim.korap.user.Attributes;
 import de.ids_mannheim.korap.user.TokenContext;
 import de.ids_mannheim.korap.user.User;
@@ -26,6 +26,8 @@
 import java.util.List;
 
 /**
+ *
+ *
  * Created by hanl on 7/14/14.
  */
 public class OAuthDb {
diff --git a/src/main/java/de/ids_mannheim/korap/handlers/ResourceDao.java b/src/main/java/de/ids_mannheim/korap/handlers/ResourceDao.java
index 3b51f5c..0d0183e 100644
--- a/src/main/java/de/ids_mannheim/korap/handlers/ResourceDao.java
+++ b/src/main/java/de/ids_mannheim/korap/handlers/ResourceDao.java
@@ -3,8 +3,8 @@
 import de.ids_mannheim.korap.exceptions.KustvaktException;
 import de.ids_mannheim.korap.exceptions.StatusCodes;
 import de.ids_mannheim.korap.exceptions.dbException;
-import de.ids_mannheim.korap.interfaces.PersistenceClient;
-import de.ids_mannheim.korap.interfaces.ResourceOperationIface;
+import de.ids_mannheim.korap.interfaces.db.PersistenceClient;
+import de.ids_mannheim.korap.interfaces.db.ResourceOperationIface;
 import de.ids_mannheim.korap.resources.KustvaktResource;
 import de.ids_mannheim.korap.resources.ResourceFactory;
 import de.ids_mannheim.korap.user.User;
diff --git a/src/main/java/de/ids_mannheim/korap/interfaces/EncryptionIface.java b/src/main/java/de/ids_mannheim/korap/interfaces/EncryptionIface.java
index 1dc864c..b591911 100644
--- a/src/main/java/de/ids_mannheim/korap/interfaces/EncryptionIface.java
+++ b/src/main/java/de/ids_mannheim/korap/interfaces/EncryptionIface.java
@@ -30,7 +30,9 @@
             throws NoSuchAlgorithmException, UnsupportedEncodingException,
             KustvaktException;
 
-    public String hash(String value);
+    public String hash(String text, String salt) throws Exception;
+
+    public String hash(String text) throws Exception;
 
     /**
      * @param plain
diff --git a/src/main/java/de/ids_mannheim/korap/interfaces/defaults/DefaultAuditing.java b/src/main/java/de/ids_mannheim/korap/interfaces/defaults/DefaultAuditing.java
index 9f5a453..bbf895a 100644
--- a/src/main/java/de/ids_mannheim/korap/interfaces/defaults/DefaultAuditing.java
+++ b/src/main/java/de/ids_mannheim/korap/interfaces/defaults/DefaultAuditing.java
@@ -3,7 +3,7 @@
 import de.ids_mannheim.korap.auditing.AuditRecord;
 import de.ids_mannheim.korap.config.BeanConfiguration;
 import de.ids_mannheim.korap.config.Configurable;
-import de.ids_mannheim.korap.interfaces.AuditingIface;
+import de.ids_mannheim.korap.interfaces.db.AuditingIface;
 import de.ids_mannheim.korap.user.User;
 import org.joda.time.DateTime;
 import org.joda.time.LocalDate;
diff --git a/src/main/java/de/ids_mannheim/korap/interfaces/defaults/DefaultEncryption.java b/src/main/java/de/ids_mannheim/korap/interfaces/defaults/DefaultEncryption.java
index 1465c06..9f412b1 100644
--- a/src/main/java/de/ids_mannheim/korap/interfaces/defaults/DefaultEncryption.java
+++ b/src/main/java/de/ids_mannheim/korap/interfaces/defaults/DefaultEncryption.java
@@ -40,6 +40,11 @@
     }
 
     @Override
+    public String hash(String text, String salt) throws Exception {
+        return null;
+    }
+
+    @Override
     public String hash(String value) {
         return null;
     }
diff --git a/src/main/java/de/ids_mannheim/korap/resource/LayerMapper.java b/src/main/java/de/ids_mannheim/korap/resource/LayerMapper.java
index b51229c..e59f849 100644
--- a/src/main/java/de/ids_mannheim/korap/resource/LayerMapper.java
+++ b/src/main/java/de/ids_mannheim/korap/resource/LayerMapper.java
@@ -59,7 +59,7 @@
                 case "lemma":
                     return config.getDefault_lemma();
                 case "surface":
-                    return config.getDefault_surface();
+                    return config.getDefault_token();
                 // refers to "structure" and is used for paragraphs or sentence boundaries
                 case "s":
                     return "base";
diff --git a/src/main/java/de/ids_mannheim/korap/resource/rewrite/IdWriter.java b/src/main/java/de/ids_mannheim/korap/resource/rewrite/IdWriter.java
index 0c91ac0..86999a5 100644
--- a/src/main/java/de/ids_mannheim/korap/resource/rewrite/IdWriter.java
+++ b/src/main/java/de/ids_mannheim/korap/resource/rewrite/IdWriter.java
@@ -4,5 +4,5 @@
  * @author hanl
  * @date 25/09/2015
  */
-public class IdWriter {
+public class IdWriter  {
 }
diff --git a/src/main/java/de/ids_mannheim/korap/resource/rewrite/RewriteHandler.java b/src/main/java/de/ids_mannheim/korap/resource/rewrite/RewriteHandler.java
index 6c613ca..d9eb391 100644
--- a/src/main/java/de/ids_mannheim/korap/resource/rewrite/RewriteHandler.java
+++ b/src/main/java/de/ids_mannheim/korap/resource/rewrite/RewriteHandler.java
@@ -1,6 +1,7 @@
 package de.ids_mannheim.korap.resource.rewrite;
 
 import com.fasterxml.jackson.databind.JsonNode;
+import de.ids_mannheim.korap.config.KustvaktClassLoader;
 import de.ids_mannheim.korap.user.User;
 import de.ids_mannheim.korap.utils.JsonUtils;
 import de.ids_mannheim.korap.utils.KustvaktLogger;
@@ -14,7 +15,7 @@
  * @author hanl
  * @date 30/06/2015
  */
-//todo: load rewritenode and rewritequery automatically from classpath, but namespaced from package
+//todo: load rewritenode and rewritequery automatically from classpath by default, but namespaced from package
 public class RewriteHandler {
 
     private static Logger jlog = KustvaktLogger.initiate(RewriteHandler.class);
@@ -24,7 +25,7 @@
     public RewriteHandler() {
         this.node_processors = new HashSet<>();
         this.query_processors = new HashSet<>();
-        // add defaults?!
+        KustvaktClassLoader.loadSubTypes(RewriteTask.RewriteNode.class);
     }
 
     public void add(RewriteTask.RewriteNode node) {
diff --git a/src/main/java/de/ids_mannheim/korap/security/Parameter.java b/src/main/java/de/ids_mannheim/korap/security/Parameter.java
index 4c21542..7eab421 100644
--- a/src/main/java/de/ids_mannheim/korap/security/Parameter.java
+++ b/src/main/java/de/ids_mannheim/korap/security/Parameter.java
@@ -13,14 +13,15 @@
 
     private String value;
     private SecurityPolicy policy;
-    private boolean equality;
+    // todo: what is this supposed to do?
+    private boolean equal;
 
-    public Parameter(String identifier, String value, boolean equality,
+    public Parameter(String identifier, String value, boolean equal,
             User user) {
         super();
         super.setName(identifier.toLowerCase());
         this.value = value;
-        this.equality = equality;
+        this.equal = equal;
         super.setOwner(user.getId());
     }
 
diff --git a/src/main/java/de/ids_mannheim/korap/security/ac/ConditionManagement.java b/src/main/java/de/ids_mannheim/korap/security/ac/ConditionManagement.java
index d403b69..1e8dafc 100644
--- a/src/main/java/de/ids_mannheim/korap/security/ac/ConditionManagement.java
+++ b/src/main/java/de/ids_mannheim/korap/security/ac/ConditionManagement.java
@@ -4,7 +4,7 @@
 import de.ids_mannheim.korap.exceptions.EmptyResultException;
 import de.ids_mannheim.korap.exceptions.KustvaktException;
 import de.ids_mannheim.korap.exceptions.NotAuthorizedException;
-import de.ids_mannheim.korap.interfaces.PolicyHandlerIface;
+import de.ids_mannheim.korap.interfaces.db.PolicyHandlerIface;
 import de.ids_mannheim.korap.resources.KustvaktResource;
 import de.ids_mannheim.korap.resources.Permissions;
 import de.ids_mannheim.korap.security.PolicyCondition;
diff --git a/src/main/java/de/ids_mannheim/korap/security/ac/PolicyDao.java b/src/main/java/de/ids_mannheim/korap/security/ac/PolicyDao.java
index d260b65..4524696 100644
--- a/src/main/java/de/ids_mannheim/korap/security/ac/PolicyDao.java
+++ b/src/main/java/de/ids_mannheim/korap/security/ac/PolicyDao.java
@@ -3,13 +3,13 @@
 import de.ids_mannheim.korap.exceptions.KustvaktException;
 import de.ids_mannheim.korap.exceptions.StatusCodes;
 import de.ids_mannheim.korap.exceptions.dbException;
-import de.ids_mannheim.korap.ext.interfaces.PolicyHandlerIface;
-import de.ids_mannheim.korap.ext.resource.KorAPResource;
-import de.ids_mannheim.korap.ext.resource.ResourceFactory;
-import de.ids_mannheim.korap.ext.security.types.Parameter;
-import de.ids_mannheim.korap.ext.security.types.PolicyCondition;
-import de.ids_mannheim.korap.ext.security.types.SecurityPolicy;
-import de.ids_mannheim.korap.interfaces.PersistenceClient;
+import de.ids_mannheim.korap.interfaces.db.PersistenceClient;
+import de.ids_mannheim.korap.interfaces.db.PolicyHandlerIface;
+import de.ids_mannheim.korap.resources.KustvaktResource;
+import de.ids_mannheim.korap.resources.ResourceFactory;
+import de.ids_mannheim.korap.security.Parameter;
+import de.ids_mannheim.korap.security.PolicyCondition;
+import de.ids_mannheim.korap.security.SecurityPolicy;
 import de.ids_mannheim.korap.user.Attributes;
 import de.ids_mannheim.korap.user.User;
 import de.ids_mannheim.korap.utils.BooleanUtils;
@@ -330,8 +330,8 @@
     //todo: not working yet!
     // todo: does not concern itsself with location matching, ever!
     @Override
-    public List<KorAPResource.Container> getDescending(String path,
-            final User user, Byte b, final Class<? extends KorAPResource> clazz)
+    public List<KustvaktResource.Container> getDescending(String path,
+            final User user, Byte b, final Class<? extends KustvaktResource> clazz)
             throws KustvaktException {
         final MapSqlParameterSource param = new MapSqlParameterSource();
         param.addValue("userid", user.getId());
@@ -402,8 +402,8 @@
     }
 
     @Override
-    public List<KorAPResource.Container> getAscending(String name, User user,
-            Byte b, Class<? extends KorAPResource> clazz)
+    public List<KustvaktResource.Container> getAscending(String name, User user,
+            Byte b, Class<? extends KustvaktResource> clazz)
             throws KustvaktException {
         final MapSqlParameterSource param = new MapSqlParameterSource();
         param.addValue("userid", user.getId());
@@ -734,7 +734,7 @@
         source.addValue("key", param.getName());
         source.addValue("policy", param.getPolicy().getID());
         source.addValue("value", param.getValue());
-        source.addValue("flag", param.isEquality());
+        source.addValue("flag", param.isEqual());
 
         if (!parameterExists(param.getName()))
             createParameter(param.getName(), "", param.getOwner());
diff --git a/src/main/java/de/ids_mannheim/korap/security/ac/ResourceFinder.java b/src/main/java/de/ids_mannheim/korap/security/ac/ResourceFinder.java
index ed0462b..3ed9843 100755
--- a/src/main/java/de/ids_mannheim/korap/security/ac/ResourceFinder.java
+++ b/src/main/java/de/ids_mannheim/korap/security/ac/ResourceFinder.java
@@ -1,8 +1,8 @@
 package de.ids_mannheim.korap.security.ac;
 
 import de.ids_mannheim.korap.exceptions.KustvaktException;
-import de.ids_mannheim.korap.interfaces.PolicyHandlerIface;
-import de.ids_mannheim.korap.interfaces.ResourceOperationIface;
+import de.ids_mannheim.korap.interfaces.db.PolicyHandlerIface;
+import de.ids_mannheim.korap.interfaces.db.ResourceOperationIface;
 import de.ids_mannheim.korap.resources.KustvaktResource;
 import de.ids_mannheim.korap.resources.Permissions;
 import de.ids_mannheim.korap.resources.ResourceFactory;
diff --git a/src/main/java/de/ids_mannheim/korap/security/ac/SecurityManager.java b/src/main/java/de/ids_mannheim/korap/security/ac/SecurityManager.java
index 6dd88a3..2317190 100644
--- a/src/main/java/de/ids_mannheim/korap/security/ac/SecurityManager.java
+++ b/src/main/java/de/ids_mannheim/korap/security/ac/SecurityManager.java
@@ -5,8 +5,8 @@
 import de.ids_mannheim.korap.exceptions.NotAuthorizedException;
 import de.ids_mannheim.korap.exceptions.StatusCodes;
 import de.ids_mannheim.korap.interfaces.EncryptionIface;
-import de.ids_mannheim.korap.interfaces.PolicyHandlerIface;
-import de.ids_mannheim.korap.interfaces.ResourceOperationIface;
+import de.ids_mannheim.korap.interfaces.db.PolicyHandlerIface;
+import de.ids_mannheim.korap.interfaces.db.ResourceOperationIface;
 import de.ids_mannheim.korap.resources.KustvaktResource;
 import de.ids_mannheim.korap.resources.Permissions;
 import de.ids_mannheim.korap.security.Parameter;
diff --git a/src/main/java/de/ids_mannheim/korap/security/ac/SecurityRowMappers.java b/src/main/java/de/ids_mannheim/korap/security/ac/SecurityRowMappers.java
index bf2de64..372b7b3 100644
--- a/src/main/java/de/ids_mannheim/korap/security/ac/SecurityRowMappers.java
+++ b/src/main/java/de/ids_mannheim/korap/security/ac/SecurityRowMappers.java
@@ -1,10 +1,10 @@
 package de.ids_mannheim.korap.security.ac;
 
-import de.ids_mannheim.korap.ext.resource.KorAPResource;
-import de.ids_mannheim.korap.ext.resource.ResourceFactory;
-import de.ids_mannheim.korap.ext.security.types.PolicyCondition;
-import de.ids_mannheim.korap.ext.security.types.PolicyContext;
-import de.ids_mannheim.korap.ext.security.types.SecurityPolicy;
+import de.ids_mannheim.korap.resources.KustvaktResource;
+import de.ids_mannheim.korap.resources.ResourceFactory;
+import de.ids_mannheim.korap.security.PolicyCondition;
+import de.ids_mannheim.korap.security.PolicyContext;
+import de.ids_mannheim.korap.security.SecurityPolicy;
 import de.ids_mannheim.korap.user.User;
 import de.ids_mannheim.korap.utils.PrefixTreeMap;
 import lombok.Data;
@@ -102,7 +102,8 @@
             if (index == -1) {
                 if (pid == -1 && grouping.equalsIgnoreCase("self")) {
                     policy = new SecurityPolicy.OwnerPolicy(
-                            rs.getString("persistent_id"), rs.getInt("creator"));
+                            rs.getString("persistent_id"),
+                            rs.getInt("creator"));
                     policyArray[depth].add(0, policy);
                     idx[depth].add(0, pid);
                 }else {
@@ -172,7 +173,7 @@
     }
 
     public static class HierarchicalResultExtractor
-            implements ResultSetExtractor<List<KorAPResource.Container>> {
+            implements ResultSetExtractor<List<KustvaktResource.Container>> {
 
         private boolean _withpid;
 
@@ -181,14 +182,14 @@
         //        }
 
         // todo: in order for this to work, all parent flags need to be matched in sql!
-        public List<KorAPResource.Container> extractData(ResultSet rs)
+        public List<KustvaktResource.Container> extractData(ResultSet rs)
                 throws SQLException, DataAccessException {
             // contains the container with the highest available name_path to retrieve partial matches!
-            PrefixTreeMap<KorAPResource.Container[]> containerMap = new PrefixTreeMap<>();
+            PrefixTreeMap<KustvaktResource.Container[]> containerMap = new PrefixTreeMap<>();
             Map<Integer, SecurityPolicy> trace = new HashMap<>();
 
             while (rs.next()) {
-                KorAPResource.Container[] cursor;
+                KustvaktResource.Container[] cursor;
                 Integer pid = rs.getInt("pid");
 
                 SecurityPolicy policy = trace.get(pid);
@@ -204,20 +205,20 @@
                     trace.put(pid, policy);
 
                     //fixme: since leaves are mentioned first, maybe retrieve
-                    SortedMap<String, KorAPResource.Container[]> submatch;
+                    SortedMap<String, KustvaktResource.Container[]> submatch;
                     if ((submatch = containerMap.getPrefixSubMap(namePath))
                             == null) {
 
-                        cursor = new KorAPResource.Container[depth + 1];
-                        cursor[depth] = new KorAPResource.Container(
+                        cursor = new KustvaktResource.Container[depth + 1];
+                        cursor[depth] = new KustvaktResource.Container(
                                 persistentId,
                                 ResourceFactory.getResource(rs.getInt("type"))
                                         .getClass());
                         containerMap.put(namePath, cursor);
                     }else {
-                        KorAPResource.Container[] values = submatch
+                        KustvaktResource.Container[] values = submatch
                                 .get(submatch.firstKey());
-                        values[depth] = new KorAPResource.Container(
+                        values[depth] = new KustvaktResource.Container(
                                 persistentId,
                                 ResourceFactory.getResource(rs.getInt("type"))
                                         .getClass());
@@ -225,9 +226,9 @@
                 }
             }
 
-            List<KorAPResource.Container> result = new ArrayList<>();
-            for (KorAPResource.Container[] values : containerMap.values()) {
-                for (KorAPResource.Container container : values)
+            List<KustvaktResource.Container> result = new ArrayList<>();
+            for (KustvaktResource.Container[] values : containerMap.values()) {
+                for (KustvaktResource.Container container : values)
                     if (container == null)
                         containerMap.remove(values);
                 result.add(values[values.length - 1]);
diff --git a/src/main/java/de/ids_mannheim/korap/security/auth/KustvaktAuthenticationManager.java b/src/main/java/de/ids_mannheim/korap/security/auth/KustvaktAuthenticationManager.java
index d5e22da..50c208c 100644
--- a/src/main/java/de/ids_mannheim/korap/security/auth/KustvaktAuthenticationManager.java
+++ b/src/main/java/de/ids_mannheim/korap/security/auth/KustvaktAuthenticationManager.java
@@ -6,6 +6,8 @@
 import de.ids_mannheim.korap.config.URIParam;
 import de.ids_mannheim.korap.exceptions.*;
 import de.ids_mannheim.korap.interfaces.*;
+import de.ids_mannheim.korap.interfaces.db.AuditingIface;
+import de.ids_mannheim.korap.interfaces.db.EntityHandlerIface;
 import de.ids_mannheim.korap.user.*;
 import de.ids_mannheim.korap.utils.KustvaktLogger;
 import de.ids_mannheim.korap.utils.StringUtils;
@@ -684,7 +686,13 @@
         return user.getSettings();
     }
 
-    private String cache_key(String input) {
-        return crypto.hash(KEY + "@" + input);
+    private String cache_key(String input) throws KustvaktException {
+        try {
+            return crypto.hash(KEY + "@" + input);
+        }catch (Exception e) {
+            jlog.error("illegal cache key input '{}'", input);
+            throw new KustvaktException(StatusCodes.ILLEGAL_ARGUMENT,
+                    "missing or illegal cache key", input);
+        }
     }
 }
diff --git a/src/main/java/de/ids_mannheim/korap/security/auth/OpenIDconnectAuthentication.java b/src/main/java/de/ids_mannheim/korap/security/auth/OpenIDconnectAuthentication.java
index 0a23e72..eb0bb32 100644
--- a/src/main/java/de/ids_mannheim/korap/security/auth/OpenIDconnectAuthentication.java
+++ b/src/main/java/de/ids_mannheim/korap/security/auth/OpenIDconnectAuthentication.java
@@ -7,7 +7,7 @@
 import de.ids_mannheim.korap.exceptions.StatusCodes;
 import de.ids_mannheim.korap.handlers.OAuthDb;
 import de.ids_mannheim.korap.interfaces.AuthenticationIface;
-import de.ids_mannheim.korap.interfaces.PersistenceClient;
+import de.ids_mannheim.korap.interfaces.db.PersistenceClient;
 import de.ids_mannheim.korap.user.Attributes;
 import de.ids_mannheim.korap.user.TokenContext;
 import de.ids_mannheim.korap.user.User;
diff --git a/src/main/java/de/ids_mannheim/korap/user/User.java b/src/main/java/de/ids_mannheim/korap/user/User.java
index 7de02b4..e33502a 100644
--- a/src/main/java/de/ids_mannheim/korap/user/User.java
+++ b/src/main/java/de/ids_mannheim/korap/user/User.java
@@ -150,6 +150,12 @@
             return new KorAPUser(username);
         }
 
+        public static KorAPUser getUser(String username, String password) {
+            KorAPUser user = new KorAPUser(username);
+            user.setPassword(password);
+            return user;
+        }
+
         public static KorAPUser getAdmin() {
             return new KorAPUser(ADMINISTRATOR_ID, ADMINISTRATOR_NAME);
         }
diff --git a/src/main/java/de/ids_mannheim/korap/utils/BooleanUtils.java b/src/main/java/de/ids_mannheim/korap/utils/BooleanUtils.java
index 2e767ed..02d8cc3 100644
--- a/src/main/java/de/ids_mannheim/korap/utils/BooleanUtils.java
+++ b/src/main/java/de/ids_mannheim/korap/utils/BooleanUtils.java
@@ -9,12 +9,12 @@
     public static String dbname;
 
     public static Object getBoolean(Object val) {
-        if (val == null) val = false;
-        if (dbname != null
-                && dbname.equalsIgnoreCase("sqlite")) {
+        if (val == null)
+            val = false;
+        if (dbname != null && dbname.equalsIgnoreCase("sqlite")) {
             if (val instanceof Boolean) {
-                return (val == true) ? 1 : 0;
-            } else if (val instanceof Integer) {
+                return ((boolean) val) ? 1 : 0;
+            }else if (val instanceof Integer) {
                 return ((Integer) val == 1);
             }
         }
diff --git a/src/main/java/de/ids_mannheim/korap/utils/UserPropertyReader.java b/src/main/java/de/ids_mannheim/korap/utils/UserPropertyReader.java
index b506d22..8b55099 100644
--- a/src/main/java/de/ids_mannheim/korap/utils/UserPropertyReader.java
+++ b/src/main/java/de/ids_mannheim/korap/utils/UserPropertyReader.java
@@ -4,7 +4,7 @@
 import de.ids_mannheim.korap.exceptions.KustvaktException;
 import de.ids_mannheim.korap.exceptions.StatusCodes;
 import de.ids_mannheim.korap.interfaces.EncryptionIface;
-import de.ids_mannheim.korap.interfaces.EntityHandlerIface;
+import de.ids_mannheim.korap.interfaces.db.EntityHandlerIface;
 import de.ids_mannheim.korap.user.KorAPUser;
 import de.ids_mannheim.korap.user.User;
 import de.ids_mannheim.korap.user.UserDetails;
diff --git a/src/main/java/de/ids_mannheim/korap/web/KustvaktBaseServer.java b/src/main/java/de/ids_mannheim/korap/web/KustvaktBaseServer.java
index c8961932..8686d73 100644
--- a/src/main/java/de/ids_mannheim/korap/web/KustvaktBaseServer.java
+++ b/src/main/java/de/ids_mannheim/korap/web/KustvaktBaseServer.java
@@ -14,6 +14,8 @@
 import org.eclipse.jetty.servlet.ServletHolder;
 import org.eclipse.jetty.util.ssl.SslContextFactory;
 
+import java.io.FileInputStream;
+
 /**
  * @author hanl
  * @date 01/06/2015
@@ -28,6 +30,9 @@
         else
             BeanConfiguration.loadClasspathContext();
 
+        BeanConfiguration.getBeans().getConfiguration().setPropertiesAsStream(
+                new FileInputStream(kargs.getProperties()));
+
         kargs.setRootPackages(
                 new String[] { "de.ids_mannheim.korap.web.service.light" });
         startServer(kargs);
@@ -46,6 +51,20 @@
                 case "--port":
                     kargs.setPort(Integer.valueOf(args[i + 1]));
                     break;
+                case "--props":
+                    kargs.setProperties(args[+1]);
+                    break;
+                case "--help":
+                    StringBuffer b = new StringBuffer();
+
+                    b.append("Parameter description: \n")
+                            .append("--config  <Path to spring configuration file> : Configuration file\n")
+                            .append("--port  <Server port> : Port under which the server is accessible \n")
+                            .append("--props  <Path to kustvakt properties> : list of configuration properties\n")
+                            .append("--help : This help menu\n");
+                    System.out.println(b.toString());
+                    System.out.println();
+                    break;
             }
         }
         return kargs;
@@ -104,6 +123,8 @@
         private boolean debug;
         @Getter
         private String config;
+        @Getter
+        private String properties;
         private int port;
         private SslContextFactory sslContext;
         private String[] rootPackages;
diff --git a/src/main/java/de/ids_mannheim/korap/web/utils/KustvaktResponseHandler.java b/src/main/java/de/ids_mannheim/korap/web/utils/KustvaktResponseHandler.java
index 1a52c3d..89ad245 100644
--- a/src/main/java/de/ids_mannheim/korap/web/utils/KustvaktResponseHandler.java
+++ b/src/main/java/de/ids_mannheim/korap/web/utils/KustvaktResponseHandler.java
@@ -3,7 +3,7 @@
 import de.ids_mannheim.korap.auditing.AuditRecord;
 import de.ids_mannheim.korap.exceptions.KustvaktException;
 import de.ids_mannheim.korap.exceptions.StatusCodes;
-import de.ids_mannheim.korap.interfaces.AuditingIface;
+import de.ids_mannheim.korap.interfaces.db.AuditingIface;
 import de.ids_mannheim.korap.response.Notifications;
 
 import javax.ws.rs.WebApplicationException;
diff --git a/src/main/resources/default-config.xml b/src/main/resources/default-config.xml
index 4f7d23b..983a69c 100644
--- a/src/main/resources/default-config.xml
+++ b/src/main/resources/default-config.xml
@@ -38,21 +38,24 @@
 
     <!-- props are injected from default-config.xml -->
     <bean id="kustvakt_config"
-          class="de.ids_mannheim.korap.ext.config.ExtConfiguration">
+          class="de.ids_mannheim.korap.config.KustvaktConfiguration">
         <property name="properties" ref="props"/>
     </bean>
 
     <bean id="dataSource"
-          class="org.springframework.jdbc.datasource.SingleConnectionDataSource"
+          class="org.apache.commons.dbcp2.BasicDataSource"
           lazy-init="true">
         <property name="driverClassName" value="${jdbc.driverClassName}"/>
         <property name="url" value="${jdbc.url}"/>
         <property name="username" value="${jdbc.username}"/>
         <property name="password" value="${jdbc.password}"/>
         <!-- relevant for single connection datasource and sqlite -->
-        <property name="suppressClose">
-            <value>true</value>
-        </property>
+        <!--<property name="suppressClose">-->
+            <!--<value>true</value>-->
+        <!--</property>-->
+        <property name="initialSize" value="1"/>
+        <property name="maxIdle" value="1"/>
+        <property name="poolPreparedStatements" value="true"/>
     </bean>
 
     <!-- to configure database for sqlite, mysql, etc. migrations -->
@@ -93,39 +96,39 @@
     </bean>
 
     <bean id="kustvakt_policies"
-          class="de.ids_mannheim.korap.ext.security.dataAccess.PolicyDao">
+          class="de.ids_mannheim.korap.security.ac.PolicyDao">
         <constructor-arg ref="kustvakt_db"/>
     </bean>
 
     <bean name="kustvakt_encryption"
-          class="de.ids_mannheim.korap.ext.security.encryption.KorAPEncryption">
+          class="de.ids_mannheim.korap.interfaces.defaults.KustvaktEncryption">
         <constructor-arg ref="kustvakt_config"/>
     </bean>
 
     <!-- authentication providers to use -->
     <bean id="api_auth"
-          class="de.ids_mannheim.korap.ext.security.authentication.APIAuthentication">
+          class="de.ids_mannheim.korap.security.auth.APIAuthentication">
         <constructor-arg
                 type="de.ids_mannheim.korap.config.KustvaktConfiguration"
                 ref="kustvakt_config"/>
     </bean>
 
     <bean id="openid_auth"
-          class="de.ids_mannheim.korap.ext.security.authentication.OpenIDconnectAuthentication">
+          class="de.ids_mannheim.korap.security.auth.OpenIDconnectAuthentication">
         <constructor-arg
                 type="de.ids_mannheim.korap.config.KustvaktConfiguration"
                 ref="kustvakt_config"/>
         <constructor-arg
-                type="de.ids_mannheim.korap.interfaces.PersistenceClient"
+                type="de.ids_mannheim.korap.interfaces.db.PersistenceClient"
                 ref="kustvakt_db"/>
     </bean>
 
     <bean id="basic_auth"
-          class="de.ids_mannheim.korap.ext.security.authentication.BasicHttpAuth"/>
+          class="de.ids_mannheim.korap.security.auth.BasicHttpAuth"/>
 
 
     <bean id="session_auth"
-          class="de.ids_mannheim.korap.ext.security.authentication.SessionAuthentication">
+          class="de.ids_mannheim.korap.security.auth.SessionAuthentication">
         <constructor-arg
                 type="de.ids_mannheim.korap.config.KustvaktConfiguration"
                 ref="kustvakt_config"/>
@@ -144,15 +147,16 @@
 
     <!-- specify type for constructor argument -->
     <bean id="kustvakt_authenticationmanager"
-          class="de.ids_mannheim.korap.ext.security.authentication.KustvaktAuthenticationManager">
+          class="de.ids_mannheim.korap.security.auth.KustvaktAuthenticationManager">
         <constructor-arg
-                type="de.ids_mannheim.korap.interfaces.EntityHandlerIface"
+                type="de.ids_mannheim.korap.interfaces.db.EntityHandlerIface"
                 ref="kustvakt_userdb"/>
         <constructor-arg type="de.ids_mannheim.korap.interfaces.EncryptionIface"
                          ref="kustvakt_encryption"/>
         <constructor-arg ref="kustvakt_config"/>
-        <constructor-arg type="de.ids_mannheim.korap.interfaces.AuditingIface"
-                         ref="kustvakt_auditing"/>
+        <constructor-arg
+                type="de.ids_mannheim.korap.interfaces.db.AuditingIface"
+                ref="kustvakt_auditing"/>
         <!-- inject authentication providers to use -->
         <property name="providers" ref="auth_providers"/>
     </bean>
@@ -174,7 +178,7 @@
         of an operation defined by the service interface -->
     <aop:config>
         <aop:pointcut id="service"
-                      expression="execution(* de.ids_mannheim.korap.interfaces.*.*(..))"/>
+                      expression="execution(* de.ids_mannheim.korap.interfaces.db.*.*(..))"/>
         <aop:advisor advice-ref="txAdvice" pointcut-ref="service"/>
     </aop:config>
 
diff --git a/src/main/resources/log4j.properties b/src/main/resources/log4j.properties
index 602c496..ff5d34c 100644
--- a/src/main/resources/log4j.properties
+++ b/src/main/resources/log4j.properties
@@ -1,7 +1,7 @@
 
 # Root logger option
 #log4j.threshold=ALL
-log4j.rootLogger=INFO, stdout, debugLog
+log4j.rootLogger=DEBUG, stdout, debugLog
 log4j.logger.log=ERROR, errorLog
 
 # Direct log messages to stdout
