diff --git a/core/src/test/java/de/ids_mannheim/korap/config/AppTestConfigBase.java b/core/src/test/java/de/ids_mannheim/korap/config/AppTestConfigBase.java
deleted file mode 100644
index 76db69e..0000000
--- a/core/src/test/java/de/ids_mannheim/korap/config/AppTestConfigBase.java
+++ /dev/null
@@ -1,39 +0,0 @@
-package de.ids_mannheim.korap.config;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.Properties;
-
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-
-@Configuration
-public class AppTestConfigBase {
-
-    private static String mainConfigurationFile = "kustvakt-test.conf";
-
-    @Bean(name = ContextHolder.KUSTVAKT_CONFIG)
-    public KustvaktConfiguration getConfig () {
-        
-        KustvaktConfiguration c = null;
-        
-        InputStream s = ConfigLoader.loadConfigStream(mainConfigurationFile);
-        
-        if (s != null){
-            Properties p = new Properties();
-            try {
-                p.load(s);
-                c = new KustvaktConfiguration(p);
-            }
-            catch (IOException e) {
-                e.printStackTrace();
-            }
-        }
-        else {
-            System.out.println("No properties found!");
-            System.exit(-1);
-        }
-        return c;
-    }
-
-}
diff --git a/core/src/test/java/de/ids_mannheim/korap/config/BeanConfigBaseTest.java b/core/src/test/java/de/ids_mannheim/korap/config/BeanConfigBaseTest.java
index 09bcee8..06cefe3 100644
--- a/core/src/test/java/de/ids_mannheim/korap/config/BeanConfigBaseTest.java
+++ b/core/src/test/java/de/ids_mannheim/korap/config/BeanConfigBaseTest.java
@@ -3,13 +3,11 @@
 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;
@@ -23,14 +21,14 @@
  */
 @NotThreadSafe
 @RunWith(BeanConfigBaseTest.SpringExtendedSetupListener.class)
-@ContextConfiguration(classes = AppTestConfigBase.class)
+@ContextConfiguration("classpath:test-config.xml")
 @DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_CLASS)
 public abstract class BeanConfigBaseTest {
 
     private static Logger jlog = Logger.getLogger(BeanConfigBaseTest.class);
     @Autowired
     protected ApplicationContext context;
-
+    
     public void init () throws Exception {
         assertNotNull("Application context must not be null!", this.context);
         jlog.debug("running one-time before init for class "
@@ -40,27 +38,14 @@
         initMethod();
     }
 
+    protected abstract ContextHolder getContext();
 
-    protected abstract ContextHolder getContext ();
-
-
+    public abstract void initMethod () throws KustvaktException;
+    
     public void close () {
         BeansFactory.closeApplication();
     }
 
-    public abstract void initMethod () throws KustvaktException;
-
-
-//    protected TestHelper helper () {
-//        try {
-//            return TestHelper.newInstance(this.context);
-//        }
-//        catch (Exception e) {
-//            return null;
-//        }
-//    }
-
-
     public static class SpringExtendedSetupListener extends
             SpringJUnit4ClassRunner {
 
@@ -89,10 +74,9 @@
         @Override
         public void run (RunNotifier notifier) {
             super.run(notifier);
-            if (instanceSetupListener != null)
+            if (instanceSetupListener != null){
                 instanceSetupListener.close();
+            }
         }
-
-
     }
 }
diff --git a/core/src/test/java/de/ids_mannheim/korap/web/service/FastJerseyBaseTest.java b/core/src/test/java/de/ids_mannheim/korap/web/service/FastJerseyBaseTest.java
index 625be6a..345ec96 100644
--- a/core/src/test/java/de/ids_mannheim/korap/web/service/FastJerseyBaseTest.java
+++ b/core/src/test/java/de/ids_mannheim/korap/web/service/FastJerseyBaseTest.java
@@ -1,5 +1,14 @@
 package de.ids_mannheim.korap.web.service;
 
+import java.net.URI;
+
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.UriBuilder;
+
+import org.junit.After;
+import org.junit.BeforeClass;
+import org.springframework.web.context.ContextLoaderListener;
+
 import com.sun.jersey.api.client.Client;
 import com.sun.jersey.api.client.WebResource;
 import com.sun.jersey.api.core.DefaultResourceConfig;
@@ -9,24 +18,12 @@
 import com.sun.jersey.test.framework.LowLevelAppDescriptor;
 import com.sun.jersey.test.framework.WebAppDescriptor;
 import com.sun.jersey.test.framework.spi.container.TestContainer;
-import com.sun.jersey.test.framework.spi.container.TestContainerException;
 import com.sun.jersey.test.framework.spi.container.TestContainerFactory;
 import com.sun.jersey.test.framework.spi.container.grizzly.GrizzlyTestContainerFactory;
 import com.sun.jersey.test.framework.spi.container.grizzly.web.GrizzlyWebTestContainerFactory;
+
 import de.ids_mannheim.korap.config.BeanConfigBaseTest;
 
-import org.junit.After;
-import org.junit.AfterClass;
-import org.junit.Before;
-import org.junit.BeforeClass;
-import org.springframework.web.context.ContextLoaderListener;
-
-import javax.ws.rs.core.Context;
-import javax.ws.rs.core.UriBuilder;
-import java.io.IOException;
-import java.net.BindException;
-import java.net.URI;
-
 /**
  * @author hanl
  * @date 29/07/2015
@@ -100,7 +97,7 @@
             ad = new WebAppDescriptor.Builder(classPackages)
                     .servletClass(SpringServlet.class)
                     .contextListenerClass(ContextLoaderListener.class)
-                    .contextParam("contextConfigLocation", "classpath:test-default-config.xml")
+                    .contextParam("contextConfigLocation", "classpath:test-config.xml")
                     .build();
 
         TestContainerFactory tcf = testContainerFactory;
@@ -119,12 +116,9 @@
         }
     }
 
-
-    
-
-
     @After
     public void stopServer () {
+        
         testContainer.stop();
         testContainer = null;
         client = null;
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
diff --git a/lite/src/main/resources/light-config.xml b/lite/src/main/resources/test-config.xml
similarity index 100%
rename from lite/src/main/resources/light-config.xml
rename to lite/src/main/resources/test-config.xml
