unittests and resource register table
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 4f27617..7c24af2 100644
--- a/src/main/java/de/ids_mannheim/korap/config/BeanConfiguration.java
+++ b/src/main/java/de/ids_mannheim/korap/config/BeanConfiguration.java
@@ -80,10 +80,10 @@
             context = new ClassPathXmlApplicationContext(files);
 
         BeanConfiguration.beans = new BeanHolderHelper(context);
-        setManualBeans();
 
     }
 
+    @Deprecated
     private static void setManualBeans() {
         if (getBeans().getPolicyDbProvider() != null
                 && getBeans().getEncryption() != null
diff --git a/src/main/java/de/ids_mannheim/korap/config/KustvaktClassLoader.java b/src/main/java/de/ids_mannheim/korap/config/KustvaktClassLoader.java
index 5377998..c175824 100644
--- a/src/main/java/de/ids_mannheim/korap/config/KustvaktClassLoader.java
+++ b/src/main/java/de/ids_mannheim/korap/config/KustvaktClassLoader.java
@@ -38,6 +38,7 @@
         return reflections.getTypesAnnotatedWith(annotation);
     }
 
+    @Deprecated
     public static void registerResourceClasses() {
         PersistenceClient cl = BeanConfiguration.getBeans()
                 .getPersistenceClient();
diff --git a/src/main/java/de/ids_mannheim/korap/exceptions/KustvaktException.java b/src/main/java/de/ids_mannheim/korap/exceptions/KustvaktException.java
index 3b078ff..dc00049 100644
--- a/src/main/java/de/ids_mannheim/korap/exceptions/KustvaktException.java
+++ b/src/main/java/de/ids_mannheim/korap/exceptions/KustvaktException.java
@@ -5,6 +5,7 @@
 import lombok.Setter;
 
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.List;
 
 /**
@@ -24,6 +25,11 @@
         this.statusCode = status;
     }
 
+    public KustvaktException(int status, String... args) {
+        this.statusCode = status;
+        this.entity = Arrays.asList(args).toString();
+    }
+
     public KustvaktException(Object userid, int status) {
         this(status);
         this.userid = String.valueOf(userid);
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 b2fa818..4317bb5 100644
--- a/src/main/java/de/ids_mannheim/korap/handlers/CollectionDao.java
+++ b/src/main/java/de/ids_mannheim/korap/handlers/CollectionDao.java
@@ -22,6 +22,7 @@
  * @date 11/01/2014
  */
 
+@Deprecated
 //todo?! cache with ehcache and put token/sentence/paragraph numbers into cache
 public class CollectionDao
         implements ResourceOperationIface<VirtualCollection> {
@@ -76,7 +77,7 @@
             throws KustvaktException {
         MapSqlParameterSource np = new MapSqlParameterSource();
         np.addValue("id", resource.getPersistentID());
-        np.addValue("qy", resource.getQuery());
+        np.addValue("qy", resource.getData());
         np.addValue("name", resource.getName());
         np.addValue("desc", resource.getDescription());
         final String sql = "UPDATE coll_store SET query=:qy, name=:name, description=:desc WHERE persistent_id=:id;";
@@ -98,7 +99,7 @@
         for (VirtualCollection c : resources) {
             MapSqlParameterSource np = new MapSqlParameterSource();
             np.addValue("id", c.getPersistentID());
-            np.addValue("qy", c.getQuery());
+            np.addValue("qy", c.getData());
             np.addValue("name", c.getName());
             np.addValue("desc", c.getDescription());
             sources[i++] = np;
@@ -114,9 +115,9 @@
     @Override
     public int storeResource(VirtualCollection resource, User user)
             throws KustvaktException {
-        if (resource.getQuery().length() > 3) {
+        if (resource.getData() != null) {
             MapSqlParameterSource np = new MapSqlParameterSource();
-            np.addValue("query", resource.getQuery());
+            np.addValue("query", resource.getData());
             np.addValue("pid", resource.getPersistentID());
             np.addValue("name", resource.getName());
             np.addValue("desc", resource.getDescription());
@@ -135,7 +136,7 @@
             }
         }else
             throw new KustvaktException(StatusCodes.ILLEGAL_ARGUMENT,
-                    "invalid query parameter", resource.getQuery());
+                    "invalid query parameter", (String) resource.getData());
     }
 
     public int deleteResource(String id, User user) throws KustvaktException {
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 53f3a3b..06c952f 100644
--- a/src/main/java/de/ids_mannheim/korap/handlers/ResourceDao.java
+++ b/src/main/java/de/ids_mannheim/korap/handlers/ResourceDao.java
@@ -54,7 +54,8 @@
         source.addValue("id", resource.getPersistentID());
         source.addValue("name", resource.getName());
         source.addValue("desc", resource.getDescription());
-        final String sql = "UPDATE resource_store set name=:name, description=:desc where persistent_id=:id;";
+        source.addValue("data", resource.getData());
+        final String sql = "UPDATE resource_store set name=:name, data=:data, description=:desc where persistent_id=:id;";
         try {
             return this.jdbcTemplate.update(sql, source);
         }catch (DataAccessException e) {
@@ -115,6 +116,7 @@
             return (T) this.jdbcTemplate.queryForObject(sql, source,
                     new RowMapperFactory.ResourceMapper());
         }catch (DataAccessException e) {
+            e.printStackTrace();
             return null;
         }
     }
@@ -129,16 +131,17 @@
         b.insert(Attributes.NAME, Attributes.PARENT_ID,
                 Attributes.PERSISTENT_ID, Attributes.DESCRIPTION,
                 Attributes.CREATOR, Attributes.TYPE, Attributes.CREATED);
-        b.params(":name, :parent, :pid, :desc, :ow, :type, :created");
+        b.params(
+                ":name, :parent, :pid, :desc, :ow, :type, :created, :dtype, :data");
 
         if (resource.getParentID() == null) {
-            sql = "INSERT INTO resource_store (name, parent_id, persistent_id, description, creator, type, created) "
-                    + "VALUES (:name, :parent, :pid, :desc, :ow, :type, :created);";
+            sql = "INSERT INTO resource_store (name, parent_id, persistent_id, description, creator, type, created, data) "
+                    + "VALUES (:name, :parent, :pid, :desc, :ow, :type, :created, :data);";
             parid = null;
         }else {
             // fixme: use trigger for consistency check!
-            sql = "INSERT INTO resource_store (name, parent_id, persistent_id, description, creator, type, created) "
-                    + "select :name, id, :pid, :desc, :ow, :type, :created from resource_store where persistent_id=:parent;";
+            sql = "INSERT INTO resource_store (name, parent_id, persistent_id, description, creator, type, created, data) "
+                    + "select :name, id, :pid, :desc, :ow, :type, :created, :data from resource_store where persistent_id=:parent;";
             parid = resource.getParentID();
         }
 
@@ -150,6 +153,8 @@
         source.addValue("type",
                 ResourceFactory.getResourceMapping(resource.getClass()));
         source.addValue("created", System.currentTimeMillis());
+        source.addValue("data", resource.getData());
+
         try {
             this.jdbcTemplate
                     .update(sql, source, holder, new String[] { "id" });
@@ -188,6 +193,13 @@
 
     @Override
     public int size() throws KustvaktException {
-        return -1;
+        final String sql = "SELECT COUNT(*) FROM resource_store;";
+        try {
+            return this.jdbcTemplate
+                    .queryForObject(sql, new HashMap<String, Object>(),
+                            Integer.class);
+        }catch (DataAccessException e) {
+            return -1;
+        }
     }
 }
diff --git a/src/main/java/de/ids_mannheim/korap/handlers/RowMapperFactory.java b/src/main/java/de/ids_mannheim/korap/handlers/RowMapperFactory.java
index b30d1bf..060578c 100644
--- a/src/main/java/de/ids_mannheim/korap/handlers/RowMapperFactory.java
+++ b/src/main/java/de/ids_mannheim/korap/handlers/RowMapperFactory.java
@@ -108,6 +108,8 @@
                 r.setId(rs.getInt("id"));
                 r.setOwner(rs.getInt("creator"));
                 r.setName(rs.getString("name"));
+
+                r.setFields(rs.getString("data"));
                 r.setDescription(rs.getString("description"));
                 r.setCreated(rs.getTimestamp("created").getTime());
                 r.setPath(rs.getString("name_path"));
@@ -115,6 +117,7 @@
             }
             return r;
         }
+
     }
 
     // todo: ??!
@@ -131,7 +134,7 @@
             c.setName(rs.getString("name"));
             c.setDescription(rs.getString("description"));
             c.setOwner(rs.getInt("user_id"));
-            c.setQuery(rs.getString("query"));
+            c.setFields(rs.getString("data"));
             c.checkNull();
             return c;
         }
