diff --git a/full/src/main/java/de/ids_mannheim/korap/handlers/JDBCAuditing.java b/full/src/main/java/de/ids_mannheim/korap/handlers/JDBCAuditing.java
index 88fc7e6..2aaa10f 100644
--- a/full/src/main/java/de/ids_mannheim/korap/handlers/JDBCAuditing.java
+++ b/full/src/main/java/de/ids_mannheim/korap/handlers/JDBCAuditing.java
@@ -1,17 +1,18 @@
 package de.ids_mannheim.korap.handlers;
 
-import de.ids_mannheim.korap.auditing.AuditRecord;
-import de.ids_mannheim.korap.interfaces.db.AuditingIface;
-import de.ids_mannheim.korap.interfaces.db.PersistenceClient;
-import de.ids_mannheim.korap.user.User;
+import java.sql.Timestamp;
+import java.util.List;
+
 import org.joda.time.DateTime;
 import org.joda.time.LocalDate;
 import org.springframework.jdbc.core.namedparam.MapSqlParameterSource;
 import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
 import org.springframework.jdbc.core.namedparam.SqlParameterSource;
 
-import java.sql.Timestamp;
-import java.util.List;
+import de.ids_mannheim.korap.auditing.AuditRecord;
+import de.ids_mannheim.korap.interfaces.db.AuditingIface;
+import de.ids_mannheim.korap.interfaces.db.PersistenceClient;
+import de.ids_mannheim.korap.user.User;
 
 /**
  * @author hanl
@@ -21,7 +22,6 @@
 
     private NamedParameterJdbcTemplate template;
 
-
     public JDBCAuditing (PersistenceClient client) {
         this.template = (NamedParameterJdbcTemplate) client.getSource();
     }
diff --git a/full/src/test/java/de/ids_mannheim/korap/config/AppTestConfig.java b/full/src/test/java/de/ids_mannheim/korap/config/AppTestConfig.java
deleted file mode 100644
index 591d631..0000000
--- a/full/src/test/java/de/ids_mannheim/korap/config/AppTestConfig.java
+++ /dev/null
@@ -1,140 +0,0 @@
-package de.ids_mannheim.korap.config;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Properties;
-import java.util.Set;
-
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-
-import de.ids_mannheim.korap.handlers.AdminDao;
-import de.ids_mannheim.korap.handlers.DocumentDao;
-import de.ids_mannheim.korap.handlers.EntityDao;
-import de.ids_mannheim.korap.handlers.JDBCAuditing;
-import de.ids_mannheim.korap.handlers.ResourceDao;
-import de.ids_mannheim.korap.handlers.UserDetailsDao;
-import de.ids_mannheim.korap.handlers.UserSettingsDao;
-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.AdminHandlerIface;
-import de.ids_mannheim.korap.interfaces.db.AuditingIface;
-import de.ids_mannheim.korap.interfaces.db.EntityHandlerIface;
-import de.ids_mannheim.korap.interfaces.db.PersistenceClient;
-import de.ids_mannheim.korap.interfaces.db.PolicyHandlerIface;
-import de.ids_mannheim.korap.interfaces.db.ResourceOperationIface;
-import de.ids_mannheim.korap.interfaces.db.UserDataDbIface;
-import de.ids_mannheim.korap.interfaces.defaults.KustvaktEncryption;
-import de.ids_mannheim.korap.security.ac.PolicyDao;
-import de.ids_mannheim.korap.security.auth.APIAuthentication;
-import de.ids_mannheim.korap.security.auth.BasicHttpAuth;
-import de.ids_mannheim.korap.security.auth.KustvaktAuthenticationManager;
-import de.ids_mannheim.korap.security.auth.OpenIDconnectAuthentication;
-import de.ids_mannheim.korap.security.auth.SessionAuthentication;
-
-public class AppTestConfig extends AppTestConfigBase implements TestBeans {
-
-    protected PersistenceClient dataSource;
-
-    public AppTestConfig () throws InterruptedException, IOException {
-        this.dataSource = TestHelper.sqlite_db(true);
-        //this.dataSource = TestHelper.mysql_db();
-    }
-
-
-    @Bean(name = "kustvakt_db")
-    public PersistenceClient getDataSource () {
-        return this.dataSource;
-    }
-
-
-    @Bean(name = ContextHolder.KUSTVAKT_POLICIES)
-    @Override
-    public PolicyHandlerIface getPolicyDao () {
-        return new PolicyDao(this.dataSource);
-    }
-
-
-    @Bean(name = ContextHolder.KUSTVAKT_USERDB)
-    @Override
-    public EntityHandlerIface getUserDao () {
-        return new EntityDao(this.dataSource);
-    }
-
-
-    @Bean(name = ContextHolder.KUSTVAKT_ADMINDB)
-    @Override
-    public AdminHandlerIface getAdminDao () {
-        return new AdminDao(this.dataSource);
-    }
-
-
-
-    @Bean(name = ContextHolder.KUSTVAKT_AUDITING)
-    @Override
-    public AuditingIface getAuditingDao () {
-        return new JDBCAuditing(this.dataSource);
-    }
-
-
-    @Bean(name = ContextHolder.KUSTVAKT_RESOURCES)
-    @Override
-    public List<ResourceOperationIface> getResourceDaos () {
-        List<ResourceOperationIface> res = new ArrayList<>();
-        res.add(getDocumentDao());
-        res.add(getResourceDao());
-        return res;
-    }
-    
-    @Bean(name = "document_dao")
-    public DocumentDao getDocumentDao () {
-        return new DocumentDao(getDataSource());
-    }
-
-    
-    @Bean(name = "resource_dao")
-    public ResourceDao getResourceDao () {
-        return new ResourceDao(getDataSource());
-    }
-
-
-
-    @Bean(name = ContextHolder.KUSTVAKT_USERDATA)
-    @Override
-    public List<UserDataDbIface> getUserdataDaos () {
-        List<UserDataDbIface> ud = new ArrayList<>();
-        ud.add(new UserSettingsDao(getDataSource()));
-        ud.add(new UserDetailsDao(getDataSource()));
-        return ud;
-    }
-
-
-    @Bean(name = ContextHolder.KUSTVAKT_ENCRYPTION)
-    @Override
-    public EncryptionIface getCrypto () {
-        return new KustvaktEncryption(getConfig());
-    }
-
-
-    @Bean(name = ContextHolder.KUSTVAKT_AUTHENTICATION_MANAGER)
-    @Override
-    public AuthenticationManagerIface getAuthManager () {
-        AuthenticationManagerIface manager = new KustvaktAuthenticationManager(
-                getUserDao(), getAdminDao(), getCrypto(), getConfig(),
-                getAuditingDao(), getUserdataDaos());
-        Set<AuthenticationIface> pro = new HashSet<>();
-        pro.add(new BasicHttpAuth());
-        pro.add(new APIAuthentication(getConfig()));
-        pro.add(new SessionAuthentication(getConfig(), getCrypto()));
-        pro.add(new OpenIDconnectAuthentication(getConfig(), getDataSource()));
-        manager.setProviders(pro);
-        return manager;
-    }
-
-}
-
-
diff --git a/full/src/test/java/de/ids_mannheim/korap/config/BeanConfigTest.java b/full/src/test/java/de/ids_mannheim/korap/config/BeanConfigTest.java
index 868b901..ff19b62 100644
--- a/full/src/test/java/de/ids_mannheim/korap/config/BeanConfigTest.java
+++ b/full/src/test/java/de/ids_mannheim/korap/config/BeanConfigTest.java
@@ -1,57 +1,16 @@
 package de.ids_mannheim.korap.config;
 
-import static org.junit.Assert.assertNotNull;
-
-import org.apache.log4j.Logger;
-import org.junit.Before;
-import org.junit.runner.RunWith;
-import org.junit.runner.notification.RunNotifier;
-import org.junit.runners.model.InitializationError;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.ApplicationContext;
-import org.springframework.context.support.ClassPathXmlApplicationContext;
-import org.springframework.test.annotation.DirtiesContext;
-import org.springframework.test.context.ContextConfiguration;
-import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
-
-import de.ids_mannheim.korap.exceptions.KustvaktException;
-import net.jcip.annotations.NotThreadSafe;
-
 /**
  * @author hanl
  * @date 09/03/2016
  */
