diff --git a/full/pom.xml b/full/pom.xml
index ae87426..d4aca6e 100644
--- a/full/pom.xml
+++ b/full/pom.xml
@@ -70,9 +70,38 @@
 					<compilerVersion>${java.version}</compilerVersion>
 					<source>${java.version}</source>
 					<target>${java.version}</target>
+					<processors>
+						<processor>lombok.launch.AnnotationProcessorHider$AnnotationProcessor</processor>
+						<processor>org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor</processor>
+					</processors>
 				</configuration>
 			</plugin>
-
+	<!-- 		<plugin>
+				<groupId>org.bsc.maven</groupId>
+				<artifactId>maven-processor-plugin</artifactId>
+				<version>2.2.4</version>
+				<executions>
+					<execution>
+						<id>process</id>
+						<goals>
+							<goal>process</goal>
+						</goals>
+						<phase>generate-sources</phase>
+						<configuration>
+							<processors>
+								<processor>lombok.launch.AnnotationProcessorHider$AnnotationProcessor,org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor</processor>
+							</processors>
+						</configuration>
+					</execution>
+				</executions>
+				<dependencies>
+					<dependency>
+						<groupId>org.hibernate</groupId>
+						<artifactId>hibernate-jpamodelgen</artifactId>
+						<version>5.2.12.Final</version>
+					</dependency>
+				</dependencies>
+			</plugin> -->
 			<plugin>
 				<groupId>org.apache.maven.plugins</groupId>
 				<artifactId>maven-surefire-plugin</artifactId>
@@ -172,14 +201,20 @@
 			<artifactId>unboundid-ldapsdk</artifactId>
 			<version>3.2.1</version>
 		</dependency>
-		
+
 		<!-- Hibernate -->
 		<dependency>
 			<groupId>org.hibernate</groupId>
 			<artifactId>hibernate-entitymanager</artifactId>
 			<version>5.1.8.Final</version>
 		</dependency>
-		
+		<dependency>
+			<groupId>org.hibernate</groupId>
+			<artifactId>hibernate-jpamodelgen</artifactId>
+			<version>5.2.12.Final</version>
+			<scope>provided</scope>
+		</dependency>
+
 		<!-- MySql -->
 		<dependency>
 			<groupId>mysql</groupId>
@@ -212,7 +247,7 @@
 			<artifactId>spring-tx</artifactId>
 			<version>${spring-framework.version}</version>
 		</dependency>
-		
+
 		<!-- Flyway -->
 		<dependency>
 			<groupId>org.flywaydb</groupId>
diff --git a/full/src/main/java/de/ids_mannheim/korap/dao/AnnotationDao.java b/full/src/main/java/de/ids_mannheim/korap/dao/AnnotationDao.java
index b8cf357..afc360f 100644
--- a/full/src/main/java/de/ids_mannheim/korap/dao/AnnotationDao.java
+++ b/full/src/main/java/de/ids_mannheim/korap/dao/AnnotationDao.java
@@ -10,9 +10,11 @@
 import javax.persistence.criteria.Predicate;
 import javax.persistence.criteria.Root;
 
-import org.springframework.stereotype.Component;
+import org.springframework.stereotype.Repository;
 
 import de.ids_mannheim.korap.entity.AnnotationPair;
+import de.ids_mannheim.korap.entity.AnnotationPair_;
+import de.ids_mannheim.korap.entity.Annotation_;
 
 
 /**
@@ -22,7 +24,7 @@
  * @author margaretha
  *
  */