diff --git a/src/main/java/de/ids_mannheim/korap/resources/Corpus.java b/src/main/java/de/ids_mannheim/korap/resources/Corpus.java
index 7266646..8dd64e6 100755
--- a/src/main/java/de/ids_mannheim/korap/resources/Corpus.java
+++ b/src/main/java/de/ids_mannheim/korap/resources/Corpus.java
@@ -14,16 +14,14 @@
 @Setter
 public class Corpus extends KustvaktResource {
 
+    // todo: can be deprecated since resource offers data field here!
+    @Deprecated
     private Map stats;
 
     public Corpus() {
         super();
     }
 
-    public Corpus(Integer id, long created, int creator) {
-        super(id, creator, created);
-    }
-
     public Corpus(Integer id, int creator) {
         super(id, creator);
     }
diff --git a/src/main/java/de/ids_mannheim/korap/resources/Foundry.java b/src/main/java/de/ids_mannheim/korap/resources/Foundry.java
index b86874d..51e14f0 100644
--- a/src/main/java/de/ids_mannheim/korap/resources/Foundry.java
+++ b/src/main/java/de/ids_mannheim/korap/resources/Foundry.java
@@ -10,21 +10,11 @@
         super();
     }
 
-    public Foundry(Integer id, int creator, long created) {
-        super(id, creator, created);
-    }
-
     public Foundry(Integer id, int creator) {
         super(id, creator);
     }
 
