Integrated lite and full services and controllers in core.

Change-Id: I34914c89c2266fa02bee1a5b0522c46139b13966
diff --git a/full/src/main/java/de/ids_mannheim/de/init/Initializator.java b/full/src/main/java/de/ids_mannheim/de/init/Initializator.java
deleted file mode 100644
index 0ef9dbb..0000000
--- a/full/src/main/java/de/ids_mannheim/de/init/Initializator.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package de.ids_mannheim.de.init;
-
-import java.io.IOException;
-
-import de.ids_mannheim.korap.exceptions.KustvaktException;
-import de.ids_mannheim.korap.util.QueryException;
-
-/** Init methods run after spring dependency injection 
- *  
- * @author margaretha
- *
- */
-public interface Initializator {
-
-    void init () throws IOException, QueryException, KustvaktException;
-
-    void initTest () throws IOException, KustvaktException;
-
-}
\ No newline at end of file
diff --git a/full/src/main/java/de/ids_mannheim/de/init/InitializatorImpl.java b/full/src/main/java/de/ids_mannheim/de/init/InitializatorImpl.java
index 318f47e..9f0e27d 100644
--- a/full/src/main/java/de/ids_mannheim/de/init/InitializatorImpl.java
+++ b/full/src/main/java/de/ids_mannheim/de/init/InitializatorImpl.java
@@ -8,8 +8,8 @@
 import de.ids_mannheim.korap.annotation.AnnotationParser;
 import de.ids_mannheim.korap.annotation.FreeResourceParser;
 import de.ids_mannheim.korap.config.NamedVCLoader;
+import de.ids_mannheim.korap.constant.OAuth2Scope;
 import de.ids_mannheim.korap.exceptions.KustvaktException;
-import de.ids_mannheim.korap.oauth2.constant.OAuth2Scope;
 import de.ids_mannheim.korap.oauth2.dao.AccessScopeDao;
 import de.ids_mannheim.korap.util.QueryException;
 
@@ -54,7 +54,11 @@
      * @see de.ids_mannheim.de.init.Initializator#initTest()
      */
     @Override
