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>
 	
 	