-@Component
+@Repository
 public class AnnotationDao {
 
     @PersistenceContext
@@ -39,8 +41,8 @@
         CriteriaQuery<AnnotationPair> query =
                 criteriaBuilder.createQuery(AnnotationPair.class);
         Root<AnnotationPair> annotationPair = query.from(AnnotationPair.class);
-        annotationPair.fetch("annotation1");
-        annotationPair.fetch("annotation2");
+        annotationPair.fetch(AnnotationPair_.annotation1);
+        annotationPair.fetch(AnnotationPair_.annotation2);
         query.select(annotationPair);
         Query q = entityManager.createQuery(query);
         return q.getResultList();
@@ -65,9 +67,9 @@
         CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
         CriteriaQuery<Object> query = criteriaBuilder.createQuery();
         Root<AnnotationPair> annotationPair = query.from(AnnotationPair.class);
-        annotationPair.fetch("annotation1");
-        annotationPair.fetch("annotation2");
-        annotationPair.fetch("values");
+        annotationPair.fetch(AnnotationPair_.annotation1);
+        annotationPair.fetch(AnnotationPair_.annotation2);
+        annotationPair.fetch(AnnotationPair_.values);
 
         // EM: Hibernate bug in join n:m (see AnnotationPair.values). 
         // There should not be any redundant AnnotationPair. 
@@ -77,14 +79,16 @@
         query = query.select(annotationPair);
 
         if (!foundry.isEmpty()) {
-            Predicate foundryPredicate = criteriaBuilder.equal(
-                    annotationPair.get("annotation1").get("code"), foundry);
+            Predicate foundryPredicate = criteriaBuilder.equal(annotationPair
+                    .get(AnnotationPair_.annotation1).get(Annotation_.code),
+                    foundry);
             if (layer.isEmpty() || layer.equals("*")) {
                 query.where(foundryPredicate);
             }
             else {
-                Predicate layerPredicate = criteriaBuilder.equal(
-                        annotationPair.get("annotation2").get("code"), layer);
+                Predicate layerPredicate = criteriaBuilder.equal(annotationPair
+                        .get(AnnotationPair_.annotation2).get(Annotation_.code),
+                        layer);
                 Predicate andPredicate =
                         criteriaBuilder.and(foundryPredicate, layerPredicate);
                 query.where(andPredicate);
diff --git a/full/src/main/java/de/ids_mannheim/korap/dao/ResourceDao.java b/full/src/main/java/de/ids_mannheim/korap/dao/ResourceDao.java
index 0a14a3c..16913bd 100644
--- a/full/src/main/java/de/ids_mannheim/korap/dao/ResourceDao.java
+++ b/full/src/main/java/de/ids_mannheim/korap/dao/ResourceDao.java
@@ -9,9 +9,10 @@
 import javax.persistence.criteria.CriteriaQuery;
 import javax.persistence.criteria.Root;
 
-import org.springframework.stereotype.Component;
+import org.springframework.stereotype.Repository;
 
 import de.ids_mannheim.korap.entity.Resource;
+import de.ids_mannheim.korap.entity.Resource_;
 
 /**
  * ResourceDao manages SQL queries regarding resource info and layers.
@@ -19,21 +20,22 @@
  * @author margaretha
  *
  */
-@Component
+@Repository
 public class ResourceDao {
 
     @PersistenceContext
     private EntityManager entityManager;
-    
+
     /** Select all from the resource table  
      *  
      * @return a list of resources
      */
     public List<Resource> getAllResources () {
         CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
-        CriteriaQuery<Resource> query = criteriaBuilder.createQuery(Resource.class);
+        CriteriaQuery<Resource> query =
+                criteriaBuilder.createQuery(Resource.class);
         Root<Resource> resource = query.from(Resource.class);
-        resource.fetch("layers");
+        resource.fetch(Resource_.layers);
         query.select(resource);
         Query q = entityManager.createQuery(query);
         return q.getResultList();
diff --git a/full/src/main/java/de/ids_mannheim/korap/dao/UserGroupDao.java b/full/src/main/java/de/ids_mannheim/korap/dao/UserGroupDao.java
index 900e062..324aeb8 100644
--- a/full/src/main/java/de/ids_mannheim/korap/dao/UserGroupDao.java
+++ b/full/src/main/java/de/ids_mannheim/korap/dao/UserGroupDao.java
@@ -1,6 +1,5 @@
 package de.ids_mannheim.korap.dao;
 
-import java.util.ArrayList;
 import java.util.List;
 
 import javax.persistence.EntityManager;
@@ -8,22 +7,29 @@
 import javax.persistence.Query;
 import javax.persistence.criteria.CriteriaBuilder;
 import javax.persistence.criteria.CriteriaQuery;
+import javax.persistence.criteria.ListJoin;
+import javax.persistence.criteria.Predicate;
 import javax.persistence.criteria.Root;
 
-import org.springframework.stereotype.Component;
+import org.springframework.stereotype.Repository;
 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.entity.UserGroup;
 import de.ids_mannheim.korap.entity.UserGroupMember;
+import de.ids_mannheim.korap.entity.UserGroupMember_;
+import de.ids_mannheim.korap.entity.UserGroup_;
 import de.ids_mannheim.korap.entity.VirtualCorpus;
 import de.ids_mannheim.korap.entity.VirtualCorpusAccessGroup;
 
 @Transactional
-@Component
+@Repository
 public class UserGroupDao {
 
+    public static final String USER_GROUP_ALL = "all";
+
     @PersistenceContext
     private EntityManager entityManager;
 
@@ -57,23 +63,57 @@
 
         Root<UserGroup> root = query.from(UserGroup.class);
         query.select(root);
-        query.where(criteriaBuilder.equal(root.get("id"), groupId));
+        query.where(criteriaBuilder.equal(root.get(UserGroup_.id), groupId));
         Query q = entityManager.createQuery(query);
         return (UserGroup) q.getSingleResult();
     }
 
+    public List<UserGroup> retrieveGroupByUserId (String userId) {
+        CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
+        CriteriaQuery<UserGroup> query =
+                criteriaBuilder.createQuery(UserGroup.class);
+
+        Root<UserGroup> root = query.from(UserGroup.class);
+
+        Predicate allUserGroup = criteriaBuilder.and(
+                criteriaBuilder.equal(root.get(UserGroup_.name),
+                        USER_GROUP_ALL),
+                criteriaBuilder.notEqual(root.get(UserGroup_.status),
+                        UserGroupStatus.DELETED));
+
+
+        ListJoin<UserGroup, UserGroupMember> members =
+                root.join(UserGroup_.members);
+        Predicate memberships = criteriaBuilder.and(
+                criteriaBuilder.equal(members.get(UserGroupMember_.userId),
+                        userId),
+                criteriaBuilder.equal(members.get(UserGroupMember_.status),
+                        GroupMemberStatus.ACTIVE));
+
+
+        query.select(root);
+        query.where(criteriaBuilder.and(allUserGroup, memberships));
+        Query q = entityManager.createQuery(query);
+        return q.getResultList();
+    }
+
+    public void addVCToGroup (VirtualCorpus virtualCorpus, String createdBy,
+            VirtualCorpusAccessStatus status, UserGroup group) {
+        VirtualCorpusAccessGroup accessGroup = new VirtualCorpusAccessGroup();
+        accessGroup.setCreatedBy(createdBy);
+        accessGroup.setStatus(status);
+        accessGroup.setUserGroup(group);
+        accessGroup.setVirtualCorpus(virtualCorpus);
+        entityManager.persist(accessGroup);
+    }
+
     public void addVCToGroup (List<VirtualCorpus> virtualCorpora,
-            String createdBy, UserGroup group) {
-        // check role
-        
-        VirtualCorpusAccessGroup accessGroup;
+            String createdBy, UserGroup group,
+            VirtualCorpusAccessStatus status) {
+
         for (VirtualCorpus vc : virtualCorpora) {
-            accessGroup = new VirtualCorpusAccessGroup();
-            accessGroup.setCreatedBy(createdBy);
-            accessGroup.setStatus(VirtualCorpusAccessStatus.ACTIVE);
-            accessGroup.setUserGroup(group);
-            accessGroup.setVirtualCorpus(vc);
-            entityManager.persist(accessGroup);
+            addVCToGroup(vc, createdBy, status, group);
         }
     }
+
 }
diff --git a/full/src/main/java/de/ids_mannheim/korap/dao/UserGroupMemberDao.java b/full/src/main/java/de/ids_mannheim/korap/dao/UserGroupMemberDao.java
index 5404c02..301de3b 100644
--- a/full/src/main/java/de/ids_mannheim/korap/dao/UserGroupMemberDao.java
+++ b/full/src/main/java/de/ids_mannheim/korap/dao/UserGroupMemberDao.java
@@ -7,43 +7,40 @@
 import javax.persistence.Query;
 import javax.persistence.criteria.CriteriaBuilder;
 import javax.persistence.criteria.CriteriaQuery;
+import javax.persistence.criteria.Join;
 import javax.persistence.criteria.Predicate;
 import javax.persistence.criteria.Root;
 
-import org.springframework.stereotype.Component;
+import org.springframework.stereotype.Repository;
 import org.springframework.transaction.annotation.Transactional;
 
 import de.ids_mannheim.korap.constants.GroupMemberStatus;
-import de.ids_mannheim.korap.entity.UserGroup;
+import de.ids_mannheim.korap.entity.Role;
 import de.ids_mannheim.korap.entity.UserGroupMember;
+import de.ids_mannheim.korap.entity.UserGroupMember_;
 import de.ids_mannheim.korap.exceptions.KustvaktException;
 import de.ids_mannheim.korap.utils.ParameterChecker;
 
 @Transactional
-@Component
-public class UserGroupMemberDao {
+@Repository
+public class UserGroupMemberDao<X> {
 
     @PersistenceContext
     private EntityManager entityManager;
 
-    public void addMember (UserGroupMember member, UserGroup userGroup)
+    public void addMember (UserGroupMember member)
             throws KustvaktException {
         ParameterChecker.checkObjectValue(member, "userGroupMember");
-        ParameterChecker.checkObjectValue(userGroup, "userGroup");
-
-        List<UserGroupMember> members = userGroup.getMembers();
-        members.add(member);
-        entityManager.persist(userGroup);
+        entityManager.persist(member);
     }
     
-    public void addMembers (List<UserGroupMember> newMembers, UserGroup userGroup)
+    public void addMembers (List<UserGroupMember> members)
             throws KustvaktException {
-        ParameterChecker.checkObjectValue(newMembers, "List<UserGroupMember>");
-        ParameterChecker.checkObjectValue(userGroup, "userGroup");
+        ParameterChecker.checkObjectValue(members, "List<UserGroupMember>");
 
-        List<UserGroupMember> members = userGroup.getMembers();
-        members.addAll(newMembers);
-        entityManager.persist(userGroup);
+        for (UserGroupMember member: members){
+            addMember(member);
+        }
     }
     
     public void approveMember (String userId, int groupId)
@@ -83,8 +80,8 @@
         Root<UserGroupMember> root = query.from(UserGroupMember.class);
 
         Predicate predicate = criteriaBuilder.and(
-                criteriaBuilder.equal(root.get("groupId"), groupId),
-                criteriaBuilder.equal(root.get("userId"), userId));
+                criteriaBuilder.equal(root.get(UserGroupMember_.group), groupId),
+                criteriaBuilder.equal(root.get(UserGroupMember_.userId), userId));
 
         query.select(root);
         query.where(predicate);
@@ -92,4 +89,21 @@
         return (UserGroupMember) q.getSingleResult();
     }
 
+    public List<UserGroupMember> retrieveMemberByRole (int groupId, int roleId) {
+        CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
+        CriteriaQuery<UserGroupMember> query =
+                criteriaBuilder.createQuery(UserGroupMember.class);
+
+        Root<UserGroupMember> root = query.from(UserGroupMember.class);
+        Join<UserGroupMember, Role> memberRole = root.join("roles");
+        
+        Predicate predicate = criteriaBuilder.and(
+                criteriaBuilder.equal(root.get(UserGroupMember_.group), groupId),
+                criteriaBuilder.equal(memberRole.get("role_id"), roleId));
+
+        query.select(root);
+        query.where(predicate);
+        Query q = entityManager.createQuery(query);
+        return q.getResultList();
+    }
 }
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 22042a7..6085309 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
@@ -14,7 +14,7 @@
 import javax.persistence.criteria.Predicate;
 import javax.persistence.criteria.Root;
 
-import org.springframework.stereotype.Component;
+import org.springframework.stereotype.Repository;
 import org.springframework.transaction.annotation.Transactional;
 
 import de.ids_mannheim.korap.constants.GroupMemberStatus;
@@ -34,7 +34,7 @@
  *
  */
 @Transactional
-@Component
+@Repository
 public class VirtualCorpusDao {
 
     @PersistenceContext
diff --git a/full/src/main/java/de/ids_mannheim/korap/dto/converter/AnnotationConverter.java b/full/src/main/java/de/ids_mannheim/korap/dto/converter/AnnotationConverter.java
index c049c2a..0e6cf13 100644
--- a/full/src/main/java/de/ids_mannheim/korap/dto/converter/AnnotationConverter.java
+++ b/full/src/main/java/de/ids_mannheim/korap/dto/converter/AnnotationConverter.java
@@ -5,7 +5,7 @@
 import java.util.List;
 import java.util.Map;
 
-import org.springframework.stereotype.Component;
+import org.springframework.stereotype.Service;
 
 import de.ids_mannheim.korap.dto.FoundryDto;
 import de.ids_mannheim.korap.dto.FoundryDto.Layer;
@@ -21,7 +21,7 @@
  * @author margaretha
  *
  */
-@Component
+@Service
 public class AnnotationConverter {
 
     /**
diff --git a/full/src/main/java/de/ids_mannheim/korap/dto/converter/ResourceConverter.java b/full/src/main/java/de/ids_mannheim/korap/dto/converter/ResourceConverter.java
index 03f00b3..8e22249 100644
--- a/full/src/main/java/de/ids_mannheim/korap/dto/converter/ResourceConverter.java
+++ b/full/src/main/java/de/ids_mannheim/korap/dto/converter/ResourceConverter.java
@@ -5,13 +5,13 @@
 import java.util.List;
 import java.util.Map;
 
-import org.springframework.stereotype.Component;
+import org.springframework.stereotype.Service;
 
 import de.ids_mannheim.korap.dto.ResourceDto;
 import de.ids_mannheim.korap.entity.AnnotationPair;
 import de.ids_mannheim.korap.entity.Resource;
 
-@Component
+@Service
 public class ResourceConverter {
 
     public List<ResourceDto> convertToResourcesDto (List<Resource> resources) {
diff --git a/full/src/main/java/de/ids_mannheim/korap/service/AnnotationService.java b/full/src/main/java/de/ids_mannheim/korap/service/AnnotationService.java
new file mode 100644
index 0000000..164887b
--- /dev/null
+++ b/full/src/main/java/de/ids_mannheim/korap/service/AnnotationService.java
@@ -0,0 +1,84 @@
+package de.ids_mannheim.korap.service;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import de.ids_mannheim.korap.dao.AnnotationDao;
+import de.ids_mannheim.korap.dto.FoundryDto;
+import de.ids_mannheim.korap.dto.LayerDto;
+import de.ids_mannheim.korap.dto.converter.AnnotationConverter;
+import de.ids_mannheim.korap.entity.AnnotationPair;
+import de.ids_mannheim.korap.exceptions.KustvaktException;
+import de.ids_mannheim.korap.exceptions.StatusCodes;
+import de.ids_mannheim.korap.web.utils.KustvaktResponseHandler;
+
+@Service
+public class AnnotationService {
+
+    private static Logger jlog =
+            LoggerFactory.getLogger(AnnotationService.class);
+
+    @Autowired
+    private AnnotationDao annotationDao;
+
+    @Autowired
+    private AnnotationConverter annotationConverter;
+
+    public List<LayerDto> getLayerDtos () {
+        List<AnnotationPair> layers = annotationDao.getAllFoundryLayerPairs();
+        jlog.debug("/layers " + layers.toString());
+        List<LayerDto> layerDto = annotationConverter.convertToLayerDto(layers);
+        return layerDto;
+    }
+
+    public List<FoundryDto> getFoundryDtos (List<String> codes, String language)
+            throws KustvaktException {
+        List<AnnotationPair> annotationPairs = null;
+        String foundry = "", layer = "";
+        if (codes.contains("*")) {
+            annotationPairs =
+                    annotationDao.getAnnotationDescriptions(foundry, layer);
+        }
+        else {
+            String[] annotationCode;
+            annotationPairs = new ArrayList<AnnotationPair>();
+            for (String code : codes) {
+                jlog.debug("code " + code);
+                annotationCode = code.split("/");
+                if (annotationCode.length == 1) {
+                    foundry = annotationCode[0];
+                }
+                else if (annotationCode.length == 2) {
+                    foundry = annotationCode[0];
+                    layer = annotationCode[1];
+                }
+                else {
+                    jlog.error("Annotation code is wrong: " + annotationCode);
+                    throw KustvaktResponseHandler.throwit(
+                            new KustvaktException(StatusCodes.INVALID_ATTRIBUTE,
+                                    "Bad attribute:", code));
+                }
+
+                annotationPairs.addAll(annotationDao
+                        .getAnnotationDescriptions(foundry, layer));
+            }
+        }
+
+        if (annotationPairs != null && !annotationPairs.isEmpty()) {
+            List<FoundryDto> foundryDtos = annotationConverter
+                    .convertToFoundryDto(annotationPairs, language);
+            jlog.debug("/description " + annotationPairs.toString());
+            return foundryDtos;
+        }
+        else {
+            throw new KustvaktException(StatusCodes.NO_RESULT_FOUND,
+                    "No result found.", "");
+        }
+
+    }
+}
diff --git a/full/src/main/java/de/ids_mannheim/korap/service/ResourceService.java b/full/src/main/java/de/ids_mannheim/korap/service/ResourceService.java
new file mode 100644
index 0000000..937f337
--- /dev/null
+++ b/full/src/main/java/de/ids_mannheim/korap/service/ResourceService.java
@@ -0,0 +1,33 @@
+package de.ids_mannheim.korap.service;
+
+import java.util.List;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import de.ids_mannheim.korap.dao.ResourceDao;
+import de.ids_mannheim.korap.dto.ResourceDto;
+import de.ids_mannheim.korap.dto.converter.ResourceConverter;
+import de.ids_mannheim.korap.entity.Resource;
+
+@Service
+public class ResourceService {
+
+    private static Logger jlog = LoggerFactory.getLogger(ResourceService.class);
+
+    @Autowired
+    private ResourceDao resourceDao;
+    @Autowired
+    private ResourceConverter resourceConverter;
+
+    public List<ResourceDto> getResourceDtos () {
+        List<Resource> resources = resourceDao.getAllResources();
+        List<ResourceDto> resourceDtos =
+                resourceConverter.convertToResourcesDto(resources);
+        jlog.debug("/info " + resourceDtos.toString());
+        return resourceDtos;
+    }
+
+}
diff --git a/full/src/main/java/de/ids_mannheim/korap/web/controller/AdminController.java b/full/src/main/java/de/ids_mannheim/korap/web/controller/AdminController.java
index 67be146..c9e8a4b 100644
--- a/full/src/main/java/de/ids_mannheim/korap/web/controller/AdminController.java
+++ b/full/src/main/java/de/ids_mannheim/korap/web/controller/AdminController.java
@@ -1,4 +1,4 @@
-package de.ids_mannheim.korap.web.service.full;
+package de.ids_mannheim.korap.web.controller;
 
 import java.util.List;
 import java.util.Locale;
@@ -48,15 +48,15 @@
 @Path(KustvaktServer.API_VERSION + "/admin")
 @ResourceFilters({ AdminFilter.class, PiwikFilter.class })
 @Produces(MediaType.APPLICATION_JSON + ";charset=utf-8")
-public class AdminService {
+public class AdminController {
 
-    private static Logger jlog = LoggerFactory.getLogger(AdminService.class);
+    private static Logger jlog = LoggerFactory.getLogger(AdminController.class);
 
     private AuditingIface auditingController;
     private DocumentDao documentDao;
 
 
-    public AdminService () {
+    public AdminController () {
         this.auditingController = BeansFactory.getKustvaktContext()
                 .getAuditingProvider();
         this.documentDao = new DocumentDao(
diff --git a/full/src/main/java/de/ids_mannheim/korap/web/controller/AnnotationController.java b/full/src/main/java/de/ids_mannheim/korap/web/controller/AnnotationController.java
index 101bba1..331ed6f 100644
--- a/full/src/main/java/de/ids_mannheim/korap/web/controller/AnnotationController.java
+++ b/full/src/main/java/de/ids_mannheim/korap/web/controller/AnnotationController.java
@@ -1,7 +1,6 @@
-package de.ids_mannheim.korap.web.service.full;
+package de.ids_mannheim.korap.web.controller;
 
 import java.io.IOException;
-import java.util.ArrayList;
 import java.util.List;
 
 import javax.ws.rs.Consumes;
@@ -20,14 +19,10 @@
 import com.fasterxml.jackson.databind.JsonNode;
 import com.sun.jersey.spi.container.ResourceFilters;
 
-import de.ids_mannheim.korap.dao.AnnotationDao;
-import de.ids_mannheim.korap.dto.FoundryDto;
-import de.ids_mannheim.korap.dto.LayerDto;
-import de.ids_mannheim.korap.dto.converter.AnnotationConverter;
-import de.ids_mannheim.korap.entity.AnnotationPair;
 import de.ids_mannheim.korap.exceptions.KustvaktException;
 import de.ids_mannheim.korap.exceptions.StatusCodes;
 import de.ids_mannheim.korap.filter.AuthFilter;
+import de.ids_mannheim.korap.service.AnnotationService;
 import de.ids_mannheim.korap.utils.JsonUtils;
 import de.ids_mannheim.korap.web.filter.DemoUserFilter;
 import de.ids_mannheim.korap.web.filter.PiwikFilter;
@@ -43,17 +38,13 @@
 @Path("annotation/")
 @ResourceFilters({ AuthFilter.class, DemoUserFilter.class, PiwikFilter.class })
 @Produces(MediaType.APPLICATION_JSON + ";charset=utf-8")
-public class AnnotationService {
+public class AnnotationController {
 
     private static Logger jlog =
-            LoggerFactory.getLogger(AnnotationService.class);
+            LoggerFactory.getLogger(AnnotationController.class);
 
     @Autowired
-    private AnnotationDao annotationDao;
-
-    @Autowired
-    private AnnotationConverter annotationConverter;
-
+    private AnnotationService annotationService;
 
     /**
      * Returns information about all supported layers
@@ -63,10 +54,7 @@
     @GET
     @Path("layers")
     public Response getLayers () {
-        List<AnnotationPair> layers = annotationDao.getAllFoundryLayerPairs();
-        jlog.debug("/layers " + layers.toString());
-        List<LayerDto> layerDto = annotationConverter.convertToLayerDto(layers);
-        String result = JsonUtils.toJSON(layerDto);
+        String result = JsonUtils.toJSON(annotationService.getLayerDtos());
         return Response.ok(result).build();
     }
 
@@ -80,14 +68,16 @@
      *            2-letter language code (description language)
      * @return a list of foundry, layer, value information in json
      */
+    @SuppressWarnings("unchecked")
     @POST
     @Path("description")
     @Consumes(MediaType.APPLICATION_JSON)
     public Response getFoundryDescriptions (String json) {
         JsonNode node = JsonUtils.readTree(json);
         if (node == null) {
-            throw KustvaktResponseHandler.throwit(new KustvaktException(
-                    StatusCodes.MISSING_ARGUMENT, "Missing a json string.", ""));
+            throw KustvaktResponseHandler
+                    .throwit(new KustvaktException(StatusCodes.MISSING_ARGUMENT,
+                            "Missing a json string.", ""));
         }
 
         String language;
@@ -120,52 +110,20 @@
                             "Missing attribute:", "codes"));
         }
         else if (codes.isEmpty()) {
-            throw KustvaktResponseHandler.throwit(new KustvaktException(
-                    StatusCodes.NO_RESULT_FOUND, "No result found.","codes:[]"));
-        }
-        
-        List<AnnotationPair> annotationPairs = null;
-        String foundry = "", layer = "";
-        if (codes.contains("*")) {
-            annotationPairs =
-                    annotationDao.getAnnotationDescriptions(foundry, layer);
-        }
-        else {
-            String[] annotationCode;
-            annotationPairs = new ArrayList<AnnotationPair>();
-            for (String code : codes) {
-                jlog.debug("code " + code);
-                annotationCode = code.split("/");
-                if (annotationCode.length == 1) {
-                    foundry = annotationCode[0];
-                }
-                else if (annotationCode.length == 2) {
-                    foundry = annotationCode[0];
-                    layer = annotationCode[1];
-                }
-                else {
-                    jlog.error("Annotation code is wrong: " + annotationCode);
-                    throw KustvaktResponseHandler.throwit(
-                            new KustvaktException(StatusCodes.INVALID_ATTRIBUTE,
-                                    "Bad attribute:", code));
-                }
-
-                annotationPairs.addAll(annotationDao
-                        .getAnnotationDescriptions(foundry, layer));
-            }
+            throw KustvaktResponseHandler
+                    .throwit(new KustvaktException(StatusCodes.NO_RESULT_FOUND,
+                            "No result found.", "codes:[]"));
         }
 
-        if (annotationPairs != null && !annotationPairs.isEmpty()) {
-            List<FoundryDto> dtos = annotationConverter
-                    .convertToFoundryDto(annotationPairs, language);
-            jlog.debug("/description " + annotationPairs.toString());
-            String result = JsonUtils.toJSON(dtos);
-            return Response.ok(result).build();
+        String result;
+        try {
+            result = JsonUtils
+                    .toJSON(annotationService.getFoundryDtos(codes, language));
         }
-        else {
-            throw KustvaktResponseHandler.throwit(new KustvaktException(
-                    StatusCodes.NO_RESULT_FOUND, "No result found.",""));
+        catch (KustvaktException e) {
+            throw KustvaktResponseHandler.throwit(e);
         }
+        return Response.ok(result).build();
     }
 
 }
diff --git a/full/src/main/java/de/ids_mannheim/korap/web/controller/AuthenticationController.java b/full/src/main/java/de/ids_mannheim/korap/web/controller/AuthenticationController.java
index 96f345c..b475c9c 100644
--- a/full/src/main/java/de/ids_mannheim/korap/web/controller/AuthenticationController.java
+++ b/full/src/main/java/de/ids_mannheim/korap/web/controller/AuthenticationController.java
@@ -1,4 +1,4 @@
-package de.ids_mannheim.korap.web.service.full;
+package de.ids_mannheim.korap.web.controller;
 
 import com.sun.jersey.spi.container.ContainerRequest;
 import com.sun.jersey.spi.container.ResourceFilters;
@@ -45,20 +45,20 @@
 @Path("/auth")
 @ResourceFilters({ PiwikFilter.class })
 @Produces(MediaType.TEXT_HTML + ";charset=utf-8")
-public class AuthService {
+public class AuthenticationController {
 
     private static Boolean DEBUG_LOG = true;
 
     //todo: bootstrap function to transmit certain default configuration settings and examples (example user queries,
     // default usersettings, etc.)
-    private static Logger jlog = KustvaktLogger.getLogger(AuthService.class);
+    private static Logger jlog = KustvaktLogger.getLogger(AuthenticationController.class);
 
     private AuthenticationManagerIface controller;
 
 
     //    private SendMail mail;
 
-    public AuthService () {
+    public AuthenticationController () {
         this.controller =
                 BeansFactory.getKustvaktContext().getAuthenticationManager();
         //todo: replace with real property values
diff --git a/full/src/main/java/de/ids_mannheim/korap/web/controller/DocumentController.java b/full/src/main/java/de/ids_mannheim/korap/web/controller/DocumentController.java
index df23da8..c23db52 100644
--- a/full/src/main/java/de/ids_mannheim/korap/web/controller/DocumentController.java
+++ b/full/src/main/java/de/ids_mannheim/korap/web/controller/DocumentController.java
@@ -1,4 +1,4 @@
-package de.ids_mannheim.korap.web.service.full;
+package de.ids_mannheim.korap.web.controller;
 
 import com.sun.jersey.spi.container.ResourceFilters;
 import de.ids_mannheim.korap.config.BeansFactory;
@@ -19,22 +19,25 @@
 import java.util.List;
 
 /**
+ * EM: To Do: restructure codes regarding service and controller layers
+ * 
  * @author hanl
  * @date 19/11/2014
  */
 @Path(KustvaktServer.API_VERSION + "/doc")
 @ResourceFilters({ AdminFilter.class })
 @Produces(MediaType.APPLICATION_JSON + ";charset=utf-8")
-public class DocumentService {
+public class DocumentController {
 
-    private static Logger jlog = LoggerFactory.getLogger(DocumentService.class);
+    private static Logger jlog =
+            LoggerFactory.getLogger(DocumentController.class);
     private DocumentDao documentDao;
 
 
     // todo: error handling
-    public DocumentService () {
-        this.documentDao = new DocumentDao(BeansFactory.getKustvaktContext()
-                .getPersistenceClient());
+    public DocumentController () {
+        this.documentDao = new DocumentDao(
+                BeansFactory.getKustvaktContext().getPersistenceClient());
     }
 
 
@@ -61,10 +64,8 @@
     public Response get (@PathParam("corpus") String corpus,
             @QueryParam("index") Integer index,
             @QueryParam("offset") Integer length) {
-        if (index == null)
-            index = 1;
-        if (length == null)
-            length = 25;
+        if (index == null) index = 1;
+        if (length == null) length = 25;
         try {
             List docs = this.documentDao.findbyCorpus(corpus, length, index);
             //todo: serialize to document json
diff --git a/full/src/main/java/de/ids_mannheim/korap/web/controller/KustvaktController.java b/full/src/main/java/de/ids_mannheim/korap/web/controller/KustvaktController.java
index 7c7b647..f581f37 100644
--- a/full/src/main/java/de/ids_mannheim/korap/web/controller/KustvaktController.java
+++ b/full/src/main/java/de/ids_mannheim/korap/web/controller/KustvaktController.java
@@ -1,4 +1,4 @@
-package de.ids_mannheim.korap.web.service.full;
+package de.ids_mannheim.korap.web.controller;
 
 import de.ids_mannheim.korap.server.KustvaktServer;
 import de.ids_mannheim.korap.utils.JsonUtils;
@@ -19,9 +19,9 @@
  */
 @Path("kustvakt")
 @Produces(MediaType.APPLICATION_JSON + ";charset=utf-8")
-public class KustvaktService {
+public class KustvaktController {
 
-    private static Logger jlog = LoggerFactory.getLogger(UserService.class);
+    private static Logger jlog = LoggerFactory.getLogger(UserController.class);
 
 
     @Path("info")
diff --git a/full/src/main/java/de/ids_mannheim/korap/web/controller/OAuthController.java b/full/src/main/java/de/ids_mannheim/korap/web/controller/OAuthController.java
index 778ac27..7192e3e 100644
--- a/full/src/main/java/de/ids_mannheim/korap/web/controller/OAuthController.java
+++ b/full/src/main/java/de/ids_mannheim/korap/web/controller/OAuthController.java
@@ -1,4 +1,4 @@
-package de.ids_mannheim.korap.web.service.full;
+package de.ids_mannheim.korap.web.controller;
 
 import com.sun.jersey.spi.container.ContainerRequest;
 import com.sun.jersey.spi.container.ResourceFilters;
@@ -52,7 +52,7 @@
 //todo: only allow oauth2 access_token requests GET methods?
 //todo: allow refresh tokens
 @Path(KustvaktServer.API_VERSION + "/oauth2")
-public class OAuthService {
+public class OAuthController {
 
     private OAuth2Handler handler;
     private AuthenticationManagerIface controller;
@@ -60,7 +60,7 @@
     private KustvaktConfiguration config;
 
 
-    public OAuthService () {
+    public OAuthController () {
         this.handler = new OAuth2Handler(BeansFactory.getKustvaktContext()
                 .getPersistenceClient());
         this.controller = BeansFactory.getKustvaktContext()
diff --git a/full/src/main/java/de/ids_mannheim/korap/web/controller/ResourceController.java b/full/src/main/java/de/ids_mannheim/korap/web/controller/ResourceController.java
index 5319c51..103072e 100644
--- a/full/src/main/java/de/ids_mannheim/korap/web/controller/ResourceController.java
+++ b/full/src/main/java/de/ids_mannheim/korap/web/controller/ResourceController.java
@@ -1,6 +1,4 @@
-package de.ids_mannheim.korap.web.service.full;
-
-import java.util.List;
+package de.ids_mannheim.korap.web.controller;
 
 import javax.ws.rs.GET;
 import javax.ws.rs.Path;
@@ -8,17 +6,12 @@
 import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.Response;
 
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
 
 import com.sun.jersey.spi.container.ResourceFilters;
 
-import de.ids_mannheim.korap.dao.ResourceDao;
-import de.ids_mannheim.korap.dto.ResourceDto;
-import de.ids_mannheim.korap.dto.converter.ResourceConverter;
-import de.ids_mannheim.korap.entity.Resource;
+import de.ids_mannheim.korap.service.ResourceService;
 import de.ids_mannheim.korap.utils.JsonUtils;
 import de.ids_mannheim.korap.web.filter.PiwikFilter;
 
@@ -30,16 +23,12 @@
  */
 @Controller
 @Path("resource/")
-@ResourceFilters({PiwikFilter.class})
+@ResourceFilters({ PiwikFilter.class })
 @Produces(MediaType.APPLICATION_JSON + ";charset=utf-8")
-public class ResourceService {
-
-    private static Logger jlog = LoggerFactory.getLogger(ResourceService.class);
+public class ResourceController {
 
     @Autowired
-    private ResourceDao resourceDao;
-    @Autowired
-    private ResourceConverter resourceConverter;
+    private ResourceService resourceService;
 
 
     /** Returns descriptions of all free resources stored in 
@@ -51,11 +40,7 @@
     @GET
     @Path("info")
     public Response getAllResourceInfo () {
-        List<Resource> resources = resourceDao.getAllResources();
-        List<ResourceDto> resourceDtos = resourceConverter
-                .convertToResourcesDto(resources);
-        String result = JsonUtils.toJSON(resourceDtos);
-        jlog.debug("/info " + resourceDtos.toString());
+        String result = JsonUtils.toJSON(resourceService.getResourceDtos());
         return Response.ok(result).build();
     }
 }
diff --git a/full/src/main/java/de/ids_mannheim/korap/web/controller/SearchController.java b/full/src/main/java/de/ids_mannheim/korap/web/controller/SearchController.java
index b6e23e3..363477a 100644
--- a/full/src/main/java/de/ids_mannheim/korap/web/controller/SearchController.java
+++ b/full/src/main/java/de/ids_mannheim/korap/web/controller/SearchController.java
@@ -1,4 +1,5 @@
-package de.ids_mannheim.korap.web.service.full;//package de.ids_mannheim.korap.ext.web;
+package de.ids_mannheim.korap.web.controller;// package
+                                             // de.ids_mannheim.korap.ext.web;
 
 import java.util.ArrayList;
 import java.util.HashMap;
@@ -65,18 +66,20 @@
 import de.ids_mannheim.korap.web.utils.KustvaktResponseHandler;
 
 /**
+ * EM: To Do: restructure codes regarding service and controller layers
  * @author hanl, margaretha
  * @date 29/01/2014
  * @lastUpdate 06/2017
  */
 @Controller
 @Path("/")
-@RequestMapping ( "/" )
+@RequestMapping("/")
 @ResourceFilters({ AuthFilter.class, DemoUserFilter.class, PiwikFilter.class })
 @Produces(MediaType.APPLICATION_JSON + ";charset=utf-8")
-public class SearchService {
+public class SearchController {
 
-    private static Logger jlog = LoggerFactory.getLogger(SearchService.class);
+    private static Logger jlog =
+            LoggerFactory.getLogger(SearchController.class);
 
     @Autowired
     private SearchKrill searchKrill;
@@ -90,12 +93,12 @@
     private RewriteHandler processor;
 
 
-    public SearchService () {
+    public SearchController () {
         this.resourceHandler = new ResourceHandler();
         UriBuilder builder = UriBuilder.fromUri("http://10.0.10.13").port(9997);
         this.graphDBhandler = new ClientsHandler(builder.build());
     }
-    
+
     @PostConstruct
     private void doPostConstruct () {
         this.processor.defaultRewriteConstraints();
@@ -123,10 +126,9 @@
 
         try {
             Class cl_type = ResourceFactory.getResourceClass(type);
-            if (cl_type == null)
-                throw KustvaktResponseHandler.throwit(
-                        StatusCodes.MISSING_ARGUMENT,
-                        "Resource type not available!", "");
+            if (cl_type == null) throw KustvaktResponseHandler.throwit(
+                    StatusCodes.MISSING_ARGUMENT,
+                    "Resource type not available!", "");
 
             User user = controller.getUser(ctx.getUsername());
 
@@ -349,23 +351,19 @@
             @QueryParam("cq") String cq) {
         TokenContext ctx = (TokenContext) securityContext.getUserPrincipal();
         QuerySerializer ss = new QuerySerializer().setQuery(q, ql, v);
-        if (cq != null)
-            ss.setCollection(cq);
+        if (cq != null) ss.setCollection(cq);
 
         MetaQueryBuilder meta = new MetaQueryBuilder();
-        if (pageIndex != null)
-            meta.addEntry("startIndex", pageIndex);
+        if (pageIndex != null) meta.addEntry("startIndex", pageIndex);
         if (pageIndex == null && startPage != null)
             meta.addEntry("startPage", startPage);
-        if (pageLength != null)
-            meta.addEntry("count", pageLength);
-        if (context != null)
-            meta.setSpanContext(context);
+        if (pageLength != null) meta.addEntry("count", pageLength);
+        if (context != null) meta.setSpanContext(context);
         meta.addEntry("cutOff", cutoff);
 
         ss.setMeta(meta.raw());
         String result = ss.toJSON();
-        jlog.debug("Query: "+result);
+        jlog.debug("Query: " + result);
         return Response.ok(result).build();
     }
 
@@ -386,8 +384,8 @@
 
     // todo: does cq have any sensible worth here? --> would say no! --> is
     // useful in non type/id scenarios
-    
-    /* EM: potentially an unused service! */    
+
+    /* EM: potentially an unused service! */
     // EM: build query using the given virtual collection id
     // EM: change the HTTP method to from TRACE to GET
     // EM: change path from search to query
@@ -410,16 +408,12 @@
         QuerySerializer ss = new QuerySerializer().setQuery(q, ql, v);
 
         MetaQueryBuilder meta = new MetaQueryBuilder();
-        if (pageIndex != null)
-            meta.addEntry("startIndex", pageIndex);
+        if (pageIndex != null) meta.addEntry("startIndex", pageIndex);
         if (pageIndex == null && startPage != null)
             meta.addEntry("startPage", startPage);
-        if (pageLength != null)
-            meta.addEntry("count", pageLength);
-        if (context != null)
-            meta.setSpanContext(context);
-        if (cutoff != null)
-            meta.addEntry("cutOff", cutoff);
+        if (pageLength != null) meta.addEntry("count", pageLength);
+        if (context != null) meta.setSpanContext(context);
+        if (cutoff != null) meta.addEntry("cutOff", cutoff);
 
         ss.setMeta(meta.raw());
 
@@ -429,7 +423,7 @@
         String query = "";
         // EM: is this necessary at all?
         KustvaktResource resource = isCollectionIdValid(ctx.getName(), id);
-        if (resource!=null){
+        if (resource != null) {
             if (resource instanceof VirtualCollection) {
                 JsonNode node = cquery.and().mergeWith(resource.getData());
                 query = JsonUtils.toJSON(node);
@@ -441,42 +435,43 @@
             }
         }
 
-        jlog.debug("Query: "+query);
+        jlog.debug("Query: " + query);
         return Response.ok(query).build();
     }
 
     // EM: prototype
-    private KustvaktResource isCollectionIdValid (String username, String collectionId) {
-        
-//        try {
-//            if (ctx.isDemo()) {
-//                // EM: FIX ME: Is there public VCs? set default username 
-                  // for nonlogin user, change demo? 
-//                Set set = ResourceFinder.searchPublicFiltered(
-//                        ResourceFactory.getResourceClass(type), id);
-//                resource = (KustvaktResource) set.toArray()[0];
-//            }
-//            else {
-//                // EM: FIX ME: search in user VC
-//                User user = controller.getUser(ctx.getUsername());
-//                if (StringUtils.isInteger(id))
-//                    resource = this.resourceHandler
-//                            .findbyIntId(Integer.valueOf(id), user);
-//                else
-//                    resource = this.resourceHandler.findbyStrId(id, user,
-//                            ResourceFactory.getResourceClass(type));
-//            }
-//        }
-//        // todo: instead of throwing exception, build notification and rewrites
-//        // into result query
-//        catch (KustvaktException e) {
-//            jlog.error("Exception encountered: {}", e.string());
-//            throw KustvaktResponseHandler.throwit(e);
-//        }
-        
+    private KustvaktResource isCollectionIdValid (String username,
+            String collectionId) {
+
+        //        try {
+        //            if (ctx.isDemo()) {
+        //                // EM: FIX ME: Is there public VCs? set default username 
+        // for nonlogin user, change demo? 
+        //                Set set = ResourceFinder.searchPublicFiltered(
+        //                        ResourceFactory.getResourceClass(type), id);
+        //                resource = (KustvaktResource) set.toArray()[0];
+        //            }
+        //            else {
+        //                // EM: FIX ME: search in user VC
+        //                User user = controller.getUser(ctx.getUsername());
+        //                if (StringUtils.isInteger(id))
+        //                    resource = this.resourceHandler
+        //                            .findbyIntId(Integer.valueOf(id), user);
+        //                else
+        //                    resource = this.resourceHandler.findbyStrId(id, user,
+        //                            ResourceFactory.getResourceClass(type));
+        //            }
+        //        }
+        //        // todo: instead of throwing exception, build notification and rewrites
+        //        // into result query
+        //        catch (KustvaktException e) {
+        //            jlog.error("Exception encountered: {}", e.string());
+        //            throw KustvaktResponseHandler.throwit(e);
+        //        }
+
         return null;
     }
-    
+
 
     @POST
     @Path("search")
@@ -505,27 +500,25 @@
 
     @GET
     @Path("search")
-    public Response search (
-    		@Context SecurityContext securityContext,
-    		@Context HttpHeaders headers,
-    		@Context Locale locale, @QueryParam("q") String q,
-            @QueryParam("ql") String ql, @QueryParam("v") String v,
-            @QueryParam("context") String ctx,
+    public Response search (@Context SecurityContext securityContext,
+            @Context HttpHeaders headers, @Context Locale locale,
+            @QueryParam("q") String q, @QueryParam("ql") String ql,
+            @QueryParam("v") String v, @QueryParam("context") String ctx,
             @QueryParam("cutoff") Boolean cutoff,
             @QueryParam("count") Integer pageLength,
             @QueryParam("offset") Integer pageIndex,
             @QueryParam("page") Integer pageInteger,
             @QueryParam("cq") String cq, @QueryParam("engine") String engine) {
 
-    	TokenContext context = (TokenContext) securityContext
-                .getUserPrincipal();
+        TokenContext context =
+                (TokenContext) securityContext.getUserPrincipal();
         KustvaktConfiguration.BACKENDS eng = this.config.chooseBackend(engine);
         User user;
         try {
             user = controller.getUser(context.getUsername());
             controller.setAccessAndLocation(user, headers);
-//            System.out.printf("Debug: /search/: location=%s, access='%s'.\n", user.locationtoString(), user.accesstoString());
-        	}
+            //            System.out.printf("Debug: /search/: location=%s, access='%s'.\n", user.locationtoString(), user.accesstoString());
+        }
         catch (KustvaktException e) {
             jlog.error("Failed retrieving user in the search service: {}",
                     e.string());
@@ -534,8 +527,7 @@
 
         QuerySerializer serializer = new QuerySerializer();
         serializer.setQuery(q, ql, v);
-        if (cq != null)
-            serializer.setCollection(cq);
+        if (cq != null) serializer.setCollection(cq);
 
         MetaQueryBuilder meta = createMetaQuery(pageIndex, pageInteger, ctx,
                 pageLength, cutoff);
@@ -551,7 +543,7 @@
         }
 
         String result = doSearch(eng, query, pageLength, meta);
-        jlog.debug("Query result: "+result);
+        jlog.debug("Query result: " + result);
         return Response.ok(result).build();
     }
 
@@ -823,32 +815,33 @@
                 // todo: throw exception response for no resource to save!
                 return null;
 
-            KoralCollectionQueryBuilder cquery = new KoralCollectionQueryBuilder();
+            KoralCollectionQueryBuilder cquery =
+                    new KoralCollectionQueryBuilder();
             cquery.setBaseQuery(base);
 
             try {
                 cachetmp = ResourceFactory.getCachedCollection(cquery.toJSON());
 
                 // see if collection was cached!
-                VirtualCollection tmp = resourceHandler.getCache(cachetmp.getId(),
-                        VirtualCollection.class);
+                VirtualCollection tmp = resourceHandler
+                        .getCache(cachetmp.getId(), VirtualCollection.class);
                 // if not cached, fill with stats values
                 if (tmp == null) {
                     String stats = searchKrill.getStatistics(cquery.toJSON());
                     cachetmp.setStats(JsonUtils.readSimple(stats, Map.class));
                 }
-            
+
                 if (!cache) {
-                    collection = ResourceFactory.getPermanentCollection(cachetmp,
-                            name, description);
+                    collection = ResourceFactory.getPermanentCollection(
+                            cachetmp, name, description);
                     vals = collection.toMap();
-                        resourceHandler.storeResources(user, collection);
+                    resourceHandler.storeResources(user, collection);
                 }
                 else {
                     resourceHandler.cache(cachetmp);
                     vals = cachetmp.toMap();
                 }
-            
+
             }
             catch (KustvaktException e) {
                 throw KustvaktResponseHandler.throwit(e);
@@ -902,7 +895,8 @@
         if (VirtualCollection.class.equals(ctype)) {
             VirtualCollection cachetmp, collection;
 
-            KoralCollectionQueryBuilder cquery = new KoralCollectionQueryBuilder();
+            KoralCollectionQueryBuilder cquery =
+                    new KoralCollectionQueryBuilder();
             if (reference != null && !reference.equals("null")) {
                 try {
                     cquery.setBaseQuery(resourceHandler.findbyStrId(reference,
@@ -913,8 +907,7 @@
                     throw KustvaktResponseHandler.throwit(e);
                 }
             }
-            if (query != null && !query.isEmpty())
-                cquery.with(query);
+            if (query != null && !query.isEmpty()) cquery.with(query);
 
             cachetmp = ResourceFactory.getCachedCollection(cquery.toJSON());
 
@@ -992,10 +985,8 @@
 
     @GET
     @Path("/corpus/{corpusId}/{docId}/{textId}/{matchId}/matchInfo")
-    public Response getMatchInfo (
-    		@Context SecurityContext ctx,
-    		@Context HttpHeaders headers,
-            @Context Locale locale, 
+    public Response getMatchInfo (@Context SecurityContext ctx,
+            @Context HttpHeaders headers, @Context Locale locale,
             @PathParam("corpusId") String corpusId,
             @PathParam("docId") String docId,
             @PathParam("textId") String textId,
@@ -1007,9 +998,9 @@
         TokenContext tokenContext = (TokenContext) ctx.getUserPrincipal();
         spans = spans != null ? spans : false;
 
-        String matchid = searchKrill.getMatchId(corpusId, docId, textId, matchId);
-        if (layers == null || layers.isEmpty())
-            layers = new HashSet<>();
+        String matchid =
+                searchKrill.getMatchId(corpusId, docId, textId, matchId);
+        if (layers == null || layers.isEmpty()) layers = new HashSet<>();
 
         boolean match_only = foundries == null || foundries.isEmpty();
 
@@ -1017,50 +1008,51 @@
         try {
             user = controller.getUser(tokenContext.getUsername());
             controller.setAccessAndLocation(user, headers);
-            System.out.printf("Debug: /getMatchInfo/: location=%s, access='%s'.\n", user.locationtoString(), user.accesstoString());
-            }
+            System.out.printf(
+                    "Debug: /getMatchInfo/: location=%s, access='%s'.\n",
+                    user.locationtoString(), user.accesstoString());
+        }
         catch (KustvaktException e) {
             jlog.error("Failed getting user in the matchInfo service: {}",
                     e.string());
             throw KustvaktResponseHandler.throwit(e);
         }
-        
+
         CorpusAccess corpusAccess = user.getCorpusAccess();
         Pattern p;
         switch (corpusAccess) {
-		case PUB:
-			p = config.getPublicLicensePattern();
-			break;
-		case ALL:
-			p = config.getAllLicensePattern();
-			break;
-		default: // FREE
-			p = config.getFreeLicensePattern();
-			break;
-		}
-        
+            case PUB:
+                p = config.getPublicLicensePattern();
+                break;
+            case ALL:
+                p = config.getAllLicensePattern();
+                break;
+            default: // FREE
+                p = config.getFreeLicensePattern();
+                break;
+        }
+
         String results;
         try {
-            if (!match_only){
-            	
-            	ArrayList<String> foundryList = new ArrayList<String>();
+            if (!match_only) {
+
+                ArrayList<String> foundryList = new ArrayList<String>();
                 ArrayList<String> layerList = new ArrayList<String>();
-                
+
                 // EM: now without user, just list all foundries and layers
                 if (foundries.contains("*")) {
-                	foundryList = config.getFoundries();
-                	layerList = config.getLayers();
+                    foundryList = config.getFoundries();
+                    layerList = config.getLayers();
                 }
-                else{
-                	foundryList.addAll(foundries);
-                	layerList.addAll(layers);
+                else {
+                    foundryList.addAll(foundries);
+                    layerList.addAll(layers);
                 }
-                
-                results = searchKrill.getMatch(matchid,
-                        foundryList, layerList,
+
+                results = searchKrill.getMatch(matchid, foundryList, layerList,
                         spans, false, true, p);
             }
-            else{
+            else {
                 results = searchKrill.getMatch(matchid, p);
             }
         }
@@ -1069,7 +1061,7 @@
             throw KustvaktResponseHandler.throwit(StatusCodes.ILLEGAL_ARGUMENT,
                     e.getMessage(), "");
         }
-        jlog.debug("MatchInfo results: "+results);
+        jlog.debug("MatchInfo results: " + results);
         return Response.ok(results).build();
     }
 
diff --git a/full/src/main/java/de/ids_mannheim/korap/web/controller/StatisticController.java b/full/src/main/java/de/ids_mannheim/korap/web/controller/StatisticController.java
index ee30523..d9d0cd2 100644
--- a/full/src/main/java/de/ids_mannheim/korap/web/controller/StatisticController.java
+++ b/full/src/main/java/de/ids_mannheim/korap/web/controller/StatisticController.java
@@ -1,4 +1,4 @@
-package de.ids_mannheim.korap.web.service.full;
+package de.ids_mannheim.korap.web.controller;
 
 import java.util.Locale;
 
@@ -26,7 +26,7 @@
 import de.ids_mannheim.korap.web.utils.KustvaktResponseHandler;
 
 /**
- * Services related to statistics
+ * Web services related to statistics
  * 
  * @author hanl
  * @author margaretha
@@ -38,11 +38,11 @@
 @Path("statistics/")
 @ResourceFilters({ PiwikFilter.class })
 @Produces(MediaType.APPLICATION_JSON + ";charset=utf-8")
-public class StatisticService {
+public class StatisticController {
 
 
     private static Logger jlog =
-            LoggerFactory.getLogger(StatisticService.class);
+            LoggerFactory.getLogger(StatisticController.class);
 
     @Autowired
     private SearchKrill searchKrill;
diff --git a/full/src/main/java/de/ids_mannheim/korap/web/controller/UserController.java b/full/src/main/java/de/ids_mannheim/korap/web/controller/UserController.java
index f18d72f..1399c5c 100644
--- a/full/src/main/java/de/ids_mannheim/korap/web/controller/UserController.java
+++ b/full/src/main/java/de/ids_mannheim/korap/web/controller/UserController.java
@@ -1,4 +1,4 @@
-package de.ids_mannheim.korap.web.service.full;
+package de.ids_mannheim.korap.web.controller;
 
 import com.fasterxml.jackson.databind.JsonNode;
 import com.fasterxml.jackson.databind.node.ObjectNode;
@@ -35,15 +35,15 @@
 @Path("/user")
 @Produces(MediaType.APPLICATION_JSON + ";charset=utf-8")
 @ResourceFilters({ PiwikFilter.class })
-public class UserService {
+public class UserController {
 
-    private static Logger jlog = LoggerFactory.getLogger(UserService.class);
+    private static Logger jlog = LoggerFactory.getLogger(UserController.class);
     private AuthenticationManagerIface controller;
 
     private @Context UriInfo info;
 
 
-    public UserService () {
+    public UserController () {
         this.controller = BeansFactory.getKustvaktContext()
                 .getAuthenticationManager();
     }
diff --git a/full/src/main/resources/META-INF/persistence.xml b/full/src/main/resources/META-INF/persistence.xml
index ae76d18..35b8d66 100644
--- a/full/src/main/resources/META-INF/persistence.xml
+++ b/full/src/main/resources/META-INF/persistence.xml
@@ -1,5 +1,10 @@
-<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="1.0">
-    <persistence-unit name="entityManagerUnit" transaction-type="RESOURCE_LOCAL">
-        <exclude-unlisted-classes/>
-    </persistence-unit>
+<persistence xmlns="http://java.sun.com/xml/ns/persistence"
+	version="1.0">
+	<persistence-unit name="entityManagerUnit"
+		transaction-type="RESOURCE_LOCAL">
+		<exclude-unlisted-classes />
+	</persistence-unit>
+	<persistence-unit-metadata>
+		<xml-mapping-metadata-complete />
+	</persistence-unit-metadata>
 </persistence>
\ No newline at end of file
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 a69ef64..3a0b5e8 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
@@ -1,3 +1,17 @@
+CREATE TABLE IF NOT EXISTS privilege (
+  id varchar(20) PRIMARY KEY NOT NULL
+);
+
+CREATE TABLE IF NOT EXISTS role (
+  id INTEGER PRIMARY KEY AUTO_INCREMENT,
+  name varchar(100) NOT NULL,
+  privilege varchar(20) NOT NULL,
+  UNIQUE INDEX unique_index (name,privilege),
+  FOREIGN KEY (privilege) 
+  	REFERENCES privilege (id)
+  	ON DELETE CASCADE
+);
+
 CREATE TABLE IF NOT EXISTS user_group (
   id INTEGER PRIMARY KEY AUTO_INCREMENT,
   name varchar(100) NOT NULL,
@@ -21,24 +35,10 @@
   	ON DELETE CASCADE
 ); 
 
-CREATE TABLE IF NOT EXISTS role (
-  id INTEGER PRIMARY KEY AUTO_INCREMENT,
-  name varchar(100) NOT NULL,
-  privilege varchar(20) NOT NULL,
-  UNIQUE INDEX unique_index (name,privilege),
-  FOREIGN KEY (privilege) 
-  	REFERENCES privilege (id)
-  	ON DELETE CASCADE
-);
-
-CREATE TABLE IF NOT EXISTS privilege (
-  id varchar(20) PRIMARY KEY NOT NULL
-);
-
 CREATE TABLE IF NOT EXISTS group_member_role (
   id INTEGER PRIMARY KEY AUTO_INCREMENT,
   group_member_id int(11) NOT NULL,
-  role_id varchar(100) NOT NULL,
+  role_id int NOT NULL,
   UNIQUE INDEX unique_index (group_member_id,role_id),
   FOREIGN KEY (group_member_id)
   	REFERENCES user_group_member (id)
