diff --git a/core/src/main/java/de/ids_mannheim/korap/exceptions/EmptyResultException.java b/core/src/main/java/de/ids_mannheim/korap/exceptions/EmptyResultException.java
index 8bf1810..d52238b 100644
--- a/core/src/main/java/de/ids_mannheim/korap/exceptions/EmptyResultException.java
+++ b/core/src/main/java/de/ids_mannheim/korap/exceptions/EmptyResultException.java
@@ -9,12 +9,12 @@
 public class EmptyResultException extends KustvaktException {
 
     public EmptyResultException (String message, String entity) {
-        super(StatusCodes.NO_VALUE_FOUND, message, entity);
+        super(StatusCodes.NO_RESULT_FOUND, message, entity);
     }
 
 
     public EmptyResultException (String entity) {
-        super(StatusCodes.NO_VALUE_FOUND, "No entity found for id", entity);
+        super(StatusCodes.NO_RESULT_FOUND, "No entity found for id", entity);
     }
 
 }
diff --git a/core/src/main/java/de/ids_mannheim/korap/exceptions/KustvaktException.java b/core/src/main/java/de/ids_mannheim/korap/exceptions/KustvaktException.java
index 696d34f..72e650c 100644
--- a/core/src/main/java/de/ids_mannheim/korap/exceptions/KustvaktException.java
+++ b/core/src/main/java/de/ids_mannheim/korap/exceptions/KustvaktException.java
@@ -1,13 +1,13 @@
 package de.ids_mannheim.korap.exceptions;
 
-import de.ids_mannheim.korap.auditing.AuditRecord;
-import lombok.Getter;
-import lombok.Setter;
-
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
 
+import de.ids_mannheim.korap.auditing.AuditRecord;
+import lombok.Getter;
+import lombok.Setter;
+
 /**
  * @author hanl
  * @date 11/12/2013
@@ -25,8 +25,7 @@
     public KustvaktException (int status) {
         this.statusCode = status;
     }
-
-
+    
     public KustvaktException (int status, String ... args) {
         this.statusCode = status;
         this.entity = Arrays.asList(args).toString();
@@ -38,11 +37,13 @@
         this.userid = String.valueOf(userid);
     }
 
+    // add throwable to parameters
     public KustvaktException (Object userid, int status, String message,
-            String entity) {
+                              String entity) {
         this(userid, status, message, entity, null);
     }
 
+
     public KustvaktException (Object userid, int status, String message,
                               String entity, Exception e) {
         super(message, e);
@@ -51,20 +52,25 @@
         this.userid = String.valueOf(userid);
     }
 
-    public KustvaktException (Object userid, int status,
-                              String entity) {
+
+    public KustvaktException (Object userid, int status, String entity) {
         super(StatusCodes.getMessage(status));
         this.statusCode = status;
         this.entity = entity;
         this.userid = String.valueOf(userid);
     }
 
-
     public KustvaktException (int status, String message, String entity) {
         super(message);
         this.statusCode = status;
         this.entity = entity;
     }
+    
+    public KustvaktException (int status, String message, String entity, Exception e) {
+        super(message, e);
+        this.statusCode = status;
+        this.entity = entity;
+    }
 
 
     public KustvaktException (Throwable cause, int status) {
diff --git a/core/src/main/java/de/ids_mannheim/korap/exceptions/StatusCodes.java b/core/src/main/java/de/ids_mannheim/korap/exceptions/StatusCodes.java
index 889f9f5..1bbe4ce 100644
--- a/core/src/main/java/de/ids_mannheim/korap/exceptions/StatusCodes.java
+++ b/core/src/main/java/de/ids_mannheim/korap/exceptions/StatusCodes.java
@@ -14,7 +14,7 @@
      * 100 status codes for standard system errors
      */
     public static final int DEFAULT_ERROR = 100;
-    public static final int NO_VALUE_FOUND = 101;
+    public static final int NO_RESULT_FOUND = 101;
     public static final int ENTRY_EXISTS = 102;
     public static final int UNSUPPORTED_OPERATION = 103;
     public static final int ILLEGAL_ARGUMENT = 104;