-    public Foundry(Integer id, String persistentID, int creator) {
-        super(id, creator);
-        this.setName(persistentID);
-        this.setPersistentID(persistentID);
-    }
-
-    public Foundry(String persistentID,int creator) {
+    public Foundry(String persistentID, int creator) {
         super(persistentID, creator);
         this.setName(persistentID);
     }
diff --git a/src/main/java/de/ids_mannheim/korap/resources/KustvaktResource.java b/src/main/java/de/ids_mannheim/korap/resources/KustvaktResource.java
index 0c99e36..259b033 100644
--- a/src/main/java/de/ids_mannheim/korap/resources/KustvaktResource.java
+++ b/src/main/java/de/ids_mannheim/korap/resources/KustvaktResource.java
@@ -1,7 +1,9 @@
 package de.ids_mannheim.korap.resources;
 
 import com.fasterxml.jackson.annotation.JsonIgnore;
+import de.ids_mannheim.korap.utils.JsonUtils;
 import de.ids_mannheim.korap.utils.TimeUtils;
+import lombok.AccessLevel;
 import lombok.Getter;
 import lombok.Setter;
 import org.joda.time.DateTime;
@@ -21,6 +23,7 @@
     private String persistentID;
     private String name;
     private String description;
+    // todo: manage creator over policies!
     @JsonIgnore
     private Integer owner;
     protected long created;
@@ -32,19 +35,15 @@
     // parents persistentid
     private String parentID;
 
-    //    private static RandomStringUtils utils = new RandomStringUtils();
+    @Getter(AccessLevel.PROTECTED)
+    private Map<String, Object> fields;
 
+    // todo: redo constructors
     protected KustvaktResource() {
         this.created = TimeUtils.getNow().getMillis();
         this.id = -1;
         this.parentID = null;
-    }
-
-    public KustvaktResource(Integer id, int creator, long created) {
-        this.created = created;
-        this.owner = creator;
-        this.id = id;
-        this.parentID = null;
+        this.fields = new HashMap<>();
     }
 
     public KustvaktResource(Integer id, int creator) {
@@ -52,6 +51,7 @@
         this.id = id;
         this.owner = creator;
         this.parentID = null;
+        this.fields = new HashMap<>();
     }
 
     // todo: move creator to builder instance for policies
@@ -61,6 +61,41 @@
         this.persistentID = persistentID;
     }
 