-    public void initTest () throws IOException, KustvaktException {
+    public void initTest () {
+        setInitialAccessScope();
+    }
+    
+    public void initAnnotationTest () throws IOException, KustvaktException {
         setInitialAccessScope();
         annotationParser.run();
         resourceParser.run();
diff --git a/full/src/main/java/de/ids_mannheim/de/init/LiteInitializatorImpl.java b/full/src/main/java/de/ids_mannheim/de/init/LiteInitializatorImpl.java
deleted file mode 100644
index 31d90af..0000000
--- a/full/src/main/java/de/ids_mannheim/de/init/LiteInitializatorImpl.java
+++ /dev/null
@@ -1,26 +0,0 @@
-package de.ids_mannheim.de.init;
-
-import java.io.IOException;
-
-import org.springframework.beans.factory.annotation.Autowired;
-
-import de.ids_mannheim.korap.annotation.AnnotationParser;
-import de.ids_mannheim.korap.exceptions.KustvaktException;
-import de.ids_mannheim.korap.util.QueryException;
-
-public class LiteInitializatorImpl implements Initializator {
-
-    @Autowired
-    private AnnotationParser annotationParser;
-    
-    @Override
-    public void init () throws IOException, QueryException, KustvaktException {
-        annotationParser.run();
-    }
-
-    @Override
-    public void initTest () throws IOException, KustvaktException {
-        annotationParser.run();
-    }
-
-}
diff --git a/full/src/main/java/de/ids_mannheim/korap/annotation/AnnotationParser.java b/full/src/main/java/de/ids_mannheim/korap/annotation/AnnotationParser.java
deleted file mode 100644
index 4f995cb..0000000
--- a/full/src/main/java/de/ids_mannheim/korap/annotation/AnnotationParser.java
+++ /dev/null
@@ -1,239 +0,0 @@
-package de.ids_mannheim.korap.annotation;
-
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.InputStreamReader;
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.Set;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-
-import de.ids_mannheim.korap.constant.AnnotationType;
-import de.ids_mannheim.korap.dao.AnnotationDao;
-import de.ids_mannheim.korap.entity.Annotation;
-import de.ids_mannheim.korap.entity.AnnotationKey;
-import de.ids_mannheim.korap.entity.AnnotationLayer;
-
-@Component
-public class AnnotationParser {
-
-    private Logger log = LogManager.getLogger(AnnotationDao.class);
-
-    public static final Pattern quotePattern = Pattern.compile("\"([^\"]*)\"");
-
-    @Autowired
-    private AnnotationDao annotationDao;
-
-    private Annotation foundry = null;
-    private AnnotationLayer layer = null;
-    private AnnotationKey key = null;
-
-    private Set<AnnotationKey> keys = new HashSet<>();
-    private Set<Annotation> values = new HashSet<>();
-
-    public void run () throws IOException {
-        String dir = "annotation-scripts/foundries";
-        if (dir.isEmpty()) return;
-
-        File d = new File(dir);
-        if (!d.isDirectory()) {
-            throw new IOException("Directory " + dir + " is not valid");
-        }
-
-        for (File file : d.listFiles()) {
-            if (!file.exists()) {
-                throw new IOException("File " + file + " is not found.");
-            }
-            readFile(file);
-        }
-    }
-
-    private void readFile (File file) throws IOException {
-        BufferedReader br = new BufferedReader(
-                new InputStreamReader(new FileInputStream(file)), 1024);
-
-        foundry = null;
-
-        String line, annotationCode = "", annotationType = "";
-        Matcher m;
-        ArrayList<String> array;
-        while ((line = br.readLine()) != null) {
-            line = line.trim();
-            if (line.startsWith("ah")) {
-                m = quotePattern.matcher(line);
-                if (m.find()) {
-                    annotationCode = m.group(1);
-                    annotationType = computeAnnotationType(annotationCode);
-                }
-                m.reset();
-            }
-            else if (line.startsWith("];")) {
-                if (!keys.isEmpty()) {
-                    layer.setKeys(keys);
-                    annotationDao.updateAnnotationLayer(layer);
-                }
-                if (!values.isEmpty()) {
-                    key.setValues(values);
-                    annotationDao.updateAnnotationKey(key);
-                }
-                keys.clear();
-                values.clear();
-                layer = null;
-                key = null;
-            }
-            else if (line.startsWith("[")) {
-                array = computeValues(line);
-                parseArray(annotationCode, annotationType, array);
-            }
-
-        }
-        br.close();
-    }
-
-    public static ArrayList<String> computeValues (String line) {
-        ArrayList<String> values;
-        Matcher m = quotePattern.matcher(line);
-        values = new ArrayList<String>();
-        while (m.find()) {
-            values.add(m.group(1));
-        }
-        return values;
-    }
-
-    private void parseArray (String annotationCode, String annotationType,
-            ArrayList<String> array) {
-        if (annotationType.equals(AnnotationType.FOUNDRY)) {
-            String code = array.get(1).substring(0, array.get(1).length() - 1);
-            foundry = retrieveOrCreateAnnotation(code, AnnotationType.FOUNDRY,
-                    null, array.get(0));
-        }
-        else if (annotationType.equals(AnnotationType.LAYER)) {
-            String code = array.get(1);
-            if (code.endsWith("=")) {
-                code = code.substring(0, code.length() - 1);
-            }
-            Annotation layer = retrieveOrCreateAnnotation(code, annotationType,
-                    null, array.get(0));
-            try {
-                AnnotationLayer annotationLayer =
-                        annotationDao.retrieveAnnotationLayer(foundry.getCode(),
-                                layer.getCode());
-                if (annotationLayer == null) {
-                    annotationDao.createAnnotationLayer(foundry, layer);
-                }
-            }
-            catch (Exception e) {
-                log.debug("Duplicate annotation layer: " + foundry.getCode()
-                        + "/" + layer.getCode());
-            }
-        }
-        else if (annotationType.equals(AnnotationType.KEY))
-
-        {
-            if (layer == null) {
-                computeLayer(annotationCode);
-            }
-
-            Annotation annotation = null;
-            if (array.size() == 2) {
-                String code = array.get(1);
-                if (code.endsWith("=") || code.endsWith(":")) {
-                    code = code.substring(0, code.length() - 1);
-                }
-                annotation = retrieveOrCreateAnnotation(code, annotationType,
-                        null, array.get(0));
-            }
-            else if (array.size() == 3) {
-                annotation = retrieveOrCreateAnnotation(array.get(0),
-                        annotationType, array.get(1), array.get(2));
-            }
-            if (annotation != null) {
-                AnnotationKey annotationKey =
-                        annotationDao.retrieveAnnotationKey(layer, annotation);
-                if (annotationKey == null) {
-                    annotationDao.createAnnotationKey(layer, annotation);
-                }
-                this.keys.add(annotationKey);
-            }
-        }
-        else if (annotationType.equals(AnnotationType.VALUE)) {
-            if (this.key == null) {
-                computeKey(annotationCode);
-            }
-            Annotation value = retrieveOrCreateAnnotation(array.get(0),
-                    AnnotationType.VALUE, array.get(1), array.get(2));
-            if (value != null) {
-                values.add(value);
-            }
-        }
-    }
-
-    private void computeKey (String code) {
-        String[] codes = code.split("=");
-        if (codes.length > 1) {
-            computeLayer(codes[0]);
-            String keyCode = codes[1];
-            if (keyCode.endsWith(":") || keyCode.endsWith("-")) {
-                keyCode = keyCode.substring(0, keyCode.length() - 1);
-            }
-            Annotation key = annotationDao.retrieveAnnotation(keyCode,
-                    AnnotationType.KEY);
-            this.key = annotationDao.retrieveAnnotationKey(layer, key);
-        }
-
-    }
-
-    private void computeLayer (String code) {
-        String[] codes = code.split("/");
-        if (codes.length > 1) {
-            String layerCode = codes[1];
-            if (layerCode.endsWith("=")) {
-                layerCode = layerCode.substring(0, layerCode.length() - 1);
-            }
-            this.layer =
-                    annotationDao.retrieveAnnotationLayer(codes[0], layerCode);
-            if (layer == null) {
-                log.warn("Layer is null for " + code);
-            }
-        }
-    }
-
-    private Annotation retrieveOrCreateAnnotation (String code, String type,
-            String text, String description) {
-        Annotation annotation = annotationDao.retrieveAnnotation(code, type);
-        if (annotation == null) {
-            annotation = annotationDao.createAnnotation(code, type, text,
-                    description);
-        }
-        return annotation;
-    }
-
-    private String computeAnnotationType (String code) {
-        String[] codes = code.split("/");
-        if (codes.length == 1) {
-            if (codes[0].equals("-")) {
-                return AnnotationType.FOUNDRY;
-            }
-            return AnnotationType.LAYER;
-        }
-        else if (codes.length == 2) {
-            if (codes[1].endsWith(":") || codes[1].endsWith("-")) {
-                return AnnotationType.VALUE;
-            }
-            else {
-                return AnnotationType.KEY;
-            }
-        }
-
-        return "unknown";
-    }
-
-}
diff --git a/full/src/main/java/de/ids_mannheim/korap/annotation/ArrayVariables.java b/full/src/main/java/de/ids_mannheim/korap/annotation/ArrayVariables.java
deleted file mode 100644
index 55f476a..0000000
--- a/full/src/main/java/de/ids_mannheim/korap/annotation/ArrayVariables.java
+++ /dev/null
@@ -1,94 +0,0 @@
-package de.ids_mannheim.korap.annotation;
-
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.InputStreamReader;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-
-import de.ids_mannheim.korap.constant.AnnotationType;
-import de.ids_mannheim.korap.entity.Annotation;
-
-/**
- * Helper class to parse annotation scripts variables. It prints out
- * corenlp constituency layer for each negranodes.
- * 
- * @author margaretha
- *
- */
-public class ArrayVariables {
-
-    public static HashMap<String, List<Annotation>> annotationMap =
-            new HashMap<>();
-
-    public static void main (String[] args) throws IOException {
-        ArrayVariables variables = new ArrayVariables();
-        variables.extractVariables();
-
-        List<Annotation> negranodes = annotationMap.get("negranodes");
-        for (Annotation n : negranodes) {
-            System.out.println("ah[\"corenlp/c=" + n.getCode() + "-\"] = [");
-            int i = 1;
-            List<Annotation> negraedges = annotationMap.get("negraedges");
-            for (Annotation edge : negraedges) {
-                System.out.print(
-                        "  [\"" + edge.getCode() + "\", \"" + edge.getText()
-                                + "\", \"" + edge.getDescription() + "\"]");
-                if (i < negraedges.size()) {
-                    System.out.println(",");
-                }
-                else {
-                    System.out.println();
-                }
-                i++;
-            }
-            System.out.println("];");
-            System.out.println();
-        }
-    }
-
-    public void extractVariables () throws IOException {
-        String dir = "annotation-scripts/variables";
-        if (dir.isEmpty()) return;
-
-        File d = new File(dir);
-        if (!d.isDirectory()) {
-            throw new IOException("Directory " + dir + " is not valid");
-        }
-
-        for (File file : d.listFiles()) {
-            if (!file.exists()) {
-                throw new IOException("File " + file + " is not found.");
-            }
-            readFile(file);
-        }
-
-    }
-
-    private void readFile (File file) throws IOException {
-        BufferedReader br = new BufferedReader(
-                new InputStreamReader(new FileInputStream(file)));
-
-        String line;
-        ArrayList<String> values;
-        List<Annotation> annotations = new ArrayList<>();
-        while ((line = br.readLine()) != null) {
-            line = line.trim();
-            if (line.startsWith("[")) {
-                values = AnnotationParser.computeValues(line);
-
-                Annotation annotation = new Annotation(values.get(0),
-                        AnnotationType.VALUE, values.get(1), values.get(2));
-                annotations.add(annotation);
-            }
-        }
-        br.close();
-
-        String filename = file.getName();
-        filename = filename.substring(0, filename.length() - 3);
-        annotationMap.put(filename, annotations);
-    }
-}
diff --git a/full/src/main/java/de/ids_mannheim/korap/authentication/APIAuthentication.java b/full/src/main/java/de/ids_mannheim/korap/authentication/APIAuthentication.java
index 77504a5..869b641 100644
--- a/full/src/main/java/de/ids_mannheim/korap/authentication/APIAuthentication.java
+++ b/full/src/main/java/de/ids_mannheim/korap/authentication/APIAuthentication.java
@@ -18,7 +18,6 @@
 import de.ids_mannheim.korap.constant.TokenType;
 import de.ids_mannheim.korap.exceptions.KustvaktException;
 import de.ids_mannheim.korap.exceptions.StatusCodes;
-import de.ids_mannheim.korap.interfaces.AuthenticationIface;
 import de.ids_mannheim.korap.security.context.TokenContext;
 import de.ids_mannheim.korap.user.User;
 import net.sf.ehcache.Cache;
diff --git a/full/src/main/java/de/ids_mannheim/korap/authentication/AuthenticationManager.java b/full/src/main/java/de/ids_mannheim/korap/authentication/AuthenticationManager.java
deleted file mode 100644
index e9e6764..0000000
--- a/full/src/main/java/de/ids_mannheim/korap/authentication/AuthenticationManager.java
+++ /dev/null
@@ -1,103 +0,0 @@
-package de.ids_mannheim.korap.authentication;
-
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Set;
-
-import javax.ws.rs.core.HttpHeaders;
-
-import de.ids_mannheim.korap.config.KustvaktCacheable;
-import de.ids_mannheim.korap.constant.AuthenticationMethod;
-import de.ids_mannheim.korap.constant.TokenType;
-import de.ids_mannheim.korap.exceptions.KustvaktException;
-import de.ids_mannheim.korap.interfaces.AuthenticationIface;
-import de.ids_mannheim.korap.security.context.TokenContext;
-import de.ids_mannheim.korap.user.User;
-import de.ids_mannheim.korap.user.Userdata;
-
-/**
- * @author hanl
- * @date 15/06/2015
- */
-public abstract class AuthenticationManager extends KustvaktCacheable {
-
-    private Map<TokenType, AuthenticationIface> providers;
-
-    public AuthenticationManager () {
-        super("id_tokens", "key:id_tokens");
-        this.providers = new HashMap<>();
-    }
-
-    public void setProviders (Set<AuthenticationIface> providers) {
-        for (AuthenticationIface i : providers) {
-            this.providers.put(i.getTokenType(), i);
-        }
-    }
-
-    protected AuthenticationIface getProvider (TokenType scheme,
-            TokenType default_iface) {
-
-        // Debug FB: loop a Map
-
-        /*for (Map.Entry<String, AuthenticationIface> entry : this.providers.entrySet()) 
-        {
-        System.out.println("Debug: provider: Key : " + entry.getKey() + " Value : " + entry.getValue());
-        }
-        */
-        // todo: configurable authentication schema
-        if (scheme == null) {
-            return this.providers.get(default_iface);
-        }
-        else {
-            return this.providers.get(scheme);
-        }
-    }
-
-    public abstract TokenContext getTokenContext (TokenType type, String token,
-            String host, String useragent) throws KustvaktException;
-
-    public abstract User getUser (String username) throws KustvaktException;
-
-    public abstract boolean isRegistered (String id);
-
-    public abstract User authenticate (AuthenticationMethod method,
-            String username, String password, Map<String, Object> attributes)
-            throws KustvaktException;
-
-    public abstract TokenContext createTokenContext (User user,
-            Map<String, Object> attr, TokenType type) throws KustvaktException;
-
-    public abstract void setAccessAndLocation (User user, HttpHeaders headers);
-
-    public abstract void logout (TokenContext context) throws KustvaktException;
-
-    public abstract void lockAccount (User user) throws KustvaktException;
-
-    public abstract User createUserAccount (Map<String, Object> attributes,
-            boolean confirmation_required) throws KustvaktException;
-
-    public abstract boolean deleteAccount (User user) throws KustvaktException;
-
-    public abstract <T extends Userdata> T getUserData (User user,
-            Class<T> clazz) throws KustvaktException;
-
-    public abstract void updateUserData (Userdata data)
-            throws KustvaktException;
-
-    public abstract Object[] validateResetPasswordRequest (String username,
-            String email) throws KustvaktException;
-
-    public abstract void resetPassword (String uriFragment, String username,
-            String newPassphrase) throws KustvaktException;
-
-    public abstract void confirmRegistration (String uriFragment,
-            String username) throws KustvaktException;
-
-    public String providerList () {
-        return "provider list: " + this.providers.toString();
-    }
-
-    public abstract User getUser (String username, String method)
-            throws KustvaktException;
-
-}
diff --git a/full/src/main/java/de/ids_mannheim/korap/authentication/BasicAuthentication.java b/full/src/main/java/de/ids_mannheim/korap/authentication/BasicAuthentication.java
index b90406b..f94ab3f 100644
--- a/full/src/main/java/de/ids_mannheim/korap/authentication/BasicAuthentication.java
+++ b/full/src/main/java/de/ids_mannheim/korap/authentication/BasicAuthentication.java
@@ -15,7 +15,6 @@
 import de.ids_mannheim.korap.dao.UserDao;
 import de.ids_mannheim.korap.exceptions.KustvaktException;
 import de.ids_mannheim.korap.exceptions.StatusCodes;
-import de.ids_mannheim.korap.interfaces.AuthenticationIface;
 import de.ids_mannheim.korap.security.context.TokenContext;
 import de.ids_mannheim.korap.user.User;
 import de.ids_mannheim.korap.utils.StringUtils;
diff --git a/full/src/main/java/de/ids_mannheim/korap/authentication/DummyAuthenticationManager.java b/full/src/main/java/de/ids_mannheim/korap/authentication/DummyAuthenticationManager.java
deleted file mode 100644
index 0a473ac..0000000
--- a/full/src/main/java/de/ids_mannheim/korap/authentication/DummyAuthenticationManager.java
+++ /dev/null
@@ -1,136 +0,0 @@
-package de.ids_mannheim.korap.authentication;
-
-import java.util.Map;
-
-import javax.ws.rs.core.HttpHeaders;
-
-import org.springframework.beans.factory.annotation.Autowired;
-
-import de.ids_mannheim.korap.config.KustvaktConfiguration;
-import de.ids_mannheim.korap.constant.AuthenticationMethod;
-import de.ids_mannheim.korap.constant.TokenType;
-import de.ids_mannheim.korap.exceptions.KustvaktException;
-import de.ids_mannheim.korap.security.context.TokenContext;
-import de.ids_mannheim.korap.user.User;
-import de.ids_mannheim.korap.user.Userdata;
-import de.ids_mannheim.korap.utils.TimeUtils;
-
-public class DummyAuthenticationManager extends AuthenticationManager {
-
-    @Autowired
-    private KustvaktConfiguration config;
-
-    @Override
-    public TokenContext getTokenContext (TokenType type, String token,
-            String host, String useragent) throws KustvaktException {
-        TokenContext c = new TokenContext();
-        c.setUsername("guest");
-        c.setHostAddress(host);
-        c.setUserAgent(useragent);
-        c.setExpirationTime(
-                TimeUtils.plusSeconds(config.getShortTokenTTL()).getMillis());
-        c.setTokenType(TokenType.BASIC);
-        c.setToken("dummyToken");
-        return c;
-    }
-
-    @Override
-    public User getUser (String username) throws KustvaktException {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public boolean isRegistered (String id) {
-        // TODO Auto-generated method stub
-        return false;
-    }
-
-    @Override
-    public User authenticate (AuthenticationMethod method, String username,
-            String password, Map<String, Object> attributes)
-            throws KustvaktException {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public TokenContext createTokenContext (User user, Map<String, Object> attr,
-            TokenType type) throws KustvaktException {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public void setAccessAndLocation (User user, HttpHeaders headers) {
-        // TODO Auto-generated method stub
-
-    }
-
-    @Override
-    public void logout (TokenContext context) throws KustvaktException {
-        // TODO Auto-generated method stub
-
-    }
-
-    @Override
-    public void lockAccount (User user) throws KustvaktException {
-        // TODO Auto-generated method stub
-
-    }
-
-    @Override
-    public User createUserAccount (Map<String, Object> attributes,
-            boolean confirmation_required) throws KustvaktException {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public boolean deleteAccount (User user) throws KustvaktException {
-        // TODO Auto-generated method stub
-        return false;
-    }
-
-    @Override
-    public <T extends Userdata> T getUserData (User user, Class<T> clazz)
-            throws KustvaktException {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public void updateUserData (Userdata data) throws KustvaktException {
-        // TODO Auto-generated method stub
-
-    }
-
-    @Override
-    public Object[] validateResetPasswordRequest (String username, String email)
-            throws KustvaktException {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public void resetPassword (String uriFragment, String username,
-            String newPassphrase) throws KustvaktException {
-        // TODO Auto-generated method stub
-
-    }
-
-    @Override
-    public void confirmRegistration (String uriFragment, String username)
-            throws KustvaktException {
-        // TODO Auto-generated method stub
-
-    }
-
-    @Override
-    public User getUser (String username, String method)
-            throws KustvaktException {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-}
diff --git a/full/src/main/java/de/ids_mannheim/korap/authentication/KustvaktAuthenticationManager.java b/full/src/main/java/de/ids_mannheim/korap/authentication/KustvaktAuthenticationManager.java
index 6aa5b9f..e4e8ac1 100644
--- a/full/src/main/java/de/ids_mannheim/korap/authentication/KustvaktAuthenticationManager.java
+++ b/full/src/main/java/de/ids_mannheim/korap/authentication/KustvaktAuthenticationManager.java
@@ -33,7 +33,6 @@
 import de.ids_mannheim.korap.exceptions.KustvaktException;
 import de.ids_mannheim.korap.exceptions.StatusCodes;
 import de.ids_mannheim.korap.exceptions.WrappedException;
-import de.ids_mannheim.korap.interfaces.AuthenticationIface;
 import de.ids_mannheim.korap.interfaces.EncryptionIface;
 import de.ids_mannheim.korap.interfaces.EntityHandlerIface;
 import de.ids_mannheim.korap.interfaces.ValidatorIface;
@@ -74,6 +73,7 @@
 	
 	public KustvaktAuthenticationManager(EntityHandlerIface userdb, EncryptionIface crypto,
 			FullConfiguration config, AuditingIface auditer, Collection<UserDataDbIface> userdatadaos) {
+	    super("id_tokens");
 		this.entHandler = userdb;
 		this.config = config;
 		this.crypto = crypto;
diff --git a/full/src/main/java/de/ids_mannheim/korap/authentication/OAuth2Authentication.java b/full/src/main/java/de/ids_mannheim/korap/authentication/OAuth2Authentication.java
index d203b51..a180921 100644
--- a/full/src/main/java/de/ids_mannheim/korap/authentication/OAuth2Authentication.java
+++ b/full/src/main/java/de/ids_mannheim/korap/authentication/OAuth2Authentication.java
@@ -9,10 +9,9 @@
 import de.ids_mannheim.korap.constant.TokenType;
 import de.ids_mannheim.korap.exceptions.KustvaktException;
 import de.ids_mannheim.korap.exceptions.StatusCodes;
-import de.ids_mannheim.korap.interfaces.AuthenticationIface;
 import de.ids_mannheim.korap.oauth2.dao.AccessTokenDao;
 import de.ids_mannheim.korap.oauth2.entity.AccessToken;
-import de.ids_mannheim.korap.oauth2.service.OAuth2ScopeService;
+import de.ids_mannheim.korap.oauth2.service.OAuth2ScopeServiceImpl;
 import de.ids_mannheim.korap.security.context.TokenContext;
 import de.ids_mannheim.korap.user.User;
 
@@ -22,7 +21,7 @@
     @Autowired
     private AccessTokenDao accessDao;
     @Autowired
-    private OAuth2ScopeService scopeService;
+    private OAuth2ScopeServiceImpl scopeService;
 
     @Override
     public TokenContext getTokenContext (String authToken)
diff --git a/full/src/main/java/de/ids_mannheim/korap/authentication/SessionAuthentication.java b/full/src/main/java/de/ids_mannheim/korap/authentication/SessionAuthentication.java
index 1bb4c6d..af8e953 100644
--- a/full/src/main/java/de/ids_mannheim/korap/authentication/SessionAuthentication.java
+++ b/full/src/main/java/de/ids_mannheim/korap/authentication/SessionAuthentication.java
@@ -4,7 +4,6 @@
 import de.ids_mannheim.korap.constant.TokenType;
 import de.ids_mannheim.korap.exceptions.KustvaktException;
 import de.ids_mannheim.korap.exceptions.StatusCodes;
-import de.ids_mannheim.korap.interfaces.AuthenticationIface;
 import de.ids_mannheim.korap.interfaces.EncryptionIface;
 import de.ids_mannheim.korap.security.context.TokenContext;
 import de.ids_mannheim.korap.config.Attributes;
diff --git a/full/src/main/java/de/ids_mannheim/korap/authentication/http/AuthorizationData.java b/full/src/main/java/de/ids_mannheim/korap/authentication/http/AuthorizationData.java
deleted file mode 100644
index 236f26a..0000000
--- a/full/src/main/java/de/ids_mannheim/korap/authentication/http/AuthorizationData.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package de.ids_mannheim.korap.authentication.http;
-
-import de.ids_mannheim.korap.constant.AuthenticationScheme;
-import lombok.Getter;
-import lombok.Setter;
-
-/** Describes the values stored in Authorization header of HTTP requests. 
- * 
- * @author margaretha
- *
- */
-@Getter
-@Setter
-public class AuthorizationData {
-
-    private String token;
-    private AuthenticationScheme authenticationScheme;
-    private String username;
-    private String password;
-
-}
-
diff --git a/full/src/main/java/de/ids_mannheim/korap/authentication/http/HttpAuthorizationHandler.java b/full/src/main/java/de/ids_mannheim/korap/authentication/http/HttpAuthorizationHandler.java
deleted file mode 100644
index 5eed64f..0000000
--- a/full/src/main/java/de/ids_mannheim/korap/authentication/http/HttpAuthorizationHandler.java
+++ /dev/null
@@ -1,58 +0,0 @@
-package de.ids_mannheim.korap.authentication.http;
-
-import org.springframework.stereotype.Component;
-
-import de.ids_mannheim.korap.constant.AuthenticationScheme;
-import de.ids_mannheim.korap.exceptions.KustvaktException;
-import de.ids_mannheim.korap.exceptions.StatusCodes;
-import de.ids_mannheim.korap.utils.ParameterChecker;
-
-/** Implementation of Basic HTTP authentication scheme (see RFC 7253 
- *  and 7617) for client asking for authorization and sending user 
- *  data.  
- * 
- * @author margaretha
- * 
- */
-@Component
-public class HttpAuthorizationHandler {
-
-    public static String createBasicAuthorizationHeaderValue (String username, 
-            String password) throws KustvaktException {
-        ParameterChecker.checkStringValue(username, "username");
-        ParameterChecker.checkStringValue(password, "password");
-
-        String credentials = TransferEncoding.encodeBase64(username, password);
-        return AuthenticationScheme.BASIC.displayName()+" " + credentials;
-    }
-
-    public AuthorizationData parseAuthorizationHeaderValue (
-            String authorizationHeader) throws KustvaktException {
-        ParameterChecker.checkStringValue(authorizationHeader,
-                "authorization header");
-
-        String[] values = authorizationHeader.split(" ");
-        if (values.length != 2) {
-            throw new KustvaktException(StatusCodes.AUTHENTICATION_FAILED,
-                    "Cannot parse authorization header value "
-                            + authorizationHeader
-                            + ". Use this format: [authentication "
-                            + "scheme] [Base64-encoded token]",
-                    authorizationHeader);
-        }
-
-        AuthorizationData data = new AuthorizationData();
-        data.setAuthenticationScheme(
-                AuthenticationScheme.valueOf(values[0].toUpperCase()));
-        data.setToken(values[1]);
-        return data;
-    }
-
-    public AuthorizationData parseBasicToken (AuthorizationData data)
-            throws KustvaktException {
-        String[] credentials = TransferEncoding.decodeBase64(data.getToken());
-        data.setUsername(credentials[0]);
-        data.setPassword(credentials[1]);
-        return data;
-    }
-}
diff --git a/full/src/main/java/de/ids_mannheim/korap/authentication/http/TransferEncoding.java b/full/src/main/java/de/ids_mannheim/korap/authentication/http/TransferEncoding.java
deleted file mode 100644
index 52d1a90..0000000
--- a/full/src/main/java/de/ids_mannheim/korap/authentication/http/TransferEncoding.java
+++ /dev/null
@@ -1,53 +0,0 @@
-package de.ids_mannheim.korap.authentication.http;
-
-import org.apache.commons.codec.binary.Base64;
-import org.springframework.stereotype.Component;
-
-import de.ids_mannheim.korap.exceptions.KustvaktException;
-import de.ids_mannheim.korap.utils.ParameterChecker;
-
-/** TransferEncoding contains encoding and decoding methods for data transfer, 
- *  e.g. transfering credentials using basic Http authentication.  
- *   
- * @author margaretha
- *
- */
-@Component
-public class TransferEncoding {
-
-    /** Encodes username and password using Base64.
-     * 
-     * @param username username
-     * @param password password
-     * @return
-     */
-    public static String encodeBase64 (String username, String password) {
-        String s = username + ":" + password;
-        return new String(Base64.encodeBase64(s.getBytes()));
-    }
-
-    /** Decodes the given string using Base64.
-     * 
-     * @param encodedStr 
-     * @return username and password as an array of strings.
-     * @throws KustvaktException 
-     */
-    public static String[] decodeBase64 (String encodedStr)
-            throws KustvaktException {
-
-        ParameterChecker.checkStringValue(encodedStr, "encoded string");
-        String decodedStr = new String(Base64.decodeBase64(encodedStr));
-
-        if (decodedStr.contains(":") && decodedStr.split(":").length == 2) {
-            String[] strArr = decodedStr.split(":");
-            if ((strArr[0] != null && !strArr[0].isEmpty())
-                    && (strArr[1] != null && !strArr[1].isEmpty())) {
-                return decodedStr.split(":");
-            }
-
-        }
-
-        throw new IllegalArgumentException(
-                "Unknown Base64 encoding format: " + decodedStr);
-    }
-}
diff --git a/full/src/main/java/de/ids_mannheim/korap/constant/AnnotationType.java b/full/src/main/java/de/ids_mannheim/korap/constant/AnnotationType.java
deleted file mode 100644
index 560d401..0000000
--- a/full/src/main/java/de/ids_mannheim/korap/constant/AnnotationType.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package de.ids_mannheim.korap.constant;
-
-public class AnnotationType {
-    public static String FOUNDRY = "foundry";
-    public static String LAYER = "layer";
-    public static String KEY = "key";
-    public static String VALUE = "value";
-}
diff --git a/full/src/main/java/de/ids_mannheim/korap/constant/AuthenticationMethod.java b/full/src/main/java/de/ids_mannheim/korap/constant/AuthenticationMethod.java
deleted file mode 100644
index 7c7dbae..0000000
--- a/full/src/main/java/de/ids_mannheim/korap/constant/AuthenticationMethod.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package de.ids_mannheim.korap.constant;
-
-/** Lists possible actual authentication methods. Multiple 
- *  {@link AuthenticationScheme} may use an identical 
- *  authentication method. 
- * 
- * @author margaretha
- * 
- * @see AuthenticationScheme 
- *
- */
-public enum AuthenticationMethod {
-    LDAP, SHIBBOLETH, DATABASE, TEST; 
-}
diff --git a/full/src/main/java/de/ids_mannheim/korap/constant/AuthenticationScheme.java b/full/src/main/java/de/ids_mannheim/korap/constant/AuthenticationScheme.java
deleted file mode 100644
index 3db6a3e..0000000
--- a/full/src/main/java/de/ids_mannheim/korap/constant/AuthenticationScheme.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package de.ids_mannheim.korap.constant;
-
-import org.apache.commons.lang.WordUtils;
-
-/** Lists possible authentication schemes used in the Authorization header 
- *  of HTTP requests.  
- * 
- * @author margaretha
- *
- */
-public enum AuthenticationScheme {
-    // standard http
-    BASIC, BEARER,
-    // custom
-    // SESSION, has not been supported yet 
-    API;
-
-    public String displayName () {
-        return WordUtils.capitalizeFully(name());
-    }
-}
diff --git a/full/src/main/java/de/ids_mannheim/korap/constant/TokenType.java b/full/src/main/java/de/ids_mannheim/korap/constant/TokenType.java
deleted file mode 100644
index 418be0b..0000000
--- a/full/src/main/java/de/ids_mannheim/korap/constant/TokenType.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package de.ids_mannheim.korap.constant;
-
-import org.apache.commons.lang.StringUtils;
-
-public enum TokenType {
-    BASIC, API, SESSION, 
-    // openid token, e.g. within oauth2 response (json body)
-    ID_TOKEN,
-    // OAuth2 access_token
-    BEARER,
-    // OAuth2 client
-    CLIENT; 
-
-    public String displayName () {
-        return StringUtils.capitalize(name().toLowerCase());
-    }
-}
\ No newline at end of file
diff --git a/full/src/main/java/de/ids_mannheim/korap/dao/AdminDao.java b/full/src/main/java/de/ids_mannheim/korap/dao/AdminDao.java
deleted file mode 100644
index fcf32d0..0000000
--- a/full/src/main/java/de/ids_mannheim/korap/dao/AdminDao.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package de.ids_mannheim.korap.dao;
-
-import de.ids_mannheim.korap.user.User;
-
-public interface AdminDao {
-
-    void addAccount (User user);
-
-    boolean isAdmin (String userId);
-
-}
\ No newline at end of file
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
deleted file mode 100644
index ef54fda..0000000
--- a/full/src/main/java/de/ids_mannheim/korap/dao/AnnotationDao.java
+++ /dev/null
@@ -1,215 +0,0 @@
-package de.ids_mannheim.korap.dao;
-
-import java.util.List;
-
-import javax.persistence.EntityManager;
-import javax.persistence.NoResultException;
-import javax.persistence.PersistenceContext;
-import javax.persistence.Query;
-import javax.persistence.criteria.CriteriaBuilder;
-import javax.persistence.criteria.CriteriaQuery;
-import javax.persistence.criteria.Predicate;
-import javax.persistence.criteria.Root;
-
-import org.springframework.stereotype.Repository;
-import org.springframework.transaction.annotation.Transactional;
-
-import de.ids_mannheim.korap.constant.AnnotationType;
-import de.ids_mannheim.korap.entity.Annotation;
-import de.ids_mannheim.korap.entity.AnnotationKey;
-import de.ids_mannheim.korap.entity.AnnotationKey_;
-import de.ids_mannheim.korap.entity.AnnotationLayer;
-import de.ids_mannheim.korap.entity.AnnotationLayer_;
-import de.ids_mannheim.korap.entity.Annotation_;
-import de.ids_mannheim.korap.exceptions.KustvaktException;
-import de.ids_mannheim.korap.utils.ParameterChecker;
-
-/**
- * AnnotationDao manages SQL queries regarding annotations including
- * foundry and layer pairs.
- * 
- * @author margaretha
- *
- */
-@Repository
-@Transactional
-public class AnnotationDao {
-
-    @PersistenceContext
-    private EntityManager entityManager;
-
-    /**
-     * Retrieves all foundry-layer pairs.
-     * 
-     * @return a list of foundry-layer pairs.
-     */
-    @SuppressWarnings("unchecked")
-    public List<AnnotationLayer> getAllFoundryLayerPairs () {
-        CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
-        CriteriaQuery<AnnotationLayer> query =
-                criteriaBuilder.createQuery(AnnotationLayer.class);
-        Root<AnnotationLayer> layer = query.from(AnnotationLayer.class);
-        layer.fetch(AnnotationLayer_.foundry);
-        layer.fetch(AnnotationLayer_.layer);
-        query.select(layer);
-        Query q = entityManager.createQuery(query);
-        return q.getResultList();
-    }
-
-    /**
-     * Retrieves foundry-layer pairs and their values for the given
-     * foundry and layer. If layer is empty, retrieves data for all
-     * layer in the given foundry. If foundry is empty, retrieves data
-     * for all foundry and layer pairs.
-     * 
-     * @param foundry
-     *            a foundry code
-     * @param layer
-     *            a layer code
-     * @return a list of foundry-layer pairs.
-     */
-    @SuppressWarnings("unchecked")
-    public List<AnnotationLayer> getAnnotationDescriptions (String foundry,
-            String layer) {
-
-        CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
-        CriteriaQuery<Object> query = criteriaBuilder.createQuery();
-        Root<AnnotationLayer> annotationPair =
-                query.from(AnnotationLayer.class);
-        annotationPair.fetch(AnnotationLayer_.foundry);
-        annotationPair.fetch(AnnotationLayer_.layer);
-        annotationPair.fetch(AnnotationLayer_.keys);
-
-        // EM: Hibernate bug in join n:m (see AnnotationPair.values).
-        // There should not be any redundant AnnotationPair.
-        // The redundancy can be also avoided with
-        // fetch=FetchType.EAGER
-        // because Hibernate does 2 selects.
-        query.distinct(true);
-        query = query.select(annotationPair);
-
-        if (!foundry.isEmpty()) {
-            Predicate foundryPredicate = criteriaBuilder.equal(annotationPair
-                    .get(AnnotationLayer_.foundry).get(Annotation_.code),
-                    foundry);
-            if (layer.isEmpty() || layer.equals("*")) {
-                query.where(foundryPredicate);
-            }
-            else {
-                Predicate layerPredicate = criteriaBuilder.equal(annotationPair
-                        .get(AnnotationLayer_.layer).get(Annotation_.code),
-                        layer);
-                Predicate andPredicate =
-                        criteriaBuilder.and(foundryPredicate, layerPredicate);
-                query.where(andPredicate);
-            }
-        }
-
-        Query q = entityManager.createQuery(query);
-        return q.getResultList();
-    }
-
-    public Annotation retrieveAnnotation (String code, String type) {
-        CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
-        CriteriaQuery<Annotation> query =
-                criteriaBuilder.createQuery(Annotation.class);
-
-        Root<Annotation> annotation = query.from(Annotation.class);
-        Predicate predicates = criteriaBuilder.and(
-                criteriaBuilder.equal(annotation.get(Annotation_.code), code),
-                criteriaBuilder.equal(annotation.get(Annotation_.type), type));
-        query.select(annotation).where(predicates);
-        Query q = entityManager.createQuery(query);
-        try {
-            return (Annotation) q.getSingleResult();
-        }
-        catch (NoResultException e) {
-            return null;
-        }
-    }
-
-    public AnnotationLayer retrieveAnnotationLayer (String foundry,
-            String layer) {
-        Annotation ann1 = retrieveAnnotation(foundry, AnnotationType.FOUNDRY);
-        Annotation ann2 = retrieveAnnotation(layer, AnnotationType.LAYER);
-
-        CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
-        CriteriaQuery<AnnotationLayer> query =
-                criteriaBuilder.createQuery(AnnotationLayer.class);
-
-        Root<AnnotationLayer> annotation = query.from(AnnotationLayer.class);
-        Predicate predicates = criteriaBuilder.and(
-                criteriaBuilder.equal(annotation.get(AnnotationLayer_.foundry),
-                        ann1),
-                criteriaBuilder.equal(annotation.get(AnnotationLayer_.layer),
-                        ann2));
-        query.select(annotation).where(predicates);
-        Query q = entityManager.createQuery(query);
-        try {
-            return (AnnotationLayer) q.getSingleResult();
-        }
-        catch (NoResultException e) {
-            return null;
-        }
-
-    }
-
-    public Annotation createAnnotation (String code, String type, String text,
-            String description) {
-        Annotation ann = new Annotation(code, type, text, description);
-        entityManager.persist(ann);
-        return ann;
-    }
-
-    public AnnotationLayer createAnnotationLayer (Annotation foundry,
-            Annotation layer) throws KustvaktException {
-        ParameterChecker.checkObjectValue(foundry, "foundry");
-        ParameterChecker.checkObjectValue(layer, "layer");
-
-        AnnotationLayer annotationLayer = new AnnotationLayer();
-        annotationLayer.setFoundryId(foundry.getId());
-        annotationLayer.setLayerId(layer.getId());
-        annotationLayer.setDescription(
-                foundry.getDescription() + " " + layer.getDescription());
-        entityManager.persist(annotationLayer);
-        return annotationLayer;
-    }
-
-    public void updateAnnotationLayer (AnnotationLayer layer) {
-        entityManager.merge(layer);
-    }
-
-    public void updateAnnotationKey (AnnotationKey key) {
-        entityManager.merge(key);
-    }
-
-    public AnnotationKey createAnnotationKey (AnnotationLayer layer,
-            Annotation key) {
-        AnnotationKey annotation =
-                new AnnotationKey(layer.getId(), key.getId());
-        entityManager.persist(annotation);
-        return annotation;
-    }
-
-    public AnnotationKey retrieveAnnotationKey (AnnotationLayer layer,
-            Annotation key) {
-
-        CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
-        CriteriaQuery<AnnotationKey> query =
-                criteriaBuilder.createQuery(AnnotationKey.class);
-
-        Root<AnnotationKey> annotation = query.from(AnnotationKey.class);
-        Predicate predicates = criteriaBuilder.and(
-                criteriaBuilder.equal(annotation.get(AnnotationKey_.layer),
-                        layer),
-                criteriaBuilder.equal(annotation.get(AnnotationKey_.key), key));
-        query.select(annotation).where(predicates);
-        Query q = entityManager.createQuery(query);
-        try {
-            return (AnnotationKey) q.getSingleResult();
-        }
-        catch (NoResultException e) {
-            return null;
-        }
-    }
-}
diff --git a/full/src/main/java/de/ids_mannheim/korap/dao/DummyAdminDaoImpl.java b/full/src/main/java/de/ids_mannheim/korap/dao/DummyAdminDaoImpl.java
deleted file mode 100644
index 0d31885..0000000
--- a/full/src/main/java/de/ids_mannheim/korap/dao/DummyAdminDaoImpl.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package de.ids_mannheim.korap.dao;
-
-import de.ids_mannheim.korap.user.User;
-
-public class DummyAdminDaoImpl implements AdminDao {
-
-    @Override
-    public void addAccount (User user) {
-        // TODO Auto-generated method stub
-
-    }
-
-    @Override
-    public boolean isAdmin (String userId) {
-        return false;
-    }
-
-}
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
deleted file mode 100644
index d12ff3f..0000000
--- a/full/src/main/java/de/ids_mannheim/korap/dao/ResourceDao.java
+++ /dev/null
@@ -1,82 +0,0 @@
-package de.ids_mannheim.korap.dao;
-
-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.TypedQuery;
-import javax.persistence.criteria.CriteriaBuilder;
-import javax.persistence.criteria.CriteriaQuery;
-import javax.persistence.criteria.Root;
-
-import org.springframework.stereotype.Repository;
-import org.springframework.transaction.annotation.Transactional;
-
-import de.ids_mannheim.korap.entity.AnnotationLayer;
-import de.ids_mannheim.korap.entity.Resource;
-import de.ids_mannheim.korap.entity.Resource_;
-import de.ids_mannheim.korap.exceptions.KustvaktException;
-import de.ids_mannheim.korap.utils.ParameterChecker;
-
-/**
- * ResourceDao manages SQL queries regarding resource info and layers.
- * 
- * @author margaretha
- *
- */
-@Transactional
-@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);
-        Root<Resource> resource = query.from(Resource.class);
-        query.select(resource);
-
-        TypedQuery<Resource> q = entityManager.createQuery(query);
-        return q.getResultList();
-    }
-
-    public Resource retrieveResource (String id) {
-        CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
-        CriteriaQuery<Resource> query =
-                criteriaBuilder.createQuery(Resource.class);
-        Root<Resource> resource = query.from(Resource.class);
-        query.select(resource);
-        query.where(criteriaBuilder.equal(resource.get(Resource_.id), id));
-
-        Query q = entityManager.createQuery(query);
-        try {
-            return (Resource) q.getSingleResult();
-        }
-        catch (NoResultException e) {
-            return null;
-        }
-    }
-
-    public void createResource (String id, String germanTitle,
-            String englishTitle, String englishDescription,
-            Set<AnnotationLayer> layers) throws KustvaktException {
-        ParameterChecker.checkStringValue(id, "id");
-        ParameterChecker.checkStringValue(englishTitle, "en_title");
-        ParameterChecker.checkStringValue(germanTitle, "de_title");
-
-        Resource r = new Resource(id, germanTitle, englishTitle,
-                englishDescription, layers);
-        entityManager.persist(r);
-
-    }
-}
diff --git a/full/src/main/java/de/ids_mannheim/korap/dto/FoundryDto.java b/full/src/main/java/de/ids_mannheim/korap/dto/FoundryDto.java
deleted file mode 100644
index 26cf383..0000000
--- a/full/src/main/java/de/ids_mannheim/korap/dto/FoundryDto.java
+++ /dev/null
@@ -1,62 +0,0 @@
-package de.ids_mannheim.korap.dto;
-
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import org.codehaus.jackson.map.annotate.JsonSerialize;
-import org.codehaus.jackson.map.annotate.JsonSerialize.Inclusion;
-
-import com.fasterxml.jackson.annotation.JsonInclude;
-import com.fasterxml.jackson.annotation.JsonInclude.Include;
-
-import lombok.Getter;
-import lombok.Setter;
-
-/**
- * Data transfer object for annotation descriptions (e.g. for
- * Kalamar).
- * 
- * @author margaretha
- * 
- */
-@Getter
-@Setter
-@JsonInclude(Include.NON_EMPTY) // new fasterxml annotation, not used by current jersey version
-@JsonSerialize(include=Inclusion.NON_EMPTY) // old codehouse annotation, used by jersey
-public class FoundryDto {
-
-    private String code;
-    private String description;
-    private List<Layer> layers;
-
-    @Getter
-    @Setter
-    @JsonInclude(Include.NON_EMPTY)
-    @JsonSerialize(include=Inclusion.NON_EMPTY) // old codehouse annotation used by jersey
-    public class Layer {
-        private String code;
-        private String description;
-        private Set<Key> keys;
-    }
-
-    @Getter
-    @Setter
-    @JsonInclude(Include.NON_EMPTY)
-    @JsonSerialize(include=Inclusion.NON_EMPTY) // old codehouse annotation used by jersey
-    public class Key implements Comparable<Key>{
-
-        private String code;
-        private String description;
-        private Map<String, String> values;
-
-        public Key (String code) {
-            this.code = code;
-        }
-        
-        @Override
-        public int compareTo (Key k) {
-            return this.code.compareTo(k.code); 
-        }
-    }
-}
diff --git a/full/src/main/java/de/ids_mannheim/korap/dto/LayerDto.java b/full/src/main/java/de/ids_mannheim/korap/dto/LayerDto.java
deleted file mode 100644
index b9884d8..0000000
--- a/full/src/main/java/de/ids_mannheim/korap/dto/LayerDto.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package de.ids_mannheim.korap.dto;
-
-import lombok.Getter;
-import lombok.Setter;
-
-/**
- * Data transfer object for layer description (e.g. for KorapSRU).
- * 
- * @author margaretha
- *
- */
-@Getter
-@Setter
-public class LayerDto {
-
-    private int id;
-    private String code;
-    private String layer;
-    private String foundry;
-    private String description;
-}
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
deleted file mode 100644
index efe1c43..0000000
--- a/full/src/main/java/de/ids_mannheim/korap/dto/converter/AnnotationConverter.java
+++ /dev/null
@@ -1,156 +0,0 @@
-package de.ids_mannheim.korap.dto.converter;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.TreeMap;
-import java.util.TreeSet;
-
-import org.springframework.stereotype.Component;
-
-import de.ids_mannheim.korap.dto.FoundryDto;
-import de.ids_mannheim.korap.dto.FoundryDto.Key;
-import de.ids_mannheim.korap.dto.FoundryDto.Layer;
-import de.ids_mannheim.korap.dto.LayerDto;
-import de.ids_mannheim.korap.entity.Annotation;
-import de.ids_mannheim.korap.entity.AnnotationKey;
-import de.ids_mannheim.korap.entity.AnnotationLayer;
-
-/**
- * AnnotationConverter prepares data transfer objects (DTOs) from
- * entities. The DTOs, for instance, are serialized into JSON in the
- * controller classes and then sent as the response entity.
- * 
- * @author margaretha
- *
- */
-@Component
-public class AnnotationConverter {
-
-    /**
-     * Returns layer descriptions in a list of {@link LayerDto}s.
-     * 
-     * @param pairs
-     *            a list of {@link AnnotationLayer}s
-     * @return a list of {@link LayerDto}s
-     */
-    public List<LayerDto> convertToLayerDto (List<AnnotationLayer> pairs) {
-        List<LayerDto> layerDtos = new ArrayList<LayerDto>(pairs.size());
-        LayerDto dto;
-        String foundry, layer;
-        for (AnnotationLayer p : pairs) {
-            dto = new LayerDto();
-            dto.setId(p.getId());
-            dto.setDescription(p.getDescription());
-
-            foundry = p.getFoundry().getCode();
-            dto.setFoundry(foundry);
-
-            layer = p.getLayer().getCode();
-            dto.setLayer(layer);
-            dto.setCode(foundry + "/" + layer);
-            layerDtos.add(dto);
-        }
-
-        return layerDtos;
-    }
-
-    /**
-     * Returns foundry description in {@link FoundryDto}s
-     * 
-     * @param pairs
-     *            a list of {@link AnnotationLayer}s
-     * @param language
-     * @return a list of {@link FoundryDto}s
-     */
-    public List<FoundryDto> convertToFoundryDto (List<AnnotationLayer> pairs,
-            String language) {
-        List<FoundryDto> foundryDtos = new ArrayList<FoundryDto>(pairs.size());
-        Map<String, List<AnnotationLayer>> foundryMap = createFoundryMap(pairs);
-
-        for (String foundryCode : foundryMap.keySet()) {
-            List<AnnotationLayer> foundries = foundryMap.get(foundryCode);
-            List<Layer> layers = new ArrayList<Layer>(foundries.size());
-            FoundryDto dto = null;
-
-            for (AnnotationLayer f : foundries) {
-                if (dto == null) {
-                    Annotation foundry = f.getFoundry();
-                    dto = new FoundryDto();
-                    if (language.equals("de")) {
-                        dto.setDescription(foundry.getGermanDescription());
-                    }
-                    else {
-                        dto.setDescription(foundry.getDescription());
-                    }
-                    dto.setCode(foundry.getCode());
-                }
-
-                Annotation layer = f.getLayer();
-                Set<Key> keys = new TreeSet<>();
-
-                for (AnnotationKey ak : f.getKeys()) {
-                    Annotation a = ak.getKey();
-                    Map<String, String> values = new TreeMap<>();
-                    
-                    Key key = dto.new Key(a.getCode());
-                    if (language.equals("de")) {
-                        key.setDescription(a.getGermanDescription());
-                        for (Annotation v : ak.getValues()) {
-                            values.put(v.getCode(), v.getGermanDescription());
-                        }
-
-                    }
-                    else {
-                        key.setDescription(a.getDescription());
-                        for (Annotation v : ak.getValues()) {
-                            values.put(v.getCode(), v.getDescription());
-                        }
-                    }
-                    key.setValues(values);
-                    keys.add(key);
-                }
-
-                Layer l = dto.new Layer();
-                l.setCode(layer.getCode());
-
-                if (language.equals("de")) {
-                    l.setDescription(layer.getGermanDescription());
-                }
-                else {
-                    l.setDescription(layer.getDescription());
-                }
-
-                l.setKeys(keys);
-                layers.add(l);
-            }
-
-            dto.setLayers(layers);
-            foundryDtos.add(dto);
-        }
-
-        return foundryDtos;
-    }
-
-    private Map<String, List<AnnotationLayer>> createFoundryMap (
-            List<AnnotationLayer> pairs) {
-        Map<String, List<AnnotationLayer>> foundries =
-                new HashMap<String, List<AnnotationLayer>>();
-        for (AnnotationLayer p : pairs) {
-            String foundryCode = p.getFoundry().getCode();
-            if (foundries.containsKey(foundryCode)) {
-                foundries.get(foundryCode).add(p);
-            }
-            else {
-                List<AnnotationLayer> foundryList =
-                        new ArrayList<AnnotationLayer>();
-                foundryList.add(p);
-                foundries.put(foundryCode, foundryList);
-            }
-        }
-
-        return foundries;
-    }
-}
diff --git a/full/src/main/java/de/ids_mannheim/korap/encryption/RandomCodeGenerator.java b/full/src/main/java/de/ids_mannheim/korap/encryption/RandomCodeGenerator.java
deleted file mode 100644
index ea451aa..0000000
--- a/full/src/main/java/de/ids_mannheim/korap/encryption/RandomCodeGenerator.java
+++ /dev/null
@@ -1,71 +0,0 @@
-package de.ids_mannheim.korap.encryption;
-
-import java.security.MessageDigest;
-import java.security.NoSuchAlgorithmException;
-import java.security.SecureRandom;
-import java.util.UUID;
-
-import javax.annotation.PostConstruct;
-
-import org.apache.commons.codec.binary.Base64;
-import org.apache.commons.lang.ArrayUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-
-import de.ids_mannheim.korap.config.KustvaktConfiguration;
-import de.ids_mannheim.korap.exceptions.KustvaktException;
-import de.ids_mannheim.korap.exceptions.StatusCodes;
-
-/**
- * Generates a random string that can be used for tokens, client id,
- * client secret, etc.
- * 
- * @author margaretha
- *
- */
-@Component
-public class RandomCodeGenerator {
-
-    @Autowired
-    public KustvaktConfiguration config;
-
-    public static SecureRandom secureRandom;
-
-    @PostConstruct
-    public void init () throws NoSuchAlgorithmException {
-        secureRandom =
-                SecureRandom.getInstance(config.getSecureRandomAlgorithm());
-    }
-
-    public String createRandomCode (KustvaktConfiguration c)
-            throws KustvaktException, NoSuchAlgorithmException {
-        config = c;
-        init();
-        return createRandomCode();
-    }
-
-    public String createRandomCode () throws KustvaktException {
-        UUID randomUUID = UUID.randomUUID();
-        byte[] uuidBytes = randomUUID.toString().getBytes();
-        byte[] secureBytes = new byte[3];
-        secureRandom.nextBytes(secureBytes);
-
-        byte[] bytes = ArrayUtils.addAll(uuidBytes, secureBytes);
-
-        try {
-            MessageDigest md = MessageDigest
-                    .getInstance(config.getMessageDigestAlgorithm());
-            md.update(bytes);
-            byte[] digest = md.digest();
-            String code = Base64.encodeBase64URLSafeString(digest);
-            md.reset();
-            return code;
-        }
-        catch (NoSuchAlgorithmException e) {
-            throw new KustvaktException(StatusCodes.INVALID_ALGORITHM,
-                    config.getMessageDigestAlgorithm()
-                            + "is not a valid MessageDigest algorithm");
-        }
-    }
-
-}
diff --git a/full/src/main/java/de/ids_mannheim/korap/entity/Annotation.java b/full/src/main/java/de/ids_mannheim/korap/entity/Annotation.java
deleted file mode 100644
index 35ee11d..0000000
--- a/full/src/main/java/de/ids_mannheim/korap/entity/Annotation.java
+++ /dev/null
@@ -1,52 +0,0 @@
-package de.ids_mannheim.korap.entity;
-
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
-import javax.persistence.Id;
-import javax.persistence.Table;
-
-import lombok.Getter;
-import lombok.Setter;
-
-/**
- * Describes annotation tags available in the system / used in
- * annotating corpus data.
- * 
- * @author margaretha
- *
- */
-@Setter
-@Getter
-@Entity
-@Table(name = "annotation")
-public class Annotation {
-
-    @Id
-    @GeneratedValue(strategy = GenerationType.IDENTITY)
-    private int id;
-    private String code;
-    private String type;
-    private String text;
-    private String description;
-    @Column(name = "de_description")
-    private String germanDescription;
-
-    public Annotation () {}
-
-    public Annotation (String code, String type, String text,
-                       String description) {
-        this.code = code;
-        this.type = type;
-        this.text = text;
-        this.description = description;
-    }
-
-    @Override
-    public String toString () {
-        return "id=" + id + ", code= " + code + ", type= " + type
-                + ", description=" + description + ", germanDescription="
-                + germanDescription;
-    }
-}
diff --git a/full/src/main/java/de/ids_mannheim/korap/entity/AnnotationKey.java b/full/src/main/java/de/ids_mannheim/korap/entity/AnnotationKey.java
deleted file mode 100644
index d65ffb2..0000000
--- a/full/src/main/java/de/ids_mannheim/korap/entity/AnnotationKey.java
+++ /dev/null
@@ -1,61 +0,0 @@
-package de.ids_mannheim.korap.entity;
-
-import java.util.Set;
-
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.FetchType;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
-import javax.persistence.Id;
-import javax.persistence.JoinColumn;
-import javax.persistence.JoinTable;
-import javax.persistence.ManyToMany;
-import javax.persistence.ManyToOne;
-import javax.persistence.Table;
-import javax.persistence.UniqueConstraint;
-
-import lombok.Getter;
-import lombok.Setter;
-
-@Setter
-@Getter
-@Entity
-@Table(name = "annotation_key", uniqueConstraints = @UniqueConstraint(
-        columnNames = { "layer_id", "key_id" }))
-public class AnnotationKey {
-
-    @Id
-    @GeneratedValue(strategy = GenerationType.IDENTITY)
-    private int id;
-    @Column(name = "key_id")
-    private int keyId;
-    @Column(name = "layer_id")
-    private int layerId;
-
-    @ManyToOne(fetch = FetchType.EAGER)
-    @JoinColumn(name = "layer_id", insertable = false, updatable = false)
-    private AnnotationLayer layer;
-
-    @ManyToOne(fetch = FetchType.EAGER)
-    @JoinColumn(name = "key_id", insertable = false, updatable = false)
-    private Annotation key;
-
-    @ManyToMany(fetch = FetchType.EAGER)
-    @JoinTable(name = "annotation_value",
-            joinColumns = @JoinColumn(name = "key_id",
-                    referencedColumnName = "id"),
-            inverseJoinColumns = @JoinColumn(name = "value_id",
-                    referencedColumnName = "id"),
-            uniqueConstraints = @UniqueConstraint(
-                    columnNames = { "key_id", "value_id" }))
-    private Set<Annotation> values;
-
-    public AnnotationKey () {}
-
-    public AnnotationKey (int layerId, int keyId) {
-        this.layerId = layerId;
-        this.keyId = keyId;
-    }
-
-}
diff --git a/full/src/main/java/de/ids_mannheim/korap/entity/AnnotationLayer.java b/full/src/main/java/de/ids_mannheim/korap/entity/AnnotationLayer.java
deleted file mode 100644
index c16abec..0000000
--- a/full/src/main/java/de/ids_mannheim/korap/entity/AnnotationLayer.java
+++ /dev/null
@@ -1,68 +0,0 @@
-package de.ids_mannheim.korap.entity;
-
-import java.util.Set;
-
-import javax.persistence.CascadeType;
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.FetchType;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
-import javax.persistence.Id;
-import javax.persistence.JoinColumn;
-import javax.persistence.ManyToOne;
-import javax.persistence.OneToMany;
-import javax.persistence.Table;
-import javax.persistence.UniqueConstraint;
-
-import org.hibernate.annotations.Fetch;
-import org.hibernate.annotations.FetchMode;
-
-import lombok.Getter;
-import lombok.Setter;
-
-/**
- * Describes annotations as a pair, e.g. foundry and layer where
- * foundry denotes where the annotation comes from e.g. Tree tagger
- * parser, and layer denotes the annotation layer e.g. part of speech.
- * 
- * @author margaretha
- * @see Annotation
- */
-@Setter
-@Getter
-@Entity
-@Table(name = "annotation_layer", uniqueConstraints = @UniqueConstraint(
-        columnNames = { "foundry_id", "layer_id" }))
-public class AnnotationLayer {
-    @Id
-    @GeneratedValue(strategy = GenerationType.IDENTITY)
-    private int id;
-    @Column(name = "foundry_id")
-    private int foundryId;
-    @Column(name = "layer_id")
-    private int layerId;
-    @Column(name = "description")
-    private String description;
-
-    @Fetch(FetchMode.SELECT)
-    @ManyToOne // (fetch=FetchType.LAZY)
-    @JoinColumn(name = "foundry_id", insertable = false, updatable = false)
-    private Annotation foundry;
-
-    @Fetch(FetchMode.SELECT)
-    @ManyToOne // (fetch=FetchType.LAZY)
-    @JoinColumn(name = "layer_id", insertable = false, updatable = false)
-    private Annotation layer;
-
-    @OneToMany(mappedBy = "layer", fetch = FetchType.EAGER,
-            cascade = CascadeType.REMOVE)
-    private Set<AnnotationKey> keys;
-
-    @Override
-    public String toString () {
-        return "id=" + id + ", foundry=" + foundry + ", layer=" + layer
-                + ", description=" + description + ", keys= " + keys;
-
-    }
-}
diff --git a/full/src/main/java/de/ids_mannheim/korap/entity/Resource.java b/full/src/main/java/de/ids_mannheim/korap/entity/Resource.java
deleted file mode 100644
index 813adc5..0000000
--- a/full/src/main/java/de/ids_mannheim/korap/entity/Resource.java
+++ /dev/null
@@ -1,69 +0,0 @@
-package de.ids_mannheim.korap.entity;
-
-import java.util.Set;
-
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.FetchType;
-import javax.persistence.Id;
-import javax.persistence.JoinColumn;
-import javax.persistence.JoinTable;
-import javax.persistence.ManyToMany;
-import javax.persistence.Table;
-
-import lombok.Getter;
-import lombok.Setter;
-
-/**
- * Describes resources having free licenses. Primarily for
- * accommodating
- * clients in providing data without login such as KorapSRU.
- * 
- * @author margaretha
- *
- */
-@Getter
-@Setter
-@Entity
-@Table(name = "resource")
-public class Resource {
-
-    @Id
-    private String id;
-
-    @Column(name = "de_title")
-    private String germanTitle;
-
-    @Column(name = "en_title")
-    private String englishTitle;
-
-    @Column(name = "en_description")
-    private String englishDescription;
-
-    @ManyToMany(fetch = FetchType.EAGER)
-    @JoinTable(name = "resource_layer",
-            joinColumns = @JoinColumn(name = "resource_id",
-                    referencedColumnName = "id"),
-            inverseJoinColumns = @JoinColumn(name = "layer_id",
-                    referencedColumnName = "id"))
-    private Set<AnnotationLayer> layers;
-
-    public Resource () {}
-
-    public Resource (String id, String germanTitle, String englishTitle,
-                     String englishDescription, Set<AnnotationLayer> layers) {
-        this.id = id;
-        this.germanTitle = germanTitle;
-        this.englishTitle = englishTitle;
-        this.englishDescription = englishDescription;
-        this.layers = layers;
-    }
-
-    @Override
-    public String toString () {
-        return "id=" + id + ", germanTitle=" + germanTitle + ", englishTitle="
-                + englishTitle + ", description=" + englishDescription
-                + ", layers= " + layers;
-    }
-
-}
diff --git a/full/src/main/java/de/ids_mannheim/korap/interfaces/AuthenticationIface.java b/full/src/main/java/de/ids_mannheim/korap/interfaces/AuthenticationIface.java
deleted file mode 100644
index 140ef6b..0000000
--- a/full/src/main/java/de/ids_mannheim/korap/interfaces/AuthenticationIface.java
+++ /dev/null
@@ -1,27 +0,0 @@
-package de.ids_mannheim.korap.interfaces;
-
-import java.util.Map;
-
-import de.ids_mannheim.korap.constant.TokenType;
-import de.ids_mannheim.korap.exceptions.KustvaktException;
-import de.ids_mannheim.korap.security.context.TokenContext;
-import de.ids_mannheim.korap.user.User;
-
-public interface AuthenticationIface {
-
-    public TokenContext getTokenContext(String authToken) throws KustvaktException;
-
-
-    public TokenContext createTokenContext(User user, Map<String, Object> attr)
-            throws KustvaktException;
-
-
-    void removeUserSession (String token) throws KustvaktException;
-
-
-    public TokenContext refresh (TokenContext context) throws KustvaktException;
-
-
-    public TokenType getTokenType ();
-
-}
diff --git a/full/src/main/java/de/ids_mannheim/korap/interfaces/EncryptionIface.java b/full/src/main/java/de/ids_mannheim/korap/interfaces/EncryptionIface.java
deleted file mode 100644
index 134ebdb..0000000
--- a/full/src/main/java/de/ids_mannheim/korap/interfaces/EncryptionIface.java
+++ /dev/null
@@ -1,76 +0,0 @@
-package de.ids_mannheim.korap.interfaces;
-
-import de.ids_mannheim.korap.exceptions.KustvaktException;
-import de.ids_mannheim.korap.user.User;
-
-import java.io.UnsupportedEncodingException;
-import java.security.NoSuchAlgorithmException;
-import java.util.Map;
-
-public interface EncryptionIface {
-
-    public enum Encryption {
-                @Deprecated
-        SIMPLE, ESAPICYPHER, BCRYPT
-    }
-
-
-    /**
-     * One-way hashing of String input. Used to canonicalize
-     * 
-     * @param input
-     * @param salt
-     * @return
-     */
-    public String secureHash (String input, String salt)
-            throws KustvaktException;
-
-
-    public String secureHash (String input) throws NoSuchAlgorithmException,
-            UnsupportedEncodingException, KustvaktException;
-
-
-    /**
-     * @param plain
-     * @param hash
-     * @param salt
-     * @return
-     */
-    public boolean checkHash (String plain, String hash, String salt);
-
-
-    public boolean checkHash (String plain, String hash);
-
-
-    /**
-     * create random String to be used as authentication token
-     * 
-     * @return
-     */
-    public String createToken (boolean hash, Object ... obj);
-
-
-    public String createToken ();
-
-
-    /**
-     * create a random Integer to be used as ID for databases
-     * 
-     * @return
-     */
-    public String createRandomNumber (Object ... obj);
-
-
-    public String encodeBase ();
-
-
-   // @Deprecated
-    //public Map<String, Object> validateMap (Map<String, Object> map)
-    //        throws KustvaktException;
-
-
-    //@Deprecated
-    //public String validateEntry (String input, String type)
-    //        throws KustvaktException;
-
-}
diff --git a/full/src/main/java/de/ids_mannheim/korap/interfaces/EntityHandlerIface.java b/full/src/main/java/de/ids_mannheim/korap/interfaces/EntityHandlerIface.java
deleted file mode 100644
index 9bcf614..0000000
--- a/full/src/main/java/de/ids_mannheim/korap/interfaces/EntityHandlerIface.java
+++ /dev/null
@@ -1,36 +0,0 @@
-package de.ids_mannheim.korap.interfaces;
-
-import de.ids_mannheim.korap.exceptions.EmptyResultException;
-import de.ids_mannheim.korap.exceptions.KustvaktException;
-import de.ids_mannheim.korap.user.User;
-
-/**
- * User: hanl
- * Date: 8/19/13
- * Time: 11:04 AM
- */
-public interface EntityHandlerIface {
-
-    User getAccount (String username) throws EmptyResultException,
-            KustvaktException;
-
-
-    int updateAccount (User user) throws KustvaktException;
-
-
-    int createAccount (User user) throws KustvaktException;
-
-
-    int deleteAccount (Integer userid) throws KustvaktException;
-
-
-    int truncate () throws KustvaktException;
-
-
-    int resetPassphrase (String username, String uriToken, String passphrase)
-            throws KustvaktException;
-
-
-    int activateAccount (String username, String uriToken)
-            throws KustvaktException;
-}
diff --git a/full/src/main/java/de/ids_mannheim/korap/oauth2/constant/OAuth2Scope.java b/full/src/main/java/de/ids_mannheim/korap/oauth2/constant/OAuth2Scope.java
deleted file mode 100644
index 0dc20d5..0000000
--- a/full/src/main/java/de/ids_mannheim/korap/oauth2/constant/OAuth2Scope.java
+++ /dev/null
@@ -1,44 +0,0 @@
-package de.ids_mannheim.korap.oauth2.constant;
-
-public enum OAuth2Scope {
-    
-    ALL, 
-    ADMIN,
-    
-    OPENID, 
-    AUTHORIZE,
-    
-    CLIENT_INFO,
-    REGISTER_CLIENT,
-    DEREGISTER_CLIENT,
-    RESET_CLIENT_SECRET,
-    
-    SEARCH, 
-    SERIALIZE_QUERY,
-    MATCH_INFO, 
-    
-    USER_GROUP_INFO, 
-    CREATE_USER_GROUP, 
-    DELETE_USER_GROUP, 
-    
-    DELETE_USER_GROUP_MEMBER, 
-    ADD_USER_GROUP_MEMBER, 
-    
-    EDIT_USER_GROUP_MEMBER_ROLE,
-    ADD_USER_GROUP_MEMBER_ROLE,
-    DELETE_USER_GROUP_MEMBER_ROLE, 
-           
-    CREATE_VC, 
-    VC_INFO,
-    EDIT_VC, 
-    DELETE_VC, 
-    
-    SHARE_VC, 
-    DELETE_VC_ACCESS, 
-    VC_ACCESS_INFO;
-
-    @Override
-    public String toString () {
-        return super.toString().toLowerCase();
-    }
-}
diff --git a/full/src/main/java/de/ids_mannheim/korap/oauth2/dao/AccessScopeDao.java b/full/src/main/java/de/ids_mannheim/korap/oauth2/dao/AccessScopeDao.java
index aa158a3..de0cfac 100644
--- a/full/src/main/java/de/ids_mannheim/korap/oauth2/dao/AccessScopeDao.java
+++ b/full/src/main/java/de/ids_mannheim/korap/oauth2/dao/AccessScopeDao.java
@@ -13,7 +13,8 @@
 import org.springframework.stereotype.Repository;
 import org.springframework.transaction.annotation.Transactional;
 
-import de.ids_mannheim.korap.oauth2.constant.OAuth2Scope;
+import de.ids_mannheim.korap.constant.OAuth2Scope;
+import de.ids_mannheim.korap.oauth2.entity.AccessScope;
 import de.ids_mannheim.korap.oauth2.entity.AccessScope;
 
 @Repository
diff --git a/full/src/main/java/de/ids_mannheim/korap/oauth2/entity/AccessScope.java b/full/src/main/java/de/ids_mannheim/korap/oauth2/entity/AccessScope.java
index 8fb2e0d..15d9da5 100644
--- a/full/src/main/java/de/ids_mannheim/korap/oauth2/entity/AccessScope.java
+++ b/full/src/main/java/de/ids_mannheim/korap/oauth2/entity/AccessScope.java
@@ -11,7 +11,7 @@
 import javax.persistence.ManyToMany;
 import javax.persistence.Table;
 
-import de.ids_mannheim.korap.oauth2.constant.OAuth2Scope;
+import de.ids_mannheim.korap.constant.OAuth2Scope;
 import lombok.Getter;
 import lombok.Setter;
 
diff --git a/full/src/main/java/de/ids_mannheim/korap/oauth2/oltu/service/OltuTokenService.java b/full/src/main/java/de/ids_mannheim/korap/oauth2/oltu/service/OltuTokenService.java
index 591e41d..e73421b 100644
--- a/full/src/main/java/de/ids_mannheim/korap/oauth2/oltu/service/OltuTokenService.java
+++ b/full/src/main/java/de/ids_mannheim/korap/oauth2/oltu/service/OltuTokenService.java
@@ -25,6 +25,7 @@
 import de.ids_mannheim.korap.oauth2.dao.AccessTokenDao;
 import de.ids_mannheim.korap.oauth2.dao.RefreshTokenDao;
 import de.ids_mannheim.korap.oauth2.entity.AccessScope;
+import de.ids_mannheim.korap.oauth2.entity.AccessScope;
 import de.ids_mannheim.korap.oauth2.entity.AccessToken;
 import de.ids_mannheim.korap.oauth2.entity.Authorization;
 import de.ids_mannheim.korap.oauth2.entity.OAuth2Client;
diff --git a/full/src/main/java/de/ids_mannheim/korap/oauth2/service/DummyOAuth2ScopeServiceImpl.java b/full/src/main/java/de/ids_mannheim/korap/oauth2/service/DummyOAuth2ScopeServiceImpl.java
deleted file mode 100644
index 4cafce0..0000000
--- a/full/src/main/java/de/ids_mannheim/korap/oauth2/service/DummyOAuth2ScopeServiceImpl.java
+++ /dev/null
@@ -1,54 +0,0 @@
-package de.ids_mannheim.korap.oauth2.service;
-
-import java.util.Collection;
-import java.util.Set;
-
-import de.ids_mannheim.korap.exceptions.KustvaktException;
-import de.ids_mannheim.korap.oauth2.constant.OAuth2Scope;
-import de.ids_mannheim.korap.oauth2.entity.AccessScope;
-import de.ids_mannheim.korap.security.context.TokenContext;
-
-public class DummyOAuth2ScopeServiceImpl implements OAuth2ScopeService {
-
-    @Override
-    public Set<AccessScope> convertToAccessScope (Collection<String> scopes)
-            throws KustvaktException {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public String convertAccessScopesToString (Set<AccessScope> scopes) {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public Set<String> convertAccessScopesToStringSet (
-            Set<AccessScope> scopes) {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public Set<String> filterScopes (Set<String> scopes,
-            Set<String> defaultScopes) {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public void verifyScope (TokenContext context, OAuth2Scope requiredScope)
-            throws KustvaktException {
-        // TODO Auto-generated method stub
-
-    }
-
-    @Override
-    public Set<AccessScope> verifyRefreshScope (Set<String> requestScopes,
-            Set<AccessScope> originalScopes) throws KustvaktException {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-}
diff --git a/full/src/main/java/de/ids_mannheim/korap/oauth2/service/OAuth2AuthorizationService.java b/full/src/main/java/de/ids_mannheim/korap/oauth2/service/OAuth2AuthorizationService.java
index 37e89ef..227cf0e 100644
--- a/full/src/main/java/de/ids_mannheim/korap/oauth2/service/OAuth2AuthorizationService.java
+++ b/full/src/main/java/de/ids_mannheim/korap/oauth2/service/OAuth2AuthorizationService.java
@@ -28,7 +28,7 @@
     @Autowired
     protected OAuth2ClientService clientService;
     @Autowired
-    protected OAuth2ScopeService scopeService;
+    protected OAuth2ScopeServiceImpl scopeService;
     @Autowired
     private AuthorizationDao authorizationDao;
 
diff --git a/full/src/main/java/de/ids_mannheim/korap/oauth2/service/OAuth2ScopeService.java b/full/src/main/java/de/ids_mannheim/korap/oauth2/service/OAuth2ScopeService.java
deleted file mode 100644
index 46d21eb..0000000
--- a/full/src/main/java/de/ids_mannheim/korap/oauth2/service/OAuth2ScopeService.java
+++ /dev/null
@@ -1,55 +0,0 @@
-package de.ids_mannheim.korap.oauth2.service;
-
-import java.util.Collection;
-import java.util.Set;
-
-import de.ids_mannheim.korap.exceptions.KustvaktException;
-import de.ids_mannheim.korap.oauth2.constant.OAuth2Scope;
-import de.ids_mannheim.korap.oauth2.entity.AccessScope;
-import de.ids_mannheim.korap.security.context.TokenContext;
-
-public interface OAuth2ScopeService {
-
-    /**
-     * Converts a set of scope strings to a set of {@link AccessScope}
-     * 
-     * @param scopes
-     * @return
-     * @throws KustvaktException
-     */
-    Set<AccessScope> convertToAccessScope (Collection<String> scopes)
-            throws KustvaktException;
-
-    String convertAccessScopesToString (Set<AccessScope> scopes);
-
-    Set<String> convertAccessScopesToStringSet (Set<AccessScope> scopes);
-
-    /**
-     * Simple reduction of requested scopes, i.e. excluding any scopes
-     * that are not default scopes for a specific authorization grant.
-     * 
-     * @param scopes
-     * @param defaultScopes
-     * @return accepted scopes
-     */
-    Set<String> filterScopes (Set<String> scopes, Set<String> defaultScopes);
-
-    void verifyScope (TokenContext context, OAuth2Scope requiredScope)
-            throws KustvaktException;
-
-    /**
-     * Verify scopes given in a refresh request. The scopes must not
-     * include other scopes than those authorized in the original
-     * access token issued together with the refresh token.
-     * 
-     * @param requestScopes
-     *            requested scopes
-     * @param originalScopes
-     *            authorized scopes
-     * @return a set of requested {@link AccessScope}
-     * @throws KustvaktException
-     */
-    Set<AccessScope> verifyRefreshScope (Set<String> requestScopes,
-            Set<AccessScope> originalScopes) throws KustvaktException;
-
-}
\ No newline at end of file
diff --git a/full/src/main/java/de/ids_mannheim/korap/oauth2/service/OAuth2ScopeServiceImpl.java b/full/src/main/java/de/ids_mannheim/korap/oauth2/service/OAuth2ScopeServiceImpl.java
index 387bf6d..7632032 100644
--- a/full/src/main/java/de/ids_mannheim/korap/oauth2/service/OAuth2ScopeServiceImpl.java
+++ b/full/src/main/java/de/ids_mannheim/korap/oauth2/service/OAuth2ScopeServiceImpl.java
@@ -11,14 +11,15 @@
 import org.springframework.beans.factory.annotation.Autowired;
 
 import de.ids_mannheim.korap.config.Attributes;
+import de.ids_mannheim.korap.constant.OAuth2Scope;
 import de.ids_mannheim.korap.constant.TokenType;
 import de.ids_mannheim.korap.dao.AdminDao;
 import de.ids_mannheim.korap.exceptions.KustvaktException;
 import de.ids_mannheim.korap.exceptions.StatusCodes;
 import de.ids_mannheim.korap.oauth2.constant.OAuth2Error;
-import de.ids_mannheim.korap.oauth2.constant.OAuth2Scope;
 import de.ids_mannheim.korap.oauth2.dao.AccessScopeDao;
 import de.ids_mannheim.korap.oauth2.entity.AccessScope;
+import de.ids_mannheim.korap.oauth2.entity.AccessScope;
 import de.ids_mannheim.korap.security.context.TokenContext;
 
 public class OAuth2ScopeServiceImpl implements OAuth2ScopeService {
@@ -29,10 +30,13 @@
     @Autowired
     private AdminDao adminDao;
 
-    /* (non-Javadoc)
-     * @see de.ids_mannheim.korap.oauth2.service.OAuth2ScopeService#convertToAccessScope(java.util.Collection)
+    /**
+     * Converts a set of scope strings to a set of {@link AccessScope}
+     * 
+     * @param scopes
+     * @return
+     * @throws KustvaktException
      */
-    @Override
     public Set<AccessScope> convertToAccessScope (Collection<String> scopes)
             throws KustvaktException {
 
@@ -64,19 +68,11 @@
         return requestedScopes;
     }
 
-    /* (non-Javadoc)
-     * @see de.ids_mannheim.korap.oauth2.service.OAuth2ScopeService#convertAccessScopesToString(java.util.Set)
-     */
-    @Override
     public String convertAccessScopesToString (Set<AccessScope> scopes) {
         Set<String> set = convertAccessScopesToStringSet(scopes);
         return String.join(" ", set);
     }
 
-    /* (non-Javadoc)
-     * @see de.ids_mannheim.korap.oauth2.service.OAuth2ScopeService#convertAccessScopesToStringSet(java.util.Set)
-     */
-    @Override
     public Set<String> convertAccessScopesToStringSet (
             Set<AccessScope> scopes) {
         Set<String> set = scopes.stream().map(scope -> scope.toString())
@@ -84,10 +80,14 @@
         return set;
     }
 
-    /* (non-Javadoc)
-     * @see de.ids_mannheim.korap.oauth2.service.OAuth2ScopeService#filterScopes(java.util.Set, java.util.Set)
+    /**
+     * Simple reduction of requested scopes, i.e. excluding any scopes
+     * that are not default scopes for a specific authorization grant.
+     * 
+     * @param scopes
+     * @param defaultScopes
+     * @return accepted scopes
      */
-    @Override
     public Set<String> filterScopes (Set<String> scopes,
             Set<String> defaultScopes) {
         Stream<String> stream = scopes.stream();
@@ -115,10 +115,18 @@
         }
     }
 
-    /* (non-Javadoc)
-     * @see de.ids_mannheim.korap.oauth2.service.OAuth2ScopeService#verifyRefreshScope(java.util.Set, java.util.Set)
+    /**
+     * Verify scopes given in a refresh request. The scopes must not
+     * include other scopes than those authorized in the original
+     * access token issued together with the refresh token.
+     * 
+     * @param requestScopes
+     *            requested scopes
+     * @param originalScopes
+     *            authorized scopes
+     * @return a set of requested {@link AccessScope}
+     * @throws KustvaktException
      */
-    @Override
     public Set<AccessScope> verifyRefreshScope (Set<String> requestScopes,
             Set<AccessScope> originalScopes) throws KustvaktException {
         Set<AccessScope> requestedScopes = convertToAccessScope(requestScopes);
diff --git a/full/src/main/java/de/ids_mannheim/korap/oauth2/service/OAuth2TokenService.java b/full/src/main/java/de/ids_mannheim/korap/oauth2/service/OAuth2TokenService.java
index c18e96f..9647748 100644
--- a/full/src/main/java/de/ids_mannheim/korap/oauth2/service/OAuth2TokenService.java
+++ b/full/src/main/java/de/ids_mannheim/korap/oauth2/service/OAuth2TokenService.java
@@ -35,7 +35,7 @@
     private OAuth2AuthorizationService authorizationService;
 
     @Autowired
-    protected OAuth2ScopeService scopeService;
+    protected OAuth2ScopeServiceImpl scopeService;
 
     @Autowired
     protected FullConfiguration config;
diff --git a/full/src/main/java/de/ids_mannheim/korap/security/context/KustvaktContext.java b/full/src/main/java/de/ids_mannheim/korap/security/context/KustvaktContext.java
deleted file mode 100644
index 6d36199..0000000
--- a/full/src/main/java/de/ids_mannheim/korap/security/context/KustvaktContext.java
+++ /dev/null
@@ -1,46 +0,0 @@
-package de.ids_mannheim.korap.security.context;
-
-import javax.ws.rs.core.SecurityContext;
-
-import java.security.Principal;
-
-/**
- * @author hanl
- * @date 13/05/2014
- * 
- *       wrapper for REST security context
- * 
- */
-public class KustvaktContext implements SecurityContext {
-
-    private TokenContext user;
-
-
-    public KustvaktContext (final TokenContext user) {
-        this.user = user;
-    }
-
-
-    @Override
-    public Principal getUserPrincipal () {
-        return this.user;
-    }
-
-
-    @Override
-    public boolean isUserInRole (String role) {
-        throw new UnsupportedOperationException();
-    }
-
-
-    @Override
-    public boolean isSecure () {
-        return false;
-    }
-
-
-    @Override
-    public String getAuthenticationScheme () {
-        return SecurityContext.BASIC_AUTH;
-    }
-}
diff --git a/full/src/main/java/de/ids_mannheim/korap/security/context/TokenContext.java b/full/src/main/java/de/ids_mannheim/korap/security/context/TokenContext.java
deleted file mode 100644
index b31c643..0000000
--- a/full/src/main/java/de/ids_mannheim/korap/security/context/TokenContext.java
+++ /dev/null
@@ -1,173 +0,0 @@
-package de.ids_mannheim.korap.security.context;
-
-import java.io.Serializable;
-import java.time.ZonedDateTime;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.Map;
-
-import com.fasterxml.jackson.databind.JsonNode;
-
-import de.ids_mannheim.korap.config.Attributes;
-import de.ids_mannheim.korap.constant.TokenType;
-import de.ids_mannheim.korap.exceptions.KustvaktException;
-import de.ids_mannheim.korap.user.User;
-import de.ids_mannheim.korap.utils.JsonUtils;
-import de.ids_mannheim.korap.utils.TimeUtils;
-import lombok.AccessLevel;
-import lombok.Data;
-import lombok.Getter;
-import lombok.Setter;
-
-/**
- * EM: 
- * - change datatype of tokenType from string to enum
- * - added authenticationTime
- * 
- * @author hanl
- * @date 27/01/2014
- */
-@Data
-public class TokenContext implements java.security.Principal, Serializable {
-
-    private ZonedDateTime authenticationTime;
-    /**
-     * session relevant data. Are never persisted into a database
-     */
-    private String username;
-    private long expirationTime;
-    // either "session_token " / "api_token
-    private TokenType tokenType;
-    private String token;
-    private boolean secureRequired;
-
-//    @Getter(AccessLevel.PRIVATE)
-    @Setter(AccessLevel.PRIVATE)
-    private Map<String, Object> parameters;
-    private String hostAddress;
-    private String userAgent;
-
-
-    public TokenContext () {
-        this.parameters = new HashMap<>();
-        this.setUsername("");
-        this.setToken("");
-        this.setSecureRequired(false);
-        this.setExpirationTime(-1);
-    }
-
-
-    private Map statusMap () {
-        Map m = new HashMap();
-        if (username != null && !username.isEmpty())
-            m.put(Attributes.USERNAME, username);
-        m.put(Attributes.TOKEN_EXPIRATION,
-                TimeUtils.format(this.expirationTime));
-        m.put(Attributes.TOKEN, this.token);
-        m.put(Attributes.TOKEN_TYPE, this.tokenType);
-        return m;
-    }
-
-
-    public Map<String, Object> params () {
-        return new HashMap<>(parameters);
-    }
-    
-    public boolean match (TokenContext other) {
-        if (other.getToken().equals(this.token))
-            if (this.getHostAddress().equals(this.hostAddress))
-                // user agent should be irrelvant -- what about os
-                // system version?
-                // if (other.getUserAgent().equals(this.userAgent))
-                return true;
-        return false;
-    }
-
-
-    public void addContextParameter (String key, String value) {
-        this.parameters.put(key, value);
-    }
-
-
-    public void addParams (Map<String, Object> map) {
-        for (Map.Entry<String, Object> e : map.entrySet())
-            this.parameters.put(e.getKey(), String.valueOf(e.getValue()));
-    }
-
-
-    public void removeContextParameter (String key) {
-        this.parameters.remove(key);
-    }
-
-
-    public void setExpirationTime (long date) {
-        this.expirationTime = date;
-    }
-
-
-    // todo: complete
-    public static TokenContext fromJSON (String s) throws KustvaktException {
-        JsonNode node = JsonUtils.readTree(s);
-        TokenContext c = new TokenContext();
-        if (node != null) {
-            c.setUsername(node.path(Attributes.USERNAME).asText());
-            c.setToken(node.path(Attributes.TOKEN).asText());
-        }
-        return c;
-    }
-
-
-    public static TokenContext fromOAuth2 (String s) throws KustvaktException {
-        JsonNode node = JsonUtils.readTree(s);
-        TokenContext c = new TokenContext();
-        if (node != null) {
-            c.setToken(node.path("token").asText());
-            c.setTokenType(TokenType.valueOf(node.path("token_type").asText()));
-            c.setExpirationTime(node.path("expires_in").asLong());
-            c.addContextParameter("refresh_token",
-                    node.path("refresh_token").asText());
-
-        }
-        return c;
-    }
-
-
-    public boolean isValid () {
-        return (this.username != null && !this.username.isEmpty())
-                && (this.token != null && !this.token.isEmpty())
-                && (this.tokenType != null);
-    }
-
-
-    public String getToken () {
-        return token;
-    }
-
-
-    public String toJson () throws KustvaktException {
-        return JsonUtils.toJSON(this.statusMap());
-    }
-
-
-    public boolean isDemo () {
-        return User.UserFactory.isDemo(this.username);
-    }
-
-
-
-    @Override
-    public String getName () {
-        return this.getUsername();
-    }
-
-
-    public ZonedDateTime getAuthenticationTime () {
-        return authenticationTime;
-    }
-
-
-    public void setAuthenticationTime (ZonedDateTime authTime) {
-        this.authenticationTime = authTime;
-    }
-
-}
diff --git a/full/src/main/java/de/ids_mannheim/korap/server/KustvaktBaseServer.java b/full/src/main/java/de/ids_mannheim/korap/server/KustvaktBaseServer.java
deleted file mode 100644
index 2af1912..0000000
--- a/full/src/main/java/de/ids_mannheim/korap/server/KustvaktBaseServer.java
+++ /dev/null
@@ -1,139 +0,0 @@
-package de.ids_mannheim.korap.server;
-
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.OutputStreamWriter;
-import java.nio.charset.StandardCharsets;
-import java.security.NoSuchAlgorithmException;
-
-import javax.servlet.ServletContextListener;
-
-import org.eclipse.jetty.server.Connector;
-import org.eclipse.jetty.server.Server;
-import org.eclipse.jetty.server.ServerConnector;
-import org.eclipse.jetty.server.handler.HandlerList;
-import org.eclipse.jetty.server.handler.ShutdownHandler;
-import org.eclipse.jetty.servlet.ServletContextHandler;
-import org.eclipse.jetty.servlet.ServletHolder;
-import org.springframework.web.context.ContextLoaderListener;
-
-import com.sun.jersey.spi.spring.container.servlet.SpringServlet;
-
-import de.ids_mannheim.korap.config.KustvaktConfiguration;
-import de.ids_mannheim.korap.encryption.RandomCodeGenerator;
-import de.ids_mannheim.korap.exceptions.KustvaktException;
-import lombok.Getter;
-import lombok.Setter;
-
-/**
- * @author hanl
- * @date 01/06/2015
- */
-public abstract class KustvaktBaseServer {
-
-    protected static KustvaktConfiguration config;
-
-    protected static String rootPackages;
-    protected static KustvaktArgs kargs;
-
-    public KustvaktBaseServer () {}
-
-    protected KustvaktArgs readAttributes (String[] args) {
-        KustvaktArgs kargs = new KustvaktArgs();
-        for (int i = 0; i < args.length; i++) {
-            switch ((args[i])) {
-                case "--spring-config":
-                    kargs.setSpringConfig(args[i + 1]);
-                    break;
-                case "--port":
-                    kargs.setPort(Integer.valueOf(args[i + 1]));
-                    break;
-                case "--help":
-                    StringBuffer b = new StringBuffer();
-
-                    b.append("Parameter description: \n")
-                            .append("--spring-config  <Spring XML configuration filename in classpath>\n")
-                            .append("--port  <Server port number>\n")
-                            .append("--help : This help menu\n");
-                    System.out.println(b.toString());
-                    System.out.println();
-                    return (KustvaktArgs) null;
-            }
-        }
-        return kargs;
-    }
-
-    protected void start ()
-            throws KustvaktException, IOException, NoSuchAlgorithmException {
-
-        if (kargs.port == -1) {
-            kargs.setPort(config.getPort());
-        }
-
-        Server server = new Server();
-
-        ServletContextHandler contextHandler =
-                new ServletContextHandler(ServletContextHandler.NO_SESSIONS);
-        contextHandler.setContextPath("/");
-        contextHandler.setInitParameter("contextConfigLocation",
-                "classpath:" + kargs.getSpringConfig());
-
-        ServletContextListener listener = new ContextLoaderListener();
-        contextHandler.addEventListener(listener);
-
-        ServletHolder servletHolder = new ServletHolder(new SpringServlet());
-        servletHolder.setInitParameter(
-                "com.sun.jersey.config.property.packages", rootPackages);
-        servletHolder.setInitParameter(
-                "com.sun.jersey.api.json.POJOMappingFeature", "true");
-        servletHolder.setInitOrder(1);
-        contextHandler.addServlet(servletHolder, config.getBaseURL());
-
-        ServerConnector connector = new ServerConnector(server);
-        connector.setPort(kargs.port);
-        connector.setIdleTimeout(60000);
-
-        RandomCodeGenerator random = new RandomCodeGenerator();
-        String shutdownToken = random.createRandomCode(config);
-        ShutdownHandler shutdownHandler = new ShutdownHandler(shutdownToken,true,true);
-
-        FileOutputStream fos = new FileOutputStream(new File("shutdownToken"));
-        OutputStreamWriter writer =
-                new OutputStreamWriter(fos, StandardCharsets.UTF_8.name());
-        writer.write(shutdownToken);
-        writer.flush();
-        writer.close();
-
-        HandlerList handlers = new HandlerList();
-        handlers.addHandler(shutdownHandler);
-        handlers.addHandler(contextHandler);
-
-        server.setHandler(handlers);
-
-        server.setConnectors(new Connector[] { connector });
-        try {
-            server.start();
-            server.join();
-        }
-        catch (Exception e) {
-            System.out.println("Server could not be started!");
-            System.out.println(e.getMessage());
-            e.printStackTrace();
-            System.exit(-1);
-        }
-    }
-
-    @Setter
-    public static class KustvaktArgs {
-
-        @Getter
-        private String springConfig;
-        private int port;
-
-        public KustvaktArgs () {
-            this.port = -1;
-            this.springConfig = null;
-        }
-    }
-}
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
deleted file mode 100644
index 3e384ec..0000000
--- a/full/src/main/java/de/ids_mannheim/korap/service/AnnotationService.java
+++ /dev/null
@@ -1,88 +0,0 @@
-package de.ids_mannheim.korap.service;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
-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.AnnotationLayer;
-import de.ids_mannheim.korap.exceptions.KustvaktException;
-import de.ids_mannheim.korap.exceptions.StatusCodes;
-import de.ids_mannheim.korap.web.controller.AnnotationController;
-
-/** AnnotationService defines the logic behind {@link AnnotationController}.
- * 
- * @author margaretha
- *
- */
-@Service
-public class AnnotationService {
-
-    private static Logger jlog =
-            LogManager.getLogger(AnnotationService.class);
-
-    @Autowired
-    private AnnotationDao annotationDao;
-
-    @Autowired
-    private AnnotationConverter annotationConverter;
-
-    public List<LayerDto> getLayerDtos () {
-        List<AnnotationLayer> 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<AnnotationLayer> annotationPairs = null;
-        String foundry = "", layer = "";
-        if (codes.contains("*")) {
-            annotationPairs =
-                    annotationDao.getAnnotationDescriptions(foundry, layer);
-        }
-        else {
-            String[] annotationCode;
-            annotationPairs = new ArrayList<AnnotationLayer>();
-            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 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/SearchService.java b/full/src/main/java/de/ids_mannheim/korap/service/SearchService.java
deleted file mode 100644
index 6e7c17e..0000000
--- a/full/src/main/java/de/ids_mannheim/korap/service/SearchService.java
+++ /dev/null
@@ -1,243 +0,0 @@
-package de.ids_mannheim.korap.service;
-
-import java.util.ArrayList;
-import java.util.Set;
-import java.util.regex.Pattern;
-
-import javax.annotation.PostConstruct;
-import javax.ws.rs.core.HttpHeaders;
-import javax.ws.rs.core.MultivaluedMap;
-import javax.ws.rs.core.UriBuilder;
-
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-import com.sun.jersey.core.util.MultivaluedMapImpl;
-
-import de.ids_mannheim.korap.authentication.AuthenticationManager;
-import de.ids_mannheim.korap.config.KustvaktConfiguration;
-import de.ids_mannheim.korap.exceptions.KustvaktException;
-import de.ids_mannheim.korap.exceptions.StatusCodes;
-import de.ids_mannheim.korap.query.serialize.MetaQueryBuilder;
-import de.ids_mannheim.korap.query.serialize.QuerySerializer;
-import de.ids_mannheim.korap.resource.rewrite.RewriteHandler;
-import de.ids_mannheim.korap.user.User;
-import de.ids_mannheim.korap.user.User.CorpusAccess;
-import de.ids_mannheim.korap.web.ClientsHandler;
-import de.ids_mannheim.korap.web.SearchKrill;
-
-@Service
-public class SearchService {
-
-    private static Logger jlog = LogManager.getLogger(SearchService.class);
-
-    @Autowired
-    private KustvaktConfiguration config;
-
-    @Autowired
-    private AuthenticationManager authenticationManager;
-
-    @Autowired
-    private RewriteHandler rewriteHandler;
-
-    @Autowired
-    private SearchKrill searchKrill;
-
-    private ClientsHandler graphDBhandler;
-
-    @PostConstruct
-    private void doPostConstruct () {
-        this.rewriteHandler.defaultRewriteConstraints();
-
-        UriBuilder builder = UriBuilder.fromUri("http://10.0.10.13").port(9997);
-        this.graphDBhandler = new ClientsHandler(builder.build());
-    }
-
-    @SuppressWarnings("unchecked")
-    public String serializeQuery (String q, String ql, String v, String cq,
-            Integer pageIndex, Integer startPage, Integer pageLength,
-            String context, Boolean cutoff) throws KustvaktException {
-        QuerySerializer ss = new QuerySerializer().setQuery(q, ql, v);
-        if (cq != null) ss.setCollection(cq);
-
-        MetaQueryBuilder meta = new MetaQueryBuilder();
-        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);
-        meta.addEntry("cutOff", cutoff);
-
-        ss.setMeta(meta.raw());
-        // return ss.toJSON();
-
-        String query = ss.toJSON();
-        query = rewriteHandler.processQuery(ss.toJSON(), null);
-        return query;
-    }
-
-    private User createUser (String username, HttpHeaders headers)
-            throws KustvaktException {
-        User user = authenticationManager.getUser(username);
-        authenticationManager.setAccessAndLocation(user, headers);
-        if (user != null) {
-            jlog.debug(
-                    "Debug: /getMatchInfo/: location=" + user.locationtoString()
-                            + ", access=" + user.accesstoString());
-        }
-        return user;
-    }
-
-    public String search (String jsonld) {
-        // MH: todo: should be possible to add the meta part to
-        // the query serialization
-        // User user = controller.getUser(ctx.getUsername());
-        // jsonld = this.processor.processQuery(jsonld, user);
-        return searchKrill.search(jsonld);
-    }
-
-    @SuppressWarnings("unchecked")
-    public String search (String engine, String username, HttpHeaders headers,
-            String q, String ql, String v, String cq, Set<String> fields,
-            Integer pageIndex, Integer pageInteger, String ctx,
-            Integer pageLength, Boolean cutoff) throws KustvaktException {
-
-        KustvaktConfiguration.BACKENDS eng = this.config.chooseBackend(engine);
-        User user = createUser(username, headers);
-
-        QuerySerializer serializer = new QuerySerializer();
-        serializer.setQuery(q, ql, v);
-        if (cq != null) serializer.setCollection(cq);
-
-        MetaQueryBuilder meta = createMetaQuery(pageIndex, pageInteger, ctx,
-                pageLength, cutoff);
-        if (fields != null && !fields.isEmpty())
-            meta.addEntry("fields", fields);
-        serializer.setMeta(meta.raw());
-
-        // There is an error in query processing
-        // - either query, corpus or meta
-        if (serializer.hasErrors()) {
-            throw new KustvaktException(serializer.toJSON());
-        }
-
-        String query =
-                this.rewriteHandler.processQuery(serializer.toJSON(), user);
-        jlog.info("the serialized query " + query);
-
-        String result;
-        if (eng.equals(KustvaktConfiguration.BACKENDS.NEO4J)) {
-            result = searchNeo4J(query, pageLength, meta, false);
-        }
-        else {
-            result = searchKrill.search(query);
-        }
-        // jlog.debug("Query result: " + result);
-        return result;
-
-    }
-
-    private MetaQueryBuilder createMetaQuery (Integer pageIndex,
-            Integer pageInteger, String ctx, Integer pageLength,
-            Boolean cutoff) {
-        MetaQueryBuilder meta = new MetaQueryBuilder();
-        meta.addEntry("startIndex", pageIndex);
-        meta.addEntry("startPage", pageInteger);
-        meta.setSpanContext(ctx);
-        meta.addEntry("count", pageLength);
-        // todo: what happened to cutoff?
-        meta.addEntry("cutOff", cutoff);
-        // meta.addMeta(pageIndex, pageInteger, pageLength, ctx,
-        // cutoff);
-        // fixme: should only apply to CQL queries per default!
-        // meta.addEntry("itemsPerResource", 1);
-        return meta;
-    }
-
-    private String searchNeo4J (String query, int pageLength,
-            MetaQueryBuilder meta, boolean raw) throws KustvaktException {
-
-        if (raw) {
-            throw new KustvaktException(StatusCodes.ILLEGAL_ARGUMENT,
-                    "raw not supported!");
-        }
-
-        MultivaluedMap<String, String> map = new MultivaluedMapImpl();
-        map.add("q", query);
-        map.add("count", String.valueOf(pageLength));
-        map.add("lctxs", String.valueOf(meta.getSpanContext().getLeftSize()));
-        map.add("rctxs", String.valueOf(meta.getSpanContext().getRightSize()));
-        return this.graphDBhandler.getResponse(map, "distKwic");
-
-    }
-
-    public String retrieveMatchInfo (String corpusId, String docId,
-            String textId, String matchId, Set<String> foundries,
-            String username, HttpHeaders headers, Set<String> layers,
-            boolean spans, boolean highlights) throws KustvaktException {
-        String matchid =
-                searchKrill.getMatchId(corpusId, docId, textId, matchId);
-
-        User user = createUser(username, headers);
-        Pattern p = null;
-        if (user != null) {
-            CorpusAccess corpusAccess = user.getCorpusAccess();
-            switch (corpusAccess) {
-                case PUB:
-                    p = config.getPublicLicensePattern();
-                    break;
-                case ALL:
-                    p = config.getAllLicensePattern();
-                    break;
-                default: // FREE
-                    p = config.getFreeLicensePattern();
-                    break;
-            }
-        }
-        boolean match_only = foundries == null || foundries.isEmpty();
-        String results;
-        try {
-            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();
-                }
-                else {
-                    foundryList.addAll(foundries);
-                    layerList.addAll(layers);
-                }
-
-                results = searchKrill.getMatch(matchid, foundryList, layerList,
-                        spans, highlights, true, p);
-            }
-            else {
-                results = searchKrill.getMatch(matchid, p);
-            }
-        }
-        catch (Exception e) {
-            jlog.error("Exception in the MatchInfo service encountered!", e);
-            throw new KustvaktException(StatusCodes.ILLEGAL_ARGUMENT,
-                    e.getMessage());
-        }
-        jlog.debug("MatchInfo results: " + results);
-        return results;
-    }
-
-    public String retrieveDocMetadata (String corpusId, String docId,
-            String textId) {
-        String textSigle = searchKrill.getTextSigle(corpusId, docId, textId);
-        return searchKrill.getFields(textSigle);
-    }
-
-    public String getCollocationBase (String query) throws KustvaktException {
-        return graphDBhandler.getResponse("distCollo", "q", query);
-    }
-}
diff --git a/full/src/main/java/de/ids_mannheim/korap/service/VirtualCorpusService.java b/full/src/main/java/de/ids_mannheim/korap/service/VirtualCorpusService.java
index a9a1fb4..8ed6c09 100644
--- a/full/src/main/java/de/ids_mannheim/korap/service/VirtualCorpusService.java
+++ b/full/src/main/java/de/ids_mannheim/korap/service/VirtualCorpusService.java
@@ -56,7 +56,7 @@
     private static Logger jlog =
             LogManager.getLogger(VirtualCorpusService.class);
 
-    public static Pattern wordPattern = Pattern.compile("[-\\w ]+");
+    public static Pattern wordPattern = Pattern.compile("[-\\w. ]+");
 
     @Autowired
     private VirtualCorpusDao vcDao;
diff --git a/full/src/main/java/de/ids_mannheim/korap/web/KustvaktResponseHandler.java b/full/src/main/java/de/ids_mannheim/korap/web/KustvaktResponseHandler.java
deleted file mode 100644
index bce194c..0000000
--- a/full/src/main/java/de/ids_mannheim/korap/web/KustvaktResponseHandler.java
+++ /dev/null
@@ -1,68 +0,0 @@
-package de.ids_mannheim.korap.web;
-
-import java.util.EnumSet;
-
-import javax.ws.rs.WebApplicationException;
-import javax.ws.rs.core.HttpHeaders;
-import javax.ws.rs.core.Response;
-import javax.ws.rs.core.Response.ResponseBuilder;
-
-import de.ids_mannheim.korap.constant.AuthenticationScheme;
-import de.ids_mannheim.korap.exceptions.KustvaktException;
-import de.ids_mannheim.korap.exceptions.StatusCodes;
-import de.ids_mannheim.korap.interfaces.db.AuditingIface;
-
-/**
- * KustvaktResponseHandler includes exceptions regarding
- * authorization.
- * 
- * @author margaretha
- *
- */
-public class KustvaktResponseHandler extends CoreResponseHandler {
-
-    public KustvaktResponseHandler (AuditingIface iface) {
-        super(iface);
-    }
-
-    @Override
-    public WebApplicationException throwit (KustvaktException e) {
-        Response r;
-
-        // KustvaktException just wraps another exception
-        if (e.getStatusCode() == null && e.hasNotification()) {
-            r = Response.status(Response.Status.BAD_REQUEST)
-                    .entity(e.getNotification()).build();
-        }
-        else if (e.getStatusCode() == StatusCodes.USER_REAUTHENTICATION_REQUIRED
-                || e.getStatusCode() == StatusCodes.AUTHORIZATION_FAILED
-                || e.getStatusCode() >= StatusCodes.AUTHENTICATION_FAILED) {
-            String notification = buildNotification(e.getStatusCode(),
-                    e.getMessage(), e.getEntity());
-            r = createUnauthenticatedResponse(notification);
-        }
-        else if (e.hasNotification()) {
-            r = Response.status(getStatus(e.getStatusCode()))
-                    .entity(e.getNotification()).build();
-        }
-        else {
-            String notification = buildNotification(e.getStatusCode(),
-                    e.getMessage(), e.getEntity());
-            r = Response.status(getStatus(e.getStatusCode()))
-                    .entity(notification).build();
-        }
-        return new WebApplicationException(r);
-    }
-
-    public Response createUnauthenticatedResponse (String notification) {
-        ResponseBuilder builder = Response.status(Response.Status.UNAUTHORIZED);
-
-        for (AuthenticationScheme s : EnumSet
-                .allOf(AuthenticationScheme.class)) {
-            builder = builder.header(HttpHeaders.WWW_AUTHENTICATE,
-                    s.displayName() + " realm=\"Kustvakt\"");
-        }
-
-        return builder.entity(notification).build();
-    }
-}
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
deleted file mode 100644
index 06b9957..0000000
--- a/full/src/main/java/de/ids_mannheim/korap/web/controller/AnnotationController.java
+++ /dev/null
@@ -1,131 +0,0 @@
-package de.ids_mannheim.korap.web.controller;
-
-import java.io.IOException;
-import java.util.List;
-
-import javax.ws.rs.Consumes;
-import javax.ws.rs.GET;
-import javax.ws.rs.POST;
-import javax.ws.rs.Path;
-import javax.ws.rs.Produces;
-import javax.ws.rs.core.MediaType;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Controller;
-
-import com.fasterxml.jackson.databind.JsonNode;
-import com.sun.jersey.spi.container.ResourceFilters;
-
-import de.ids_mannheim.korap.dto.FoundryDto;
-import de.ids_mannheim.korap.dto.LayerDto;
-import de.ids_mannheim.korap.exceptions.KustvaktException;
-import de.ids_mannheim.korap.exceptions.StatusCodes;
-import de.ids_mannheim.korap.service.AnnotationService;
-import de.ids_mannheim.korap.utils.JsonUtils;
-import de.ids_mannheim.korap.web.KustvaktResponseHandler;
-import de.ids_mannheim.korap.web.APIVersionFilter;
-import de.ids_mannheim.korap.web.filter.DemoUserFilter;
-import de.ids_mannheim.korap.web.filter.PiwikFilter;
-
-/**
- * Provides services regarding annotation related information.
- * 
- * @author margaretha
- *
- */
-@Controller
-@Path("/{version}/annotation/")
-@ResourceFilters({APIVersionFilter.class, DemoUserFilter.class, PiwikFilter.class })
-@Produces(MediaType.APPLICATION_JSON + ";charset=utf-8")
-public class AnnotationController {
-
-    @Autowired
-    private KustvaktResponseHandler kustvaktResponseHandler;
-
-    @Autowired
-    private AnnotationService annotationService;
-
-    /**
-     * Returns information about all supported layers
-     * 
-     * @return a json serialization of all supported layers
-     */
-    @GET
-    @Path("layers")
-    public List<LayerDto> getLayers () {
-        return annotationService.getLayerDtos();
-    }
-
-
-    /**
-     * Returns a list of foundry descriptions.
-     * 
-     * @param codes
-     *            foundry-layer code or a Kleene-star
-     * @param language
-     *            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 List<FoundryDto> getFoundryDescriptions (String json) {
-        if (json == null || json.isEmpty()) {
-            throw kustvaktResponseHandler
-                    .throwit(new KustvaktException(StatusCodes.MISSING_PARAMETER,
-                            "Missing a json string.", ""));
-        }
-
-        JsonNode node;
-        try {
-            node = JsonUtils.readTree(json);
-        }
-        catch (KustvaktException e1) {
-            throw kustvaktResponseHandler.throwit(e1);
-        }
-
-        String language;
-        if (!node.has("language")) {
-            language = "en";
-        }
-        else {
-            language = node.get("language").asText();
-            if (language == null || language.isEmpty()) {
-                language = "en";
-            }
-            else if (!(language.equals("en") || language.equals("de"))) {
-                throw kustvaktResponseHandler.throwit(
-                        new KustvaktException(StatusCodes.UNSUPPORTED_VALUE,
-                                "Unsupported value:", language));
-            }
-        }
-
-        List<String> codes;
-        try {
-            codes = JsonUtils.convert(node.get("codes"), List.class);
-        }
-        catch (IOException | NullPointerException e) {
-            throw kustvaktResponseHandler.throwit(new KustvaktException(
-                    StatusCodes.INVALID_ARGUMENT, "Bad argument:", json));
-        }
-        if (codes == null) {
-            throw kustvaktResponseHandler.throwit(
-                    new KustvaktException(StatusCodes.MISSING_ATTRIBUTE,
-                            "Missing attribute:", "codes"));
-        }
-        else if (codes.isEmpty()) {
-            throw kustvaktResponseHandler
-                    .throwit(new KustvaktException(StatusCodes.NO_RESULT_FOUND,
-                            "No result found.", "codes:[]"));
-        }
-
-        try {
-            return annotationService.getFoundryDtos(codes, language);
-        }
-        catch (KustvaktException e) {
-            throw kustvaktResponseHandler.throwit(e);
-        }
-    }
-}
-
diff --git a/full/src/main/java/de/ids_mannheim/korap/web/controller/OAuth2Controller.java b/full/src/main/java/de/ids_mannheim/korap/web/controller/OAuth2Controller.java
index e8047c2..d86a2b1 100644
--- a/full/src/main/java/de/ids_mannheim/korap/web/controller/OAuth2Controller.java
+++ b/full/src/main/java/de/ids_mannheim/korap/web/controller/OAuth2Controller.java
@@ -26,8 +26,8 @@
 
 import com.sun.jersey.spi.container.ResourceFilters;
 
+import de.ids_mannheim.korap.constant.OAuth2Scope;
 import de.ids_mannheim.korap.exceptions.KustvaktException;
-import de.ids_mannheim.korap.oauth2.constant.OAuth2Scope;
 import de.ids_mannheim.korap.oauth2.oltu.OAuth2AuthorizationRequest;
 import de.ids_mannheim.korap.oauth2.oltu.OAuth2RevokeTokenRequest;
 import de.ids_mannheim.korap.oauth2.oltu.service.OltuAuthorizationService;
diff --git a/full/src/main/java/de/ids_mannheim/korap/web/controller/OAuth2WithOpenIdController.java b/full/src/main/java/de/ids_mannheim/korap/web/controller/OAuth2WithOpenIdController.java
index 761c3f6..6eae61c 100644
--- a/full/src/main/java/de/ids_mannheim/korap/web/controller/OAuth2WithOpenIdController.java
+++ b/full/src/main/java/de/ids_mannheim/korap/web/controller/OAuth2WithOpenIdController.java
@@ -31,8 +31,8 @@
 import com.nimbusds.oauth2.sdk.id.State;
 import com.sun.jersey.spi.container.ResourceFilters;
 
+import de.ids_mannheim.korap.constant.OAuth2Scope;
 import de.ids_mannheim.korap.exceptions.KustvaktException;
-import de.ids_mannheim.korap.oauth2.constant.OAuth2Scope;
 import de.ids_mannheim.korap.oauth2.openid.OpenIdConfiguration;
 import de.ids_mannheim.korap.oauth2.openid.OpenIdHttpRequestWrapper;
 import de.ids_mannheim.korap.oauth2.openid.service.JWKService;
diff --git a/full/src/main/java/de/ids_mannheim/korap/web/controller/OAuthClientController.java b/full/src/main/java/de/ids_mannheim/korap/web/controller/OAuthClientController.java
index ebcfd51..ca7e168 100644
--- a/full/src/main/java/de/ids_mannheim/korap/web/controller/OAuthClientController.java
+++ b/full/src/main/java/de/ids_mannheim/korap/web/controller/OAuthClientController.java
@@ -18,8 +18,8 @@
 
 import com.sun.jersey.spi.container.ResourceFilters;
 
+import de.ids_mannheim.korap.constant.OAuth2Scope;
 import de.ids_mannheim.korap.exceptions.KustvaktException;
-import de.ids_mannheim.korap.oauth2.constant.OAuth2Scope;
 import de.ids_mannheim.korap.oauth2.dto.OAuth2ClientDto;
 import de.ids_mannheim.korap.oauth2.dto.OAuth2ClientInfoDto;
 import de.ids_mannheim.korap.oauth2.service.OAuth2ClientService;
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
deleted file mode 100644
index e65ae07..0000000
--- a/full/src/main/java/de/ids_mannheim/korap/web/controller/SearchController.java
+++ /dev/null
@@ -1,327 +0,0 @@
-package de.ids_mannheim.korap.web.controller;// package
-                                             // de.ids_mannheim.korap.ext.web;
-
-import java.util.HashSet;
-import java.util.Locale;
-import java.util.Set;
-
-import javax.ws.rs.GET;
-import javax.ws.rs.POST;
-import javax.ws.rs.Path;
-import javax.ws.rs.PathParam;
-import javax.ws.rs.Produces;
-import javax.ws.rs.QueryParam;
-import javax.ws.rs.core.Context;
-import javax.ws.rs.core.HttpHeaders;
-import javax.ws.rs.core.MediaType;
-import javax.ws.rs.core.Response;
-import javax.ws.rs.core.SecurityContext;
-
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Controller;
-
-import com.sun.jersey.spi.container.ResourceFilters;
-
-import de.ids_mannheim.korap.exceptions.KustvaktException;
-import de.ids_mannheim.korap.oauth2.constant.OAuth2Scope;
-import de.ids_mannheim.korap.oauth2.service.OAuth2ScopeService;
-import de.ids_mannheim.korap.security.context.TokenContext;
-import de.ids_mannheim.korap.service.SearchService;
-import de.ids_mannheim.korap.web.KustvaktResponseHandler;
-import de.ids_mannheim.korap.web.APIVersionFilter;
-import de.ids_mannheim.korap.web.filter.AuthenticationFilter;
-import de.ids_mannheim.korap.web.filter.DemoUserFilter;
-import de.ids_mannheim.korap.web.filter.PiwikFilter;
-
-/**
- * 
- * @author hanl, margaretha, diewald
- * @date 29/01/2014
- * @lastUpdate 09/07/2018
- * 
- */
-@Controller
-@Path("/")
-@ResourceFilters({ APIVersionFilter.class, AuthenticationFilter.class,
-        DemoUserFilter.class, PiwikFilter.class })
-@Produces(MediaType.APPLICATION_JSON + ";charset=utf-8")
-public class SearchController {
-
-    private static Logger jlog = LogManager.getLogger(SearchController.class);
-
-    @Autowired
-    private KustvaktResponseHandler kustvaktResponseHandler;
-
-    @Autowired
-    private SearchService searchService;
-    @Autowired
-    private OAuth2ScopeService scopeService;
-
-    /**
-     * Builds a json query serialization from the given parameters.
-     * 
-     * @param locale
-     * @param securityContext
-     * @param q
-     *            query string
-     * @param ql
-     *            query language
-     * @param v
-     *            version
-     * @param context
-     * @param cutoff
-     *            true if the number of results should be limited
-     * @param pageLength
-     *            number of results per page
-     * @param pageIndex
-     * @param startPage
-     * @param cq
-     *            corpus query
-     * @return
-     */
-    // ref query parameter removed!
-    @GET
-    @Path("{version}/query")
-    public Response serializeQuery (@Context Locale locale,
-            @Context SecurityContext securityContext, @QueryParam("q") String q,
-            @QueryParam("ql") String ql, @QueryParam("v") String v,
-            @QueryParam("context") String context,
-            @QueryParam("cutoff") Boolean cutoff,
-            @QueryParam("count") Integer pageLength,
-            @QueryParam("offset") Integer pageIndex,
-            @QueryParam("page") Integer startPage,
-            @QueryParam("cq") String cq) {
-        TokenContext ctx = (TokenContext) securityContext.getUserPrincipal();
-        try {
-            scopeService.verifyScope(ctx, OAuth2Scope.SERIALIZE_QUERY);
-            String result = searchService.serializeQuery(q, ql, v, cq,
-                    pageIndex, startPage, pageLength, context, cutoff);
-            jlog.debug("Query: " + result);
-            return Response.ok(result).build();
-        }
-        catch (KustvaktException e) {
-            throw kustvaktResponseHandler.throwit(e);
-        }
-    }
-
-    @POST
-    @Path("{version}/search")
-    public Response searchPost (@Context SecurityContext context,
-            @Context Locale locale, @QueryParam("engine") String engine,
-            String jsonld) {
-        TokenContext ctx = (TokenContext) context.getUserPrincipal();
-        try {
-            scopeService.verifyScope(ctx, OAuth2Scope.SEARCH);
-        }
-        catch (KustvaktException e) {
-            throw kustvaktResponseHandler.throwit(e);
-        }
-
-        jlog.debug("Serialized search: " + jsonld);
-        String result = searchService.search(jsonld);
-        jlog.debug("The result set: " + result);
-        return Response.ok(result).build();
-    }
-
-    @GET
-    @Path("{version}/search")
-    public Response searchGet (@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("fields") Set<String> fields,
-            @QueryParam("cq") String cq, @QueryParam("engine") String engine) {
-
-        TokenContext context =
-                (TokenContext) securityContext.getUserPrincipal();
-
-        String result;
-        try {
-            scopeService.verifyScope(context, OAuth2Scope.SEARCH);
-            result = searchService.search(engine, context.getUsername(),
-                    headers, q, ql, v, cq, fields, pageIndex, pageInteger, ctx,
-                    pageLength, cutoff);
-        }
-        catch (KustvaktException e) {
-            throw kustvaktResponseHandler.throwit(e);
-        }
-
-        return Response.ok(result).build();
-    }
-
-    @GET
-    @Path("{version}/corpus/{corpusId}/{docId}/{textId}/{matchId}/matchInfo")
-    public Response getMatchInfo (@Context SecurityContext ctx,
-            @Context HttpHeaders headers, @Context Locale locale,
-            @PathParam("corpusId") String corpusId,
-            @PathParam("docId") String docId,
-            @PathParam("textId") String textId,
-            @PathParam("matchId") String matchId,
-            @QueryParam("foundry") Set<String> foundries,
-            @QueryParam("layer") Set<String> layers,
-            @QueryParam("spans") Boolean spans, 
-            // Highlights may also be a list of valid highlight classes
-            @QueryParam("hls") Boolean highlights) throws KustvaktException {
-
-        TokenContext tokenContext = (TokenContext) ctx.getUserPrincipal();
-        scopeService.verifyScope(tokenContext, OAuth2Scope.MATCH_INFO);
-        spans = spans != null ? spans : false;
-        highlights = highlights != null ? highlights : false;
-        if (layers == null || layers.isEmpty()) layers = new HashSet<>();
-
-        String results = searchService.retrieveMatchInfo(corpusId, docId,
-                textId, matchId, foundries, tokenContext.getUsername(), headers,
-                layers, spans, highlights);
-        return Response.ok(results).build();
-    }
-
-    /*
-     * Returns the meta data fields of a certain document
-     */
-    // This is currently identical to LiteService#getMeta(),
-    // but may need auth code to work following policies
-    @GET
-    @Path("{version}/corpus/{corpusId}/{docId}/{textId}")
-    public Response getMetadata (@PathParam("corpusId") String corpusId,
-            @PathParam("docId") String docId, @PathParam("textId") String textId
-    // @QueryParam("fields") Set<String> fields
-    ) throws KustvaktException {
-        String results =
-                searchService.retrieveDocMetadata(corpusId, docId, textId);
-        return Response.ok(results).build();
-    }
-
-    @POST
-    @Path("{version}/colloc")
-    public Response getCollocationBase (@QueryParam("q") String query) {
-        String result;
-        try {
-            result = searchService.getCollocationBase(query);
-        }
-        catch (KustvaktException e) {
-            throw kustvaktResponseHandler.throwit(e);
-        }
-        return Response.ok(result).build();
-    }
-
-    // @GET
-    // @Path("colloc")
-    // public Response getCollocationsAll(@Context SecurityContext
-    // ctx,
-    // @Context Locale locale, @QueryParam("props") String properties,
-    // @QueryParam("sfskip") Integer sfs,
-    // @QueryParam("sflimit") Integer limit, @QueryParam("q") String
-    // query,
-    // @QueryParam("ql") String ql, @QueryParam("context") Integer
-    // context,
-    // @QueryParam("foundry") String foundry,
-    // @QueryParam("paths") Boolean wPaths) {
-    // TokenContext tokenContext = (TokenContext)
-    // ctx.getUserPrincipal();
-    // ColloQuery.ColloQueryBuilder builder;
-    // KoralCollectionQueryBuilder cquery = new
-    // KoralCollectionQueryBuilder();
-    // String result;
-    // try {
-    // User user = controller.getUser(tokenContext.getUsername());
-    // Set<VirtualCollection> resources = ResourceFinder
-    // .search(user, VirtualCollection.class);
-    // for (KustvaktResource c : resources)
-    // cquery.addResource(((VirtualCollection) c).getQuery());
-    //
-    // builder = functions
-    // .buildCollocations(query, ql, properties, context, limit,
-    // sfs, foundry, new ArrayList<Dependency>(), wPaths,
-    // cquery);
-    //
-    // result = graphDBhandler
-    // .getResponse("distCollo", "q", builder.build().toJSON());
-    // }catch (KustvaktException e) {
-    // throw KustvaktResponseHandler.throwit(e);
-    // }catch (JsonProcessingException e) {
-    // throw
-    // KustvaktResponseHandler.throwit(StatusCodes.ILLEGAL_ARGUMENT);
-    // }
-    // return Response.ok(result).build();
-    // }
-
-    // /**
-    // * @param locale
-    // * @param properties a json object string containing field, op
-    // and value
-    // for the query
-    // * @param query
-    // * @param context
-    // * @return
-    // */
-    // @GET
-    // @Path("{type}/{id}/colloc")
-    // public Response getCollocations(@Context SecurityContext ctx,
-    // @Context Locale locale, @QueryParam("props") String properties,
-    // @QueryParam("sfskip") Integer sfs,
-    // @QueryParam("sflimit") Integer limit, @QueryParam("q") String
-    // query,
-    // @QueryParam("ql") String ql, @QueryParam("context") Integer
-    // context,
-    // @QueryParam("foundry") String foundry,
-    // @QueryParam("paths") Boolean wPaths, @PathParam("id") String
-    // id,
-    // @PathParam("type") String type) {
-    // ColloQuery.ColloQueryBuilder builder;
-    // type = StringUtils.normalize(type);
-    // id = StringUtils.decodeHTML(id);
-    // TokenContext tokenContext = (TokenContext)
-    // ctx.getUserPrincipal();
-    // String result;
-    // try {
-    // KoralCollectionQueryBuilder cquery = new
-    // KoralCollectionQueryBuilder();
-    // try {
-    // User user = controller.getUser(tokenContext.getUsername());
-    //
-    // KustvaktResource resource = this.resourceHandler
-    // .findbyStrId(id, user, type);
-    //
-    // if (resource instanceof VirtualCollection)
-    // cquery.addResource(
-    // ((VirtualCollection) resource).getQuery());
-    // else if (resource instanceof Corpus)
-    // cquery.addMetaFilter("corpusID",
-    // resource.getPersistentID());
-    // else
-    // throw KustvaktResponseHandler
-    // .throwit(StatusCodes.ILLEGAL_ARGUMENT,
-    // "Type parameter not supported", type);
-    //
-    // }catch (KustvaktException e) {
-    // throw KustvaktResponseHandler.throwit(e);
-    // }catch (NumberFormatException ex) {
-    // throw KustvaktResponseHandler
-    // .throwit(StatusCodes.ILLEGAL_ARGUMENT);
-    // }
-    //
-    // builder = functions
-    // .buildCollocations(query, ql, properties, context, limit,
-    // sfs, foundry, new ArrayList<Dependency>(), wPaths,
-    // cquery);
-    //
-    // result = graphDBhandler
-    // .getResponse("distCollo", "q", builder.build().toJSON());
-    //
-    // }catch (JsonProcessingException e) {
-    // throw
-    // KustvaktResponseHandler.throwit(StatusCodes.ILLEGAL_ARGUMENT);
-    // }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/StatisticController.java b/full/src/main/java/de/ids_mannheim/korap/web/controller/StatisticController.java
deleted file mode 100644
index 43970be..0000000
--- a/full/src/main/java/de/ids_mannheim/korap/web/controller/StatisticController.java
+++ /dev/null
@@ -1,94 +0,0 @@
-package de.ids_mannheim.korap.web.controller;
-
-import java.util.Locale;
-
-import javax.ws.rs.GET;
-import javax.ws.rs.Path;
-import javax.ws.rs.Produces;
-import javax.ws.rs.QueryParam;
-import javax.ws.rs.core.Context;
-import javax.ws.rs.core.MediaType;
-import javax.ws.rs.core.Response;
-import javax.ws.rs.core.SecurityContext;
-
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Controller;
-
-import com.sun.jersey.spi.container.ResourceFilters;
-
-import de.ids_mannheim.korap.exceptions.KustvaktException;
-import de.ids_mannheim.korap.exceptions.StatusCodes;
-import de.ids_mannheim.korap.utils.KoralCollectionQueryBuilder;
-import de.ids_mannheim.korap.web.CoreResponseHandler;
-import de.ids_mannheim.korap.web.SearchKrill;
-import de.ids_mannheim.korap.web.APIVersionFilter;
-import de.ids_mannheim.korap.web.filter.PiwikFilter;
-
-/**
- * Web services related to statistics
- * 
- * @author hanl
- * @author margaretha
- *
- * @date 08/11/2017
- * 
- */
-@Controller
-@Path("{version}/statistics/")
-@ResourceFilters({APIVersionFilter.class, PiwikFilter.class })
-@Produces(MediaType.APPLICATION_JSON + ";charset=utf-8")
-public class StatisticController {
-
-
-    private static Logger jlog =
-            LogManager.getLogger(StatisticController.class);
-    @Autowired
-    private CoreResponseHandler kustvaktResponseHandler;
-    @Autowired
-    private SearchKrill searchKrill;
-
-
-    /**
-     * Returns statistics of the virtual corpus defined by the given
-     * corpusQuery parameter.
-     * 
-     * @param context
-     *            SecurityContext
-     * @param locale
-     *            Locale
-     * @param corpusQuery
-     *            a collection query specifying a virtual corpus
-     * @return statistics of the virtual corpus defined by the given
-     *         corpusQuery parameter.
-     */
-    @GET
-    public Response getStatistics (@Context SecurityContext context,
-            @Context Locale locale,
-            @QueryParam("corpusQuery") String corpusQuery) {
-
-        KoralCollectionQueryBuilder builder = new KoralCollectionQueryBuilder();
-
-		String stats;
-		if (corpusQuery != null && !corpusQuery.isEmpty()) {
-			builder.with(corpusQuery);
-			String json = null;
-			try {
-				json = builder.toJSON();
-			}
-			catch (KustvaktException e) {
-				throw kustvaktResponseHandler.throwit(e);
-			}
-			stats = searchKrill.getStatistics(json);
-		}
-		else {
-			stats = searchKrill.getStatistics(null);
-		};
-
-        if (stats.contains("-1"))
-            throw kustvaktResponseHandler.throwit(StatusCodes.NO_RESULT_FOUND);
-        jlog.debug("Stats: " + stats);
-        return Response.ok(stats).build();
-    }
-}
diff --git a/full/src/main/java/de/ids_mannheim/korap/web/controller/UserGroupController.java b/full/src/main/java/de/ids_mannheim/korap/web/controller/UserGroupController.java
index 6c9427d..c356d78 100644
--- a/full/src/main/java/de/ids_mannheim/korap/web/controller/UserGroupController.java
+++ b/full/src/main/java/de/ids_mannheim/korap/web/controller/UserGroupController.java
@@ -21,11 +21,11 @@
 
 import com.sun.jersey.spi.container.ResourceFilters;
 
+import de.ids_mannheim.korap.constant.OAuth2Scope;
 import de.ids_mannheim.korap.constant.UserGroupStatus;
 import de.ids_mannheim.korap.dto.UserGroupDto;
 import de.ids_mannheim.korap.exceptions.KustvaktException;
 import de.ids_mannheim.korap.exceptions.StatusCodes;
-import de.ids_mannheim.korap.oauth2.constant.OAuth2Scope;
 import de.ids_mannheim.korap.oauth2.service.OAuth2ScopeService;
 import de.ids_mannheim.korap.security.context.TokenContext;
 import de.ids_mannheim.korap.service.UserGroupService;
diff --git a/full/src/main/java/de/ids_mannheim/korap/web/controller/VirtualCorpusController.java b/full/src/main/java/de/ids_mannheim/korap/web/controller/VirtualCorpusController.java
index 553bfb3..12ce7bf 100644
--- a/full/src/main/java/de/ids_mannheim/korap/web/controller/VirtualCorpusController.java
+++ b/full/src/main/java/de/ids_mannheim/korap/web/controller/VirtualCorpusController.java
@@ -21,12 +21,12 @@
 
 import com.sun.jersey.spi.container.ResourceFilters;
 
+import de.ids_mannheim.korap.constant.OAuth2Scope;
 import de.ids_mannheim.korap.constant.VirtualCorpusAccessStatus;
 import de.ids_mannheim.korap.constant.VirtualCorpusType;
 import de.ids_mannheim.korap.dto.VirtualCorpusAccessDto;
 import de.ids_mannheim.korap.dto.VirtualCorpusDto;
 import de.ids_mannheim.korap.exceptions.KustvaktException;
-import de.ids_mannheim.korap.oauth2.constant.OAuth2Scope;
 import de.ids_mannheim.korap.oauth2.service.OAuth2ScopeService;
 import de.ids_mannheim.korap.security.context.TokenContext;
 import de.ids_mannheim.korap.service.VirtualCorpusService;
diff --git a/full/src/main/java/de/ids_mannheim/korap/web/filter/AuthenticationFilter.java b/full/src/main/java/de/ids_mannheim/korap/web/filter/AuthenticationFilter.java
deleted file mode 100644
index d0e4562..0000000
--- a/full/src/main/java/de/ids_mannheim/korap/web/filter/AuthenticationFilter.java
+++ /dev/null
@@ -1,132 +0,0 @@
-package de.ids_mannheim.korap.web.filter;
-
-import javax.ws.rs.ext.Provider;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-
-import com.sun.jersey.spi.container.ContainerRequest;
-import com.sun.jersey.spi.container.ContainerRequestFilter;
-import com.sun.jersey.spi.container.ContainerResponseFilter;
-import com.sun.jersey.spi.container.ResourceFilter;
-
-import de.ids_mannheim.korap.authentication.AuthenticationManager;
-import de.ids_mannheim.korap.authentication.http.AuthorizationData;
-import de.ids_mannheim.korap.authentication.http.HttpAuthorizationHandler;
-import de.ids_mannheim.korap.constant.TokenType;
-import de.ids_mannheim.korap.exceptions.KustvaktException;
-import de.ids_mannheim.korap.exceptions.StatusCodes;
-import de.ids_mannheim.korap.security.context.KustvaktContext;
-import de.ids_mannheim.korap.security.context.TokenContext;
-import de.ids_mannheim.korap.utils.TimeUtils;
-import de.ids_mannheim.korap.web.KustvaktResponseHandler;
-
-/**
- * @author hanl, margaretha
- * @date 28/01/2014
- * @last update 12/2017
- */
-@Component
-@Provider
-public class AuthenticationFilter
-        implements ContainerRequestFilter, ResourceFilter {
-
-    @Autowired
-    private HttpAuthorizationHandler authorizationHandler;
-
-    @Autowired
-    private AuthenticationManager authenticationManager;
-
-    @Autowired
-    private KustvaktResponseHandler kustvaktResponseHandler;
-
-    @Override
-    public ContainerRequest filter (ContainerRequest request) {
-        String host = request.getHeaderValue(ContainerRequest.HOST);
-        String ua = request.getHeaderValue(ContainerRequest.USER_AGENT);
-
-        String authorization =
-                request.getHeaderValue(ContainerRequest.AUTHORIZATION);
-
-        if (authorization != null && !authorization.isEmpty()) {
-            TokenContext context = null;
-            AuthorizationData authData;
-            try {
-                authData = authorizationHandler
-                        .parseAuthorizationHeaderValue(authorization);
-
-                switch (authData.getAuthenticationScheme()) {
-                    // EM: For testing only, must be disabled for
-                    // production
-                    case BASIC:
-                        context = authenticationManager.getTokenContext(
-                                TokenType.BASIC, authData.getToken(), host, ua);
-                        break;
-                    // EM: has not been tested yet
-                    // case SESSION:
-                    // context =
-                    // authenticationManager.getTokenContext(
-                    // TokenType.SESSION, authData.getToken(), host,
-                    // ua);
-                    // break;
-
-                    // OAuth2 authentication scheme
-                    case BEARER:
-                        context = authenticationManager.getTokenContext(
-                                TokenType.BEARER, authData.getToken(), host,
-                                ua);
-                        break;
-                    // EM: JWT token-based authentication scheme
-                    case API:
-                        context = authenticationManager.getTokenContext(
-                                TokenType.API, authData.getToken(), host, ua);
-                        break;
-                    default:
-                        throw new KustvaktException(
-                                StatusCodes.AUTHENTICATION_FAILED,
-                                "Authentication scheme is not supported.");
-                }
-                checkContext(context, request);
-                request.setSecurityContext(new KustvaktContext(context));
-            }
-            catch (KustvaktException e) {
-                throw kustvaktResponseHandler.throwit(e);
-            }
-        }
-        return request;
-    }
-
-
-    private void checkContext (TokenContext context, ContainerRequest request)
-            throws KustvaktException {
-        if (context == null) {
-            throw new KustvaktException(StatusCodes.AUTHENTICATION_FAILED,
-                    "Context is null.");
-        }
-        else if (!context.isValid()) {
-            throw new KustvaktException(StatusCodes.AUTHENTICATION_FAILED,
-                    "Context is not valid: "
-                            + "missing username, password or authentication scheme.");
-        }
-        else if (context.isSecureRequired() && !request.isSecure()) {
-            throw new KustvaktException(StatusCodes.AUTHENTICATION_FAILED,
-                    "Request is not secure.");
-        }
-        else if (TimeUtils.isExpired(context.getExpirationTime())) {
-            throw new KustvaktException(StatusCodes.EXPIRED,
-                    "Access token is expired");
-        }
-    }
-
-
-    @Override
-    public ContainerRequestFilter getRequestFilter () {
-        return this;
-    }
-
-
-    @Override
-    public ContainerResponseFilter getResponseFilter () {
-        return null;
-    }
-}
diff --git a/full/src/main/java/de/ids_mannheim/korap/web/filter/BlockingFilter.java b/full/src/main/java/de/ids_mannheim/korap/web/filter/BlockingFilter.java
deleted file mode 100644
index 8375b62..0000000
--- a/full/src/main/java/de/ids_mannheim/korap/web/filter/BlockingFilter.java
+++ /dev/null
@@ -1,65 +0,0 @@
-package de.ids_mannheim.korap.web.filter;
-
-import javax.ws.rs.ext.Provider;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-
-import com.sun.jersey.spi.container.ContainerRequest;
-import com.sun.jersey.spi.container.ContainerRequestFilter;
-import com.sun.jersey.spi.container.ContainerResponseFilter;
-import com.sun.jersey.spi.container.ResourceFilter;
-
-import de.ids_mannheim.korap.exceptions.KustvaktException;
-import de.ids_mannheim.korap.exceptions.StatusCodes;
-import de.ids_mannheim.korap.security.context.TokenContext;
-import de.ids_mannheim.korap.web.KustvaktResponseHandler;
-
-/**
- * @author hanl
- * @date 11/12/2014
- *       <p/>
- *       endpoint filter to block access to an endpoint, in case no
- *       anonymous access should be allowed!
- */
-@Component
-@Provider
-public class BlockingFilter implements ContainerRequestFilter, ResourceFilter {
-
-    @Autowired
-    private KustvaktResponseHandler kustvaktResponseHandler;
-
-    @Override
-    public ContainerRequest filter (ContainerRequest request) {
-        TokenContext context;
-
-        try {
-            context = (TokenContext) request.getUserPrincipal();
-        }
-        catch (UnsupportedOperationException e) {
-            throw kustvaktResponseHandler.throwit(new KustvaktException(
-                    StatusCodes.UNSUPPORTED_OPERATION, e.getMessage(), e));
-        }
-
-        if (context == null || context.isDemo()) {
-            throw kustvaktResponseHandler.throwit(new KustvaktException(
-                    StatusCodes.AUTHORIZATION_FAILED,
-                    "Unauthorized operation for user: guest", "guest"));
-        }
-
-
-        return request;
-    }
-
-
-    @Override
-    public ContainerRequestFilter getRequestFilter () {
-        return this;
-    }
-
-
-    @Override
-    public ContainerResponseFilter getResponseFilter () {
-        return null;
-    }
-}
diff --git a/full/src/main/java/de/ids_mannheim/korap/web/filter/DemoFilter.java b/full/src/main/java/de/ids_mannheim/korap/web/filter/DemoFilter.java
deleted file mode 100644
index b15f5e3..0000000
--- a/full/src/main/java/de/ids_mannheim/korap/web/filter/DemoFilter.java
+++ /dev/null
@@ -1,67 +0,0 @@
-package de.ids_mannheim.korap.web.filter;
-
-import javax.ws.rs.core.SecurityContext;
-import javax.ws.rs.ext.Provider;
-
-import com.sun.jersey.spi.container.ContainerRequest;
-import com.sun.jersey.spi.container.ContainerRequestFilter;
-import com.sun.jersey.spi.container.ContainerResponseFilter;
-import com.sun.jersey.spi.container.ResourceFilter;
-
-import de.ids_mannheim.korap.authentication.http.HttpAuthorizationHandler;
-import de.ids_mannheim.korap.constant.TokenType;
-import de.ids_mannheim.korap.exceptions.KustvaktException;
-import de.ids_mannheim.korap.security.context.KustvaktContext;
-import de.ids_mannheim.korap.security.context.TokenContext;
-
-/**
- * @author hanl
- * @date 08/02/2016
- */
-@Provider
-public class DemoFilter implements ContainerRequestFilter, ResourceFilter {
-
-    @Override
-    public ContainerRequest filter (ContainerRequest request) {
-        String authentication =
-                request.getHeaderValue(ContainerRequest.AUTHORIZATION);
-        if (authentication == null || authentication.isEmpty()) {
-            try {
-                request.getUserPrincipal();
-            }
-            catch (UnsupportedOperationException e) {
-                request.setSecurityContext(createContext());
-            }
-        }
-        return request;
-    }
-
-
-    private SecurityContext createContext () {
-        TokenContext context = new TokenContext();
-        String token = null;
-        try {
-            token = HttpAuthorizationHandler
-                    .createBasicAuthorizationHeaderValue("demo", "demo2015");
-        }
-        catch (KustvaktException e) {
-            e.printStackTrace();
-        }
-        context.setToken(token);
-        context.setTokenType(TokenType.BASIC);
-        context.setUsername("demo");
-        return new KustvaktContext(context);
-    }
-
-
-    @Override
-    public ContainerRequestFilter getRequestFilter () {
-        return this;
-    }
-
-
-    @Override
-    public ContainerResponseFilter getResponseFilter () {
-        return null;
-    }
-}
diff --git a/full/src/main/java/de/ids_mannheim/korap/web/filter/DemoUserFilter.java b/full/src/main/java/de/ids_mannheim/korap/web/filter/DemoUserFilter.java
deleted file mode 100644
index e546c12..0000000
--- a/full/src/main/java/de/ids_mannheim/korap/web/filter/DemoUserFilter.java
+++ /dev/null
@@ -1,86 +0,0 @@
-package de.ids_mannheim.korap.web.filter;
-
-import java.security.Principal;
-
-import javax.ws.rs.core.Context;
-import javax.ws.rs.core.UriInfo;
-import javax.ws.rs.ext.Provider;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-
-import com.sun.jersey.spi.container.ContainerRequest;
-import com.sun.jersey.spi.container.ContainerRequestFilter;
-import com.sun.jersey.spi.container.ContainerResponseFilter;
-import com.sun.jersey.spi.container.ResourceFilter;
-
-import de.ids_mannheim.korap.config.KustvaktConfiguration;
-import de.ids_mannheim.korap.constant.TokenType;
-import de.ids_mannheim.korap.security.context.KustvaktContext;
-import de.ids_mannheim.korap.security.context.TokenContext;
-import de.ids_mannheim.korap.user.User;
-import de.ids_mannheim.korap.utils.TimeUtils;
-
-/**
- * Created by hanl on 7/15/14.
- */
-@Provider
-@Component
-public class DemoUserFilter implements ContainerRequestFilter, ResourceFilter {
-
-    @Context
-    UriInfo info;
-    @Autowired
-    private KustvaktConfiguration config;
-
-
-    @Override
-    public ContainerRequest filter (ContainerRequest request) {
-        String host = request.getHeaderValue(ContainerRequest.HOST);
-        String ua = request.getHeaderValue(ContainerRequest.USER_AGENT);
-        String authentication = request
-                .getHeaderValue(ContainerRequest.AUTHORIZATION);
-
-        // means that this is the public service
-        if (authentication == null || authentication.isEmpty()) {
-            Principal pr = null;
-            try {
-                pr = request.getUserPrincipal();
-            }
-            catch (UnsupportedOperationException e) {
-                // do nothing
-            }
-            if (pr == null)
-                request.setSecurityContext(new KustvaktContext(
-                        createShorterToken(host, ua)));
-
-        }
-        return request;
-    }
-
-
-    private TokenContext createShorterToken (String host, String agent) {
-        User demo = User.UserFactory.getDemoUser();
-        TokenContext c = new TokenContext();
-        c.setUsername(demo.getUsername());
-        c.setHostAddress(host);
-        c.setUserAgent(agent);
-        c.setExpirationTime(TimeUtils.plusSeconds(
-                config
-                        .getShortTokenTTL()).getMillis());
-        c.setTokenType(TokenType.BASIC);
-        return c;
-    }
-
-
-    @Override
-    public ContainerRequestFilter getRequestFilter () {
-        return this;
-    }
-
-
-    @Override
-    public ContainerResponseFilter getResponseFilter () {
-        return null;
-    }
-}
diff --git a/full/src/main/java/de/ids_mannheim/korap/web/filter/NonDemoBlockingFilter.java b/full/src/main/java/de/ids_mannheim/korap/web/filter/NonDemoBlockingFilter.java
deleted file mode 100644
index 47cd086..0000000
--- a/full/src/main/java/de/ids_mannheim/korap/web/filter/NonDemoBlockingFilter.java
+++ /dev/null
@@ -1,65 +0,0 @@
-package de.ids_mannheim.korap.web.filter;
-
-import javax.ws.rs.ext.Provider;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-
-import com.sun.jersey.spi.container.ContainerRequest;
-import com.sun.jersey.spi.container.ContainerRequestFilter;
-import com.sun.jersey.spi.container.ContainerResponseFilter;
-import com.sun.jersey.spi.container.ResourceFilter;
-
-import de.ids_mannheim.korap.exceptions.KustvaktException;
-import de.ids_mannheim.korap.exceptions.StatusCodes;
-import de.ids_mannheim.korap.security.context.TokenContext;
-import de.ids_mannheim.korap.web.KustvaktResponseHandler;
-
-/**
- * EM: pretty much identical to {@link BlockingFilter}, should be deleted? 
- * 
- * @author hanl
- * @date 11/12/2014
- *       <p/>
- *       endpoint filter to block access to an endpoint, in case no
- *       anonymous access should be allowed!
- */
-@Component
-@Provider
-public class NonDemoBlockingFilter
-        implements ContainerRequestFilter, ResourceFilter {
-
-    @Autowired
-    private KustvaktResponseHandler kustvaktResponseHandler;
-
-    @Override
-    public ContainerRequest filter (ContainerRequest request) {
-        TokenContext context;
-        try {
-            context = (TokenContext) request.getUserPrincipal();
-        }
-        catch (UnsupportedOperationException e) {
-            throw kustvaktResponseHandler.throwit(new KustvaktException(
-                    StatusCodes.UNSUPPORTED_OPERATION, e.getMessage(), e));
-        }
-
-        if (context == null || context.isDemo()) {
-            throw kustvaktResponseHandler.throwit(
-                    new KustvaktException(StatusCodes.AUTHORIZATION_FAILED,
-                            "Operation is not permitted for guest users"));
-        }
-        return request;
-    }
-
-
-    @Override
-    public ContainerRequestFilter getRequestFilter () {
-        return this;
-    }
-
-
-    @Override
-    public ContainerResponseFilter getResponseFilter () {
-        return null;
-    }
-}
diff --git a/full/src/main/java/de/ids_mannheim/korap/web/filter/PiwikFilter.java b/full/src/main/java/de/ids_mannheim/korap/web/filter/PiwikFilter.java
deleted file mode 100644
index 122f717..0000000
--- a/full/src/main/java/de/ids_mannheim/korap/web/filter/PiwikFilter.java
+++ /dev/null
@@ -1,164 +0,0 @@
-package de.ids_mannheim.korap.web.filter;
-
-import java.security.SecureRandom;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Locale;
-import java.util.Map;
-import java.util.Random;
-
-import javax.ws.rs.core.MultivaluedMap;
-import javax.ws.rs.core.UriBuilder;
-import javax.ws.rs.ext.Provider;
-
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-
-import com.sun.jersey.api.client.Client;
-import com.sun.jersey.api.client.WebResource;
-import com.sun.jersey.api.client.config.ClientConfig;
-import com.sun.jersey.api.client.config.DefaultClientConfig;
-import com.sun.jersey.api.client.filter.LoggingFilter;
-import com.sun.jersey.core.util.MultivaluedMapImpl;
-import com.sun.jersey.spi.container.ContainerRequest;
-import com.sun.jersey.spi.container.ContainerRequestFilter;
-import com.sun.jersey.spi.container.ContainerResponseFilter;
-import com.sun.jersey.spi.container.ResourceFilter;
-
-import de.ids_mannheim.korap.authentication.AuthenticationManager;
-import de.ids_mannheim.korap.config.Attributes;
-import de.ids_mannheim.korap.exceptions.KustvaktException;
-import de.ids_mannheim.korap.security.context.TokenContext;
-import de.ids_mannheim.korap.user.User;
-import de.ids_mannheim.korap.user.UserSettings;
-import de.ids_mannheim.korap.user.Userdata;
-import net.minidev.json.JSONArray;
-
-/**
- * @author hanl
- * @date 13/05/2014
- */
-@Component
-@Provider
-public class PiwikFilter implements ContainerRequestFilter, ResourceFilter {
-
-    private WebResource service;
-    //    private static final String SERVICE = "http://localhost:8888";
-    private static final String SERVICE = "http://10.0.10.13";
-    private static Logger jlog = LogManager.getLogger(PiwikFilter.class);
-    public static boolean ENABLED = false;
-    private Map<String, String> customVars;
-    @Autowired
-    private AuthenticationManager authenticationManager;
-
-
-    public PiwikFilter () {
-//        controller = BeansFactory.getKustvaktContext()
-//                .getAuthenticationManager();
-        ClientConfig config = new DefaultClientConfig();
-        Client client = Client.create(config);
-        if (jlog.isDebugEnabled())
-            client.addFilter(new LoggingFilter());
-        UriBuilder b = UriBuilder.fromUri(SERVICE);
-        service = client.resource(b.build());
-        this.customVars = new HashMap<>();
-    }
-
-
-    private void send (ContainerRequest request) {
-        Random random = new SecureRandom();
-        MultivaluedMap<String, String> params = new MultivaluedMapImpl();
-        params.add("idsite", "2");
-        params.add("rec", "1");
-        if (!customVars.isEmpty())
-            params.add("_cvar", translateCustomData());
-        params.add("cip", request.getHeaderValue("Host"));
-        params.add("cookie", "false");
-        params.add("r", String.valueOf(random.nextDouble()));
-        params.add("action_name", request.getRequestUri().toASCIIString());
-
-        Locale l = null;
-        if (request.getAcceptableLanguages() != null)
-            l = request.getAcceptableLanguages().get(0);
-        try {
-            service.path("piwik/piwik.php")
-                    .queryParam("idsite", "2")
-                    .queryParam("rec", "1")
-                    //todo check for empty container
-                    .queryParam("_cvar", translateCustomData())
-                    .queryParam("cip", request.getHeaderValue("Host"))
-                    .queryParam("cookie", "false")
-                    .queryParam("r", String.valueOf(random.nextDouble()))
-                    .queryParam("action_name",
-                            request.getRequestUri().toASCIIString())
-                    .queryParams(params).accept("text/html")
-                    .header("Host", request.getHeaderValue("Host"))
-                    .header("User-Agent", request.getHeaderValue("User-Agent"))
-                    .acceptLanguage(l).method("GET");
-        }
-        catch (Exception e) {
-            // do nothing if piwik not available!
-        }
-    }
-
-
-    private String translateCustomData () {
-        final Map<String, List<String>> customVariables = new HashMap<String, List<String>>();
-        int i = 0;
-        for (final Map.Entry<String, String> entry : this.customVars.entrySet()) {
-            i++;
-            final List<String> list = new ArrayList<String>();
-            list.add(entry.getKey());
-            list.add(entry.getValue());
-            customVariables.put(Integer.toString(i), list);
-        }
-
-        final JSONArray json = new JSONArray();
-        json.add(customVariables);
-
-        // remove unnecessary parent square brackets from JSON-string
-        String jsonString = json.toString().substring(1,
-                json.toString().length() - 1);
-        customVars.clear();
-        return jsonString;
-    }
-
-
-    @Override
-    public ContainerRequest filter (ContainerRequest request) {
-        if (ENABLED) {
-            try {
-                TokenContext context = (TokenContext) request
-                        .getUserPrincipal();
-                if (context.getUsername() != null){
-                    // since this is cached, not very expensive!
-                    User user = authenticationManager.getUser(context.getUsername());
-                    Userdata data = authenticationManager
-                            .getUserData(user, UserSettings.class);
-                    if ((Boolean) data.get(Attributes.COLLECT_AUDITING_DATA))
-                        customVars.put("username", context.getUsername());
-                }
-            }
-            catch (KustvaktException | UnsupportedOperationException e) {
-                //do nothing
-            }
-            send(request);
-        }
-        return request;
-    }
-
-
-    @Override
-    public ContainerRequestFilter getRequestFilter () {
-        return this;
-    }
-
-
-    @Override
-    public ContainerResponseFilter getResponseFilter () {
-        return null;
-    }
-}