diff --git a/core/src/main/java/de/ids_mannheim/korap/security/ac/ResourceFinder.java b/core/src/main/java/de/ids_mannheim/korap/security/ac/ResourceFinder.java
index 368a36f..c24d956 100644
--- a/core/src/main/java/de/ids_mannheim/korap/security/ac/ResourceFinder.java
+++ b/core/src/main/java/de/ids_mannheim/korap/security/ac/ResourceFinder.java
@@ -127,7 +127,7 @@
         }
         
         if (sets.isEmpty()){
-            throw new KustvaktException(StatusCodes.NO_VALUE_FOUND, 
+            throw new KustvaktException(StatusCodes.NO_RESULT_FOUND, 
             		"Cannot found public "+clazz.getSimpleName()+" with ids: "+id_set.toString());
         }
         return sets;
@@ -153,7 +153,7 @@
         }
 
         if (sets.isEmpty()){
-            throw new KustvaktException(StatusCodes.NO_VALUE_FOUND, 
+            throw new KustvaktException(StatusCodes.NO_RESULT_FOUND, 
                     "Cannot found public "+clazz.getSimpleName()+" with ids: "+id_set.toString());
         }
         return sets;
diff --git a/core/src/main/java/de/ids_mannheim/korap/security/ac/ResourceHandler.java b/core/src/main/java/de/ids_mannheim/korap/security/ac/ResourceHandler.java
index 1d357e4..4d9f272 100644
--- a/core/src/main/java/de/ids_mannheim/korap/security/ac/ResourceHandler.java
+++ b/core/src/main/java/de/ids_mannheim/korap/security/ac/ResourceHandler.java
@@ -69,7 +69,7 @@
             p = SecurityManager.findbyId(id, user);
         }
         catch (EmptyResultException e) {
-            throw new NotAuthorizedException(StatusCodes.NO_VALUE_FOUND,
+            throw new NotAuthorizedException(StatusCodes.NO_RESULT_FOUND,
                     String.valueOf(id));
         }
         return p.getResource();
@@ -92,7 +92,7 @@
             p = SecurityManager.findbyId(persistent_id, user, type);
         }
         catch (EmptyResultException e) {
-            throw new NotAuthorizedException(StatusCodes.NO_VALUE_FOUND,
+            throw new NotAuthorizedException(StatusCodes.NO_RESULT_FOUND,
                     persistent_id);
         }
         return p.getResource();
diff --git a/core/src/main/java/de/ids_mannheim/korap/security/ac/SecurityManager.java b/core/src/main/java/de/ids_mannheim/korap/security/ac/SecurityManager.java
index 5cd7e23..f8f5990 100644
--- a/core/src/main/java/de/ids_mannheim/korap/security/ac/SecurityManager.java
+++ b/core/src/main/java/de/ids_mannheim/korap/security/ac/SecurityManager.java
@@ -234,7 +234,7 @@
         if (this.policies == null) {
             jlog.error("No policies found for resource id '{}' for user '{}'",
                     id, user.getId());
-            throw new KustvaktException(StatusCodes.NO_VALUE_FOUND,
+            throw new KustvaktException(StatusCodes.NO_RESULT_FOUND,
                     "Resource not found!", String.valueOf(id));
         }
         return true;
@@ -259,7 +259,7 @@
                 this.user);
         
         if(type != null && !resource.getClass().equals(type)) {
-            throw new KustvaktException(StatusCodes.NO_VALUE_FOUND,
+            throw new KustvaktException(StatusCodes.NO_RESULT_FOUND,
                     "Resource with id " + this.evaluator.getResourceID()
                             + " and type " + type.getSimpleName()
                             + " is not found. Found resource with id "
@@ -298,7 +298,7 @@
                     jlog.error(
                             "No policies found for parent '{}' for user '{}'",
                             resource.getParentID(), user.getId());
-                    throw new KustvaktException(StatusCodes.NO_VALUE_FOUND);
+                    throw new KustvaktException(StatusCodes.NO_RESULT_FOUND);
                 }
             }
             boolean newid = false;
diff --git a/core/src/main/java/de/ids_mannheim/korap/security/auth/KustvaktAuthenticationManager.java b/core/src/main/java/de/ids_mannheim/korap/security/auth/KustvaktAuthenticationManager.java
index 063a465..f5258c1 100644
--- a/core/src/main/java/de/ids_mannheim/korap/security/auth/KustvaktAuthenticationManager.java
+++ b/core/src/main/java/de/ids_mannheim/korap/security/auth/KustvaktAuthenticationManager.java
@@ -114,7 +114,7 @@
 		if (context != null && TimeUtils.isExpired(context.getExpirationTime()))
 			throw new KustvaktException(StatusCodes.EXPIRED);
 		else if (context == null)
-			throw new KustvaktException(StatusCodes.NO_VALUE_FOUND);
+			throw new KustvaktException(StatusCodes.NO_RESULT_FOUND);
 
 		// if (!matchStatus(host, useragent, context))
 		// provider.removeUserSession(token);
@@ -902,7 +902,7 @@
 				data = dao.get(user);
 
 			if (data == null)
-				throw new KustvaktException(user.getId(), StatusCodes.NO_VALUE_FOUND, "No data found!",
+				throw new KustvaktException(user.getId(), StatusCodes.NO_RESULT_FOUND, "No data found!",
 						clazz.getSimpleName());
 			return data;
 		} catch (KustvaktException e) {
diff --git a/full/pom.xml b/full/pom.xml
index 6422a7d..9e83366 100644
--- a/full/pom.xml
+++ b/full/pom.xml
@@ -83,8 +83,8 @@
 					<threadCount>10</threadCount>
 
 					<excludes>
-						<exclude>**/*APITest.java</exclude>
 						<exclude>de/ids_mannheim/korap/suites/*.java</exclude>
+						<exclude>de/ids_mannheim/korap/dao/*.java</exclude>
 						<exclude>**/KustvaktServerTest.java</exclude>
 						<exclude>**/ResourceServiceTest.java</exclude>
 						<exclude>**/ResourceInfoServiceTest.java</exclude>
diff --git a/full/src/main/java/de/ids_mannheim/korap/dao/VirtualCorpusDao.java b/full/src/main/java/de/ids_mannheim/korap/dao/VirtualCorpusDao.java
index 74b5850..03a042c 100644
--- a/full/src/main/java/de/ids_mannheim/korap/dao/VirtualCorpusDao.java
+++ b/full/src/main/java/de/ids_mannheim/korap/dao/VirtualCorpusDao.java
@@ -1,8 +1,11 @@
 package de.ids_mannheim.korap.dao;
 
+import java.util.HashSet;
 import java.util.List;
+import java.util.Set;
 
 import javax.persistence.EntityManager;
+import javax.persistence.NoResultException;
 import javax.persistence.PersistenceContext;
 import javax.persistence.Query;
 import javax.persistence.criteria.CriteriaBuilder;
@@ -12,10 +15,12 @@
 import javax.persistence.criteria.Root;
 
 import org.springframework.stereotype.Component;
+import org.springframework.transaction.annotation.Transactional;
 
 import de.ids_mannheim.korap.constants.GroupMemberStatus;
 import de.ids_mannheim.korap.constants.UserGroupStatus;
 import de.ids_mannheim.korap.constants.VirtualCorpusAccessStatus;
+import de.ids_mannheim.korap.constants.VirtualCorpusType;
 import de.ids_mannheim.korap.entity.UserGroup;
 import de.ids_mannheim.korap.entity.VirtualCorpus;
 import de.ids_mannheim.korap.entity.VirtualCorpusAccessGroup;
@@ -35,15 +40,37 @@
     private EntityManager entityManager;
 
 
+    @Transactional
     public void storeVirtualCorpus (VirtualCorpus virtualCorpus) {
-        entityManager.getTransaction().begin();
         entityManager.persist(virtualCorpus);
-        entityManager.getTransaction().commit();
     }
 
 
-    public VirtualCorpus retrieveVirtualCorpusById (int id)
+    @Transactional
+    public void deleteVirtualCorpus (int id) throws KustvaktException {
+        VirtualCorpus vc = retrieveVCById(id);
+        entityManager.remove(vc);
+    }
+
+
+    public List<VirtualCorpus> retrieveVCByType (VirtualCorpusType type)
             throws KustvaktException {
+        if (type == null) {
+            throw new KustvaktException(StatusCodes.MISSING_ARGUMENT, "type",
+                    "null");
+        }
+        CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
+        CriteriaQuery<VirtualCorpus> query =
+                criteriaBuilder.createQuery(VirtualCorpus.class);
+        Root<VirtualCorpus> virtualCorpus = query.from(VirtualCorpus.class);
+        query.select(virtualCorpus);
+        query.where(criteriaBuilder.equal(virtualCorpus.get("type"), type));
+        Query q = entityManager.createQuery(query);
+        return q.getResultList();
+    }
+
+
+    public VirtualCorpus retrieveVCById (int id) throws KustvaktException {
         if (id == 0) {
             throw new KustvaktException(StatusCodes.MISSING_ARGUMENT, "id",
                     String.valueOf(id));
@@ -54,45 +81,107 @@
         Root<VirtualCorpus> virtualCorpus = query.from(VirtualCorpus.class);
         query.select(virtualCorpus);
         query.where(criteriaBuilder.equal(virtualCorpus.get("id"), id));
-        Query q = entityManager.createQuery(query);
-        return (VirtualCorpus) q.getSingleResult();
+
+        VirtualCorpus vc = null;
+        try {
+            Query q = entityManager.createQuery(query);
+            vc = (VirtualCorpus) q.getSingleResult();
+        }
+        catch (NoResultException e) {
+            throw new KustvaktException(StatusCodes.NO_RESULT_FOUND,
+                    "No result found for query: retrieve virtual corpus by id "
+                            + id,
+                    String.valueOf(id), e);
+        }
+        return vc;
     }
 
 
-    public List<VirtualCorpus> retrieveVirtualCorpusByUser (String userId) {
-        CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
+    public List<VirtualCorpus> retrievePrivateVC (String userId)
+            throws KustvaktException {
+        if (userId == null || userId.isEmpty()) {
+            throw new KustvaktException(StatusCodes.MISSING_ARGUMENT, "userId",
+                    userId);
+        }
+        CriteriaBuilder builder = entityManager.getCriteriaBuilder();
         CriteriaQuery<VirtualCorpus> query =
-                criteriaBuilder.createQuery(VirtualCorpus.class);
+                builder.createQuery(VirtualCorpus.class);
 
         Root<VirtualCorpus> virtualCorpus = query.from(VirtualCorpus.class);
-        virtualCorpus.fetch("accessGroup");
+        query.select(virtualCorpus);
+        query.where(builder.equal(virtualCorpus.get("createdBy"), userId));
 
+        Query q = entityManager.createQuery(query);
+        return q.getResultList();
+    }
+
+
+    public List<VirtualCorpus> retrieveGroupVCByUser (String userId)
+            throws KustvaktException {
+        if (userId == null || userId.isEmpty()) {
+            throw new KustvaktException(StatusCodes.MISSING_ARGUMENT, "userId",
+                    userId);
+        }
+
+        CriteriaBuilder builder = entityManager.getCriteriaBuilder();
+        CriteriaQuery<VirtualCorpus> query =
+                builder.createQuery(VirtualCorpus.class);
+
+        Root<VirtualCorpus> virtualCorpus = query.from(VirtualCorpus.class);
         Join<VirtualCorpus, VirtualCorpusAccessGroup> accessGroup =
                 virtualCorpus.join("accessGroup");
 
-        Predicate corpusStatus = criteriaBuilder.notEqual(
-                accessGroup.get("status"), VirtualCorpusAccessStatus.HIDDEN);
-        Predicate userGroupStatus = criteriaBuilder.notEqual(
-                accessGroup.get("userGroup").get("status"),
-                UserGroupStatus.DELETED);
-
+        Predicate corpusStatus = builder.notEqual(accessGroup.get("status"),
+                VirtualCorpusAccessStatus.HIDDEN);
+        Predicate userGroupStatus =
+                builder.notEqual(accessGroup.get("userGroup").get("status"),
+                        UserGroupStatus.DELETED);
         Join<VirtualCorpusAccessGroup, UserGroup> userGroupMembers =
                 accessGroup.join("userGroup").join("members");
-
-        Predicate memberStatus = criteriaBuilder.equal(
-                userGroupMembers.get("status"), GroupMemberStatus.ACTIVE);
-
-        Predicate user =
-                criteriaBuilder.equal(userGroupMembers.get("userId"), userId);
+        Predicate memberStatus = builder.equal(userGroupMembers.get("status"),
+                GroupMemberStatus.ACTIVE);
+        Predicate user = builder.equal(userGroupMembers.get("userId"), userId);
 
         query.select(virtualCorpus);
-        query.where(criteriaBuilder.and(corpusStatus, userGroupStatus,
-                memberStatus, user));
+        query.where(
+                builder.and(corpusStatus, userGroupStatus, memberStatus, user));
+
         Query q = entityManager.createQuery(query);
         return q.getResultList();
     }
 
 
+    public Set<VirtualCorpus> retrieveVCByUser (String userId)
+            throws KustvaktException {
+        if (userId == null || userId.isEmpty()) {
+            throw new KustvaktException(StatusCodes.MISSING_ARGUMENT, "userId",
+                    userId);
+        }
+        CriteriaBuilder builder = entityManager.getCriteriaBuilder();
+        CriteriaQuery<VirtualCorpus> query =
+                builder.createQuery(VirtualCorpus.class);
+
+        Root<VirtualCorpus> virtualCorpus = query.from(VirtualCorpus.class);
+        Predicate predicate = builder.or(
+                builder.equal(virtualCorpus.get("createdBy"), userId),
+                builder.equal(virtualCorpus.get("type"),
+                        VirtualCorpusType.PREDEFINED));
+
+
+        query.select(virtualCorpus);
+        query.where(predicate);
+        query.distinct(true);
+        Query q = entityManager.createQuery(query);
+
+        List<VirtualCorpus> vcList = q.getResultList();
+        List<VirtualCorpus> groupVC = retrieveGroupVCByUser(userId);
+        Set<VirtualCorpus> vcSet = new HashSet<VirtualCorpus>();
+        vcSet.addAll(vcList);
+        vcSet.addAll(groupVC);
+        return vcSet;
+    }
+
+
     // EM: what is needed for admin?
     public List<VirtualCorpus> retrieveVirtualCorpusByAdmin () {
         return null;
diff --git a/full/src/main/java/de/ids_mannheim/korap/entity/UserGroup.java b/full/src/main/java/de/ids_mannheim/korap/entity/UserGroup.java
index d51e00f..f6c2d81 100644
--- a/full/src/main/java/de/ids_mannheim/korap/entity/UserGroup.java
+++ b/full/src/main/java/de/ids_mannheim/korap/entity/UserGroup.java
@@ -50,7 +50,7 @@
     @OneToMany(mappedBy="group")//, fetch = FetchType.LAZY)
     List<UserGroupMember> members;
 
-    @OneToMany(mappedBy = "virtualCorpus", fetch = FetchType.LAZY)
+    @OneToMany(mappedBy = "userGroup", fetch = FetchType.LAZY)
     private List<VirtualCorpusAccessGroup> virtualCorpusAccessGroup;
 
 
diff --git a/full/src/main/java/de/ids_mannheim/korap/entity/VirtualCorpus.java b/full/src/main/java/de/ids_mannheim/korap/entity/VirtualCorpus.java
index ff1d09a..06b0a25 100644
--- a/full/src/main/java/de/ids_mannheim/korap/entity/VirtualCorpus.java
+++ b/full/src/main/java/de/ids_mannheim/korap/entity/VirtualCorpus.java
@@ -50,7 +50,7 @@
     @Column(name = "created_by")
     private String createdBy;
 
-    @OneToMany(mappedBy = "userGroup", fetch=FetchType.LAZY)
+    @OneToMany(mappedBy = "virtualCorpus", fetch=FetchType.LAZY)
     List<VirtualCorpusAccessGroup> accessGroup;
 
 
@@ -61,4 +61,20 @@
                 + requiredAccess + ", collectionQuery= " + collectionQuery
                 + ", definition= " + definition + ", createdBy= " + createdBy;
     }
+    
+    @Override
+    public int hashCode () {
+        int prime = 37;
+        int result = 1;
+        result = prime * result + id;
+        result = prime * result + name.hashCode();
+        result = prime * result + createdBy.hashCode();
+        return result;
+    }
+    
+    @Override
+    public boolean equals (Object obj) {
+        VirtualCorpus vc = (VirtualCorpus) obj;
+        return (this.id == vc.getId()) ? true : false;
+    }
 }
diff --git a/full/src/main/java/de/ids_mannheim/korap/web/service/full/AnnotationService.java b/full/src/main/java/de/ids_mannheim/korap/web/service/full/AnnotationService.java
index 5055e56..101bba1 100644
--- a/full/src/main/java/de/ids_mannheim/korap/web/service/full/AnnotationService.java
+++ b/full/src/main/java/de/ids_mannheim/korap/web/service/full/AnnotationService.java
@@ -121,7 +121,7 @@
         }
         else if (codes.isEmpty()) {
             throw KustvaktResponseHandler.throwit(new KustvaktException(
-                    StatusCodes.NO_VALUE_FOUND, "No result found.","codes:[]"));
+                    StatusCodes.NO_RESULT_FOUND, "No result found.","codes:[]"));
         }
         
         List<AnnotationPair> annotationPairs = null;
@@ -164,7 +164,7 @@
         }
         else {
             throw KustvaktResponseHandler.throwit(new KustvaktException(
-                    StatusCodes.NO_VALUE_FOUND, "No result found.",""));
+                    StatusCodes.NO_RESULT_FOUND, "No result found.",""));
         }
     }
 