+    //    public void setData(int type, Object data) {
+    //        this.data = new Object[2];
+    //        this.data[0] = type;
+    //        this.data[1] = data;
+    //    }
+
+    //    public int getDataType() {
+    //        return this.data != null ? (int) this.data[0] : -1;
+    //    }
+
+    public void addField(String key, Object value) {
+        this.fields.put(key, value);
+    }
+
+    public void setFields(Map<String, Object> fields) {
+        this.fields = fields;
+    }
+
+    public void setFields(String fields) {
+        Map s = JsonUtils.readSimple(fields, Map.class);
+        if (s == null)
+            throw new RuntimeException(
+                    "Fields could not be read for resource '" + persistentID
+                            + "'!");
+        this.fields = s;
+    }
+
+    public Object getField(String key) {
+        return this.fields.get(key);
+    }
+
+    public String getData() {
+        return JsonUtils.toJSON(this.fields);
+    }
+
     @Override
     public boolean equals(Object other) {
         return other instanceof KustvaktResource && this.id
@@ -137,12 +172,13 @@
         m.put("id", persistentID);
         m.put("name", name);
         //todo: fix!
-//        m.put("path", path);
+        //        m.put("path", path);
         m.put("description", description);
         m.put("created", TimeUtils.format(new DateTime(created)));
+        m.put("data", getData());
         // deprecated
-//        m.put("managed", managed);
-//        m.put("shared", shared);
+        //        m.put("managed", managed);
+        //        m.put("shared", shared);
         return m;
     }
 
diff --git a/src/main/java/de/ids_mannheim/korap/resources/Layer.java b/src/main/java/de/ids_mannheim/korap/resources/Layer.java
index df464c0..7203216 100644
--- a/src/main/java/de/ids_mannheim/korap/resources/Layer.java
+++ b/src/main/java/de/ids_mannheim/korap/resources/Layer.java
@@ -10,9 +10,6 @@
         super();
     }
 
-    public Layer(Integer id, int creator, long created) {
-        super(id, creator, created);
-    }
 
     public Layer(Integer id, int creator) {
         super(id, creator);
diff --git a/src/main/java/de/ids_mannheim/korap/resources/ResourceFactory.java b/src/main/java/de/ids_mannheim/korap/resources/ResourceFactory.java
index ac9f9d2..e854b49 100755
--- a/src/main/java/de/ids_mannheim/korap/resources/ResourceFactory.java
+++ b/src/main/java/de/ids_mannheim/korap/resources/ResourceFactory.java
@@ -18,7 +18,7 @@
         subTypes.add(FOUNDRY, Foundry.class);
         subTypes.add(LAYER, Layer.class);
         subTypes.add(VIRTUALCOLLECTION, VirtualCollection.class);
-//        subTypes.add(USERQUERY, UserQuery.class);
+        //        subTypes.add(USERQUERY, UserQuery.class);
     }
 
     public static KustvaktResource getResource(
@@ -54,16 +54,15 @@
         return null;
     }
 
