diff --git a/src/main/java/de/ids_mannheim/korap/dao/AnnotationDao.java b/src/main/java/de/ids_mannheim/korap/dao/AnnotationDao.java
new file mode 100644
index 0000000..8677b87
--- /dev/null
+++ b/src/main/java/de/ids_mannheim/korap/dao/AnnotationDao.java
@@ -0,0 +1,27 @@
+package de.ids_mannheim.korap.dao;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
+
+import de.ids_mannheim.korap.handlers.EntityDao;
+
+/**
+ * AnnotationDao manages SQL queries regarding information about
+ * annotations, e.g foundries and layers.
+ * 
+ * @author margaretha
+ *
+ */
+public class AnnotationDao {
+
+    private static Logger jlog = LoggerFactory.getLogger(AnnotationDao.class);
+    private NamedParameterJdbcTemplate jdbcTemplate;
+
+
+    public AnnotationDao () {
+        // TODO Auto-generated constructor stub
+    }
+    
+    
+}
diff --git a/src/main/java/de/ids_mannheim/korap/dao/ResourceDao.java b/src/main/java/de/ids_mannheim/korap/dao/ResourceDao.java
new file mode 100644
index 0000000..9d6b268
--- /dev/null
+++ b/src/main/java/de/ids_mannheim/korap/dao/ResourceDao.java
@@ -0,0 +1,36 @@
+package de.ids_mannheim.korap.dao;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.jdbc.core.namedparam.MapSqlParameterSource;
+import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
+import org.springframework.jdbc.core.namedparam.SqlParameterSource;
+
+import de.ids_mannheim.korap.handlers.RowMapperFactory;
+import de.ids_mannheim.korap.interfaces.db.PersistenceClient;
+
+/** ResourceDao manages SQL queries regarding resource info and layers.
+ * 
+ * @author margaretha
+ *
+ */
+public class ResourceDao {
+
+    private static Logger jlog = LoggerFactory.getLogger(ResourceDao.class);
+    private NamedParameterJdbcTemplate jdbcTemplate;
+
+
+    public ResourceDao (PersistenceClient<?> client) {
+        this.jdbcTemplate = (NamedParameterJdbcTemplate) client.getSource();
+    }
+
+    // EM: use JPA?
+    public void getResourceInfo (String resourceId) {
+        SqlParameterSource namedParameters = new MapSqlParameterSource(
+                "resourceId", resourceId);
+        String sql = "select * from resource where id=:resourceId";
+//        this.jdbcTemplate.queryForObject(sql, namedParameters,
+//                new RowMapperFactory.ResourceMapper());
+    }
+
+}
diff --git a/src/main/java/de/ids_mannheim/korap/exceptions/StatusCodes.java b/src/main/java/de/ids_mannheim/korap/exceptions/StatusCodes.java
index e611f4e..cea63b1 100644
--- a/src/main/java/de/ids_mannheim/korap/exceptions/StatusCodes.java
+++ b/src/main/java/de/ids_mannheim/korap/exceptions/StatusCodes.java
@@ -77,7 +77,7 @@
     public static final int DB_UPDATE_SUCCESSFUL = 507;
 
 
-    public static final int ARGUMENT_VALIDATION_FAILURE = 700;
+//    public static final int ARGUMENT_VALIDATION_FAILURE = 700;
     // public static final int ARGUMENT_VALIDATION_FAILURE = 701;
 
     // service status codes