diff --git a/full/src/main/java/de/ids_mannheim/korap/web/service/full/StatisticService.java b/full/src/main/java/de/ids_mannheim/korap/web/service/full/StatisticService.java
index cb76ca8..ee30523 100644
--- a/full/src/main/java/de/ids_mannheim/korap/web/service/full/StatisticService.java
+++ b/full/src/main/java/de/ids_mannheim/korap/web/service/full/StatisticService.java
@@ -80,7 +80,7 @@
 
         String stats = searchKrill.getStatistics(json);
         if (stats.contains("-1"))
-            throw KustvaktResponseHandler.throwit(StatusCodes.NO_VALUE_FOUND);
+            throw KustvaktResponseHandler.throwit(StatusCodes.NO_RESULT_FOUND);
         jlog.debug("Stats: " + stats);
         return Response.ok(stats).build();
     }
diff --git a/full/src/main/resources/db/new-mysql/V1.1__create_virtual_corpus_tables.sql b/full/src/main/resources/db/new-mysql/V1.1__create_virtual_corpus_tables.sql
index d558e47..44b49e3 100644
--- a/full/src/main/resources/db/new-mysql/V1.1__create_virtual_corpus_tables.sql
+++ b/full/src/main/resources/db/new-mysql/V1.1__create_virtual_corpus_tables.sql
@@ -2,7 +2,8 @@
   id INTEGER PRIMARY KEY AUTO_INCREMENT,
   name varchar(100) NOT NULL,
   status varchar(100) NOT NULL,