-
     public static <T extends KustvaktResource> Class<T> getResourceClass(
             String type) {
         for (Class value : subTypes) {
             if (value == VirtualCollection.class && type
                     .equalsIgnoreCase("collection"))
                 return (Class<T>) VirtualCollection.class;
-                    //todo
-//            else if (value == UserQuery.class && type.equalsIgnoreCase("query"))
-//                return (Class<T>) UserQuery.class;
+                //todo
+                //            else if (value == UserQuery.class && type.equalsIgnoreCase("query"))
+                //                return (Class<T>) UserQuery.class;
             else if (value.getSimpleName().equalsIgnoreCase(type.trim())) {
                 return value;
             }
@@ -73,11 +72,9 @@
     // all deprecated!
 
     public static VirtualCollection getCachedCollection(String query) {
-        VirtualCollection v = new VirtualCollection();
-        v.setQuery(query);
+        VirtualCollection v = new VirtualCollection(query);
         v.setName("");
         v.setDescription("");
-        v.setPersistentID(v.createID());
         return v;
     }
 
@@ -101,11 +98,11 @@
         return v;
     }
 
-    public static VirtualCollection createCollection(String name, String query,
-            long time, Integer owner) {
-        VirtualCollection v = new VirtualCollection(0, owner, time);
+    public static VirtualCollection createCollection(String name,
+            Integer owner) {
+        VirtualCollection v = new VirtualCollection();
+        v.setOwner(owner);
         v.setName(name);
-        v.setQuery(query);
         return v;
     }
 
@@ -120,13 +117,11 @@
 
     public static VirtualCollection createContainer(String name,
             String description, String query, Integer owner) {
-        VirtualCollection v = new VirtualCollection();
+        VirtualCollection v = new VirtualCollection(query);
         v.setName(name);
         v.setDescription(description);
-        v.setQuery(query);
         v.setOwner(owner);
         v.setManaged(true);
-        v.setPersistentID(v.createID());
         return v;
     }
 
diff --git a/src/main/java/de/ids_mannheim/korap/resources/VirtualCollection.java b/src/main/java/de/ids_mannheim/korap/resources/VirtualCollection.java
index e48ee50..5ffbb13 100755
--- a/src/main/java/de/ids_mannheim/korap/resources/VirtualCollection.java
+++ b/src/main/java/de/ids_mannheim/korap/resources/VirtualCollection.java
@@ -1,6 +1,5 @@
 package de.ids_mannheim.korap.resources;
 
-import de.ids_mannheim.korap.utils.JsonUtils;
 import lombok.Getter;
 import lombok.Setter;
 import org.apache.commons.codec.digest.DigestUtils;
@@ -11,10 +10,11 @@
 @Setter
 public class VirtualCollection extends KustvaktResource {
 
-    private String query;
+    //    private String query;
     // use ehcache instead and only save persisted values in the database
     //    @Deprecated
     //    private boolean cache = false;
+    @Deprecated
     private Map stats;
 
     protected VirtualCollection() {
@@ -22,10 +22,6 @@
         this.setPersistentID(this.createID());
     }
 
-    protected VirtualCollection(Integer id, int creator, long created) {
-        super(id, creator, created);
-    }
-
     public VirtualCollection(Integer id, int creator) {
         super(id, creator);
     }
@@ -36,14 +32,15 @@
 
     public VirtualCollection(String query) {
         this();
-        this.setQuery(query);
+        this.setFields(query);
         this.setPersistentID(this.createID());
     }
 
+    // todo: redo!
     @Override
     protected String createID() {
-        if (this.query != null) {
-            String s = this.getQuery();
+        if (this.getData() != null) {
+            String s = this.getData();
             return DigestUtils.sha1Hex(s);
         }
         return super.createID();
@@ -55,10 +52,9 @@
         if (resource == null | !(resource instanceof VirtualCollection))
             return;
         VirtualCollection other = (VirtualCollection) resource;
-        this.setStats(
-                this.getStats() == null ? other.getStats() : this.getStats());
-        this.setQuery(
-                this.getQuery() == null ? other.getQuery() : this.getQuery());
+        this.setFields(this.getFields() == null ?
+                other.getFields() :
+                this.getFields());
     }
 
     @Override
@@ -67,7 +63,6 @@
         super.checkNull();
         this.setDescription(
                 this.getDescription() == null ? "" : this.getDescription());
-        this.setQuery(this.query == null ? "" : this.getQuery());
     }
 
     @Override
@@ -79,18 +74,17 @@
                 ", path=" + this.getPath() +
                 ", owner=" + this.getOwner() +
                 ", name='" + this.getName() + '\'' +
-                ", query='" + query + '\'' +
-                ", stats='" + stats + '\'' +
+                ", data='" + this.getData() + '\'' +
                 '}';
     }
 
-    @Override
-    public Map toMap() {
-        Map res = super.toMap();
-        res.put("query", JsonUtils.readTree(query));
-        if (stats != null && !stats.isEmpty())
-            res.put("statistics", stats);
-        return res;
-    }
+    //    @Override
+    //    public Map toMap() {
+    //        Map res = super.toMap();
+    //        res.put("query", JsonUtils.readTree());
+    //        if (stats != null && !stats.isEmpty())
+    //            res.put("statistics", stats);
+    //        return res;
+    //    }
 
 }
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 53e1706..fcdca03 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,5 +1,6 @@
 package de.ids_mannheim.korap.security.ac;
 
+import de.ids_mannheim.korap.config.BeanConfiguration;
 import de.ids_mannheim.korap.exceptions.KustvaktException;
 import de.ids_mannheim.korap.interfaces.db.PolicyHandlerIface;
 import de.ids_mannheim.korap.interfaces.db.ResourceOperationIface;
@@ -32,10 +33,15 @@
     }
 
     private static void checkProviders() {
+        if (BeanConfiguration.hasContext() && policydao == null) {
+            ResourceFinder.policydao = BeanConfiguration.getBeans()
+                    .getPolicyDbProvider();
+        }
         if (policydao == null)
             throw new RuntimeException("provider not set!");
     }
 