diff --git a/src/main/java/de/ids_mannheim/korap/resource/rewrite/FoundryInject.java b/src/main/java/de/ids_mannheim/korap/resource/rewrite/FoundryInject.java
index f308827..abbacf0 100644
--- a/src/main/java/de/ids_mannheim/korap/resource/rewrite/FoundryInject.java
+++ b/src/main/java/de/ids_mannheim/korap/resource/rewrite/FoundryInject.java
@@ -33,13 +33,13 @@
     public JsonNode rewriteQuery (KoralNode node, KustvaktConfiguration config,
             User user) throws KustvaktException {
         LayerMapper mapper;
-
-        if (user != null && !userdaos.isEmpty()) {
-            UserDataDbIface dao = BeansFactory.getTypeFactory()
-                    .getTypeInterfaceBean(userdaos, UserSettings.class);
-            mapper = new LayerMapper(config, dao.get(user));
-        }
-        else
+        // EM: do not use DB
+//        if (user != null && !userdaos.isEmpty()) {
+//            UserDataDbIface dao = BeansFactory.getTypeFactory()
+//                    .getTypeInterfaceBean(userdaos, UserSettings.class);
+//            mapper = new LayerMapper(config, dao.get(user));
+//        }
+//        else
             mapper = new LayerMapper(config);
 
         if (node.get("@type").equals("koral:term") && !node.has("foundry")) {
diff --git a/src/main/java/de/ids_mannheim/korap/security/auth/KustvaktAuthenticationManager.java b/src/main/java/de/ids_mannheim/korap/security/auth/KustvaktAuthenticationManager.java
index d11355e..f9cf0bf 100644
--- a/src/main/java/de/ids_mannheim/korap/security/auth/KustvaktAuthenticationManager.java
+++ b/src/main/java/de/ids_mannheim/korap/security/auth/KustvaktAuthenticationManager.java
@@ -258,8 +258,9 @@
 			throws KustvaktException {
 		AuthenticationIface provider = getProvider(provider_key, Attributes.API_AUTHENTICATION);
 
-		if (attr.get(Attributes.SCOPES) != null)
-			this.getUserData(user, UserDetails.class);
+		// EM: not in the new DB
+//		if (attr.get(Attributes.SCOPES) != null)
+//			this.getUserData(user, UserDetails.class);
 
 		TokenContext context = provider.createTokenContext(user, attr);
 		if (context == null)
@@ -890,9 +891,9 @@
 		return new Object[] { uritoken, TimeUtils.format(param.getUriExpiration()) };
 	}
 
+	// EM: not in the new DB
 	@Override
 	public <T extends Userdata> T getUserData(User user, Class<T> clazz) throws WrappedException {
-
 		try {
 			UserDataDbIface<T> dao = BeansFactory.getTypeFactory()
 					.getTypeInterfaceBean(BeansFactory.getKustvaktContext().getUserDataProviders(), clazz);
diff --git a/src/main/java/de/ids_mannheim/korap/web/KustvaktBaseServer.java b/src/main/java/de/ids_mannheim/korap/web/KustvaktBaseServer.java
index 13b6d23..159a786 100644
--- a/src/main/java/de/ids_mannheim/korap/web/KustvaktBaseServer.java
+++ b/src/main/java/de/ids_mannheim/korap/web/KustvaktBaseServer.java
@@ -105,23 +105,14 @@
             contextHandler.addServlet(new ServletHolder(
                     new ServletContainer(rc)), "/api/*");
 
-	            server.setHandler(contextHandler);
-
-//            if (kargs.sslContext != null) {
-//                SslSocketConnector sslConnector = new SslSocketConnector(
-//                        kargs.sslContext);
-//                sslConnector.setPort(8443);
-//                sslConnector.setMaxIdleTime(60000);
-//                server.setConnectors(new Connector[] { connector, sslConnector });
-//            }
-//            else
+	        server.setHandler(contextHandler);
             server.setConnectors(new Connector[] { connector });
-
             server.start();
             server.join();
         }
         catch (Exception e) {
             System.out.println("Server could not be started!");
+            System.out.println(e.getMessage());
             System.exit(-1);
         }
 
diff --git a/src/main/java/de/ids_mannheim/korap/web/service/full/AnnotationService.java b/src/main/java/de/ids_mannheim/korap/web/service/full/AnnotationService.java
new file mode 100644
index 0000000..e519a10
--- /dev/null
+++ b/src/main/java/de/ids_mannheim/korap/web/service/full/AnnotationService.java
@@ -0,0 +1,80 @@
+package de.ids_mannheim.korap.web.service.full;
+
+import java.util.List;
+
+import javax.ws.rs.GET;
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+import javax.ws.rs.Produces;
+import javax.ws.rs.QueryParam;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.sun.jersey.spi.container.ResourceFilters;
+
+import de.ids_mannheim.korap.exceptions.StatusCodes;
+import de.ids_mannheim.korap.web.KustvaktServer;
+import de.ids_mannheim.korap.web.filter.AuthFilter;
+import de.ids_mannheim.korap.web.filter.DemoUserFilter;
+import de.ids_mannheim.korap.web.filter.PiwikFilter;
+import de.ids_mannheim.korap.web.utils.KustvaktResponseHandler;
+
+/**
+ * Provides services regarding annotation related information.
+ * 
+ * @author margaretha
+ *
+ */
+@Path(KustvaktServer.API_VERSION + "/annotation/")
+@ResourceFilters({ AuthFilter.class, DemoUserFilter.class, PiwikFilter.class })
+@Produces(MediaType.APPLICATION_JSON + ";charset=utf-8")
+public class AnnotationService {
+
+    private static Logger jlog = LoggerFactory
+            .getLogger(AnnotationService.class);
+
+
+    @GET
+    @Path("layers")
+    public Response getLayers () {
+        // TODO Auto-generated method stub
+        return Response.status(200).build();
+    }
+
+
+    @POST
+    @Path("description")
+    public Response getAnnotations (@QueryParam("symbol") List<String> symbols,
+            String language) {
+        if (language == null || language.isEmpty()) {
+            language = "en";
+        }
+        if (symbols == null){
+            throw KustvaktResponseHandler.throwit(StatusCodes.MISSING_ARGUMENT);
+        }
+        if (symbols.isEmpty() || symbols.contains("*")){
+            // select all 
+        }
+        else {
+            String[] annotationPair;
+            String foundry, layer;
+            
+            for (String s : symbols){
+                annotationPair = s.split("/");
+                if (annotationPair.length != 2){
+                    throw KustvaktResponseHandler.throwit(StatusCodes.PARAMETER_VALIDATION_ERROR);
+                }
+                foundry = annotationPair[0];
+                layer = annotationPair[1];
+                // select
+            }
+        }
+        
+        return Response.status(200).build();
+    }
+
+}
+
diff --git a/src/main/java/de/ids_mannheim/korap/web/service/full/OAuthService.java b/src/main/java/de/ids_mannheim/korap/web/service/full/OAuthService.java
index 5fdbe62..67a11ef 100644
--- a/src/main/java/de/ids_mannheim/korap/web/service/full/OAuthService.java
+++ b/src/main/java/de/ids_mannheim/korap/web/service/full/OAuthService.java
@@ -200,8 +200,9 @@
 
             try {
                 user = controller.getUser(c.getUsername());
-                Userdata data = controller.getUserData(user, UserDetails.class);
-                user.addUserData(data);
+                // EM: not in the new DB
+//                Userdata data = controller.getUserData(user, UserDetails.class);
+//                user.addUserData(data);
             }
             catch (KustvaktException e) {
                 throw KustvaktResponseHandler.throwit(e);
diff --git a/src/main/java/de/ids_mannheim/korap/web/service/full/ResourceService.java b/src/main/java/de/ids_mannheim/korap/web/service/full/ResourceService.java
new file mode 100644
index 0000000..36e41bf
--- /dev/null
+++ b/src/main/java/de/ids_mannheim/korap/web/service/full/ResourceService.java
@@ -0,0 +1,52 @@
+package de.ids_mannheim.korap.web.service.full;
+
+import java.util.List;
+
+import javax.ws.rs.GET;
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+import javax.ws.rs.Produces;
+import javax.ws.rs.QueryParam;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.sun.jersey.spi.container.ResourceFilters;
+
+import de.ids_mannheim.korap.web.KustvaktServer;
+import de.ids_mannheim.korap.web.filter.AuthFilter;
+import de.ids_mannheim.korap.web.filter.DemoUserFilter;
+import de.ids_mannheim.korap.web.filter.PiwikFilter;
+
+/**
+ * Provides information about free resources.
+ * 
+ * @author margaretha
+ *
+ */
+@Path(KustvaktServer.API_VERSION + "/resource/")
+@ResourceFilters({ AuthFilter.class, DemoUserFilter.class, PiwikFilter.class })
+@Produces(MediaType.APPLICATION_JSON + ";charset=utf-8")
+public class ResourceService {
+
+    private static Logger jlog = LoggerFactory.getLogger(ResourceService.class);
+
+
+    @GET
+    @Path("info")
+    public Response getResourceInfo () {
+        // TODO Auto-generated method stub
+        return Response.status(200).build();
+    }
+
+
+    @POST
+    @Path("layers")
+    public Response getResourceLayers (
+            @QueryParam("resourceId") List<String> resourceIds) {
+        // TODO Auto-generated method stub
+        return Response.status(200).build();
+    }
+}
diff --git a/src/main/java/de/ids_mannheim/korap/web/service/full/SearchService.java b/src/main/java/de/ids_mannheim/korap/web/service/full/SearchService.java
index 74cb2a9..1242823 100644
--- a/src/main/java/de/ids_mannheim/korap/web/service/full/SearchService.java
+++ b/src/main/java/de/ids_mannheim/korap/web/service/full/SearchService.java
@@ -77,9 +77,9 @@
 @Path(KustvaktServer.API_VERSION + "/")
 @ResourceFilters({ AuthFilter.class, DemoUserFilter.class, PiwikFilter.class })
 @Produces(MediaType.APPLICATION_JSON + ";charset=utf-8")
-public class ResourceService {
+public class SearchService {
 
-    private static Logger jlog = LoggerFactory.getLogger(ResourceService.class);
+    private static Logger jlog = LoggerFactory.getLogger(SearchService.class);
 
     private SearchKrill searchKrill;
     private ResourceHandler resourceHandler;
@@ -89,7 +89,7 @@
     private RewriteHandler processor;
 
 
-    public ResourceService () {
+    public SearchService () {
         this.controller = BeansFactory.getKustvaktContext()
                 .getAuthenticationManager();
         this.config = BeansFactory.getKustvaktContext().getConfiguration();
