diff --git a/src/test/java/de/ids_mannheim/korap/config/ConfigTest.java b/src/test/java/de/ids_mannheim/korap/config/ConfigTest.java
index b8e0973..925a350 100644
--- a/src/test/java/de/ids_mannheim/korap/config/ConfigTest.java
+++ b/src/test/java/de/ids_mannheim/korap/config/ConfigTest.java
@@ -1,12 +1,19 @@
 package de.ids_mannheim.korap.config;
 
 import de.ids_mannheim.korap.exceptions.KustvaktException;
+import de.ids_mannheim.korap.handlers.CollectionDao;
+import de.ids_mannheim.korap.resources.VirtualCollection;
+import de.ids_mannheim.korap.security.ac.ResourceFinder;
+import de.ids_mannheim.korap.user.User;
 import de.ids_mannheim.korap.utils.ServiceVersion;
 import de.ids_mannheim.korap.utils.TimeUtils;
 import org.junit.After;
 import org.junit.Assert;
+import org.junit.Before;
 import org.junit.Test;
 
+import java.util.Set;
+
 /**
  * @author hanl
  * @date 02/09/2015
@@ -18,10 +25,33 @@
         BeanConfiguration.closeApplication();
     }
 
-
-    @Test
+    @Before
     public void create() {
         BeanConfiguration.loadClasspathContext("default-config.xml");
+        //        PersistenceClient cl = BeanConfiguration.getBeans()
+        //                .getPersistenceClient();
+        //        Set<ResourceOperationIface> ifaces = new HashSet<>();
+        //        ifaces.add(new ResourceDao(cl));
+        //        ifaces.add(new CollectionDao(cl));
+        //
+        //        SecurityManager.setProviders(new PolicyDao(cl),
+        //                BeanConfiguration.getBeans().getEncryption(), ifaces);
+        //        ResourceFinder.setProviders(new PolicyDao(cl));
+        TestHelper.runBootInterfaces();
+    }
+
+    @Test
+    public void testCollectionLoader() throws KustvaktException {
+        CollectionDao dao = new CollectionDao(
+                BeanConfiguration.getBeans().getPersistenceClient());
+        int size = dao.size();
+        Assert.assertNotEquals("Is not supposed to be zero", size, 0);
+        Assert.assertEquals("wrong size", size, 3);
+
+        Set<VirtualCollection> set = ResourceFinder.search(User.UserFactory
+                        .toUser(KustvaktConfiguration.KUSTVAKT_USER),
+                VirtualCollection.class);
+        System.out.println("RESULTING SET: " + set);
     }
 
     @Test
diff --git a/src/test/java/de/ids_mannheim/korap/config/UserTestHelper.java b/src/test/java/de/ids_mannheim/korap/config/TestHelper.java
similarity index 65%
rename from src/test/java/de/ids_mannheim/korap/config/UserTestHelper.java
rename to src/test/java/de/ids_mannheim/korap/config/TestHelper.java
index 91bc3fe..2d599f1 100644
--- a/src/test/java/de/ids_mannheim/korap/config/UserTestHelper.java
+++ b/src/test/java/de/ids_mannheim/korap/config/TestHelper.java
@@ -5,6 +5,7 @@
 import de.ids_mannheim.korap.interfaces.db.PersistenceClient;
 import de.ids_mannheim.korap.user.Attributes;
 import de.ids_mannheim.korap.user.User;
+import de.ids_mannheim.korap.web.service.BootupInterface;
 import org.junit.Assert;
 import org.springframework.jdbc.core.RowCallbackHandler;
 import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
@@ -19,12 +20,12 @@
  * @author hanl
  * @date 16/10/2015
  */