-@NotThreadSafe
-@RunWith(BeanConfigTest.SpringExtendedSetupListener.class)
-//@ContextConfiguration(classes = AppTestConfig.class)
-@ContextConfiguration("classpath:test-default-config.xml")
-@DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_CLASS)
-public abstract class BeanConfigTest {
+public abstract class BeanConfigTest extends BeanConfigBaseTest{
 
-    private static Logger jlog = Logger.getLogger(BeanConfigTest.class);
-    @Autowired
-    private ApplicationContext context;
-
-
-//    @Before
-    public void init () throws Exception {
-//        context = new ClassPathXmlApplicationContext("test-default-config.xml");
-        assertNotNull("Application context must not be null!", this.context);
-        jlog.debug("running one-time before init for class "
-                + this.getClass().getSimpleName() + " ...");
-        BeansFactory.setKustvaktContext(helper().getContext());
-        assertNotNull(BeansFactory.getKustvaktContext());
-        initMethod();
+    @Override
+    protected ContextHolder getContext () {
+        return helper().getContext();
     }
 
-
-    public void close () {
-        BeansFactory.closeApplication();
-    }
-
-    public abstract void initMethod () throws KustvaktException;
-
-
     protected TestHelper helper () {
         try {
             return TestHelper.newInstance(this.context);
@@ -61,39 +20,4 @@
         }
     }
 
-
-    public static class SpringExtendedSetupListener extends
-            SpringJUnit4ClassRunner {
-
-        private BeanConfigTest instanceSetupListener;
-
-
-        public SpringExtendedSetupListener (Class<?> clazz)
-                throws InitializationError {
-            super(clazz);
-        }
-
-
-        @Override
-        protected Object createTest () throws Exception {
-            Object test = super.createTest();
-            // Note that JUnit4 will call this createTest() multiple times for each
-            // test method, so we need to ensure to call "beforeClassSetup" only once.
-            if (test instanceof BeanConfigTest && instanceSetupListener == null) {
-                instanceSetupListener = (BeanConfigTest) test;
-                instanceSetupListener.init();
-            }
-            return test;
-        }
-
-
-        @Override
-        public void run (RunNotifier notifier) {
-            super.run(notifier);
-            if (instanceSetupListener != null)
-                instanceSetupListener.close();
-        }
-
-
-    }
 }
diff --git a/full/src/test/java/de/ids_mannheim/korap/config/BeanInjectTest.java b/full/src/test/java/de/ids_mannheim/korap/config/BeanInjectTest.java
index f840d71..574efc9 100644
--- a/full/src/test/java/de/ids_mannheim/korap/config/BeanInjectTest.java
+++ b/full/src/test/java/de/ids_mannheim/korap/config/BeanInjectTest.java
@@ -21,11 +21,9 @@
  */
 public class BeanInjectTest {
 
-
-
     @Test
     public void testUserBeans () {
-        BeansFactory.loadClasspathContext("test-default-config.xml");
+        BeansFactory.loadClasspathContext("test-config.xml");
         Collection coll = BeansFactory.getKustvaktContext()
                 .getUserDataProviders();
         assertFalse(coll.isEmpty());
@@ -42,7 +40,7 @@
 
     @Test
     public void testResourceBeans () {
-        BeansFactory.loadClasspathContext("test-default-config.xml");
+        BeansFactory.loadClasspathContext("test-config.xml");
         Collection coll = BeansFactory.getKustvaktContext()
                 .getResourceProviders();
         assertFalse(coll.isEmpty());
diff --git a/full/src/test/java/de/ids_mannheim/korap/config/TestHelper.java b/full/src/test/java/de/ids_mannheim/korap/config/TestHelper.java
index a490dfe..53a5f7b 100644
--- a/full/src/test/java/de/ids_mannheim/korap/config/TestHelper.java
+++ b/full/src/test/java/de/ids_mannheim/korap/config/TestHelper.java
@@ -47,7 +47,6 @@
  */
 public class TestHelper {
 
-    private static String mainConfigurationFile = "kustvakt-test.conf";
     private static Logger jlog = LoggerFactory.getLogger(TestHelper.class);
     private static final Map<String, Object> data = new HashMap<>();
     static  {
@@ -261,7 +260,8 @@
 
     }
 
-
+    // EM: use Spring XML config
+    @Deprecated
     private static PersistenceClient mysql_db () throws IOException {
         BasicDataSource dataSource = new BasicDataSource();
         dataSource.setDriverClassName("com.mysql.jdbc.Driver");
@@ -279,7 +279,8 @@
         return client;
     }
 
-
+    // EM: use Spring XML config
+    @Deprecated
     protected static PersistenceClient sqlite_db (boolean memory)
             throws InterruptedException {
         SingleConnectionDataSource dataSource = new SingleConnectionDataSource();
@@ -308,7 +309,8 @@
         return client;
     }
 
-
+    // EM: use Spring XML config
+    @Deprecated
     public static PersistenceClient sqlite_db_norm (boolean memory) {
         BasicDataSource dataSource = new BasicDataSource();
         dataSource.setDriverClassName("org.sqlite.JDBC");
@@ -336,7 +338,8 @@
         return client;
     }
 
-
+    // EM: use Spring XML config
+    @Deprecated
     public static PersistenceClient h2_emb () throws SQLException {
         BasicDataSource dataSource = new BasicDataSource();
         dataSource.setUrl("jdbc:h2:mem:");
diff --git a/full/src/test/java/de/ids_mannheim/korap/web/service/FastJerseyTest.java b/full/src/test/java/de/ids_mannheim/korap/web/service/FastJerseyTest.java
index 0ccd639..5ba2749 100644
--- a/full/src/test/java/de/ids_mannheim/korap/web/service/FastJerseyTest.java
+++ b/full/src/test/java/de/ids_mannheim/korap/web/service/FastJerseyTest.java
@@ -2,22 +2,24 @@
 
 import org.junit.Before;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.ApplicationContext;
-import org.springframework.test.context.ContextConfiguration;
 
-import de.ids_mannheim.korap.config.AppTestConfig;
 import de.ids_mannheim.korap.config.ContextHolder;
 import de.ids_mannheim.korap.config.TestHelper;
 
-@ContextConfiguration(classes = AppTestConfig.class)
 public abstract class FastJerseyTest extends FastJerseyBaseTest {
 
-    private static String[] classPackages = new String[]{
-            "de.ids_mannheim.korap.web.service.full",
-            "de.ids_mannheim.korap.web.filter",
-            "de.ids_mannheim.korap.web.utils"};
+    private static String[] classPackages =
+            new String[] { "de.ids_mannheim.korap.web.service.full",
+                    "de.ids_mannheim.korap.web.filter",
+                    "de.ids_mannheim.korap.web.utils" };
 
 
+    @Override
+    public void close () {
+        super.close();
+        
+    }
+    
     protected TestHelper helper () {
         try {
             return TestHelper.newInstance(this.context);
@@ -26,13 +28,14 @@
             return null;
         }
     }
-    
-    
+
+
     @Override
     protected ContextHolder getContext () {
         return helper().getContext();
-    } 
-    
+    }
+
+
     public static void startServer () {
         try {
             if (testContainer != null) {
@@ -44,12 +47,14 @@
             startServer();
         }
     }
-    
+
+
     @Before
     public void startServerBeforeFirstTestRun () {
         if (testContainer == null) {
-            initServer(PORT,classPackages);
+            initServer(PORT, classPackages);
             startServer();
         }
     }
+
 }
diff --git a/full/src/test/java/de/ids_mannheim/korap/web/service/full/UserServiceTest.java b/full/src/test/java/de/ids_mannheim/korap/web/service/full/UserServiceTest.java
index 4891c0b..8d94185 100644
--- a/full/src/test/java/de/ids_mannheim/korap/web/service/full/UserServiceTest.java
+++ b/full/src/test/java/de/ids_mannheim/korap/web/service/full/UserServiceTest.java
@@ -1,32 +1,9 @@
 package de.ids_mannheim.korap.web.service.full;
 
-import com.fasterxml.jackson.databind.JsonNode;
-import com.nimbusds.jwt.SignedJWT;
-import com.sun.jersey.api.client.ClientResponse;
-import com.sun.jersey.api.client.WebResource;
-import com.sun.jersey.core.util.MultivaluedMapImpl;
-
-import de.ids_mannheim.korap.config.BeansFactory;
-import de.ids_mannheim.korap.config.JWTSigner;
-import de.ids_mannheim.korap.config.TestHelper;
-import de.ids_mannheim.korap.exceptions.KustvaktException;
-import de.ids_mannheim.korap.exceptions.StatusCodes;
-import de.ids_mannheim.korap.security.auth.BasicHttpAuth;
-import de.ids_mannheim.korap.config.Attributes;
-import de.ids_mannheim.korap.utils.JsonUtils;
-import de.ids_mannheim.korap.utils.TimeUtils;
-import de.ids_mannheim.korap.web.service.FastJerseyTest;
-
-import org.apache.commons.collections.map.HashedMap;
-import org.apache.commons.collections.map.LinkedMap;
-import org.joda.time.DateTime;
-import org.junit.Assert;
-import org.junit.BeforeClass;
-import org.junit.Ignore;
-import org.junit.Test;
-
-import javax.ws.rs.core.MediaType;
-import javax.ws.rs.core.MultivaluedMap;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
 
 import java.io.IOException;
 import java.net.URI;
@@ -34,7 +11,29 @@
 import java.util.HashMap;
 import java.util.Map;
 
-import static org.junit.Assert.*;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.MultivaluedMap;
+
+import org.apache.commons.collections.map.LinkedMap;
+import org.junit.BeforeClass;
+import org.junit.Ignore;
+import org.junit.Test;
+
+import com.fasterxml.jackson.databind.JsonNode;
+import com.nimbusds.jwt.SignedJWT;
+import com.sun.jersey.api.client.ClientResponse;
+import com.sun.jersey.core.util.MultivaluedMapImpl;
+
+import de.ids_mannheim.korap.config.Attributes;
+import de.ids_mannheim.korap.config.BeansFactory;
+import de.ids_mannheim.korap.config.JWTSigner;
+import de.ids_mannheim.korap.config.TestHelper;
+import de.ids_mannheim.korap.exceptions.KustvaktException;
+import de.ids_mannheim.korap.exceptions.StatusCodes;
+import de.ids_mannheim.korap.security.auth.BasicHttpAuth;
+import de.ids_mannheim.korap.utils.JsonUtils;
+import de.ids_mannheim.korap.utils.TimeUtils;
+import de.ids_mannheim.korap.web.service.FastJerseyTest;
 
 /**
  * @author hanl
diff --git a/full/src/test/resources/test-default-config.xml b/full/src/test/resources/test-config.xml
similarity index 100%
rename from full/src/test/resources/test-default-config.xml
rename to full/src/test/resources/test-config.xml
