diff --git a/src/test/java/de/ids_mannheim/korap/config/CollectionLoaderTest.java b/src/test/java/de/ids_mannheim/korap/config/CollectionLoaderTest.java
new file mode 100644
index 0000000..1b3a4ea
--- /dev/null
+++ b/src/test/java/de/ids_mannheim/korap/config/CollectionLoaderTest.java
@@ -0,0 +1,46 @@
+package de.ids_mannheim.korap.config;
+
+import de.ids_mannheim.korap.exceptions.KustvaktException;
+import de.ids_mannheim.korap.handlers.ResourceDao;
+import de.ids_mannheim.korap.web.service.CollectionLoader;
+import de.ids_mannheim.korap.web.service.UserLoader;
+import org.junit.AfterClass;
+import org.junit.Assert;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+/**
+ * @author hanl
+ * @date 11/02/2016
+ */
+public class CollectionLoaderTest {
+
+    @AfterClass
+    public static void close() {
+        BeanConfiguration.closeApplication();
+    }
+
+    @BeforeClass
+    public static void create() {
+        BeanConfiguration.loadClasspathContext("default-config.xml");
+    }
+
+    @Test
+    public void testCollectionLoader() {
+        ResourceDao dao = new ResourceDao(
+                BeanConfiguration.getBeans().getPersistenceClient());
+
+        boolean error = false;
+        UserLoader u = new UserLoader();
+        CollectionLoader l = new CollectionLoader();
+        try {
+            u.load();
+            l.load();
+        }catch (KustvaktException e) {
+            error = true;
+        }
+        assert !error;
+        Assert.assertNotEquals("Is not supposed to be zero", 0, dao.size());
+
+    }
+}
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 d4f2ad5..9c10da4 100644
--- a/src/test/java/de/ids_mannheim/korap/config/ConfigTest.java
+++ b/src/test/java/de/ids_mannheim/korap/config/ConfigTest.java
@@ -1,13 +1,10 @@
 package de.ids_mannheim.korap.config;
 
 import de.ids_mannheim.korap.exceptions.KustvaktException;
-import de.ids_mannheim.korap.handlers.ResourceDao;
-import de.ids_mannheim.korap.resources.VirtualCollection;
-import de.ids_mannheim.korap.security.ac.ResourceFinder;
 import de.ids_mannheim.korap.user.Attributes;
-import de.ids_mannheim.korap.user.User;
 import de.ids_mannheim.korap.utils.ServiceVersion;
 import de.ids_mannheim.korap.utils.TimeUtils;
+import de.ids_mannheim.korap.web.Arg;
 import org.junit.After;
 import org.junit.Assert;
 import org.junit.Before;
@@ -32,20 +29,6 @@
     }
 
     @Test
-    public void testCollectionLoader() throws KustvaktException {
-        TestHelper.runBootInterfaces();
-        ResourceDao dao = new ResourceDao(
-                BeanConfiguration.getBeans().getPersistenceClient());
-        int size = dao.size();
-        Assert.assertNotEquals("Is not supposed to be zero", 0, size);
-
-        Set<VirtualCollection> set = ResourceFinder.search(User.UserFactory
-                        .toUser(KustvaktConfiguration.KUSTVAKT_USER),
-                VirtualCollection.class);
-        System.out.println("RESULTING SET: " + set);
-    }
-
-    @Test
     public void testServiceVersion() {
         String v = ServiceVersion.getAPIVersion();
         Assert.assertNotEquals("wrong version", "UNKNOWN", v);
@@ -76,6 +59,24 @@
         BeanConfiguration.getBeans().getEncryption()
                 .validateEntry(v, Attributes.EMAIL);
     }
+
+    @Test
+    public void testArgLoader() {
+        String[] args = new String[] { "--port", "8080", "--config",
+                "local.conf", "--init" };
+        Set<Arg> s = Arg.loadArgs(args);
+        assert s.size() == 3;
+
+        for (Arg arg : s) {
+            if (arg instanceof Arg.PortArg)
+                assert ((Arg.PortArg) arg).getValue() == 8080;
+            if (arg instanceof Arg.ConfigArg)
+                assert ((Arg.ConfigArg) arg).getValue().equals("local.conf");
+            if (arg instanceof Arg.InitArg)
+                assert ((Arg.InitArg) arg).getValue();
+        }
+    }
+
 }
 
 