-public class UserTestHelper {
+public class TestHelper {
 
     private static final String[] credentials = new String[] { "test1",
             "testPass2015" };
 
-    public static boolean setup() {
+    public static boolean setupUser() {
         boolean r = BeanConfiguration.hasContext();
         if (r) {
             EntityHandlerIface dao = BeanConfiguration.getBeans()
@@ -46,7 +47,7 @@
         return r;
     }
 
-    public static boolean drop() {
+    public static boolean dropUser() {
         boolean r = BeanConfiguration.hasContext();
         if (r) {
             EntityHandlerIface dao = BeanConfiguration.getBeans()
@@ -61,7 +62,7 @@
         return r;
     }
 
-    public static boolean truncateAll() {
+    public static boolean truncateAllUsers() {
         boolean r = BeanConfiguration.hasContext();
         if (r) {
             String sql = "SELECT Concat('TRUNCATE TABLE ', TABLE_NAME) FROM INFORMATION_SCHEMA.TABLES";
@@ -85,11 +86,46 @@
         return r;
     }
 
-    public static final String[] getCredentials() {
+    public static final String[] getUserCredentials() {
         return Arrays.copyOf(credentials, 2);
     }
 
-    private UserTestHelper() {
+
+    public static void runBootInterfaces() {
+        Set<Class<? extends BootupInterface>> set = KustvaktClassLoader
+                .loadSubTypes(BootupInterface.class);
+
+        List<BootupInterface> list = new ArrayList<>(set.size());
+
+        PersistenceClient client = BeanConfiguration.getBeans()
+                .getPersistenceClient();
+        if (client.checkDatabase()) {
+            for (Class cl : set) {
+                BootupInterface iface;
+                try {
+                    iface = (BootupInterface) cl.newInstance();
+                    if (iface.position() == -1 | iface.position() > set.size())
+                        list.add(iface);
+                    else
+                        list.add(0, iface);
+                }catch (InstantiationException | IllegalAccessException e) {
+                    continue;
+                }
+            }
+            System.out.println("Found boot loading interfaces: " + list);
+            for (BootupInterface iface : list) {
+                try {
+                    iface.load();
+                }catch (KustvaktException e) {
+                    // don't do anything!
+                }
+            }
+        }
+    }
+
+
+
+    private TestHelper() {
     }
 
 }
diff --git a/src/test/java/de/ids_mannheim/korap/web/service/KustvaktResourceServiceTest.java b/src/test/java/de/ids_mannheim/korap/web/service/KustvaktResourceServiceTest.java
index f45108a..1356a58 100644
--- a/src/test/java/de/ids_mannheim/korap/web/service/KustvaktResourceServiceTest.java
+++ b/src/test/java/de/ids_mannheim/korap/web/service/KustvaktResourceServiceTest.java
@@ -3,10 +3,10 @@
 import com.fasterxml.jackson.databind.JsonNode;
 import com.sun.jersey.api.client.ClientResponse;
 import de.ids_mannheim.korap.config.BeanConfiguration;
+import de.ids_mannheim.korap.config.TestHelper;
 import de.ids_mannheim.korap.security.auth.BasicHttpAuth;
 import de.ids_mannheim.korap.user.Attributes;
 import de.ids_mannheim.korap.utils.JsonUtils;
-import de.ids_mannheim.korap.web.KustvaktBaseServer;
 import org.junit.AfterClass;
 import org.junit.BeforeClass;
 import org.junit.Test;
@@ -24,7 +24,7 @@
                 "de.ids_mannheim.korap.web.filter",
                 "de.ids_mannheim.korap.web.utils");
 
-        KustvaktBaseServer.runPreStart();
+        TestHelper.runBootInterfaces();
     }
 
     @AfterClass
diff --git a/src/test/java/de/ids_mannheim/korap/web/service/OAuth2EndpointTest.java b/src/test/java/de/ids_mannheim/korap/web/service/OAuth2EndpointTest.java
index 0afd8ee..576eee0 100644
--- a/src/test/java/de/ids_mannheim/korap/web/service/OAuth2EndpointTest.java
+++ b/src/test/java/de/ids_mannheim/korap/web/service/OAuth2EndpointTest.java
@@ -3,7 +3,7 @@
 import com.fasterxml.jackson.databind.JsonNode;
 import com.sun.jersey.api.client.ClientResponse;
 import de.ids_mannheim.korap.config.BeanConfiguration;
-import de.ids_mannheim.korap.config.UserTestHelper;
+import de.ids_mannheim.korap.config.TestHelper;
 import de.ids_mannheim.korap.security.auth.BasicHttpAuth;
 import de.ids_mannheim.korap.user.Attributes;
 import de.ids_mannheim.korap.utils.JsonUtils;
@@ -21,7 +21,7 @@
 
     @AfterClass
     public static void close() {
-        UserTestHelper.drop();
+        TestHelper.dropUser();
         BeanConfiguration.closeApplication();
     }
 
@@ -32,8 +32,8 @@
                 "de.ids_mannheim.korap.web.filter",
                 "de.ids_mannheim.korap.web.utils");
 
-        UserTestHelper.setup();
-        credentials = UserTestHelper.getCredentials();
+        TestHelper.setupUser();
+        credentials = TestHelper.getUserCredentials();
     }
 
 //    @Test