+    @Deprecated
     public static void setProviders(PolicyHandlerIface policyHandler) {
         ResourceFinder.policydao = policyHandler;
     }
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 f3226ec..4321def 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
@@ -1,5 +1,6 @@
 package de.ids_mannheim.korap.security.ac;
 
+import de.ids_mannheim.korap.config.BeanConfiguration;
 import de.ids_mannheim.korap.exceptions.EmptyResultException;
 import de.ids_mannheim.korap.exceptions.KustvaktException;
 import de.ids_mannheim.korap.exceptions.NotAuthorizedException;
@@ -31,13 +32,11 @@
 @SuppressWarnings("all")
 public class SecurityManager<T extends KustvaktResource> {
 
-    //    private static final Logger errorLogger = LoggerFactory
-    //            .getLogger(LoggerFactory.ERROR_LOG);
-
     private static final Logger jlog = LoggerFactory
             .getLogger(SecurityManager.class);
 
     private static PolicyHandlerIface policydao;
+    @Deprecated
     private static Map<Class<? extends KustvaktResource>, ResourceOperationIface> handlers;
     private static EncryptionIface crypto;
 
@@ -58,11 +57,23 @@
     }
 
     private static void checkProviders() {
-        if (policydao == null && crypto == null && handlers == null)
+        if (BeanConfiguration.hasContext() && (policydao == null
+                | crypto == null)) {
+            SecurityManager.policydao = BeanConfiguration.getBeans()
+                    .getPolicyDbProvider();
+            SecurityManager.crypto = BeanConfiguration.getBeans()
+                    .getEncryption();
+            SecurityManager.handlers = new HashMap<>();
+            ResourceOperationIface rprovider = BeanConfiguration.getBeans()
+                    .getResourceProvider();
+            SecurityManager.handlers.put(rprovider.getType(), rprovider);
+        }
+        if (policydao == null && crypto == null)
             throw new RuntimeException("providers not set!");
     }
 