diff --git a/src/test/java/de/ids_mannheim/korap/config/PolicyLoaderTest.java b/src/test/java/de/ids_mannheim/korap/config/PolicyLoaderTest.java
new file mode 100644
index 0000000..866a5e1
--- /dev/null
+++ b/src/test/java/de/ids_mannheim/korap/config/PolicyLoaderTest.java
@@ -0,0 +1,48 @@
+package de.ids_mannheim.korap.config;
+
+import de.ids_mannheim.korap.exceptions.KustvaktException;
+import de.ids_mannheim.korap.security.ac.PolicyDao;
+import de.ids_mannheim.korap.web.service.CollectionLoader;
+import de.ids_mannheim.korap.web.service.PolicyLoader;
+import de.ids_mannheim.korap.web.service.UserLoader;
+import org.junit.AfterClass;
+import org.junit.Assert;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+/**
+ * @author hanl
+ * @date 11/02/2016
+ */
+public class PolicyLoaderTest {
+
+    @AfterClass
+    public static void close() {
+        BeanConfiguration.closeApplication();
+    }
+
+    @BeforeClass
+    public static void create() {
+        BeanConfiguration.loadClasspathContext("default-config.xml");
+    }
+
+    @Test
+    public void testUserLoader() {
+        boolean error = false;
+        UserLoader u = new UserLoader();
+        CollectionLoader c = new CollectionLoader();
+        PolicyLoader l = new PolicyLoader();
+        try {
+            u.load();
+            c.load();
+            l.load();
+        }catch (KustvaktException e) {
+            error = true;
+        }
+        assert !error;
+
+        PolicyDao dao = new PolicyDao(
+                BeanConfiguration.getBeans().getPersistenceClient());
+        Assert.assertNotEquals("Is not supposed to be zero", 0, dao.size());
+    }
+}
diff --git a/src/test/java/de/ids_mannheim/korap/config/TestHelper.java b/src/test/java/de/ids_mannheim/korap/config/TestHelper.java
index cc180f3..faa38ac 100644
--- a/src/test/java/de/ids_mannheim/korap/config/TestHelper.java
+++ b/src/test/java/de/ids_mannheim/korap/config/TestHelper.java
@@ -1,8 +1,10 @@
 package de.ids_mannheim.korap.config;
 
 import de.ids_mannheim.korap.exceptions.KustvaktException;
+import de.ids_mannheim.korap.handlers.ResourceDao;
 import de.ids_mannheim.korap.interfaces.db.EntityHandlerIface;
 import de.ids_mannheim.korap.interfaces.db.PersistenceClient;
+import de.ids_mannheim.korap.resources.KustvaktResource;
 import de.ids_mannheim.korap.user.Attributes;
 import de.ids_mannheim.korap.user.User;
 import de.ids_mannheim.korap.web.service.BootupInterface;
