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"