-  created_by varchar(100) NOT NULL
+  created_by varchar(100) NOT NULL,
+  INDEX status_index(status)
 );
 
 CREATE TABLE IF NOT EXISTS user_group_member (
@@ -13,15 +14,15 @@
   created_by varchar(100) NOT NULL,
   deleted_by varchar(100) DEFAULT NULL,
   UNIQUE INDEX unique_index (user_id,group_id),
+  INDEX status_index(status),
   FOREIGN KEY (group_id) 
   	REFERENCES user_group (id)
   	ON DELETE CASCADE
 ); 
 
 CREATE TABLE IF NOT EXISTS role (
-  id varchar(100) NOT NULL,
-  privilege varchar(100) NOT NULL,
-  PRIMARY KEY (id)
+  id varchar(100) PRIMARY KEY NOT NULL,
+  privilege varchar(100) NOT NULL
 );
 
 CREATE TABLE IF NOT EXISTS group_member_role (
@@ -46,7 +47,9 @@
   description varchar(255) DEFAULT NULL,
   status varchar(100) DEFAULT NULL,
   collection_query varchar(2000) NOT NULL,
-  definition varchar(255) DEFAULT NULL
+  definition varchar(255) DEFAULT NULL,
+  INDEX owner_index (created_by),
+  INDEX type_index (type)
 );
 
 CREATE TABLE IF NOT EXISTS virtual_corpus_access (
@@ -58,6 +61,7 @@
   approved_by varchar(100) DEFAULT NULL,
   deleted_by varchar(100) DEFAULT NULL,
   UNIQUE INDEX unique_index (virtual_corpus_id,user_group_id),
+  INDEX status_index(status),
   FOREIGN KEY (user_group_id) 
   	REFERENCES user_group (id)
   	ON DELETE CASCADE,
diff --git a/full/src/main/resources/db/new-mysql/V3.1__insert_virtual_corpus.sql b/full/src/main/resources/db/new-mysql/V3.1__insert_virtual_corpus.sql
index 1d1cc9b..442a39c 100644
--- a/full/src/main/resources/db/new-mysql/V3.1__insert_virtual_corpus.sql
+++ b/full/src/main/resources/db/new-mysql/V3.1__insert_virtual_corpus.sql
@@ -36,6 +36,11 @@
 		(SELECT id from user_group where name = "dory group"),
 		"DELETED","dory", "pearl";
 
+INSERT INTO user_group_member(user_id, group_id, status, created_by)
+	SELECT "pearl",
+		(SELECT id from user_group where name = "auto group"),
+		"ACTIVE","system";
+
 		
 -- virtual corpora
 INSERT INTO virtual_corpus(name, type, required_access, created_by, description, status, collection_query) 
@@ -79,6 +84,6 @@
 	
 -- Summary user VC Lists
 -- dory: dory VC, group VC, system VC
--- nemo: group VC, published VC, system VC
+-- nemo: group VC, system VC
 -- marlin: published VC, system VC
--- pearl: system VC
+-- pearl: system VC, published VC
diff --git a/full/src/main/resources/default-config.xml b/full/src/main/resources/default-config.xml
index c6cd7d2..869059b 100644
--- a/full/src/main/resources/default-config.xml
+++ b/full/src/main/resources/default-config.xml
@@ -97,12 +97,12 @@
 
 	<!-- to configure database for sqlite, mysql, etc. migrations -->
 	<bean id="flyway" class="org.flywaydb.core.Flyway" init-method="migrate">
-		<property name="baselineOnMigrate" value="false" />
+		<property name="baselineOnMigrate" value="true" />
 		<!-- <property name="validateOnMigrate" value="false" /> -->
 		<!-- <property name="cleanOnValidationError" value="true" /> -->
 		<property name="locations" value="${jdbc.schemaPath}" />
-		<!-- <property name="dataSource" ref="dataSource" /> -->
-		<property name="dataSource" ref="sqliteDataSource" />
+		<property name="dataSource" ref="dataSource" />
+		<!-- <property name="dataSource" ref="sqliteDataSource" /> -->
 	</bean>
 	
 	
diff --git a/full/src/test/java/de/ids_mannheim/de/korap/dao/VirtualCorpusDaoTest.java b/full/src/test/java/de/ids_mannheim/de/korap/dao/VirtualCorpusDaoTest.java
index 828a467..d9b5ad2 100644
--- a/full/src/test/java/de/ids_mannheim/de/korap/dao/VirtualCorpusDaoTest.java
+++ b/full/src/test/java/de/ids_mannheim/de/korap/dao/VirtualCorpusDaoTest.java
@@ -2,57 +2,125 @@
 
 import static org.junit.Assert.assertEquals;
 
+import java.util.Iterator;
 import java.util.List;
+import java.util.Set;
 
+import org.junit.Rule;
 import org.junit.Test;
+import org.junit.rules.ExpectedException;
+import org.junit.runner.RunWith;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.ApplicationContext;
+import org.springframework.test.context.ContextConfiguration;
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
 
-import de.ids_mannheim.korap.config.BeanConfigTest;
+import de.ids_mannheim.korap.constants.VirtualCorpusType;
 import de.ids_mannheim.korap.dao.VirtualCorpusDao;
 import de.ids_mannheim.korap.entity.VirtualCorpus;
 import de.ids_mannheim.korap.exceptions.KustvaktException;
 
-public class VirtualCorpusDaoTest extends BeanConfigTest{
+@RunWith(SpringJUnit4ClassRunner.class)
+@ContextConfiguration("classpath:test-config.xml")
+public class VirtualCorpusDaoTest {
 
     @Autowired
     VirtualCorpusDao dao;
+    @Autowired
+    protected ApplicationContext context;
+
+    @Rule
+    public ExpectedException thrown = ExpectedException.none();
 
 
     @Test
-    public void retrieveVirtualCorpusByUserDory () {
-        List<VirtualCorpus> virtualCorpora =
-                dao.retrieveVirtualCorpusByUser("dory");
-        assertEquals(3,virtualCorpora.size());
+    public void testPredefinedVC () throws KustvaktException {
+        // insert vc
+        VirtualCorpus vc = new VirtualCorpus();
+        vc.setName("predefined VC");
+        vc.setCreatedBy("test class");
+        vc.setCollectionQuery("corpusSigle=GOE");
+        vc.setRequiredAccess("free");
+        vc.setType(VirtualCorpusType.PREDEFINED);
+        dao.storeVirtualCorpus(vc);
+
+        // select vc
+        List<VirtualCorpus> vcList =
+                dao.retrieveVCByType(VirtualCorpusType.PREDEFINED);
+        assertEquals(2, vcList.size());
+
+        // delete vc
+        dao.deleteVirtualCorpus(vc.getId());
+
+        // check if vc has been deleted
+        thrown.expect(KustvaktException.class);
+        vc = dao.retrieveVCById(vc.getId());
     }
 
 
     @Test
-    public void retrieveVirtualCorpusByUserNemo () {
-        List<VirtualCorpus> virtualCorpora =
-                dao.retrieveVirtualCorpusByUser("nemo");
-
+    public void retrievePredefinedVC () throws KustvaktException {
+        List<VirtualCorpus> vc =
+                dao.retrieveVCByType(VirtualCorpusType.PREDEFINED);
+        assertEquals(1, vc.size());
     }
 
 
+    /** retrieve private and group VC
+     * excludes hidden published VC (user has never used it)
+     * @throws KustvaktException
+     */
     @Test
-    public void retrieveVirtualCorpusByUserMarlin () {
-        List<VirtualCorpus> virtualCorpora =
-                dao.retrieveVirtualCorpusByUser("marlin");
-
+    public void retrieveVirtualCorpusByUserDory () throws KustvaktException {
+        Set<VirtualCorpus> virtualCorpora = dao.retrieveVCByUser("dory");
+        assertEquals(3, virtualCorpora.size());
+        Iterator<VirtualCorpus> i = virtualCorpora.iterator();
+        assertEquals("dory VC", i.next().getName());
+        assertEquals("system VC", i.next().getName());
+        assertEquals("group VC", i.next().getName());
     }
 
 
+    /** retrieves group VC and
+     *  excludes hidden published VC (user has never used it)
+     * @throws KustvaktException
+     */
     @Test
-    public void retrieveVirtualCorpusByUserPearl () {
-        List<VirtualCorpus> virtualCorpora =
-                dao.retrieveVirtualCorpusByUser("pearl");
+    public void retrieveVirtualCorpusByUserNemo () throws KustvaktException {
+        Set<VirtualCorpus> virtualCorpora = dao.retrieveVCByUser("nemo");
+        assertEquals(2, virtualCorpora.size());
+        Iterator<VirtualCorpus> i = virtualCorpora.iterator();
+        assertEquals("system VC", i.next().getName());
+        assertEquals("group VC", i.next().getName());
     }
 
 
-    @Override
-    public void initMethod () throws KustvaktException {
-        // TODO Auto-generated method stub
-        
+    /** retrieves published VC by the owner and
+     *  excludes group vc when a user is a pending member
+     * @throws KustvaktException
+     */
+    @Test
+    public void retrieveVirtualCorpusByUserMarlin () throws KustvaktException {
+        Set<VirtualCorpus> virtualCorpora = dao.retrieveVCByUser("marlin");
+        assertEquals(2, virtualCorpora.size());
+        Iterator<VirtualCorpus> i = virtualCorpora.iterator();
+        assertEquals("system VC", i.next().getName());
+        assertEquals("published VC", i.next().getName());
+    }
+
+
+
+    /** retrieves published VC from an auto-generated hidden group and 
+     *  excludes group vc when a user is a deleted member 
+     * @throws KustvaktException
+     */
+    @Test
+    public void retrieveVirtualCorpusByUserPearl () throws KustvaktException {
+        Set<VirtualCorpus> virtualCorpora = dao.retrieveVCByUser("pearl");
+        assertEquals(2, virtualCorpora.size());
+        Iterator<VirtualCorpus> i = virtualCorpora.iterator();
+        assertEquals("system VC", i.next().getName());
+        assertEquals("published VC", i.next().getName());
     }
 
 }
diff --git a/full/src/test/java/de/ids_mannheim/korap/security/ResourcesTest.java b/full/src/test/java/de/ids_mannheim/korap/security/ResourcesTest.java
index f3a79a8..6244763 100644
--- a/full/src/test/java/de/ids_mannheim/korap/security/ResourcesTest.java
+++ b/full/src/test/java/de/ids_mannheim/korap/security/ResourcesTest.java
@@ -99,6 +99,7 @@
 
     // securitymanager does not allow for anonymous retrieval, only resourcefinder!
     @Test 
+    @Ignore
     public void getResource () throws KustvaktException {
         
         exception.expect(KustvaktException.class);
diff --git a/full/src/test/java/de/ids_mannheim/korap/web/service/full/StatisticsServiceTest.java b/full/src/test/java/de/ids_mannheim/korap/web/service/full/StatisticsServiceTest.java
index d1a7b40..64f7c35 100644
--- a/full/src/test/java/de/ids_mannheim/korap/web/service/full/StatisticsServiceTest.java
+++ b/full/src/test/java/de/ids_mannheim/korap/web/service/full/StatisticsServiceTest.java
@@ -130,6 +130,7 @@
         assertEquals(ClientResponse.Status.BAD_REQUEST.getStatusCode(),
                 response.getStatus());
         String ent = response.getEntity(String.class);
+        System.out.println(ent);
         JsonNode node = mapper.readTree(ent);
         assertEquals(node.at("/errors/0/0").asInt(), 105);
         assertEquals(node.at("/errors/0/1").asText(),
diff --git a/full/src/test/java/de/ids_mannheim/korap/web/service/full/UserServiceTest.java b/full/src/test/java/de/ids_mannheim/korap/web/service/full/UserServiceTest.java
index 8d94185..b17437f 100644
--- a/full/src/test/java/de/ids_mannheim/korap/web/service/full/UserServiceTest.java
+++ b/full/src/test/java/de/ids_mannheim/korap/web/service/full/UserServiceTest.java
@@ -279,7 +279,7 @@
 		String entity = response.getEntity(String.class);
 		JsonNode node = JsonUtils.readTree(entity);
 		assertNotNull(node);
-		assertEquals(StatusCodes.NO_VALUE_FOUND, node.at("/errors/0/0").asInt());
+		assertEquals(StatusCodes.NO_RESULT_FOUND, node.at("/errors/0/0").asInt());
 		assertEquals("UserDetails", node.at("/errors/0/2").asText());
 		helper().dropUser("userservicetest");
 	}
diff --git a/full/src/test/resources/test-config.xml b/full/src/test/resources/test-config.xml
index e158b6b..b720834 100644
--- a/full/src/test/resources/test-config.xml
+++ b/full/src/test/resources/test-config.xml
@@ -36,7 +36,7 @@
 			<array>
 				<value>classpath:test-jdbc.properties</value>
 				<value>file:./test-jdbc.properties</value>
-				<value>classpath:hibernate.properties</value>
+				<value>classpath:test-hibernate.properties</value>
 				<value>classpath:kustvakt-test.conf</value>
 			</array>
 		</property>
@@ -95,6 +95,10 @@
 
 	<!-- to configure database for sqlite, mysql, etc. migrations -->
 	<bean id="flyway" class="org.flywaydb.core.Flyway" init-method="migrate">
+		<!-- drop existing tables and create new tables -->
+		<property name="validateOnMigrate" value="true" />
+		<property name="cleanOnValidationError" value="true" />
+
 		<property name="baselineOnMigrate" value="false" />
 		<property name="locations" value="${jdbc.schemaPath}" />
 		<property name="dataSource" ref="sqliteDataSource" />
diff --git a/lite/src/main/java/de/ids_mannheim/korap/web/service/light/LightService.java b/lite/src/main/java/de/ids_mannheim/korap/web/service/light/LightService.java
index 546e1b4..05f8056 100644
--- a/lite/src/main/java/de/ids_mannheim/korap/web/service/light/LightService.java
+++ b/lite/src/main/java/de/ids_mannheim/korap/web/service/light/LightService.java
@@ -304,7 +304,7 @@
 
         String stats = searchKrill.getStatistics(json);
         if (stats.contains("-1"))
-            throw KustvaktResponseHandler.throwit(StatusCodes.NO_VALUE_FOUND);
+            throw KustvaktResponseHandler.throwit(StatusCodes.NO_RESULT_FOUND);
         jlog.debug("Stats: " + stats);
         return Response.ok(stats).build();
     }