@@ -29,7 +31,8 @@
 
     public static boolean setupAccount() {
         boolean r = BeanConfiguration.hasContext();
-        if (r && BeanConfiguration.getBeans().getUserDBHandler().size() == 0) {
+        if (r && ((KustvaktBaseDaoInterface) BeanConfiguration.getBeans()
+                .getUserDBHandler()).size() == 0) {
             EntityHandlerIface dao = BeanConfiguration.getBeans()
                     .getUserDBHandler();
             Map m = new HashMap<>();
@@ -57,7 +60,8 @@
 
     public static boolean setupSimpleAccount(String username, String password) {
         boolean r = BeanConfiguration.hasContext();
-        if (r && BeanConfiguration.getBeans().getUserDBHandler().size() == 0) {
+        if (r && ((KustvaktBaseDaoInterface) BeanConfiguration.getBeans()
+                .getUserDBHandler()).size() == 0) {
             EntityHandlerIface dao = BeanConfiguration.getBeans()
                     .getUserDBHandler();
             Map m = new HashMap<>();
@@ -184,12 +188,36 @@
                     iface.load();
                 }catch (KustvaktException e) {
                     // don't do anything!
+                    System.out.println(
+                            "Loader instance failed ... exiting programme!");
+                    System.exit(-1);
                 }
             }
         }else
             throw new RuntimeException("Client not setup properly!");
     }
 
+    public static void setupResource(KustvaktResource resource, User user)
+            throws KustvaktException {
+        ResourceDao dao = new ResourceDao(
+                BeanConfiguration.getBeans().getPersistenceClient());
+        dao.storeResource(resource, user);
+    }
+
+    public static KustvaktResource getResource(String name)
+            throws KustvaktException {
+        ResourceDao dao = new ResourceDao(
+                BeanConfiguration.getBeans().getPersistenceClient());
+        return dao.findbyId(name, getUser());
+    }
+
+    public static void dropResource(String name) throws KustvaktException {
+        ResourceDao dao = new ResourceDao(
+                BeanConfiguration.getBeans().getPersistenceClient());
+        dao.deleteResource(name, null);
+
+    }
+
     private TestHelper() {
     }
 
diff --git a/src/test/java/de/ids_mannheim/korap/config/UserLoaderTest.java b/src/test/java/de/ids_mannheim/korap/config/UserLoaderTest.java
new file mode 100644
index 0000000..8b33f2f
--- /dev/null
+++ b/src/test/java/de/ids_mannheim/korap/config/UserLoaderTest.java
@@ -0,0 +1,42 @@
+package de.ids_mannheim.korap.config;
+
+import de.ids_mannheim.korap.exceptions.KustvaktException;
+import de.ids_mannheim.korap.handlers.EntityDao;
+import de.ids_mannheim.korap.web.service.UserLoader;
+import org.junit.AfterClass;
+import org.junit.Assert;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+/**
+ * @author hanl
+ * @date 11/02/2016
+ */
+public class UserLoaderTest {
+
+    @AfterClass
+    public static void close() {
+        BeanConfiguration.closeApplication();
+    }
+
+    @BeforeClass
+    public static void create() {
+        BeanConfiguration.loadClasspathContext("default-config.xml");
+    }
+
+    @Test
+    public void testUserLoader() {
+        EntityDao dao = new EntityDao(
+                BeanConfiguration.getBeans().getPersistenceClient());
+
+        boolean error = false;
+        UserLoader l = new UserLoader();
+        try {
+            l.load();
+        }catch (KustvaktException e) {
+            error = true;
+        }
+        assert !error;
+        Assert.assertNotEquals("Is not supposed to be zero", 0, dao.size());
+    }
+}
diff --git a/src/test/java/de/ids_mannheim/korap/handlers/ResourceDaoTest.java b/src/test/java/de/ids_mannheim/korap/handlers/ResourceDaoTest.java
index 0b11863..83d6de7 100644
--- a/src/test/java/de/ids_mannheim/korap/handlers/ResourceDaoTest.java
+++ b/src/test/java/de/ids_mannheim/korap/handlers/ResourceDaoTest.java
@@ -1,9 +1,9 @@
+package de.ids_mannheim.korap.handlers;
+
 import de.ids_mannheim.korap.config.BeanConfiguration;
 import de.ids_mannheim.korap.config.TestHelper;
 import de.ids_mannheim.korap.exceptions.KustvaktException;
-import de.ids_mannheim.korap.handlers.ResourceDao;
 import de.ids_mannheim.korap.resources.KustvaktResource;
-import de.ids_mannheim.korap.resources.ResourceFactory;
 import de.ids_mannheim.korap.resources.VirtualCollection;
 import de.ids_mannheim.korap.user.User;
 import org.junit.After;
@@ -25,7 +25,7 @@
 
     @AfterClass
     public static void drop() {
-//        TestHelper.dropUser();
+        //        TestHelper.dropUser();
         BeanConfiguration.closeApplication();
     }
 
@@ -39,7 +39,7 @@
     public void createCollection() throws KustvaktException {
         ResourceDao dao = new ResourceDao(
                 BeanConfiguration.getBeans().getPersistenceClient());
-        VirtualCollection c = ResourceFactory.createCollection("testColl", 1);
+        VirtualCollection c = new VirtualCollection("testColl");
         c.addField("key_1", "this is a test");
         c.addField("key_2", 2);
 
@@ -59,7 +59,7 @@
     public void ResourceDataUpdate() throws KustvaktException {
         ResourceDao dao = new ResourceDao(
                 BeanConfiguration.getBeans().getPersistenceClient());
-        VirtualCollection c = ResourceFactory.createCollection("testColl", 1);
+        VirtualCollection c = new VirtualCollection("testColl");
         c.addField("key_1", "this is a test");
         c.addField("key_2", 2);
 
diff --git a/src/test/java/de/ids_mannheim/korap/security/auth/KustvaktAuthenticationManagerTest.java b/src/test/java/de/ids_mannheim/korap/security/auth/KustvaktAuthenticationManagerTest.java
index efcf6c0..0c2adc1 100644
--- a/src/test/java/de/ids_mannheim/korap/security/auth/KustvaktAuthenticationManagerTest.java
+++ b/src/test/java/de/ids_mannheim/korap/security/auth/KustvaktAuthenticationManagerTest.java
@@ -1,6 +1,7 @@
 package de.ids_mannheim.korap.security.auth;
 
 import de.ids_mannheim.korap.config.BeanConfiguration;
+import de.ids_mannheim.korap.config.KustvaktBaseDaoInterface;
 import de.ids_mannheim.korap.config.KustvaktConfiguration;
 import de.ids_mannheim.korap.config.TestHelper;
 import de.ids_mannheim.korap.exceptions.KustvaktException;
@@ -47,7 +48,7 @@
         EntityHandlerIface dao = BeanConfiguration.getBeans()
                 .getUserDBHandler();
 
-        assert dao.size() > 0;
+        assert ((KustvaktBaseDaoInterface) dao).size() > 0;
         User check = dao.getAccount(user.getUsername());
         assert check != null;
     }
diff --git a/src/test/java/de/ids_mannheim/korap/web/service/full/AuthServiceTest.java b/src/test/java/de/ids_mannheim/korap/web/service/full/AuthServiceTest.java
index 0bed7ff..6ba0ddc 100644
--- a/src/test/java/de/ids_mannheim/korap/web/service/full/AuthServiceTest.java
+++ b/src/test/java/de/ids_mannheim/korap/web/service/full/AuthServiceTest.java
@@ -1,11 +1,6 @@
 package de.ids_mannheim.korap.web.service.full;
 
-import de.ids_mannheim.korap.config.BeanConfiguration;
-import de.ids_mannheim.korap.config.TestHelper;
 import de.ids_mannheim.korap.web.service.FastJerseyTest;
-import org.junit.AfterClass;
-import org.junit.BeforeClass;
-import org.junit.Test;
 
 /**
  * @author hanl
@@ -15,36 +10,4 @@
 
     //todo: test basicauth via secure connection
 
-    @BeforeClass
-    public static void setup() {
-        BeanConfiguration.loadClasspathContext("default-config.xml");
-        FastJerseyTest.setPackages("de.ids_mannheim.korap.web.service.full",
-                "de.ids_mannheim.korap.web.filter",
-                "de.ids_mannheim.korap.web.utils");
-        TestHelper.setupAccount();
-    }
-
-    @AfterClass
-    public static void close() {
-        TestHelper.dropUser();
-        BeanConfiguration.closeApplication();
-    }
-
-    @Test
-    public void testKustvaktAuth() {
-
-    }
-
-    @Test
-    public void testDemoAuth() {
-
-    }
-
-    @Test
-    public void testUnauthorizedAuth() {
-
-    }
-
-
-
 }
diff --git a/src/test/java/de/ids_mannheim/korap/web/service/full/FilterTest.java b/src/test/java/de/ids_mannheim/korap/web/service/full/FilterTest.java
new file mode 100644
index 0000000..4b6f118
--- /dev/null
+++ b/src/test/java/de/ids_mannheim/korap/web/service/full/FilterTest.java
@@ -0,0 +1,61 @@
+package de.ids_mannheim.korap.web.service.full;
+
+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.web.service.FastJerseyTest;
+import org.eclipse.jetty.server.Response;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+/**
+ * @author hanl
+ * @date 08/02/2016
+ */
+public class FilterTest extends FastJerseyTest {
+
+    @BeforeClass
+    public static void setup() {
+        BeanConfiguration.loadClasspathContext("default-config.xml");
+        FastJerseyTest.setPackages("de.ids_mannheim.korap.web.service.full",
+                "de.ids_mannheim.korap.web.filter",
+                "de.ids_mannheim.korap.web.utils");
+        TestHelper.setupAccount();
+    }
+
+    @AfterClass
+    public static void close() {
+        TestHelper.dropUser();
+        BeanConfiguration.closeApplication();
+    }
+
+    @Test
+    public void testTestUserAuth() {
+        ClientResponse resp = resource().path(getAPIVersion()).path("user/info")
+                .header(Attributes.AUTHORIZATION, BasicHttpAuth
+                        .encode(TestHelper.getUserCredentials()[0],
+                                TestHelper.getUserCredentials()[1]))
+                .get(ClientResponse.class);
+        assert resp.getStatus() == Response.SC_OK;
+        System.out.println("entity '" + resp.getEntity(String.class) + "'");
+    }
+
+    @Test
+    public void testDemoAuth() {
+        ClientResponse resp = resource().path(getAPIVersion()).path("user/info")
+                .get(ClientResponse.class);
+        assert resp.getStatus() == Response.SC_OK;
+    }
+
+    @Test
+    public void testUnauthorizedAuth() {
+        ClientResponse resp = resource().path(getAPIVersion()).path("user/info")
+                .header(Attributes.AUTHORIZATION,
+                        BasicHttpAuth.encode("kustvakt", "kustvakt2015"))
+                .get(ClientResponse.class);
+        assert resp.getStatus() == Response.SC_UNAUTHORIZED;
+    }
+}
diff --git a/src/test/java/de/ids_mannheim/korap/web/service/full/KustvaktResourceServiceTest.java b/src/test/java/de/ids_mannheim/korap/web/service/full/KustvaktResourceServiceTest.java
index 377b4e8..45182a6 100644
--- a/src/test/java/de/ids_mannheim/korap/web/service/full/KustvaktResourceServiceTest.java
+++ b/src/test/java/de/ids_mannheim/korap/web/service/full/KustvaktResourceServiceTest.java
@@ -11,6 +11,7 @@
 import de.ids_mannheim.korap.web.service.FastJerseyTest;
 import org.junit.AfterClass;
 import org.junit.BeforeClass;
+import org.junit.Ignore;
 import org.junit.Test;
 
 /**
@@ -63,6 +64,7 @@
     }
 
     @Test
+    @Ignore
     public void testStats() {
         ClientResponse response = resource().path(getAPIVersion())
                 .path("collection").header(Attributes.AUTHORIZATION,
@@ -77,6 +79,8 @@
         System.out.println("NODE COLLECTIONS" + node);
         String id = node.path(0).path("id").asText();
 
+        System.out.println("ID IS " + id);
+        System.out.println("FROM NODE " + node);
         response = resource().path(getAPIVersion()).path("collection").path(id)
                 .path("stats").header(Attributes.AUTHORIZATION,
                         BasicHttpAuth.encode("kustvakt", "kustvakt2015"))
diff --git a/src/test/java/de/ids_mannheim/korap/web/service/full/ResourceRemoteApiTest.java b/src/test/java/de/ids_mannheim/korap/web/service/full/ResourceRemoteApiTest.java
new file mode 100644
index 0000000..bcf5f9a
--- /dev/null
+++ b/src/test/java/de/ids_mannheim/korap/web/service/full/ResourceRemoteApiTest.java
@@ -0,0 +1,17 @@
+package de.ids_mannheim.korap.web.service.full;
+
+import org.junit.Test;
+
+/**
+ * @author hanl
+ * @date 08/02/2016
+ */
+public class ResourceRemoteApiTest {
+
+
+
+    @Test
+    public void testResourceGetFromDemo() {
+
+    }
+}