-    public static final void setProviders(PolicyHandlerIface policyHandler,
+    @Deprecated
+    public static final void setProvgiders(PolicyHandlerIface policyHandler,
             EncryptionIface crypto, Collection<ResourceOperationIface> ifaces) {
         SecurityManager.policydao = policyHandler;
         SecurityManager.crypto = crypto;
@@ -72,6 +83,7 @@
             handlers.put(iface.getType(), iface);
     }
 
+    @Deprecated
     public static Map<Class<? extends KustvaktResource>, ResourceOperationIface> getHandlers() {
         return handlers;
     }
diff --git a/src/main/java/de/ids_mannheim/korap/web/service/CollectionLoader.java b/src/main/java/de/ids_mannheim/korap/web/service/CollectionLoader.java
index 82f3c36..0548cc6 100644
--- a/src/main/java/de/ids_mannheim/korap/web/service/CollectionLoader.java
+++ b/src/main/java/de/ids_mannheim/korap/web/service/CollectionLoader.java
@@ -3,7 +3,6 @@
 import de.ids_mannheim.korap.config.BeanConfiguration;
 import de.ids_mannheim.korap.config.KustvaktConfiguration;
 import de.ids_mannheim.korap.exceptions.KustvaktException;
-import de.ids_mannheim.korap.handlers.CollectionDao;
 import de.ids_mannheim.korap.resources.Permissions;
 import de.ids_mannheim.korap.resources.ResourceFactory;
 import de.ids_mannheim.korap.resources.VirtualCollection;
@@ -21,9 +20,6 @@
     @Override
     public void load() throws KustvaktException {
         if (BeanConfiguration.hasContext()) {
-            CollectionDao dao = new CollectionDao(
-                    BeanConfiguration.getBeans().getPersistenceClient());
-
             int uid = (Integer) KustvaktConfiguration.KUSTVAKT_USER
                     .get(Attributes.ID);
 
diff --git a/src/main/java/de/ids_mannheim/korap/web/service/PolicyLoader.java b/src/main/java/de/ids_mannheim/korap/web/service/PolicyLoader.java
index 2a76686..3ad501c 100644
--- a/src/main/java/de/ids_mannheim/korap/web/service/PolicyLoader.java
+++ b/src/main/java/de/ids_mannheim/korap/web/service/PolicyLoader.java
@@ -3,21 +3,11 @@
 import de.ids_mannheim.korap.config.BeanConfiguration;
 import de.ids_mannheim.korap.config.KustvaktConfiguration;
 import de.ids_mannheim.korap.exceptions.KustvaktException;
-import de.ids_mannheim.korap.handlers.CollectionDao;
-import de.ids_mannheim.korap.handlers.ResourceDao;
-import de.ids_mannheim.korap.interfaces.db.PersistenceClient;
-import de.ids_mannheim.korap.interfaces.db.ResourceOperationIface;
 import de.ids_mannheim.korap.resources.Corpus;
 import de.ids_mannheim.korap.resources.Permissions;
 import de.ids_mannheim.korap.security.ac.PolicyBuilder;
-import de.ids_mannheim.korap.security.ac.PolicyDao;
-import de.ids_mannheim.korap.security.ac.ResourceFinder;
-import de.ids_mannheim.korap.security.ac.SecurityManager;
 import de.ids_mannheim.korap.user.User;
 
-import java.util.HashSet;
-import java.util.Set;
-
 /**
  * @author hanl
  * @date 15/01/2016
@@ -27,16 +17,6 @@
     @Override
     public void load() throws KustvaktException {
         if (BeanConfiguration.hasContext()) {
-            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));
-
             User user = User.UserFactory
                     .toUser(KustvaktConfiguration.KUSTVAKT_USER);
             PolicyBuilder builder = new PolicyBuilder(user);
diff --git a/src/main/java/de/ids_mannheim/korap/web/service/full/ResourceService.java b/src/main/java/de/ids_mannheim/korap/web/service/full/ResourceService.java
index 93a3d9d..7bb87e7 100644
--- a/src/main/java/de/ids_mannheim/korap/web/service/full/ResourceService.java
+++ b/src/main/java/de/ids_mannheim/korap/web/service/full/ResourceService.java
@@ -163,7 +163,7 @@
         CollectionQueryBuilder3 query = new CollectionQueryBuilder3();
         if (cl_type.equals(VirtualCollection.class)) {
             VirtualCollection c = (VirtualCollection) resource;
-            query.setBaseQuery(c.getQuery());
+            query.setBaseQuery((String) c.getData());
         }else if (cl_type.equals(Corpus.class)) {
             Corpus c = (Corpus) resource;
             query.addQuery("corpusID=" + c.getPersistentID());
@@ -379,7 +379,7 @@
                         ResourceFactory.getResourceClass(type));
 
             if (resource instanceof VirtualCollection)
-                cquery.addQuery(((VirtualCollection) resource).getQuery());
+                cquery.addQuery((String) resource.getData());
             else if (resource instanceof Corpus)
                 cquery.addQuery("corpusID=" + resource.getPersistentID());
 
@@ -557,7 +557,7 @@
                             ResourceFactory.getResourceClass(type));
 
                 if (resource instanceof VirtualCollection)
-                    builder.addQuery(((VirtualCollection) resource).getQuery());
+                    builder.setBaseQuery((String) resource.getData());
                 else if (resource instanceof Corpus)
                     builder.addQuery("corpusID=" + resource.getPersistentID());
                 else
@@ -669,7 +669,7 @@
             //todo ?!
             CollectionQueryBuilder3 query = new CollectionQueryBuilder3();
             if (resource instanceof VirtualCollection) {
-                query.setBaseQuery(((VirtualCollection) resource).getQuery());
+                query.setBaseQuery((String) resource.getData());
             }else if (resource instanceof Corpus) {
                 query.addQuery("corpusID=" + resource.getName());
             }
@@ -706,8 +706,9 @@
                 .getCache(cache.getId(), VirtualCollection.class);
         if (tmp == null) {
             CollectionQueryBuilder3 cquery = new CollectionQueryBuilder3()
-                    .setBaseQuery(cache.getQuery());
-            String query = this.processor.preProcess(cache.getQuery(), user);
+                    .setBaseQuery((String) cache.getData());
+            String query = this.processor
+                    .preProcess((String) cache.getData(), user);
             String stats = searchKrill.getStatistics(query);
             cache.setStats(JsonUtils.readSimple(stats, Map.class));
             resourceHandler.cache(cache);
@@ -783,8 +784,8 @@
             String base;
             if (reference != null && !reference.equals("null")) {
                 try {
-                    base = resourceHandler.findbyStrId(reference, user,
-                            VirtualCollection.class).getQuery();
+                    base = (String) resourceHandler.findbyStrId(reference, user,
+                            VirtualCollection.class).getData();
                 }catch (KustvaktException e) {
                     throw KustvaktResponseHandler.throwit(e);
                 }
@@ -863,12 +864,14 @@
                 .equals(ResourceFactory.getResourceClass(type))) {
 
             VirtualCollection cachetmp, collection;
+            // todo: ??
             Object read = JsonUtils.readTree(query);
             CollectionQueryBuilder3 cquery = new CollectionQueryBuilder3();
             if (reference != null && !reference.equals("null")) {
                 try {
-                    cquery.addQuery(resourceHandler.findbyStrId(reference, user,
-                            VirtualCollection.class).getQuery());
+                    cquery.addQuery(
+                            (String) resourceHandler.findbyStrId(reference, user,
+                                    VirtualCollection.class).getData());
                 }catch (KustvaktException e) {
                     throw KustvaktResponseHandler.throwit(e);
                 }
diff --git a/src/main/resources/db/sqlite/V1__Initial_version.sql b/src/main/resources/db/sqlite/V1__Initial_version.sql
index 44f64de..edbf4ee 100644
--- a/src/main/resources/db/sqlite/V1__Initial_version.sql
+++ b/src/main/resources/db/sqlite/V1__Initial_version.sql
@@ -192,8 +192,9 @@
 persistent_id VARCHAR(100) NOT NULL UNIQUE,
 name VARCHAR(100),
 description VARCHAR(300),
-parent_id Integer unsigned null,
-created timestamp default current_timestamp,
+parent_id INTEGER unsigned null,
+created TIMESTAMP default current_timestamp,
+data BLOB,
 type INTEGER NOT NULL,
 creator INTEGER NOT NULL
 );
diff --git a/src/main/resources/default-config.xml b/src/main/resources/default-config.xml
index a756340..cb62910 100644
--- a/src/main/resources/default-config.xml
+++ b/src/main/resources/default-config.xml
@@ -104,10 +104,10 @@
     </bean>
 
     <!--fixme: change name according to convention -->
-    <bean id="collectionProvider"
-          class="de.ids_mannheim.korap.handlers.CollectionDao">
-        <constructor-arg ref="kustvakt_db"/>
-    </bean>
+    <!--<bean id="collectionProvider"-->
+          <!--class="de.ids_mannheim.korap.handlers.CollectionDao">-->
+        <!--<constructor-arg ref="kustvakt_db"/>-->
+    <!--</bean>-->
 
     <!--fixme: change name according to convention -->
     <bean id="resourceProvider"