diff --git a/src/main/java/de/ids_mannheim/korap/config/AdminSetup.java b/src/main/java/de/ids_mannheim/korap/config/AdminSetup.java
new file mode 100644
index 0000000..5c0a276
--- /dev/null
+++ b/src/main/java/de/ids_mannheim/korap/config/AdminSetup.java
@@ -0,0 +1,64 @@
+package de.ids_mannheim.korap.config;
+
+import de.ids_mannheim.korap.exceptions.KustvaktException;
+import de.ids_mannheim.korap.interfaces.EncryptionIface;
+
+import java.io.*;
+import java.security.NoSuchAlgorithmException;
+
+/**
+ * Created by hanl on 30.05.16.
+ */
+public class AdminSetup {
+
+    private final String token_hash;
+
+    private static AdminSetup setup;
+
+
+    private AdminSetup (String token_hash) {
+        this.token_hash = token_hash;
+    }
+
+
+    public static AdminSetup getInstance () {
+        if (setup == null)
+            setup = init();
+        return setup;
+    }
+
+
+    public String getHash () {
+        return this.token_hash;
+    }
+
+
+    private static AdminSetup init () {
+        EncryptionIface iface = BeansFactory.getKustvaktContext()
+                .getEncryption();
+        String token = iface.createToken();
+        File store = new File("./admin_token");
+        try {
+            String hash = iface.secureHash(token);
+            AdminSetup setup = new AdminSetup(hash);
+            FileOutputStream out = new FileOutputStream(store);
+            out.write(token.getBytes());
+
+            out.close();
+
+            store.setReadable(true, true);
+            store.setWritable(true, true);
+            store.setExecutable(false);
+            System.out
+                    .println("_______________________________________________");
+            System.out.println("Token created. Please make note of it!");
+            System.out.println("Token: " + token);
+            System.out
+                    .println("_______________________________________________");
+            return setup;
+        }
+        catch (Exception e) {
+            throw new RuntimeException("setup failed! ", e);
+        }
+    }
+}
diff --git a/src/main/java/de/ids_mannheim/korap/config/KustvaktConfiguration.java b/src/main/java/de/ids_mannheim/korap/config/KustvaktConfiguration.java
index 5352435..a657c87 100644
--- a/src/main/java/de/ids_mannheim/korap/config/KustvaktConfiguration.java
+++ b/src/main/java/de/ids_mannheim/korap/config/KustvaktConfiguration.java
@@ -69,6 +69,7 @@
     // fixme: should move to base config?!
     private EncryptionIface.Encryption encryption;
     private byte[] sharedSecret;
+    @Deprecated
     private String adminToken;
     private int longTokenTTL;
     private int tokenTTL;
diff --git a/src/main/java/de/ids_mannheim/korap/handlers/DocumentDao.java b/src/main/java/de/ids_mannheim/korap/handlers/DocumentDao.java
index a477d31..3de9412 100644
--- a/src/main/java/de/ids_mannheim/korap/handlers/DocumentDao.java
+++ b/src/main/java/de/ids_mannheim/korap/handlers/DocumentDao.java
@@ -5,8 +5,10 @@
 import de.ids_mannheim.korap.interfaces.db.PersistenceClient;
 import de.ids_mannheim.korap.interfaces.db.ResourceOperationIface;
 import de.ids_mannheim.korap.resources.Document;
+import de.ids_mannheim.korap.resources.KustvaktResource;
 import de.ids_mannheim.korap.user.User;
 import de.ids_mannheim.korap.utils.BooleanUtils;
+import de.ids_mannheim.korap.utils.StringUtils;
 import edu.emory.mathcs.backport.java.util.Collections;
 import org.springframework.dao.DataAccessException;
 import org.springframework.dao.EmptyResultDataAccessException;
@@ -19,12 +21,12 @@
 import java.util.Collection;
 import java.util.HashMap;
 import java.util.List;
+import java.util.Set;
 
 /**
  * @author hanl
  * @date 05/11/2014
  */
-// todo: testing!
 // todo: error handling
 public class DocumentDao implements ResourceOperationIface<Document> {
 
@@ -69,13 +71,15 @@
     }
 
 
-    // document id, consisting of corpus sigle, substring key and document number
+    // todo: search for partial matches if entire document is disabled
+    // document id, consisting of corpus sigle, substring key and text number
     @Override
     public Document findbyId (String id, User user) throws KustvaktException {
         MapSqlParameterSource s = new MapSqlParameterSource();
         s.addValue("id", id);
-        //        strftime('%s', created) as created
-        String sql = "select id, persistent_id, disabled, created from doc_store where persistent_id=:id;";
+        s.addValue("docSigle", StringUtils.getDocSigle(id));
+
+        String sql = "select id, persistent_id, disabled, created from doc_store where persistent_id=:id or persistent_id like :docSigle;";
         try {
             return this.jdbcTemplate.queryForObject(sql, s,
                     new RowMapper<Document>() {
@@ -99,6 +103,39 @@
             return null;
         }
         catch (DataAccessException e) {
+            throw new KustvaktException(StatusCodes.CONNECTION_ERROR);
+        }
+    }
+
+
+    @Override
+    public List<Document> findbyPartialId (String id, User user)
+            throws KustvaktException {
+        MapSqlParameterSource s = new MapSqlParameterSource();
+        s.addValue("id", id + "%");
+
+        String sql = "select id, persistent_id, disabled, created from doc_store where persistent_id like :id;";
+        try {
+            return this.jdbcTemplate.query(sql, s, new RowMapper<Document>() {
+                @Override
+                public Document mapRow (ResultSet rs, int rowNum)
+                        throws SQLException {
+                    Document doc = null;
+                    if (!rs.isClosed()) {
+                        doc = new Document(rs.getString("persistent_id"));
+                        doc.setId(rs.getInt("id"));
+                        doc.setCreated(rs.getLong("created"));
+                        doc.setDisabled(rs.getBoolean("disabled"));
+                    }
+
+                    return doc;
+                }
+            });
+        }
+        catch (EmptyResultDataAccessException em) {
+            return null;
+        }
+        catch (DataAccessException e) {
             e.printStackTrace();
             throw new KustvaktException(StatusCodes.CONNECTION_ERROR);
         }
@@ -136,13 +173,14 @@
     }
 
 
+    //todo: remove and introduce partial match search of persistent id!
+    @Deprecated
     public List<Document> findbyCorpus (String corpus, int offset, int index)
             throws KustvaktException {
         MapSqlParameterSource source = new MapSqlParameterSource();
         source.addValue("corpus", corpus + "%");
         source.addValue("offset", (offset * index));
         source.addValue("limit", offset);
-        //strftime('%s', created) as
         final String sql = "select id, persistent_id, disabled, created from doc_store where (persistent_id like :corpus) limit :offset, :limit";
         try {
             return this.jdbcTemplate.query(sql, source,
@@ -174,6 +212,7 @@
     }
 
 
+    @Deprecated
     public List<String> findbyCorpus (String corpus, boolean disabled)
             throws KustvaktException {
         MapSqlParameterSource s = new MapSqlParameterSource();
diff --git a/src/main/java/de/ids_mannheim/korap/handlers/ResourceDao.java b/src/main/java/de/ids_mannheim/korap/handlers/ResourceDao.java
index aeeb58a..41b1c72 100644
--- a/src/main/java/de/ids_mannheim/korap/handlers/ResourceDao.java
+++ b/src/main/java/de/ids_mannheim/korap/handlers/ResourceDao.java
@@ -151,6 +151,13 @@
 
 
     @Override
+    public <T1 extends KustvaktResource> List<T1> findbyPartialId (String id,
+            User user) throws KustvaktException {
+        return null;
+    }
+
+
+    @Override
     public int storeResource (T resource, User user) throws KustvaktException {
         MapSqlParameterSource source = new MapSqlParameterSource();
         KeyHolder holder = new GeneratedKeyHolder();
diff --git a/src/main/java/de/ids_mannheim/korap/interfaces/EncryptionIface.java b/src/main/java/de/ids_mannheim/korap/interfaces/EncryptionIface.java
index 7007fb8..7bd092d 100644
--- a/src/main/java/de/ids_mannheim/korap/interfaces/EncryptionIface.java
+++ b/src/main/java/de/ids_mannheim/korap/interfaces/EncryptionIface.java
@@ -23,20 +23,21 @@
      * @throws java.security.NoSuchAlgorithmException
      * @throws java.io.UnsupportedEncodingException
      */
-    public String produceSecureHash (String input, String salt)
+    public String secureHash (String input, String salt)
             throws NoSuchAlgorithmException, UnsupportedEncodingException,
             KustvaktException;
 
 
-    public String produceSecureHash (String input)
-            throws NoSuchAlgorithmException, UnsupportedEncodingException,
-            KustvaktException;
+    public String secureHash (String input) throws NoSuchAlgorithmException,
+            UnsupportedEncodingException, KustvaktException;
 
 
-    public String hash (String text, String salt) throws Exception;
+    //@Deprecated
+    //public String hash (String text, String salt) throws Exception;
 
 
-    public String hash (String text) throws Exception;
+    //@Deprecated
+    //public String hash (String text) throws Exception;
 
 
     /**
diff --git a/src/main/java/de/ids_mannheim/korap/interfaces/db/ResourceOperationIface.java b/src/main/java/de/ids_mannheim/korap/interfaces/db/ResourceOperationIface.java
index f13e254..43124a0 100644
--- a/src/main/java/de/ids_mannheim/korap/interfaces/db/ResourceOperationIface.java
+++ b/src/main/java/de/ids_mannheim/korap/interfaces/db/ResourceOperationIface.java
@@ -8,6 +8,7 @@
 
 import java.util.Collection;
 import java.util.List;
+import java.util.Set;
 
 // todo: for transaction to work this should go into core module!?!
 // todo: user instance only required for auditing pointcut operations
@@ -22,6 +23,11 @@
             throws KustvaktException;
 
 
+    // todo: regex should be considered here to consider determination of partial id offset information
+    <T extends KustvaktResource> List<T> findbyPartialId (String id, User user)
+            throws KustvaktException;
+
+
     List<T> getResources (Collection<Object> ids, User user)
             throws KustvaktException;
 
diff --git a/src/main/java/de/ids_mannheim/korap/interfaces/defaults/DefaultEncryption.java b/src/main/java/de/ids_mannheim/korap/interfaces/defaults/DefaultEncryption.java
index 96d5c52..3d56eff 100644
--- a/src/main/java/de/ids_mannheim/korap/interfaces/defaults/DefaultEncryption.java
+++ b/src/main/java/de/ids_mannheim/korap/interfaces/defaults/DefaultEncryption.java
@@ -28,7 +28,7 @@
 
 
     @Override
-    public String produceSecureHash (String input, String salt)
+    public String secureHash (String input, String salt)
             throws NoSuchAlgorithmException, UnsupportedEncodingException,
             KustvaktException {
         return null;
@@ -36,21 +36,8 @@
 
 
     @Override
-    public String produceSecureHash (String input)
-            throws NoSuchAlgorithmException, UnsupportedEncodingException,
-            KustvaktException {
-        return null;
-    }
-
-
-    @Override
-    public String hash (String text, String salt) throws Exception {
-        return null;
-    }
-
-
-    @Override
-    public String hash (String value) {
+    public String secureHash (String input) throws NoSuchAlgorithmException,
+            UnsupportedEncodingException, KustvaktException {
         return null;
     }
 
diff --git a/src/main/java/de/ids_mannheim/korap/interfaces/defaults/KustvaktEncryption.java b/src/main/java/de/ids_mannheim/korap/interfaces/defaults/KustvaktEncryption.java
index f45437e..057583e 100644
--- a/src/main/java/de/ids_mannheim/korap/interfaces/defaults/KustvaktEncryption.java
+++ b/src/main/java/de/ids_mannheim/korap/interfaces/defaults/KustvaktEncryption.java
@@ -78,13 +78,13 @@
     }
 
 
-    public String produceSecureHash (String input) {
-        return produceSecureHash(input, "");
+    public String secureHash (String input) {
+        return secureHash(input, "");
     }
 
 
     @Override
-    public String produceSecureHash (String input, String salt) {
+    public String secureHash (String input, String salt) {
         String hashString = "";
         switch (config.getEncryption()) {
             case ESAPICYPHER:
@@ -124,6 +124,7 @@
     }
 
 
+
     public String hash (String text, String salt) throws Exception {
         byte[] bytes;
 
@@ -143,7 +144,6 @@
     }
 
 
-    @Override
     public String hash (String input) {
         String hashString = "";
         MessageDigest md;
@@ -244,7 +244,7 @@
         String pw = "";
         switch (config.getEncryption()) {
             case ESAPICYPHER:
-                pw = produceSecureHash(plain, salt);
+                pw = secureHash(plain, salt);
                 break;
             case BCRYPT:
                 try {
@@ -265,7 +265,7 @@
     public boolean checkHash (String plain, String hash) {
         switch (config.getEncryption()) {
             case ESAPICYPHER:
-                return produceSecureHash(plain).equals(hash);
+                return secureHash(plain).equals(hash);
             case BCRYPT:
                 try {
                     return BCrypt.checkpw(plain, hash);
diff --git a/src/main/java/de/ids_mannheim/korap/resource/rewrite/DocMatchRewrite.java b/src/main/java/de/ids_mannheim/korap/resource/rewrite/DocMatchRewrite.java
index fc47c8b..649f58d 100644
--- a/src/main/java/de/ids_mannheim/korap/resource/rewrite/DocMatchRewrite.java
+++ b/src/main/java/de/ids_mannheim/korap/resource/rewrite/DocMatchRewrite.java
@@ -35,9 +35,10 @@
     }
 
 
+    //todo: benchmark: see if retrieval and and get docs for all ids at once is better --> outside this rewrite handler
     @Override
     public JsonNode rewriteResult (KoralNode node) throws KustvaktException {
-        Document doc = null;
+        Document doc;
         if (this.docDao == null)
             throw new RuntimeException("Document dao must be set!");
 
diff --git a/src/main/java/de/ids_mannheim/korap/resource/rewrite/RewriteHandler.java b/src/main/java/de/ids_mannheim/korap/resource/rewrite/RewriteHandler.java
index 3ede387..468fa9e 100644
--- a/src/main/java/de/ids_mannheim/korap/resource/rewrite/RewriteHandler.java
+++ b/src/main/java/de/ids_mannheim/korap/resource/rewrite/RewriteHandler.java
@@ -139,7 +139,6 @@
     }
 
 
-
     public void clear () {
         this.node_processors.clear();
         this.query_processors.clear();
diff --git a/src/main/java/de/ids_mannheim/korap/resources/Document.java b/src/main/java/de/ids_mannheim/korap/resources/Document.java
index c603011..c30e7d1 100644
--- a/src/main/java/de/ids_mannheim/korap/resources/Document.java
+++ b/src/main/java/de/ids_mannheim/korap/resources/Document.java
@@ -1,5 +1,7 @@
 package de.ids_mannheim.korap.resources;
 
+import bsh.StringUtil;
+import de.ids_mannheim.korap.utils.StringUtils;
 import lombok.Getter;
 import lombok.Setter;
 
@@ -14,30 +16,31 @@
 
     private String corpus;
     private boolean disabled;
+    private String docSigle;
 
 
-    public Document (String persistentID) {
+    public Document (String textSigle) {
+        this.setPersistentID(textSigle);
+        this.docSigle = StringUtils.getDocSigle(textSigle);
+        this.corpus = StringUtils.getCorpusSigle(textSigle);
+    }
+
+
+    public Document (String docSigle, String textSigle) {
         this.setId(-1);
-        this.setPersistentID(persistentID);
-        this.corpus = getCorpusID();
+        this.setPersistentID(textSigle);
+        this.docSigle = docSigle;
+        this.corpus = StringUtils.getCorpusSigle(textSigle);
         this.setDisabled(true);
     }
 
 
-    public Document (String persistentID, boolean disabled) {
-        this(persistentID);
+    public Document (String docsigle, String textSigle, boolean disabled) {
+        this(docsigle, textSigle);
         this.setDisabled(disabled);
     }
 
 
-    private String getCorpusID () {
-        //WPD_SSS.07367
-        if (this.getPersistentID() != null)
-            return this.getPersistentID().split("_")[0];
-        return null;
-    }
-
-
     public boolean isText () {
         return this.getPersistentID().contains(".");
     }
diff --git a/src/main/java/de/ids_mannheim/korap/security/auth/APIAuthentication.java b/src/main/java/de/ids_mannheim/korap/security/auth/APIAuthentication.java
index 69ef5bf..977f797 100644
--- a/src/main/java/de/ids_mannheim/korap/security/auth/APIAuthentication.java
+++ b/src/main/java/de/ids_mannheim/korap/security/auth/APIAuthentication.java
@@ -11,6 +11,7 @@
 import de.ids_mannheim.korap.user.TokenContext;
 import de.ids_mannheim.korap.user.User;
 import de.ids_mannheim.korap.utils.NamingUtils;
+import de.ids_mannheim.korap.utils.StringUtils;
 import net.sf.ehcache.Cache;
 import net.sf.ehcache.CacheManager;
 import net.sf.ehcache.Element;
@@ -46,7 +47,7 @@
         Element ein = invalided.get(authToken);
         if (e == null && ein == null) {
             try {
-                authToken = NamingUtils.stripTokenType(authToken);
+                authToken = StringUtils.stripTokenType(authToken);
                 context = signedToken.getTokenContext(authToken);
                 context.setTokenType(Attributes.API_AUTHENTICATION);
             }
diff --git a/src/main/java/de/ids_mannheim/korap/security/auth/BasicHttpAuth.java b/src/main/java/de/ids_mannheim/korap/security/auth/BasicHttpAuth.java
index ccad916..8c1ad22 100644
--- a/src/main/java/de/ids_mannheim/korap/security/auth/BasicHttpAuth.java
+++ b/src/main/java/de/ids_mannheim/korap/security/auth/BasicHttpAuth.java
@@ -12,6 +12,7 @@
 import de.ids_mannheim.korap.user.TokenContext;
 import de.ids_mannheim.korap.user.User;
 import de.ids_mannheim.korap.utils.NamingUtils;
+import de.ids_mannheim.korap.utils.StringUtils;
 import org.apache.commons.codec.binary.Base64;
 import org.apache.oltu.oauth2.common.utils.OAuthUtils;
 
@@ -25,17 +26,6 @@
 
     public static String[] decode (String token) {
         return OAuthUtils.decodeClientAuthenticationHeader(token);
-
-        //        String t = StringUtils.getTokenType(token);
-        //        if (t != null && t.toUpperCase()
-        //                .equals(Attributes.BASIC_AUTHENTICATION.toUpperCase())) {
-        //            token = StringUtils.stripTokenType(token);
-        //            String[] sp = new String(Base64.decodeBase64(token)).split(":", 2);
-        //            sp[0].replaceAll(" ", "");
-        //            sp[1].replaceAll(" ", "");
-        //            return sp;
-        //        }
-        //        return null;
     }
 
 
@@ -68,7 +58,7 @@
             c.setTokenType(Attributes.BASIC_AUTHENTICATION);
             // todo: for production mode, set true
             c.setSecureRequired(false);
-            c.setToken(NamingUtils.stripTokenType(authToken));
+            c.setToken(StringUtils.stripTokenType(authToken));
             //            fixme: you can make queries, but user sensitive data is off limits?!
             c.addContextParameter(Attributes.SCOPES,
                     Scopes.Scope.search.toString());
diff --git a/src/main/java/de/ids_mannheim/korap/security/auth/KustvaktAuthenticationManager.java b/src/main/java/de/ids_mannheim/korap/security/auth/KustvaktAuthenticationManager.java
index 5c98f8f..f7387c4 100644
--- a/src/main/java/de/ids_mannheim/korap/security/auth/KustvaktAuthenticationManager.java
+++ b/src/main/java/de/ids_mannheim/korap/security/auth/KustvaktAuthenticationManager.java
@@ -14,6 +14,7 @@
 import de.ids_mannheim.korap.interfaces.db.UserDataDbIface;
 import de.ids_mannheim.korap.user.*;
 import de.ids_mannheim.korap.utils.NamingUtils;
+import de.ids_mannheim.korap.utils.StringUtils;
 import de.ids_mannheim.korap.utils.TimeUtils;
 import net.sf.ehcache.Cache;
 import net.sf.ehcache.CacheManager;
@@ -79,7 +80,7 @@
         jlog.info("getting session status of token type '{}'",
                 token.split(" ")[0]);
         AuthenticationIface provider = getProvider(
-                NamingUtils.getTokenType(token), null);
+                StringUtils.getTokenType(token), null);
 
         if (provider == null)
             // throw exception for missing type paramter
@@ -398,7 +399,7 @@
                     StatusCodes.PASSWORD_RESET_FAILED);
 
         try {
-            user.setPassword(crypto.produceSecureHash(newPassword));
+            user.setPassword(crypto.secureHash(newPassword));
         }
         catch (NoSuchAlgorithmException | UnsupportedEncodingException e) {
             //            throw new KorAPException(StatusCodes.ILLEGAL_ARGUMENT,
@@ -431,7 +432,7 @@
         }
 
         try {
-            safePass = crypto.produceSecureHash(safePass);
+            safePass = crypto.secureHash(safePass);
         }
         catch (NoSuchAlgorithmException | UnsupportedEncodingException e) {
             jlog.error("Encoding/Algorithm Error", e);
@@ -514,7 +515,7 @@
                 (String) safeMap.get(Attributes.PASSWORD), Attributes.PASSWORD);
         String hash;
         try {
-            hash = crypto.produceSecureHash(safePass);
+            hash = crypto.secureHash(safePass);
         }
         catch (UnsupportedEncodingException | NoSuchAlgorithmException e) {
             jlog.error("Encryption error", e);
@@ -789,7 +790,7 @@
 
     private String cache_key (String input) throws KustvaktException {
         try {
-            return crypto.hash(KEY + "@" + input);
+            return crypto.secureHash(KEY + "@" + input);
         }
         catch (Exception e) {
             jlog.error("illegal cache key input '{}'", input);
diff --git a/src/main/java/de/ids_mannheim/korap/security/auth/OpenIDconnectAuthentication.java b/src/main/java/de/ids_mannheim/korap/security/auth/OpenIDconnectAuthentication.java
index e8de6c7..9515c93 100644
--- a/src/main/java/de/ids_mannheim/korap/security/auth/OpenIDconnectAuthentication.java
+++ b/src/main/java/de/ids_mannheim/korap/security/auth/OpenIDconnectAuthentication.java
@@ -12,6 +12,7 @@
 import de.ids_mannheim.korap.user.TokenContext;
 import de.ids_mannheim.korap.user.User;
 import de.ids_mannheim.korap.utils.NamingUtils;
+import de.ids_mannheim.korap.utils.StringUtils;
 import net.sf.ehcache.CacheManager;
 import net.sf.ehcache.Element;
 import org.springframework.cache.annotation.CacheEvict;
@@ -41,7 +42,7 @@
     @Override
     public TokenContext getUserStatus (String authToken)
             throws KustvaktException {
-        authToken = NamingUtils.stripTokenType(authToken);
+        authToken = StringUtils.stripTokenType(authToken);
         return this.database.getContext(authToken);
     }
 
diff --git a/src/main/java/de/ids_mannheim/korap/utils/KoralCollectionQueryBuilder.java b/src/main/java/de/ids_mannheim/korap/utils/KoralCollectionQueryBuilder.java
index 86ac337..a559415 100644
--- a/src/main/java/de/ids_mannheim/korap/utils/KoralCollectionQueryBuilder.java
+++ b/src/main/java/de/ids_mannheim/korap/utils/KoralCollectionQueryBuilder.java
@@ -6,6 +6,7 @@
 import de.ids_mannheim.korap.query.serialize.CollectionQueryProcessor;
 import edu.emory.mathcs.backport.java.util.Arrays;
 
+import java.io.IOError;
 import java.util.Map;
 
 /**
@@ -48,9 +49,14 @@
      * @param value
      * @return
      */
-    public KoralCollectionQueryBuilder fieldValue (String field, String op,
+    public KoralCollectionQueryBuilder with (String field, String op,
             String value) {
-        this.builder.append(field + op + value);
+        //String end = this.builder.substring(this.builder.length() - 4,
+        //        this.builder.length() - 1);
+        //if (this.builder.length() != 0
+        //        && (!end.contains("&") | !end.contains("|")))
+        //    throw new RuntimeException("no join operator given!");
+        this.with(field + op + value);
         return this;
     }
 
@@ -107,15 +113,8 @@
         if (this.base != null) {
             // check that collection non empty
             JsonNode tmp = this.base.deepCopy();
-            if (request != null) {
-                JsonNode tobase = request.at("/collection");
-                request = tmp;
-                JsonNode result = JsonBuilder.buildDocGroup(
-                        this.mergeOperator != null ? this.mergeOperator
-                                .toLowerCase() : "and", request
-                                .at("/collection"), tobase);
-                ((ObjectNode) request).put("collection", result);
-            }
+            if (request != null)
+                request = mergeWith(request);
             else
                 request = tmp;
         }
@@ -125,18 +124,26 @@
 
     public JsonNode mergeWith (JsonNode node) {
         if (this.base != null) {
-            // check that collection non empty
             if (node != null) {
                 JsonNode tobase = node.at("/collection");
                 JsonNode base = this.base.deepCopy();
-                JsonNode result = JsonBuilder.buildDocGroup("and",
-                        base.at("/collection"), tobase);
+                JsonNode result = base.at("/collection");
+
+                if (result.isMissingNode() && !tobase.isMissingNode())
+                    result = tobase;
+                else if (result.isMissingNode() && tobase.isMissingNode())
+                    return base;
+                else {
+                    result = JsonBuilder.buildDocGroup(
+                            this.mergeOperator != null ? this.mergeOperator
+                                    .toLowerCase() : "and", result, tobase);
+                }
                 ((ObjectNode) base).put("collection", result);
                 return base;
             }
-            return null;
+            return this.base;
         }
-        return null;
+        throw new RuntimeException("no query found to merge with!");
     }
 
 
@@ -170,22 +177,6 @@
     }
 
 
-    @Deprecated
-    private KoralCollectionQueryBuilder appendToBaseGroup (JsonNode node) {
-        if (base.at("/collection/@type").asText().equals("koral:docGroup")) {
-            ArrayNode group = (ArrayNode) base.at("/collection/operands");
-            if (node instanceof ArrayNode)
-                group.addAll((ArrayNode) node);
-            else
-                group.add(node);
-        }
-        else
-            throw new IllegalArgumentException("No group found to add to!");
-        // fixme: if base is a doc only, this function is not supported. requirement is a koral:docGroup, since
-        // combination operator is unknown otherwise
-        return this;
-    }
-
     private static class JsonBuilder {
 
         public static ObjectNode buildDoc (String key, String value) {
@@ -200,6 +191,8 @@
 
 
         public static ObjectNode buildDocGroup (String op, JsonNode ... groups) {
+            System.out.println("GROUPS " + Arrays.asList(groups));
+
             ObjectNode node = JsonUtils.createObjectNode();
             node.put("@type", "koral:docGroup");
             node.put("operation", "operation:" + op);
diff --git a/src/main/java/de/ids_mannheim/korap/utils/NamingUtils.java b/src/main/java/de/ids_mannheim/korap/utils/NamingUtils.java
index 52f8663..beafb32 100644
--- a/src/main/java/de/ids_mannheim/korap/utils/NamingUtils.java
+++ b/src/main/java/de/ids_mannheim/korap/utils/NamingUtils.java
@@ -10,62 +10,10 @@
  */
 public class NamingUtils {
 
-    private static final String SLASH = "/";
 
 
     private NamingUtils () {}
 
 
-    public static Collection<String> joinStringSet (Collection<String> source,
-            String other) {
-        Set<String> set = new HashSet<>(source);
-        set.add(other);
-        return set;
-    }
-
-
-    public static Collection<UUID> joinUUIDSet (Collection<UUID> source,
-            UUID other) {
-        Set<UUID> set = new HashSet<>(source);
-        set.add(other);
-        return set;
-    }
-
-
-    public static String joinResources (String first, String second) {
-        String res;
-        if (first != null && !first.isEmpty())
-            res = first + SLASH + second;
-        else
-            res = second;
-        return res.replaceAll("\\s", "");
-    }
-
-
-    public static String[] splitAnnotations (String joined) {
-        String[] spl = joined.split(SLASH);
-        if (spl.length == 2)
-            return spl;
-        else
-            return null;
-    }
-
-
-    public static String stripTokenType (String token) {
-        int idx = token.lastIndexOf(" ");
-        if (idx == -1)
-            return token;
-        return token.substring(idx).replaceAll("\\s", "");
-    }
-
-
-    public static String getTokenType (String token) {
-        if (token.contains(" "))
-            return token.substring(0, token.lastIndexOf(" "))
-                    .replaceAll("\\s", "").toLowerCase();
-        else
-            return null;
-    }
-
 
 }
diff --git a/src/main/java/de/ids_mannheim/korap/utils/StringUtils.java b/src/main/java/de/ids_mannheim/korap/utils/StringUtils.java
index e5ab428..f942250 100644
--- a/src/main/java/de/ids_mannheim/korap/utils/StringUtils.java
+++ b/src/main/java/de/ids_mannheim/korap/utils/StringUtils.java
@@ -11,6 +11,7 @@
             .getLogger(StringUtils.class);
 
     private static final String SEP = ";";
+    private static final String SLASH = "/";
 
 
     public static Collection<UUID> stringToUUIDList (String s) {
@@ -136,4 +137,72 @@
         return StringEscapeUtils.unescapeHtml(value);
     }
 
+
+    public static String getDocSigle (String textSigle) {
+        if (textSigle != null)
+            return textSigle.split("\\.")[0];
+        return null;
+    }
+
+
+    public static String getCorpusSigle (String textSigle) {
+        //WPD_SSS.07367
+        if (textSigle != null)
+            return textSigle.split("_")[0];
+        return null;
+    }
+
+
+    public static Collection<String> joinStringSet (Collection<String> source,
+            String other) {
+        Set<String> set = new HashSet<>(source);
+        set.add(other);
+        return set;
+    }
+
+
+    public static Collection<UUID> joinUUIDSet (Collection<UUID> source,
+            UUID other) {
+        Set<UUID> set = new HashSet<>(source);
+        set.add(other);
+        return set;
+    }
+
+
+    public static String joinResources (String first, String second) {
+        String res;
+        if (first != null && !first.isEmpty())
+            res = first + SLASH + second;
+        else
+            res = second;
+        return res.replaceAll("\\s", "");
+    }
+
+
+    public static String[] splitAnnotations (String joined) {
+        String[] spl = joined.split(SLASH);
+        if (spl.length == 2)
+            return spl;
+        else
+            return null;
+    }
+
+
+    public static String stripTokenType (String token) {
+        int idx = token.lastIndexOf(" ");
+        if (idx == -1)
+            return token;
+        return token.substring(idx).replaceAll("\\s", "");
+    }
+
+
+    public static String getTokenType (String token) {
+        if (token.contains(" "))
+            return token.substring(0, token.lastIndexOf(" "))
+                    .replaceAll("\\s", "").toLowerCase();
+        else
+            return null;
+    }
+
+
 }
diff --git a/src/main/java/de/ids_mannheim/korap/utils/UserPropertyReader.java b/src/main/java/de/ids_mannheim/korap/utils/UserPropertyReader.java
index 4bc7055..70207fe 100644
--- a/src/main/java/de/ids_mannheim/korap/utils/UserPropertyReader.java
+++ b/src/main/java/de/ids_mannheim/korap/utils/UserPropertyReader.java
@@ -73,7 +73,7 @@
                 throw new KustvaktException(StatusCodes.ILLEGAL_ARGUMENT);
 
             try {
-                pass = crypto.produceSecureHash(pass);
+                pass = crypto.secureHash(pass);
             }
             catch (NoSuchAlgorithmException | UnsupportedEncodingException e) {
                 throw new KustvaktException(StatusCodes.REQUEST_INVALID);
@@ -93,7 +93,7 @@
                 throw new KustvaktException(StatusCodes.ILLEGAL_ARGUMENT);
 
             try {
-                pass = crypto.produceSecureHash(pass);
+                pass = crypto.secureHash(pass);
             }
             catch (NoSuchAlgorithmException | UnsupportedEncodingException e) {
                 throw new KustvaktException(StatusCodes.REQUEST_INVALID);
diff --git a/src/main/java/de/ids_mannheim/korap/web/filter/AdminFilter.java b/src/main/java/de/ids_mannheim/korap/web/filter/AdminFilter.java
index 29763fa..c06c3fe 100644
--- a/src/main/java/de/ids_mannheim/korap/web/filter/AdminFilter.java
+++ b/src/main/java/de/ids_mannheim/korap/web/filter/AdminFilter.java
@@ -4,12 +4,14 @@
 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.AdminSetup;
 import de.ids_mannheim.korap.config.BeansFactory;
+import de.ids_mannheim.korap.interfaces.EncryptionIface;
 import de.ids_mannheim.korap.user.TokenContext;
 import de.ids_mannheim.korap.user.User;
 import de.ids_mannheim.korap.utils.NamingUtils;
 import de.ids_mannheim.korap.utils.StringUtils;
-import de.ids_mannheim.korap.web.utils.KorAPContext;
+import de.ids_mannheim.korap.web.utils.KustvaktContext;
 import de.ids_mannheim.korap.web.utils.KustvaktResponseHandler;
 
 import javax.ws.rs.ext.Provider;
@@ -21,7 +23,6 @@
 @Provider
 public class AdminFilter implements ContainerRequestFilter, ResourceFilter {
 
-    // check over ssl!
     @Override
     public ContainerRequest filter (ContainerRequest cr) {
         // todo:
@@ -31,18 +32,24 @@
         String authentication = cr
                 .getHeaderValue(ContainerRequest.AUTHORIZATION);
 
-        if (authentication != null
-                && authentication.endsWith(BeansFactory.getKustvaktContext()
-                        .getConfiguration().getAdminToken())) {
-            TokenContext c = new TokenContext();
-            c.setUsername(User.ADMINISTRATOR_NAME);
-            c.setTokenType(NamingUtils.getTokenType(authentication));
-            c.setToken(NamingUtils.stripTokenType(authentication));
-            cr.setSecurityContext(new KorAPContext(c));
+        //if (authentication != null
+        //        && authentication.endsWith(BeansFactory.getKustvaktContext()
+        //                .getConfiguration().getAdminToken())) {
+        if (authentication != null && cr.isSecure()) {
+            String token = StringUtils.stripTokenType(authentication);
+            EncryptionIface crypto = BeansFactory.getKustvaktContext()
+                    .getEncryption();
+
+            if (crypto.checkHash(token, AdminSetup.getInstance().getHash())) {
+                TokenContext c = new TokenContext();
+                c.setUsername(User.ADMINISTRATOR_NAME);
+                c.setTokenType(StringUtils.getTokenType(authentication));
+                c.setToken(StringUtils.stripTokenType(authentication));
+                cr.setSecurityContext(new KustvaktContext(c));
+            }
         }
         else
             throw KustvaktResponseHandler.throwAuthenticationException();
-
         return cr;
     }
 
diff --git a/src/main/java/de/ids_mannheim/korap/web/filter/AuthFilter.java b/src/main/java/de/ids_mannheim/korap/web/filter/AuthFilter.java
index df3157b..194d76d 100644
--- a/src/main/java/de/ids_mannheim/korap/web/filter/AuthFilter.java
+++ b/src/main/java/de/ids_mannheim/korap/web/filter/AuthFilter.java
@@ -8,7 +8,7 @@
 import de.ids_mannheim.korap.exceptions.KustvaktException;
 import de.ids_mannheim.korap.interfaces.AuthenticationManagerIface;
 import de.ids_mannheim.korap.user.TokenContext;
-import de.ids_mannheim.korap.web.utils.KorAPContext;
+import de.ids_mannheim.korap.web.utils.KustvaktContext;
 import de.ids_mannheim.korap.web.utils.KustvaktResponseHandler;
 
 import javax.ws.rs.ext.Provider;
@@ -50,7 +50,7 @@
                     && context.isValid()
                     && ((context.isSecureRequired() && request.isSecure()) | !context
                             .isSecureRequired()))
-                request.setSecurityContext(new KorAPContext(context));
+                request.setSecurityContext(new KustvaktContext(context));
             else
                 throw KustvaktResponseHandler.throwAuthenticationException();
         }
diff --git a/src/main/java/de/ids_mannheim/korap/web/filter/DefaultFilter.java b/src/main/java/de/ids_mannheim/korap/web/filter/DefaultFilter.java
index 107c5e1..708a649 100644
--- a/src/main/java/de/ids_mannheim/korap/web/filter/DefaultFilter.java
+++ b/src/main/java/de/ids_mannheim/korap/web/filter/DefaultFilter.java
@@ -8,7 +8,7 @@
 import de.ids_mannheim.korap.user.TokenContext;
 import de.ids_mannheim.korap.user.User;
 import de.ids_mannheim.korap.utils.TimeUtils;
-import de.ids_mannheim.korap.web.utils.KorAPContext;
+import de.ids_mannheim.korap.web.utils.KustvaktContext;
 
 import javax.ws.rs.core.Context;
 import javax.ws.rs.core.UriInfo;
@@ -42,8 +42,8 @@
                 // do nothing
             }
             if (pr == null)
-                request.setSecurityContext(new KorAPContext(createShorterToken(
-                        host, ua)));
+                request.setSecurityContext(new KustvaktContext(
+                        createShorterToken(host, ua)));
 
         }
         return request;
diff --git a/src/main/java/de/ids_mannheim/korap/web/filter/DemoFilter.java b/src/main/java/de/ids_mannheim/korap/web/filter/DemoFilter.java
index ff77428..2a06655 100644
--- a/src/main/java/de/ids_mannheim/korap/web/filter/DemoFilter.java
+++ b/src/main/java/de/ids_mannheim/korap/web/filter/DemoFilter.java
@@ -7,7 +7,7 @@
 import de.ids_mannheim.korap.security.auth.BasicHttpAuth;
 import de.ids_mannheim.korap.config.Attributes;
 import de.ids_mannheim.korap.user.TokenContext;
-import de.ids_mannheim.korap.web.utils.KorAPContext;
+import de.ids_mannheim.korap.web.utils.KustvaktContext;
 
 import javax.ws.rs.core.SecurityContext;
 import javax.ws.rs.ext.Provider;
@@ -41,7 +41,7 @@
         context.setToken(token);
         context.setTokenType(Attributes.BASIC_AUTHENTICATION);
         context.setUsername("demo");
-        return new KorAPContext(context);
+        return new KustvaktContext(context);
     }
 
 
diff --git a/src/main/java/de/ids_mannheim/korap/web/service/CollectionLoader.java b/src/main/java/de/ids_mannheim/korap/web/service/CollectionLoader.java
index be4593f..084a686 100644
--- a/src/main/java/de/ids_mannheim/korap/web/service/CollectionLoader.java
+++ b/src/main/java/de/ids_mannheim/korap/web/service/CollectionLoader.java
@@ -29,20 +29,21 @@
                 .toUser(KustvaktConfiguration.KUSTVAKT_USER);
 
         KoralCollectionQueryBuilder bui = new KoralCollectionQueryBuilder();
-        bui.with("creationDate since 1775");
+        bui.with("creationDate since 1775 & corpusSigle=GOE");
 
         VirtualCollection c1 = new VirtualCollection();
         c1.setName("Weimarer Werke");
-        c1.addField(Attributes.QUERY, bui.toJSON());
+
+        c1.setFields(bui.toJSON());
 
         c1.setDescription("Goethe-Werke in Weimar (seit 1775)");
 
         bui = new KoralCollectionQueryBuilder();
-        bui.with("textType = Aphorismus");
+        bui.with("textType=Aphorismus");
 
         VirtualCollection c2 = new VirtualCollection();
         c2.setName("Aphorismen");
-        c2.addField(Attributes.QUERY, bui.toJSON());
+        c2.setFields(bui.toJSON());
         c2.setDescription("Aphorismentexte Goethes");
 
         bui = new KoralCollectionQueryBuilder();
@@ -50,7 +51,7 @@
 
         VirtualCollection c3 = new VirtualCollection();
         c3.setName("Werther");
-        c3.addField(Attributes.QUERY, bui.toJSON());
+        c3.setFields(bui.toJSON());
         c3.setDescription("Goethe - Die Leiden des jungen Werther");
 
         PolicyBuilder b = new PolicyBuilder(user);
diff --git a/src/main/java/de/ids_mannheim/korap/web/service/full/AdminService.java b/src/main/java/de/ids_mannheim/korap/web/service/full/AdminService.java
index 08fd322..21ac9b8 100644
--- a/src/main/java/de/ids_mannheim/korap/web/service/full/AdminService.java
+++ b/src/main/java/de/ids_mannheim/korap/web/service/full/AdminService.java
@@ -26,6 +26,7 @@
 import org.joda.time.format.DateTimeFormat;
 import org.joda.time.format.DateTimeFormatter;
 import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import javax.ws.rs.*;
 import javax.ws.rs.core.Context;
@@ -42,7 +43,7 @@
 @Produces(MediaType.APPLICATION_JSON + ";charset=utf-8")
 public class AdminService {
 
-    private static Logger jlog = KustvaktLogger.getLogger(AdminService.class);
+    private static Logger jlog = LoggerFactory.getLogger(AdminService.class);
     // todo: map in timeutils
     private static DateTimeFormatter dtf = DateTimeFormat
             .forPattern("dd/MM/yyyy");
@@ -136,9 +137,9 @@
     }
 
 
-    //fixme: documentservice?!
     @POST
     @Path("doc/{id}/add")
+    @Deprecated
     public Response addDocument (@PathParam("id") String id) {
         Document document = new Document(id);
         try {
diff --git a/src/main/java/de/ids_mannheim/korap/web/service/full/DocumentService.java b/src/main/java/de/ids_mannheim/korap/web/service/full/DocumentService.java
index e1648d2..83dee9c 100644
--- a/src/main/java/de/ids_mannheim/korap/web/service/full/DocumentService.java
+++ b/src/main/java/de/ids_mannheim/korap/web/service/full/DocumentService.java
@@ -11,6 +11,7 @@
 import de.ids_mannheim.korap.web.filter.AdminFilter;
 import de.ids_mannheim.korap.web.utils.KustvaktResponseHandler;
 import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import javax.ws.rs.*;
 import javax.ws.rs.core.MediaType;
@@ -26,8 +27,7 @@
 @Produces(MediaType.APPLICATION_JSON + ";charset=utf-8")
 public class DocumentService {
 
-    private static Logger jlog = KustvaktLogger
-            .getLogger(DocumentService.class);
+    private static Logger jlog = LoggerFactory.getLogger(DocumentService.class);
     private DocumentDao documentDao;
 
 
diff --git a/src/main/java/de/ids_mannheim/korap/web/service/full/ResourceService.java b/src/main/java/de/ids_mannheim/korap/web/service/full/ResourceService.java
index 5f318f6..dd29b09 100644
--- a/src/main/java/de/ids_mannheim/korap/web/service/full/ResourceService.java
+++ b/src/main/java/de/ids_mannheim/korap/web/service/full/ResourceService.java
@@ -63,7 +63,6 @@
         this.config = BeansFactory.getKustvaktContext().getConfiguration();
         this.resourceHandler = new ResourceHandler();
         this.searchKrill = new SearchKrill(config.getIndexDir());
-
         UriBuilder builder = UriBuilder.fromUri("http://10.0.10.13").port(9997);
         this.graphDBhandler = new ClientsHandler(builder.build());
 
@@ -120,7 +119,7 @@
             @Context Locale locale, @PathParam("type") String type,
             @PathParam("id") String id, @PathParam("child") String child) {
         return getResource(context, locale, type,
-                NamingUtils.joinResources(id, child));
+                StringUtils.joinResources(id, child));
     }
 
 
@@ -275,6 +274,7 @@
     }
 
 
+    // ref query parameter removed!
     @TRACE
     @Path("search")
     public Response buildQuery (@Context Locale locale,
@@ -284,20 +284,21 @@
             @QueryParam("cutoff") Boolean cutoff,
             @QueryParam("count") Integer pageLength,
             @QueryParam("offset") Integer pageIndex,
-            @QueryParam("page") Integer startPage,
-            @QueryParam("ref") String reference, @QueryParam("cq") String cq) {
+            @QueryParam("page") Integer startPage, @QueryParam("cq") String cq) {
         TokenContext ctx = (TokenContext) securityContext.getUserPrincipal();
         QuerySerializer ss;
 
-        User user;
-        try {
-            user = controller.getUser(ctx.getUsername());
-        }
-        catch (KustvaktException e) {
-            throw KustvaktResponseHandler.throwit(e);
-        }
+        //User user;
+        //try {
+        //    user = controller.getUser(ctx.getUsername());
+        //}
+        //catch (KustvaktException e) {
+        //    throw KustvaktResponseHandler.throwit(e);
+        //}
 
         ss = new QuerySerializer().setQuery(q, ql, v);
+        if (cq != null)
+            ss.setCollection(cq);
 
         MetaQueryBuilder meta = new MetaQueryBuilder();
         if (pageIndex != null)
@@ -311,9 +312,7 @@
         meta.addEntry("cutOff", cutoff);
 
         ss.setMeta(meta.raw());
-
-        String query = this.processor.processQuery(ss.toJSON(), user);
-        return Response.ok(query).build();
+        return Response.ok(ss.toJSON()).build();
     }
 
 
@@ -331,10 +330,10 @@
      * @return
      */
 
-    //todo: does cq have any sensible worth here?
+    //todo: does cq have any sensible worth here? --> would say no! --> is useful in non type/id scenarios
     @TRACE
     @Path("{type}/{id}/search")
-    public Response buildQuery (@Context Locale locale,
+    public Response buildQueryWithId (@Context Locale locale,
             @Context SecurityContext securityContext,
             @QueryParam("q") String q, @QueryParam("ql") String ql,
             @QueryParam("v") String v, @QueryParam("context") String context,
@@ -342,8 +341,7 @@
             @QueryParam("count") Integer pageLength,
             @QueryParam("offset") Integer pageIndex,
             @QueryParam("page") Integer startPage,
-            @PathParam("type") String type, @PathParam("id") String id,
-            @QueryParam("cq") String cq) {
+            @PathParam("type") String type, @PathParam("id") String id) {
         TokenContext ctx = (TokenContext) securityContext.getUserPrincipal();
         type = StringUtils.normalize(type);
         id = StringUtils.decodeHTML(id);
@@ -363,40 +361,40 @@
             meta.addEntry("cutOff", cutoff);
 
         ss.setMeta(meta.raw());
-        if (cq != null)
-            ss.setCollection(cq);
 
         KoralCollectionQueryBuilder cquery = new KoralCollectionQueryBuilder();
         cquery.setBaseQuery(ss.toJSON());
 
+
+        String query = "";
+        KustvaktResource resource;
         try {
             User user = controller.getUser(ctx.getUsername());
 
-            //todo: instead of throwing exception, build notification and rewrites into result query
-            KustvaktResource resource;
             if (StringUtils.isInteger(id))
                 resource = this.resourceHandler.findbyIntId(
                         Integer.valueOf(id), user);
             else
                 resource = this.resourceHandler.findbyStrId(id, user,
                         ResourceFactory.getResourceClass(type));
-
-            // todo: test this
-            if (resource instanceof VirtualCollection)
-                cquery.mergeWith(resource.getData());
-            else if (resource instanceof Corpus)
-                cquery.with(Attributes.CORPUS_SIGLE
-                        + resource.getPersistentID());
-
         }
         catch (KustvaktException e) {
-            jlog.error("Exception encountered!", e);
-            //throw KustvaktResponseHandler.throwit(e);
+            //todo: instead of throwing exception, build notification and rewrites into result query
+            jlog.error("Exception encountered!");
+            throw KustvaktResponseHandler.throwit(e);
         }
 
-
-        // todo: policy parsing before return
-        return Response.ok(ss.toJSON()).build();
+        if (resource != null) {
+            if (resource instanceof VirtualCollection)
+                query = JsonUtils.toJSON(cquery.and().mergeWith(
+                        resource.getData()));
+            else if (resource instanceof Corpus) {
+                cquery.and().with(Attributes.CORPUS_SIGLE, "=",
+                        resource.getPersistentID());
+                query = cquery.toJSON();
+            }
+        }
+        return Response.ok(query).build();
     }
 
 
@@ -410,7 +408,7 @@
         // todo: should be possible to add the meta part to the query serialization
         try {
             User user = controller.getUser(ctx.getUsername());
-            jsonld = this.processor.processQuery(jsonld, user);
+            //jsonld = this.processor.processQuery(jsonld, user);
         }
         catch (KustvaktException e) {
             throw KustvaktResponseHandler.throwit(e);
@@ -418,6 +416,7 @@
         jlog.info("Serialized search: {}", jsonld);
 
         String result = searchKrill.search(jsonld);
+        // todo: logging
         KustvaktLogger.QUERY_LOGGER.trace("The result set: {}", result);
         return Response.ok(result).build();
     }
@@ -436,10 +435,8 @@
             @QueryParam("cq") String cq, @QueryParam("engine") String engine) {
         TokenContext context = (TokenContext) securityContext
                 .getUserPrincipal();
-        KoralCollectionQueryBuilder cquery = new KoralCollectionQueryBuilder();
         KustvaktConfiguration.BACKENDS eng = this.config.chooseBackend(engine);
         User user;
-        // todo: not added to query!!
         try {
             user = controller.getUser(context.getUsername());
         }
@@ -451,10 +448,8 @@
         QuerySerializer serializer = new QuerySerializer();
         serializer.setQuery(q, ql, v);
 
-        // todo: parse for security reasons
-        // todo: remove cq parameter
-        // if (cq != null)
-        //    serializer.setCollection(cq);
+        if (cq != null)
+            serializer.setCollection(cq);
 
         MetaQueryBuilder meta = new MetaQueryBuilder();
         meta.addEntry("startIndex", pageIndex);
@@ -468,7 +463,6 @@
         //        meta.addEntry("itemsPerResource", 1);
         serializer.setMeta(meta.raw());
 
-        //fixme: policy rewrite!
         String query = this.processor.processQuery(serializer.toJSON(), user);
 
         jlog.info("the serialized query {}", query);
@@ -508,7 +502,7 @@
      * @param locale
      * @return
      */
-    //fixme: does not use policyrewrite!
+    // todo: remove raw
     @GET
     @Path("/{type}/{id}/search")
     public Response searchbyName (@Context SecurityContext securityContext,
@@ -538,7 +532,6 @@
                 QuerySerializer s = new QuerySerializer();
                 s.setQuery(query, ql, v);
 
-                // fixme: be replaced by public collection rewrite
                 KoralCollectionQueryBuilder builder = new KoralCollectionQueryBuilder();
 
                 KustvaktResource resource;
@@ -570,10 +563,6 @@
                 s.setMeta(meta.raw());
 
                 query = s.toJSON();
-                //                PolicyParser parser = new PolicyParser(user);
-                //                query = parser.parse(s.toJSON());
-                //todo: 1
-
             }
             String result;
             try {
@@ -633,11 +622,11 @@
 
     @GET
     @Path("{type}/{id}/{child}/stats")
-    public Response getStatisticsbyName (@Context SecurityContext context,
+    public Response getStatisticsbyIdChild (@Context SecurityContext context,
             @Context Locale locale, @PathParam("type") String type,
             @PathParam("id") String id, @PathParam("child") String child) {
         return getStatisticsbyId(context, locale, type,
-                NamingUtils.joinResources(id, child));
+                StringUtils.joinResources(id, child));
     }
 
 
@@ -928,7 +917,7 @@
             @Context Locale locale, @PathParam("type") String type,
             @PathParam("id") String id, @PathParam("child") String child) {
         return deleteResource(context, locale, type,
-                NamingUtils.joinResources(id, child));
+                StringUtils.joinResources(id, child));
     }
 
 
@@ -998,7 +987,7 @@
                     if (!manager.isAllowed())
                         continue;
 
-                    String[] sep = NamingUtils.splitAnnotations(spl);
+                    String[] sep = StringUtils.splitAnnotations(spl);
                     if (spl != null) {
                         f_list.add(sep[0]);
                         l_list.add(sep[1]);
@@ -1035,7 +1024,7 @@
             foundries = new HashSet<>();
             layers = new HashSet<>();
             for (Layer r : resources) {
-                String[] spl = NamingUtils.splitAnnotations(r.getName());
+                String[] spl = StringUtils.splitAnnotations(r.getName());
                 if (spl != null) {
                     foundries.add(spl[0]);
                     layers.add(spl[1]);
@@ -1061,7 +1050,7 @@
 
     // todo:?!
     @POST
-    @Path("match/{id}/save")
+    @Path("match/{id}")
     @Deprecated
     public Response save (@PathParam("{id}") String id,
             @QueryParam("d") String description,
@@ -1093,8 +1082,8 @@
     }
 
 
-    @POST
-    @Path("match/{id}/delete")
+    @DELETE
+    @Path("match/{id}")
     @Deprecated
     public Response remove (@PathParam("{id}") String id,
             @Context SecurityContext context) {
diff --git a/src/main/java/de/ids_mannheim/korap/web/utils/KorAPContext.java b/src/main/java/de/ids_mannheim/korap/web/utils/KustvaktContext.java
similarity index 86%
rename from src/main/java/de/ids_mannheim/korap/web/utils/KorAPContext.java
rename to src/main/java/de/ids_mannheim/korap/web/utils/KustvaktContext.java
index 2424d4b..f34cd43 100644
--- a/src/main/java/de/ids_mannheim/korap/web/utils/KorAPContext.java
+++ b/src/main/java/de/ids_mannheim/korap/web/utils/KustvaktContext.java
@@ -12,12 +12,12 @@
  *       wrapper for REST security context
  * 
  */
-public class KorAPContext implements SecurityContext {
+public class KustvaktContext implements SecurityContext {
 
     private TokenContext user;
 
 
-    public KorAPContext (final TokenContext user) {
+    public KustvaktContext (final TokenContext user) {
         this.user = user;
     }
 
diff --git a/src/main/resources/codes.kustvakt b/src/main/resources/codes.kustvakt
new file mode 100644
index 0000000..01fa0d8
--- /dev/null
+++ b/src/main/resources/codes.kustvakt
@@ -0,0 +1,2 @@
+[{code=100, message=}
+]
\ No newline at end of file
diff --git a/src/main/resources/db/sqlite/V1__Initial_version.sql b/src/main/resources/db/sqlite/V1__Initial_version.sql
index d109779..eaa32ff 100644
--- a/src/main/resources/db/sqlite/V1__Initial_version.sql
+++ b/src/main/resources/db/sqlite/V1__Initial_version.sql
@@ -86,6 +86,7 @@
 CREATE TABLE IF NOT EXISTS doc_store (
 id INTEGER PRIMARY KEY AUTOINCREMENT,
 persistent_id VARCHAR(100) UNIQUE,
+doc_sigle VARCHAR(100),
 created BIGINT NOT NULL DEFAULT CURRENT_TIMESTAMP,
 disabled BOOLEAN DEFAULT TRUE
 );
diff --git a/src/test/java/CollectionQueryBuilderTest.java b/src/test/java/CollectionQueryBuilderTest.java
index f895962..31ca114 100644
--- a/src/test/java/CollectionQueryBuilderTest.java
+++ b/src/test/java/CollectionQueryBuilderTest.java
@@ -1,5 +1,7 @@
 import com.fasterxml.jackson.databind.JsonNode;
 import de.ids_mannheim.korap.query.serialize.QuerySerializer;
+import de.ids_mannheim.korap.resources.KustvaktResource;
+import de.ids_mannheim.korap.resources.VirtualCollection;
 import de.ids_mannheim.korap.utils.KoralCollectionQueryBuilder;
 import de.ids_mannheim.korap.utils.JsonUtils;
 import org.junit.Ignore;
@@ -211,6 +213,49 @@
 
 
     @Test
+    public void testNodeMergeWithoutBase () {
+        String query = "[base=Haus]";
+        QuerySerializer check = new QuerySerializer();
+        check.setQuery(query, "poliqarp");
+
+        KoralCollectionQueryBuilder b = new KoralCollectionQueryBuilder();
+        b.setBaseQuery(check.toJSON());
+
+        KoralCollectionQueryBuilder test = new KoralCollectionQueryBuilder();
+        test.with("corpusSigle=WPD");
+        String json = test.toJSON();
+        System.out.println(json);
+        //JsonNode node = (JsonNode) test.rebaseCollection(null);
+        //node = b.mergeWith(node);
+        //assertNotNull(node);
+        //assertEquals("koral:doc", node.at("/collection/@type").asText());
+        //assertEquals("corpusSigle", node.at("/collection/key").asText());
+    }
+
+
+    @Test
+    public void testNodeMergeWithoutBaseWrongOperator () {
+        String query = "[base=Haus]";
+        QuerySerializer check = new QuerySerializer();
+        check.setQuery(query, "poliqarp");
+
+        KoralCollectionQueryBuilder b = new KoralCollectionQueryBuilder();
+        b.setBaseQuery(check.toJSON());
+
+        KoralCollectionQueryBuilder test = new KoralCollectionQueryBuilder();
+        // operator is not supposed to be here!
+        test.and().with("corpusSigle=WPD");
+        String json = test.toJSON();
+        System.out.println(json);
+        //JsonNode node = (JsonNode) test.rebaseCollection(null);
+        //node = b.mergeWith(node);
+        //assertNotNull(node);
+        //assertEquals("koral:doc", node.at("/collection/@type").asText());
+        //assertEquals("corpusSigle", node.at("/collection/key").asText());
+    }
+
+
+    @Test
     public void testStoredCollectionBaseQueryBuild () {
 
     }
@@ -274,25 +319,114 @@
 
 
     @Test
-    @Ignore
-    public void testMergeOperator () {
-        String coll = "corpusSigle=WPD";
-        String query = "[base=Haus]";
-        QuerySerializer check = new QuerySerializer();
-        check.setQuery(query, "poliqarp");
-        check.setCollection(coll);
+    public void testCollectionMergeWithFromResource () {
+        KoralCollectionQueryBuilder builder = new KoralCollectionQueryBuilder();
+        builder.with("textClass=politik & corpusSigle=WPD");
+        KustvaktResource resource = new VirtualCollection();
+        resource.setName("collection_1");
+        String json = builder.toJSON();
+        resource.setFields(json);
 
-        KoralCollectionQueryBuilder b = new KoralCollectionQueryBuilder();
-        b.setBaseQuery(check.toJSON());
+        assertEquals(json, resource.getStringData());
+        builder = new KoralCollectionQueryBuilder();
+        builder.setBaseQuery(resource.getData());
+        builder.or().with("pubPlace=Mannheim");
 
-        KoralCollectionQueryBuilder test = new KoralCollectionQueryBuilder();
-        test.with("textClass=wissenschaft | textClass=politik");
-        JsonNode node = (JsonNode) test.rebaseCollection();
-        node = b.mergeWith(node);
+        System.out.println("query " + builder.toJSON());
+        // todo: assertions
+    }
+
+
+    @Test
+    public void testCollectionMergeWithFromResourceNoCollection () {
+        KoralCollectionQueryBuilder builder = new KoralCollectionQueryBuilder();
+        builder.with("textClass=politik & corpusSigle=WPD");
+        KustvaktResource resource = new VirtualCollection();
+        resource.setName("collection_1");
+        String json = builder.toJSON();
+        resource.setFields(json);
+
+        assertEquals(json, resource.getStringData());
+        builder = new KoralCollectionQueryBuilder();
+        builder.setBaseQuery(resource.getData());
+        builder.or().with("pubPlace=Mannheim");
+
+        System.out.println("query " + builder.toJSON());
+        // todo: assertions
+    }
+
+
+    @Test
+    public void testCollectionMergeFromQuerySerializer () {
+        QuerySerializer s = new QuerySerializer();
+        s.setQuery("[base=Haus]", "poliqarp");
+        KoralCollectionQueryBuilder total = new KoralCollectionQueryBuilder();
+        total.setBaseQuery(s.toJSON());
+
+
+        KoralCollectionQueryBuilder builder = new KoralCollectionQueryBuilder();
+        builder.with("textClass=politik & corpusSigle=WPD");
+        KustvaktResource resource = new VirtualCollection();
+        resource.setName("collection_1");
+        String json = builder.toJSON();
+        resource.setFields(json);
+        // operator is irrelevant here
+        JsonNode node = total.or().mergeWith(resource.getData());
         assertNotNull(node);
         assertEquals("koral:docGroup", node.at("/collection/@type").asText());
         assertEquals("operation:and", node.at("/collection/operation").asText());
-        assertEquals(2, node.at("/collection/operands").size());
+        assertEquals("textClass", node.at("/collection/operands/0/key")
+                .asText());
+        assertEquals("corpusSigle", node.at("/collection/operands/1/key")
+                .asText());
     }
 
+
+    @Test
+    public void testBaseCollectionNull () {
+        // base is missing collection segment
+        QuerySerializer s = new QuerySerializer();
+        s.setQuery("[base=Haus]", "poliqarp");
+
+        KoralCollectionQueryBuilder total = new KoralCollectionQueryBuilder();
+        total.setBaseQuery(s.toJSON());
+
+        KoralCollectionQueryBuilder builder = new KoralCollectionQueryBuilder();
+        builder.with("textClass=politik & corpusSigle=WPD");
+        JsonNode node = total.and().mergeWith(
+                (JsonNode) builder.rebaseCollection());
+
+        assertNotNull(node);
+        assertEquals("koral:docGroup", node.at("/collection/@type").asText());
+        assertEquals("operation:and", node.at("/collection/operation").asText());
+        assertEquals("koral:doc", node.at("/collection/operands/0/@type")
+                .asText());
+        assertEquals("koral:doc", node.at("/collection/operands/1/@type")
+                .asText());
+        assertEquals("textClass", node.at("/collection/operands/0/key")
+                .asText());
+        assertEquals("corpusSigle", node.at("/collection/operands/1/key")
+                .asText());
+    }
+
+
+    @Test
+    public void testMergeCollectionNull () {
+        // merge json is missing collection segment
+        QuerySerializer s = new QuerySerializer();
+        s.setQuery("[base=Haus]", "poliqarp");
+        s.setCollection("textClass=wissenschaft");
+
+        KoralCollectionQueryBuilder total = new KoralCollectionQueryBuilder();
+        total.setBaseQuery(s.toJSON());
+
+        KoralCollectionQueryBuilder builder = new KoralCollectionQueryBuilder();
+        JsonNode node = total.and().mergeWith(
+                (JsonNode) builder.rebaseCollection());
+        assertNotNull(node);
+        assertEquals("koral:doc", node.at("/collection/@type").asText());
+        assertEquals("textClass", node.at("/collection/key").asText());
+    }
+
+
 }
diff --git a/src/test/java/de/ids_mannheim/korap/config/ConfigTest.java b/src/test/java/de/ids_mannheim/korap/config/ConfigTest.java
index c11b7e3..5070bfe 100644
--- a/src/test/java/de/ids_mannheim/korap/config/ConfigTest.java
+++ b/src/test/java/de/ids_mannheim/korap/config/ConfigTest.java
@@ -1,11 +1,21 @@
 package de.ids_mannheim.korap.config;
 
 import de.ids_mannheim.korap.exceptions.KustvaktException;
+import de.ids_mannheim.korap.interfaces.EncryptionIface;
 import de.ids_mannheim.korap.utils.ServiceInfo;
 import de.ids_mannheim.korap.utils.TimeUtils;
 import de.ids_mannheim.korap.web.service.BootableBeanInterface;
+import de.ids_mannheim.korap.web.service.full.AdminService;
+import org.apache.lucene.util.IOUtils;
+import org.codehaus.plexus.util.IOUtil;
+import org.junit.Assert;
 import org.junit.Test;
 
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.security.NoSuchAlgorithmException;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Set;
@@ -18,6 +28,22 @@
  */
 public class ConfigTest extends BeanConfigTest {
 
+
+    @Test
+    public void testAdminHash () throws IOException, KustvaktException,
+            NoSuchAlgorithmException {
+        AdminSetup setup = AdminSetup.getInstance();
+        String hash = setup.getHash();
+        File f = new File("./admin_token");
+        FileInputStream stream = new FileInputStream(f);
+        String token = IOUtil.toString(stream);
+        assertNotEquals("", hash);
+        assertNotEquals("", token);
+        EncryptionIface crypto = helper().getContext().getEncryption();
+        assertTrue(crypto.checkHash(token, hash));
+    }
+
+
     @Test
     public void testServiceInfo () {
         String version = ServiceInfo.getInfo().getVersion();
diff --git a/src/test/java/de/ids_mannheim/korap/config/StringUtilsTest.java b/src/test/java/de/ids_mannheim/korap/config/StringUtilsTest.java
new file mode 100644
index 0000000..c77184c
--- /dev/null
+++ b/src/test/java/de/ids_mannheim/korap/config/StringUtilsTest.java
@@ -0,0 +1,26 @@
+package de.ids_mannheim.korap.config;
+
+import de.ids_mannheim.korap.utils.StringUtils;
+import org.junit.Test;
+
+import static org.junit.Assert.assertEquals;
+
+/**
+ * Created by hanl on 29.05.16.
+ */
+public class StringUtilsTest {
+
+    @Test
+    public void testTextIToDoc () {
+        String textSigle = "WPD_AAA.02439";
+        String docSigle = "WPD_AAA";
+        assertEquals(docSigle, StringUtils.getDocSigle(textSigle));
+        assertEquals(docSigle, StringUtils.getDocSigle(docSigle));
+    }
+
+
+    @Test
+    public void testSQLRegexBuild () {
+
+    }
+}
diff --git a/src/test/java/de/ids_mannheim/korap/config/TestHelper.java b/src/test/java/de/ids_mannheim/korap/config/TestHelper.java
index 2c36b66..b51e0b3 100644
--- a/src/test/java/de/ids_mannheim/korap/config/TestHelper.java
+++ b/src/test/java/de/ids_mannheim/korap/config/TestHelper.java
@@ -124,7 +124,7 @@
 
             try {
                 String hash = ((EncryptionIface) getBean(ContextHolder.KUSTVAKT_ENCRYPTION))
-                        .produceSecureHash(password);
+                        .secureHash(password);
                 m.put(Attributes.PASSWORD, hash);
             }
             catch (NoSuchAlgorithmException | UnsupportedEncodingException
diff --git a/src/test/java/de/ids_mannheim/korap/config/TestVariables.java b/src/test/java/de/ids_mannheim/korap/config/TestVariables.java
new file mode 100644
index 0000000..1e157a5
--- /dev/null
+++ b/src/test/java/de/ids_mannheim/korap/config/TestVariables.java
@@ -0,0 +1,473 @@
+package de.ids_mannheim.korap.config;
+
+/**
+ * Created by hanl on 30.05.16.
+ */
+public class TestVariables {
+
+    public static final String SIMPLE_ADD_QUERY = "[pos=ADJA]";
+
+    public static final String RESULT = "{\n"
+            + "\t\"@context\": \"http://korap.ids-mannheim.de/ns/KoralQuery/v0.3/context.jsonld\",\n"
+            + "\t\"meta\": {\n"
+            + "\t\t\"count\": 25,\n"
+            + "\t\t\"startIndex\": 0,\n"
+            + "\t\t\"timeout\": 120000,\n"
+            + "\t\t\"context\": {\n"
+            + "\t\t\t\"left\": [\"token\", 6],\n"
+            + "\t\t\t\"right\": [\"token\", 6]\n"
+            + "\t\t},\n"
+            + "\t\t\"fields\": [\"pubDate\", \"subTitle\", \"author\", \"pubPlace\", \"title\", \"textSigle\", \"UID\", \"ID\", \"layerInfos\", \"corpusSigle\", \"docSigle\", \"corpusID\", \"textClass\"],\n"
+            + "\t\t\"version\": \"0.55.5\",\n"
+            + "\t\t\"benchmark\": \"0.117436617 s\",\n"
+            + "\t\t\"totalResults\": 31,\n"
+            + "\t\t\"serialQuery\": \"tokens:s:das\",\n"
+            + "\t\t\"itemsPerPage\": 25\n"
+            + "\t},\n"
+            + "\t\"query\": {\n"
+            + "\t\t\"@type\": \"koral:token\",\n"
+            + "\t\t\"wrap\": {\n"
+            + "\t\t\t\"@type\": \"koral:term\",\n"
+            + "\t\t\t\"key\": \"das\",\n"
+            + "\t\t\t\"layer\": \"orth\",\n"
+            + "\t\t\t\"match\": \"match:eq\",\n"
+            + "\t\t\t\"foundry\": \"opennlp\",\n"
+            + "\t\t\t\"rewrites\": [{\n"
+            + "\t\t\t\t\"@type\": \"koral:rewrite\",\n"
+            + "\t\t\t\t\"src\": \"Kustvakt\",\n"
+            + "\t\t\t\t\"operation\": \"operation:injection\",\n"
+            + "\t\t\t\t\"scope\": \"foundry\"\n"
+            + "\t\t\t}]\n"
+            + "\t\t},\n"
+            + "\t\t\"idn\": \"das_0\",\n"
+            + "\t\t\"rewrites\": [{\n"
+            + "\t\t\t\"@type\": \"koral:rewrite\",\n"
+            + "\t\t\t\"src\": \"Kustvakt\",\n"
+            + "\t\t\t\"operation\": \"operation:injection\",\n"
+            + "\t\t\t\"scope\": \"idn\"\n"
+            + "\t\t}]\n"
+            + "\t},\n"
+            + "\t\"collection\": {\n"
+            + "\t\t\"@type\": \"koral:docGroup\",\n"
+            + "\t\t\"operation\": \"operation:or\",\n"
+            + "\t\t\"operands\": [{\n"
+            + "\t\t\t\"@type\": \"koral:doc\",\n"
+            + "\t\t\t\"key\": \"corpusSigle\",\n"
+            + "\t\t\t\"value\": \"GOE\",\n"
+            + "\t\t\t\"match\": \"match:eq\"\n"
+            + "\t\t}, {\n"
+            + "\t\t\t\"@type\": \"koral:doc\",\n"
+            + "\t\t\t\"key\": \"corpusSigle\",\n"
+            + "\t\t\t\"value\": \"WPD\",\n"
+            + "\t\t\t\"match\": \"match:eq\"\n"
+            + "\t\t}],\n"
+            + "\t\t\"rewrites\": [{\n"
+            + "\t\t\t\"@type\": \"koral:rewrite\",\n"
+            + "\t\t\t\"src\": \"Kustvakt\",\n"
+            + "\t\t\t\"operation\": \"operation:insertion\",\n"
+            + "\t\t\t\"scope\": \"corpusSigle\"\n"
+            + "\t\t}]\n"
+            + "\t},\n"
+            + "\t\"matches\": [{\n"
+            + "\t\t\"field\": \"tokens\",\n"
+            + "\t\t\"textClass\": \"wissenschaft populaerwissenschaft\",\n"
+            + "\t\t\"pubPlace\": \"URL:http://de.wikipedia.org\",\n"
+            + "\t\t\"textSigle\": \"WPD_AAA.00004\",\n"
+            + "\t\t\"docSigle\": \"WPD_AAA\",\n"
+            + "\t\t\"corpusSigle\": \"WPD\",\n"
+            + "\t\t\"title\": \"A (Logik)\",\n"
+            + "\t\t\"author\": \"Zenogantner; ElRaki; 1\",\n"
+            + "\t\t\"layerInfos\": \"base/s=spans cnx/c=spans cnx/l=tokens cnx/m=tokens cnx/p=tokens cnx/s=spans cnx/syn=tokens corenlp/s=spans mate/l=tokens mate/m=tokens mate/p=tokens opennlp/p=tokens opennlp/s=spans tt/l=tokens tt/p=tokens tt/s=spans xip/c=spans xip/l=tokens xip/p=tokens xip/s=spans\",\n"
+            + "\t\t\"startMore\": true,\n"
+            + "\t\t\"endMore\": true,\n"
+            + "\t\t\"snippet\": \"<span class=\\\"context-left\\\"><span class=\\\"more\\\"></span>z.B. mit dem Wort Barbara&quot; bezeichnet, </span><mark>das</mark><span class=\\\"context-right\\\"> dreimal den Buchstaben a enthält, aber<span class=\\\"more\\\"></span></span>\",\n"
+            + "\t\t\"matchID\": \"match-WPD_AAA.00004-p195-196\",\n"
+            + "\t\t\"UID\": 0,\n"
+            + "\t\t\"pubDate\": \"2005-03-28\"\n"
+            + "\t}, {\n"
+            + "\t\t\"field\": \"tokens\",\n"
+            + "\t\t\"textClass\": \"kultur musik freizeit-unterhaltung reisen\",\n"
+            + "\t\t\"pubPlace\": \"URL:http://de.wikipedia.org\",\n"
+            + "\t\t\"textSigle\": \"WPD_AAA.02439\",\n"
+            + "\t\t\"docSigle\": \"WPD_AAA\",\n"
+            + "\t\t\"corpusSigle\": \"WPD\",\n"
+            + "\t\t\"title\": \"Aegukka\",\n"
+            + "\t\t\"author\": \"ThorstenS; 2\",\n"
+            + "\t\t\"layerInfos\": \"base/s=spans cnx/c=spans cnx/l=tokens cnx/m=tokens cnx/p=tokens cnx/s=spans cnx/syn=tokens corenlp/s=spans mate/l=tokens mate/m=tokens mate/p=tokens opennlp/p=tokens opennlp/s=spans tt/l=tokens tt/p=tokens tt/s=spans xip/c=spans xip/l=tokens xip/p=tokens xip/s=spans\",\n"
+            + "\t\t\"startMore\": true,\n"
+            + "\t\t\"endMore\": true,\n"
+            + "\t\t\"snippet\": \"<span class=\\\"context-left\\\"><span class=\\\"more\\\"></span>wörtlich &quot;Das Lied der Liebe für </span><mark>das</mark><span class=\\\"context-right\\\"> Land&quot;, oder &quot;Das patriotische Lied&quot;. Es<span class=\\\"more\\\"></span></span>\",\n"
+            + "\t\t\"matchID\": \"match-WPD_AAA.02439-p22-23\",\n"
+            + "\t\t\"UID\": 0,\n"
+            + "\t\t\"pubDate\": \"2005-03-28\"\n"
+            + "\t}, {\n"
+            + "\t\t\"field\": \"tokens\",\n"
+            + "\t\t\"textClass\": \"kultur musik freizeit-unterhaltung reisen\",\n"
+            + "\t\t\"pubPlace\": \"URL:http://de.wikipedia.org\",\n"
+            + "\t\t\"textSigle\": \"WPD_AAA.02439\",\n"
+            + "\t\t\"docSigle\": \"WPD_AAA\",\n"
+            + "\t\t\"corpusSigle\": \"WPD\",\n"
+            + "\t\t\"title\": \"Aegukka\",\n"
+            + "\t\t\"author\": \"ThorstenS; 2\",\n"
+            + "\t\t\"layerInfos\": \"base/s=spans cnx/c=spans cnx/l=tokens cnx/m=tokens cnx/p=tokens cnx/s=spans cnx/syn=tokens corenlp/s=spans mate/l=tokens mate/m=tokens mate/p=tokens opennlp/p=tokens opennlp/s=spans tt/l=tokens tt/p=tokens tt/s=spans xip/c=spans xip/l=tokens xip/p=tokens xip/s=spans\",\n"
+            + "\t\t\"startMore\": true,\n"
+            + "\t\t\"endMore\": true,\n"
+            + "\t\t\"snippet\": \"<span class=\\\"context-left\\\"><span class=\\\"more\\\"></span>Besatzungszeit von 1910 bis 1945 wurde </span><mark>das</mark><span class=\\\"context-right\\\"> Lied verboten. Im Ausland lebende Koreaner<span class=\\\"more\\\"></span></span>\",\n"
+            + "\t\t\"matchID\": \"match-WPD_AAA.02439-p74-75\",\n"
+            + "\t\t\"UID\": 0,\n"
+            + "\t\t\"pubDate\": \"2005-03-28\"\n"
+            + "\t}, {\n"
+            + "\t\t\"field\": \"tokens\",\n"
+            + "\t\t\"textClass\": \"kultur musik freizeit-unterhaltung reisen\",\n"
+            + "\t\t\"pubPlace\": \"URL:http://de.wikipedia.org\",\n"
+            + "\t\t\"textSigle\": \"WPD_AAA.02439\",\n"
+            + "\t\t\"docSigle\": \"WPD_AAA\",\n"
+            + "\t\t\"corpusSigle\": \"WPD\",\n"
+            + "\t\t\"title\": \"Aegukka\",\n"
+            + "\t\t\"author\": \"ThorstenS; 2\",\n"
+            + "\t\t\"layerInfos\": \"base/s=spans cnx/c=spans cnx/l=tokens cnx/m=tokens cnx/p=tokens cnx/s=spans cnx/syn=tokens corenlp/s=spans mate/l=tokens mate/m=tokens mate/p=tokens opennlp/p=tokens opennlp/s=spans tt/l=tokens tt/p=tokens tt/s=spans xip/c=spans xip/l=tokens xip/p=tokens xip/s=spans\",\n"
+            + "\t\t\"startMore\": true,\n"
+            + "\t\t\"endMore\": true,\n"
+            + "\t\t\"snippet\": \"<span class=\\\"context-left\\\"><span class=\\\"more\\\"></span>3. Deutsche Übersetzung 1. Strophe Bis </span><mark>das</mark><span class=\\\"context-right\\\"> Meer des Ostens ausdörrt und der<span class=\\\"more\\\"></span></span>\",\n"
+            + "\t\t\"matchID\": \"match-WPD_AAA.02439-p298-299\",\n"
+            + "\t\t\"UID\": 0,\n"
+            + "\t\t\"pubDate\": \"2005-03-28\"\n"
+            + "\t}, {\n"
+            + "\t\t\"field\": \"tokens\",\n"
+            + "\t\t\"textClass\": \"freizeit-unterhaltung reisen wissenschaft populaerwissenschaft\",\n"
+            + "\t\t\"pubPlace\": \"URL:http://de.wikipedia.org\",\n"
+            + "\t\t\"textSigle\": \"WPD_AAA.00001\",\n"
+            + "\t\t\"docSigle\": \"WPD_AAA\",\n"
+            + "\t\t\"corpusSigle\": \"WPD\",\n"
+            + "\t\t\"title\": \"A\",\n"
+            + "\t\t\"author\": \"Ruru; Jens.Ol; Aglarech; u.a.\",\n"
+            + "\t\t\"layerInfos\": \"base/s=spans cnx/c=spans cnx/l=tokens cnx/m=tokens cnx/p=tokens cnx/s=spans cnx/syn=tokens corenlp/s=spans mate/l=tokens mate/m=tokens mate/p=tokens opennlp/p=tokens opennlp/s=spans tt/l=tokens tt/p=tokens tt/s=spans xip/c=spans xip/l=tokens xip/p=tokens xip/s=spans\",\n"
+            + "\t\t\"startMore\": true,\n"
+            + "\t\t\"endMore\": true,\n"
+            + "\t\t\"snippet\": \"<span class=\\\"context-left\\\"><span class=\\\"more\\\"></span>Ausnahme von Fremdwörtern und Namen ist </span><mark>das</mark><span class=\\\"context-right\\\"> A der einzige Buchstabe im Deutschen<span class=\\\"more\\\"></span></span>\",\n"
+            + "\t\t\"matchID\": \"match-WPD_AAA.00001-p41-42\",\n"
+            + "\t\t\"UID\": 0,\n"
+            + "\t\t\"pubDate\": \"2005-03-28\"\n"
+            + "\t}, {\n"
+            + "\t\t\"field\": \"tokens\",\n"
+            + "\t\t\"textClass\": \"freizeit-unterhaltung reisen wissenschaft populaerwissenschaft\",\n"
+            + "\t\t\"pubPlace\": \"URL:http://de.wikipedia.org\",\n"
+            + "\t\t\"textSigle\": \"WPD_AAA.00001\",\n"
+            + "\t\t\"docSigle\": \"WPD_AAA\",\n"
+            + "\t\t\"corpusSigle\": \"WPD\",\n"
+            + "\t\t\"title\": \"A\",\n"
+            + "\t\t\"author\": \"Ruru; Jens.Ol; Aglarech; u.a.\",\n"
+            + "\t\t\"layerInfos\": \"base/s=spans cnx/c=spans cnx/l=tokens cnx/m=tokens cnx/p=tokens cnx/s=spans cnx/syn=tokens corenlp/s=spans mate/l=tokens mate/m=tokens mate/p=tokens opennlp/p=tokens opennlp/s=spans tt/l=tokens tt/p=tokens tt/s=spans xip/c=spans xip/l=tokens xip/p=tokens xip/s=spans\",\n"
+            + "\t\t\"startMore\": true,\n"
+            + "\t\t\"endMore\": true,\n"
+            + "\t\t\"snippet\": \"<span class=\\\"context-left\\\"><span class=\\\"more\\\"></span>flache Stellung niedergedrückt wird. Stellt man </span><mark>das</mark><span class=\\\"context-right\\\"> Verhältnis der drei Hauptvokale a, i<span class=\\\"more\\\"></span></span>\",\n"
+            + "\t\t\"matchID\": \"match-WPD_AAA.00001-p107-108\",\n"
+            + "\t\t\"UID\": 0,\n"
+            + "\t\t\"pubDate\": \"2005-03-28\"\n"
+            + "\t}, {\n"
+            + "\t\t\"field\": \"tokens\",\n"
+            + "\t\t\"textClass\": \"freizeit-unterhaltung reisen wissenschaft populaerwissenschaft\",\n"
+            + "\t\t\"pubPlace\": \"URL:http://de.wikipedia.org\",\n"
+            + "\t\t\"textSigle\": \"WPD_AAA.00001\",\n"
+            + "\t\t\"docSigle\": \"WPD_AAA\",\n"
+            + "\t\t\"corpusSigle\": \"WPD\",\n"
+            + "\t\t\"title\": \"A\",\n"
+            + "\t\t\"author\": \"Ruru; Jens.Ol; Aglarech; u.a.\",\n"
+            + "\t\t\"layerInfos\": \"base/s=spans cnx/c=spans cnx/l=tokens cnx/m=tokens cnx/p=tokens cnx/s=spans cnx/syn=tokens corenlp/s=spans mate/l=tokens mate/m=tokens mate/p=tokens opennlp/p=tokens opennlp/s=spans tt/l=tokens tt/p=tokens tt/s=spans xip/c=spans xip/l=tokens xip/p=tokens xip/s=spans\",\n"
+            + "\t\t\"startMore\": true,\n"
+            + "\t\t\"endMore\": true,\n"
+            + "\t\t\"snippet\": \"<span class=\\\"context-left\\\"><span class=\\\"more\\\"></span>kommt i als der hellste an </span><mark>das</mark><span class=\\\"context-right\\\"> obere, u als der dumpfeste an<span class=\\\"more\\\"></span></span>\",\n"
+            + "\t\t\"matchID\": \"match-WPD_AAA.00001-p127-128\",\n"
+            + "\t\t\"UID\": 0,\n"
+            + "\t\t\"pubDate\": \"2005-03-28\"\n"
+            + "\t}, {\n"
+            + "\t\t\"field\": \"tokens\",\n"
+            + "\t\t\"textClass\": \"freizeit-unterhaltung reisen wissenschaft populaerwissenschaft\",\n"
+            + "\t\t\"pubPlace\": \"URL:http://de.wikipedia.org\",\n"
+            + "\t\t\"textSigle\": \"WPD_AAA.00001\",\n"
+            + "\t\t\"docSigle\": \"WPD_AAA\",\n"
+            + "\t\t\"corpusSigle\": \"WPD\",\n"
+            + "\t\t\"title\": \"A\",\n"
+            + "\t\t\"author\": \"Ruru; Jens.Ol; Aglarech; u.a.\",\n"
+            + "\t\t\"layerInfos\": \"base/s=spans cnx/c=spans cnx/l=tokens cnx/m=tokens cnx/p=tokens cnx/s=spans cnx/syn=tokens corenlp/s=spans mate/l=tokens mate/m=tokens mate/p=tokens opennlp/p=tokens opennlp/s=spans tt/l=tokens tt/p=tokens tt/s=spans xip/c=spans xip/l=tokens xip/p=tokens xip/s=spans\",\n"
+            + "\t\t\"startMore\": true,\n"
+            + "\t\t\"endMore\": true,\n"
+            + "\t\t\"snippet\": \"<span class=\\\"context-left\\\"><span class=\\\"more\\\"></span>obere, u als der dumpfeste an </span><mark>das</mark><span class=\\\"context-right\\\"> untere Ende, a als der mittlere<span class=\\\"more\\\"></span></span>\",\n"
+            + "\t\t\"matchID\": \"match-WPD_AAA.00001-p134-135\",\n"
+            + "\t\t\"UID\": 0,\n"
+            + "\t\t\"pubDate\": \"2005-03-28\"\n"
+            + "\t}, {\n"
+            + "\t\t\"field\": \"tokens\",\n"
+            + "\t\t\"textClass\": \"freizeit-unterhaltung reisen wissenschaft populaerwissenschaft\",\n"
+            + "\t\t\"pubPlace\": \"URL:http://de.wikipedia.org\",\n"
+            + "\t\t\"textSigle\": \"WPD_AAA.00001\",\n"
+            + "\t\t\"docSigle\": \"WPD_AAA\",\n"
+            + "\t\t\"corpusSigle\": \"WPD\",\n"
+            + "\t\t\"title\": \"A\",\n"
+            + "\t\t\"author\": \"Ruru; Jens.Ol; Aglarech; u.a.\",\n"
+            + "\t\t\"layerInfos\": \"base/s=spans cnx/c=spans cnx/l=tokens cnx/m=tokens cnx/p=tokens cnx/s=spans cnx/syn=tokens corenlp/s=spans mate/l=tokens mate/m=tokens mate/p=tokens opennlp/p=tokens opennlp/s=spans tt/l=tokens tt/p=tokens tt/s=spans xip/c=spans xip/l=tokens xip/p=tokens xip/s=spans\",\n"
+            + "\t\t\"startMore\": true,\n"
+            + "\t\t\"endMore\": true,\n"
+            + "\t\t\"snippet\": \"<span class=\\\"context-left\\\"><span class=\\\"more\\\"></span>im 9. Jahrhundert v. Chr. war </span><mark>das</mark><span class=\\\"context-right\\\"> Schriftzeichen bereits stark stilisiert, die Hörner<span class=\\\"more\\\"></span></span>\",\n"
+            + "\t\t\"matchID\": \"match-WPD_AAA.00001-p271-272\",\n"
+            + "\t\t\"UID\": 0,\n"
+            + "\t\t\"pubDate\": \"2005-03-28\"\n"
+            + "\t}, {\n"
+            + "\t\t\"field\": \"tokens\",\n"
+            + "\t\t\"textClass\": \"freizeit-unterhaltung reisen wissenschaft populaerwissenschaft\",\n"
+            + "\t\t\"pubPlace\": \"URL:http://de.wikipedia.org\",\n"
+            + "\t\t\"textSigle\": \"WPD_AAA.00001\",\n"
+            + "\t\t\"docSigle\": \"WPD_AAA\",\n"
+            + "\t\t\"corpusSigle\": \"WPD\",\n"
+            + "\t\t\"title\": \"A\",\n"
+            + "\t\t\"author\": \"Ruru; Jens.Ol; Aglarech; u.a.\",\n"
+            + "\t\t\"layerInfos\": \"base/s=spans cnx/c=spans cnx/l=tokens cnx/m=tokens cnx/p=tokens cnx/s=spans cnx/syn=tokens corenlp/s=spans mate/l=tokens mate/m=tokens mate/p=tokens opennlp/p=tokens opennlp/s=spans tt/l=tokens tt/p=tokens tt/s=spans xip/c=spans xip/l=tokens xip/p=tokens xip/s=spans\",\n"
+            + "\t\t\"startMore\": true,\n"
+            + "\t\t\"endMore\": true,\n"
+            + "\t\t\"snippet\": \"<span class=\\\"context-left\\\"><span class=\\\"more\\\"></span>im Alphabet inne. Als die Griechen </span><mark>das</mark><span class=\\\"context-right\\\"> Phönizische Alphabet übernamen, drehten sie das<span class=\\\"more\\\"></span></span>\",\n"
+            + "\t\t\"matchID\": \"match-WPD_AAA.00001-p313-314\",\n"
+            + "\t\t\"UID\": 0,\n"
+            + "\t\t\"pubDate\": \"2005-03-28\"\n"
+            + "\t}, {\n"
+            + "\t\t\"field\": \"tokens\",\n"
+            + "\t\t\"textClass\": \"freizeit-unterhaltung reisen wissenschaft populaerwissenschaft\",\n"
+            + "\t\t\"pubPlace\": \"URL:http://de.wikipedia.org\",\n"
+            + "\t\t\"textSigle\": \"WPD_AAA.00001\",\n"
+            + "\t\t\"docSigle\": \"WPD_AAA\",\n"
+            + "\t\t\"corpusSigle\": \"WPD\",\n"
+            + "\t\t\"title\": \"A\",\n"
+            + "\t\t\"author\": \"Ruru; Jens.Ol; Aglarech; u.a.\",\n"
+            + "\t\t\"layerInfos\": \"base/s=spans cnx/c=spans cnx/l=tokens cnx/m=tokens cnx/p=tokens cnx/s=spans cnx/syn=tokens corenlp/s=spans mate/l=tokens mate/m=tokens mate/p=tokens opennlp/p=tokens opennlp/s=spans tt/l=tokens tt/p=tokens tt/s=spans xip/c=spans xip/l=tokens xip/p=tokens xip/s=spans\",\n"
+            + "\t\t\"startMore\": true,\n"
+            + "\t\t\"endMore\": true,\n"
+            + "\t\t\"snippet\": \"<span class=\\\"context-left\\\"><span class=\\\"more\\\"></span>das Phönizische Alphabet übernamen, drehten sie </span><mark>das</mark><span class=\\\"context-right\\\"> Zeichen um 90 Grad und machten<span class=\\\"more\\\"></span></span>\",\n"
+            + "\t\t\"matchID\": \"match-WPD_AAA.00001-p319-320\",\n"
+            + "\t\t\"UID\": 0,\n"
+            + "\t\t\"pubDate\": \"2005-03-28\"\n"
+            + "\t}, {\n"
+            + "\t\t\"field\": \"tokens\",\n"
+            + "\t\t\"textClass\": \"freizeit-unterhaltung reisen wissenschaft populaerwissenschaft\",\n"
+            + "\t\t\"pubPlace\": \"URL:http://de.wikipedia.org\",\n"
+            + "\t\t\"textSigle\": \"WPD_AAA.00001\",\n"
+            + "\t\t\"docSigle\": \"WPD_AAA\",\n"
+            + "\t\t\"corpusSigle\": \"WPD\",\n"
+            + "\t\t\"title\": \"A\",\n"
+            + "\t\t\"author\": \"Ruru; Jens.Ol; Aglarech; u.a.\",\n"
+            + "\t\t\"layerInfos\": \"base/s=spans cnx/c=spans cnx/l=tokens cnx/m=tokens cnx/p=tokens cnx/s=spans cnx/syn=tokens corenlp/s=spans mate/l=tokens mate/m=tokens mate/p=tokens opennlp/p=tokens opennlp/s=spans tt/l=tokens tt/p=tokens tt/s=spans xip/c=spans xip/l=tokens xip/p=tokens xip/s=spans\",\n"
+            + "\t\t\"startMore\": true,\n"
+            + "\t\t\"endMore\": true,\n"
+            + "\t\t\"snippet\": \"<span class=\\\"context-left\\\"><span class=\\\"more\\\"></span>um 90 Grad und machten daraus </span><mark>das</mark><span class=\\\"context-right\\\"> Alpha. Da das Griechische reich an<span class=\\\"more\\\"></span></span>\",\n"
+            + "\t\t\"matchID\": \"match-WPD_AAA.00001-p327-328\",\n"
+            + "\t\t\"UID\": 0,\n"
+            + "\t\t\"pubDate\": \"2005-03-28\"\n"
+            + "\t}, {\n"
+            + "\t\t\"field\": \"tokens\",\n"
+            + "\t\t\"textClass\": \"freizeit-unterhaltung reisen wissenschaft populaerwissenschaft\",\n"
+            + "\t\t\"pubPlace\": \"URL:http://de.wikipedia.org\",\n"
+            + "\t\t\"textSigle\": \"WPD_AAA.00001\",\n"
+            + "\t\t\"docSigle\": \"WPD_AAA\",\n"
+            + "\t\t\"corpusSigle\": \"WPD\",\n"
+            + "\t\t\"title\": \"A\",\n"
+            + "\t\t\"author\": \"Ruru; Jens.Ol; Aglarech; u.a.\",\n"
+            + "\t\t\"layerInfos\": \"base/s=spans cnx/c=spans cnx/l=tokens cnx/m=tokens cnx/p=tokens cnx/s=spans cnx/syn=tokens corenlp/s=spans mate/l=tokens mate/m=tokens mate/p=tokens opennlp/p=tokens opennlp/s=spans tt/l=tokens tt/p=tokens tt/s=spans xip/c=spans xip/l=tokens xip/p=tokens xip/s=spans\",\n"
+            + "\t\t\"startMore\": true,\n"
+            + "\t\t\"endMore\": true,\n"
+            + "\t\t\"snippet\": \"<span class=\\\"context-left\\\"><span class=\\\"more\\\"></span>und machten daraus das Alpha. Da </span><mark>das</mark><span class=\\\"context-right\\\"> Griechische reich an Vokalen war, verwendeten<span class=\\\"more\\\"></span></span>\",\n"
+            + "\t\t\"matchID\": \"match-WPD_AAA.00001-p330-331\",\n"
+            + "\t\t\"UID\": 0,\n"
+            + "\t\t\"pubDate\": \"2005-03-28\"\n"
+            + "\t}, {\n"
+            + "\t\t\"field\": \"tokens\",\n"
+            + "\t\t\"textClass\": \"freizeit-unterhaltung reisen wissenschaft populaerwissenschaft\",\n"
+            + "\t\t\"pubPlace\": \"URL:http://de.wikipedia.org\",\n"
+            + "\t\t\"textSigle\": \"WPD_AAA.00001\",\n"
+            + "\t\t\"docSigle\": \"WPD_AAA\",\n"
+            + "\t\t\"corpusSigle\": \"WPD\",\n"
+            + "\t\t\"title\": \"A\",\n"
+            + "\t\t\"author\": \"Ruru; Jens.Ol; Aglarech; u.a.\",\n"
+            + "\t\t\"layerInfos\": \"base/s=spans cnx/c=spans cnx/l=tokens cnx/m=tokens cnx/p=tokens cnx/s=spans cnx/syn=tokens corenlp/s=spans mate/l=tokens mate/m=tokens mate/p=tokens opennlp/p=tokens opennlp/s=spans tt/l=tokens tt/p=tokens tt/s=spans xip/c=spans xip/l=tokens xip/p=tokens xip/s=spans\",\n"
+            + "\t\t\"startMore\": true,\n"
+            + "\t\t\"endMore\": true,\n"
+            + "\t\t\"snippet\": \"<span class=\\\"context-left\\\"><span class=\\\"more\\\"></span>reich an Vokalen war, verwendeten sie </span><mark>das</mark><span class=\\\"context-right\\\"> Zeichen für den Lautwert a. Die<span class=\\\"more\\\"></span></span>\",\n"
+            + "\t\t\"matchID\": \"match-WPD_AAA.00001-p338-339\",\n"
+            + "\t\t\"UID\": 0,\n"
+            + "\t\t\"pubDate\": \"2005-03-28\"\n"
+            + "\t}, {\n"
+            + "\t\t\"field\": \"tokens\",\n"
+            + "\t\t\"textClass\": \"freizeit-unterhaltung reisen wissenschaft populaerwissenschaft\",\n"
+            + "\t\t\"pubPlace\": \"URL:http://de.wikipedia.org\",\n"
+            + "\t\t\"textSigle\": \"WPD_AAA.00001\",\n"
+            + "\t\t\"docSigle\": \"WPD_AAA\",\n"
+            + "\t\t\"corpusSigle\": \"WPD\",\n"
+            + "\t\t\"title\": \"A\",\n"
+            + "\t\t\"author\": \"Ruru; Jens.Ol; Aglarech; u.a.\",\n"
+            + "\t\t\"layerInfos\": \"base/s=spans cnx/c=spans cnx/l=tokens cnx/m=tokens cnx/p=tokens cnx/s=spans cnx/syn=tokens corenlp/s=spans mate/l=tokens mate/m=tokens mate/p=tokens opennlp/p=tokens opennlp/s=spans tt/l=tokens tt/p=tokens tt/s=spans xip/c=spans xip/l=tokens xip/p=tokens xip/s=spans\",\n"
+            + "\t\t\"startMore\": true,\n"
+            + "\t\t\"endMore\": true,\n"
+            + "\t\t\"snippet\": \"<span class=\\\"context-left\\\"><span class=\\\"more\\\"></span>den Lautwert a. Die Etrusker übernahmen </span><mark>das</mark><span class=\\\"context-right\\\"> frühgriechische Alpha und ließen es größtenteils<span class=\\\"more\\\"></span></span>\",\n"
+            + "\t\t\"matchID\": \"match-WPD_AAA.00001-p347-348\",\n"
+            + "\t\t\"UID\": 0,\n"
+            + "\t\t\"pubDate\": \"2005-03-28\"\n"
+            + "\t}, {\n"
+            + "\t\t\"field\": \"tokens\",\n"
+            + "\t\t\"textClass\": \"freizeit-unterhaltung reisen wissenschaft populaerwissenschaft\",\n"
+            + "\t\t\"pubPlace\": \"URL:http://de.wikipedia.org\",\n"
+            + "\t\t\"textSigle\": \"WPD_AAA.00001\",\n"
+            + "\t\t\"docSigle\": \"WPD_AAA\",\n"
+            + "\t\t\"corpusSigle\": \"WPD\",\n"
+            + "\t\t\"title\": \"A\",\n"
+            + "\t\t\"author\": \"Ruru; Jens.Ol; Aglarech; u.a.\",\n"
+            + "\t\t\"layerInfos\": \"base/s=spans cnx/c=spans cnx/l=tokens cnx/m=tokens cnx/p=tokens cnx/s=spans cnx/syn=tokens corenlp/s=spans mate/l=tokens mate/m=tokens mate/p=tokens opennlp/p=tokens opennlp/s=spans tt/l=tokens tt/p=tokens tt/s=spans xip/c=spans xip/l=tokens xip/p=tokens xip/s=spans\",\n"
+            + "\t\t\"startMore\": true,\n"
+            + "\t\t\"endMore\": true,\n"
+            + "\t\t\"snippet\": \"<span class=\\\"context-left\\\"><span class=\\\"more\\\"></span>von rechts nach links) versahen sie </span><mark>das</mark><span class=\\\"context-right\\\"> Zeichen mit einem Abschwung nach links<span class=\\\"more\\\"></span></span>\",\n"
+            + "\t\t\"matchID\": \"match-WPD_AAA.00001-p365-366\",\n"
+            + "\t\t\"UID\": 0,\n"
+            + "\t\t\"pubDate\": \"2005-03-28\"\n"
+            + "\t}, {\n"
+            + "\t\t\"field\": \"tokens\",\n"
+            + "\t\t\"textClass\": \"freizeit-unterhaltung reisen wissenschaft populaerwissenschaft\",\n"
+            + "\t\t\"pubPlace\": \"URL:http://de.wikipedia.org\",\n"
+            + "\t\t\"textSigle\": \"WPD_AAA.00001\",\n"
+            + "\t\t\"docSigle\": \"WPD_AAA\",\n"
+            + "\t\t\"corpusSigle\": \"WPD\",\n"
+            + "\t\t\"title\": \"A\",\n"
+            + "\t\t\"author\": \"Ruru; Jens.Ol; Aglarech; u.a.\",\n"
+            + "\t\t\"layerInfos\": \"base/s=spans cnx/c=spans cnx/l=tokens cnx/m=tokens cnx/p=tokens cnx/s=spans cnx/syn=tokens corenlp/s=spans mate/l=tokens mate/m=tokens mate/p=tokens opennlp/p=tokens opennlp/s=spans tt/l=tokens tt/p=tokens tt/s=spans xip/c=spans xip/l=tokens xip/p=tokens xip/s=spans\",\n"
+            + "\t\t\"startMore\": true,\n"
+            + "\t\t\"endMore\": true,\n"
+            + "\t\t\"snippet\": \"<span class=\\\"context-left\\\"><span class=\\\"more\\\"></span>Abschwung nach links. Als die Römer </span><mark>das</mark><span class=\\\"context-right\\\"> lateinische Alphabet schufen, verwendeten sie das<span class=\\\"more\\\"></span></span>\",\n"
+            + "\t\t\"matchID\": \"match-WPD_AAA.00001-p375-376\",\n"
+            + "\t\t\"UID\": 0,\n"
+            + "\t\t\"pubDate\": \"2005-03-28\"\n"
+            + "\t}, {\n"
+            + "\t\t\"field\": \"tokens\",\n"
+            + "\t\t\"textClass\": \"freizeit-unterhaltung reisen wissenschaft populaerwissenschaft\",\n"
+            + "\t\t\"pubPlace\": \"URL:http://de.wikipedia.org\",\n"
+            + "\t\t\"textSigle\": \"WPD_AAA.00001\",\n"
+            + "\t\t\"docSigle\": \"WPD_AAA\",\n"
+            + "\t\t\"corpusSigle\": \"WPD\",\n"
+            + "\t\t\"title\": \"A\",\n"
+            + "\t\t\"author\": \"Ruru; Jens.Ol; Aglarech; u.a.\",\n"
+            + "\t\t\"layerInfos\": \"base/s=spans cnx/c=spans cnx/l=tokens cnx/m=tokens cnx/p=tokens cnx/s=spans cnx/syn=tokens corenlp/s=spans mate/l=tokens mate/m=tokens mate/p=tokens opennlp/p=tokens opennlp/s=spans tt/l=tokens tt/p=tokens tt/s=spans xip/c=spans xip/l=tokens xip/p=tokens xip/s=spans\",\n"
+            + "\t\t\"startMore\": true,\n"
+            + "\t\t\"endMore\": true,\n"
+            + "\t\t\"snippet\": \"<span class=\\\"context-left\\\"><span class=\\\"more\\\"></span>das lateinische Alphabet schufen, verwendeten sie </span><mark>das</mark><span class=\\\"context-right\\\"> A aus dem etruskischen Alphabet, der<span class=\\\"more\\\"></span></span>\",\n"
+            + "\t\t\"matchID\": \"match-WPD_AAA.00001-p381-382\",\n"
+            + "\t\t\"UID\": 0,\n"
+            + "\t\t\"pubDate\": \"2005-03-28\"\n"
+            + "\t}, {\n"
+            + "\t\t\"field\": \"tokens\",\n"
+            + "\t\t\"textClass\": \"freizeit-unterhaltung reisen wissenschaft populaerwissenschaft\",\n"
+            + "\t\t\"pubPlace\": \"URL:http://de.wikipedia.org\",\n"
+            + "\t\t\"textSigle\": \"WPD_AAA.00001\",\n"
+            + "\t\t\"docSigle\": \"WPD_AAA\",\n"
+            + "\t\t\"corpusSigle\": \"WPD\",\n"
+            + "\t\t\"title\": \"A\",\n"
+            + "\t\t\"author\": \"Ruru; Jens.Ol; Aglarech; u.a.\",\n"
+            + "\t\t\"layerInfos\": \"base/s=spans cnx/c=spans cnx/l=tokens cnx/m=tokens cnx/p=tokens cnx/s=spans cnx/syn=tokens corenlp/s=spans mate/l=tokens mate/m=tokens mate/p=tokens opennlp/p=tokens opennlp/s=spans tt/l=tokens tt/p=tokens tt/s=spans xip/c=spans xip/l=tokens xip/p=tokens xip/s=spans\",\n"
+            + "\t\t\"startMore\": true,\n"
+            + "\t\t\"endMore\": true,\n"
+            + "\t\t\"snippet\": \"<span class=\\\"context-left\\\"><span class=\\\"more\\\"></span>in der Biologie steht A für </span><mark>das</mark><span class=\\\"context-right\\\"> Nukleosid Adenosin steht A die Base<span class=\\\"more\\\"></span></span>\",\n"
+            + "\t\t\"matchID\": \"match-WPD_AAA.00001-p404-405\",\n"
+            + "\t\t\"UID\": 0,\n"
+            + "\t\t\"pubDate\": \"2005-03-28\"\n"
+            + "\t}, {\n"
+            + "\t\t\"field\": \"tokens\",\n"
+            + "\t\t\"textClass\": \"freizeit-unterhaltung reisen wissenschaft populaerwissenschaft\",\n"
+            + "\t\t\"pubPlace\": \"URL:http://de.wikipedia.org\",\n"
+            + "\t\t\"textSigle\": \"WPD_AAA.00001\",\n"
+            + "\t\t\"docSigle\": \"WPD_AAA\",\n"
+            + "\t\t\"corpusSigle\": \"WPD\",\n"
+            + "\t\t\"title\": \"A\",\n"
+            + "\t\t\"author\": \"Ruru; Jens.Ol; Aglarech; u.a.\",\n"
+            + "\t\t\"layerInfos\": \"base/s=spans cnx/c=spans cnx/l=tokens cnx/m=tokens cnx/p=tokens cnx/s=spans cnx/syn=tokens corenlp/s=spans mate/l=tokens mate/m=tokens mate/p=tokens opennlp/p=tokens opennlp/s=spans tt/l=tokens tt/p=tokens tt/s=spans xip/c=spans xip/l=tokens xip/p=tokens xip/s=spans\",\n"
+            + "\t\t\"startMore\": true,\n"
+            + "\t\t\"endMore\": true,\n"
+            + "\t\t\"snippet\": \"<span class=\\\"context-left\\\"><span class=\\\"more\\\"></span>Wert 10, siehe auch Hexadezimalsystem. steht </span><mark>das</mark><span class=\\\"context-right\\\"> Symbol ∀ (ein auf den Kopf gestelltes<span class=\\\"more\\\"></span></span>\",\n"
+            + "\t\t\"matchID\": \"match-WPD_AAA.00001-p526-527\",\n"
+            + "\t\t\"UID\": 0,\n"
+            + "\t\t\"pubDate\": \"2005-03-28\"\n"
+            + "\t}, {\n"
+            + "\t\t\"field\": \"tokens\",\n"
+            + "\t\t\"textClass\": \"freizeit-unterhaltung reisen wissenschaft populaerwissenschaft\",\n"
+            + "\t\t\"pubPlace\": \"URL:http://de.wikipedia.org\",\n"
+            + "\t\t\"textSigle\": \"WPD_AAA.00001\",\n"
+            + "\t\t\"docSigle\": \"WPD_AAA\",\n"
+            + "\t\t\"corpusSigle\": \"WPD\",\n"
+            + "\t\t\"title\": \"A\",\n"
+            + "\t\t\"author\": \"Ruru; Jens.Ol; Aglarech; u.a.\",\n"
+            + "\t\t\"layerInfos\": \"base/s=spans cnx/c=spans cnx/l=tokens cnx/m=tokens cnx/p=tokens cnx/s=spans cnx/syn=tokens corenlp/s=spans mate/l=tokens mate/m=tokens mate/p=tokens opennlp/p=tokens opennlp/s=spans tt/l=tokens tt/p=tokens tt/s=spans xip/c=spans xip/l=tokens xip/p=tokens xip/s=spans\",\n"
+            + "\t\t\"startMore\": true,\n"
+            + "\t\t\"endMore\": true,\n"
+            + "\t\t\"snippet\": \"<span class=\\\"context-left\\\"><span class=\\\"more\\\"></span>für die Vorsilbe Atto ist A </span><mark>das</mark><span class=\\\"context-right\\\"> Einheitensymbol der elektrischen Stromstärke Ampere in<span class=\\\"more\\\"></span></span>\",\n"
+            + "\t\t\"matchID\": \"match-WPD_AAA.00001-p624-625\",\n"
+            + "\t\t\"UID\": 0,\n"
+            + "\t\t\"pubDate\": \"2005-03-28\"\n"
+            + "\t}, {\n"
+            + "\t\t\"field\": \"tokens\",\n"
+            + "\t\t\"textClass\": \"freizeit-unterhaltung reisen wissenschaft populaerwissenschaft\",\n"
+            + "\t\t\"pubPlace\": \"URL:http://de.wikipedia.org\",\n"
+            + "\t\t\"textSigle\": \"WPD_AAA.00001\",\n"
+            + "\t\t\"docSigle\": \"WPD_AAA\",\n"
+            + "\t\t\"corpusSigle\": \"WPD\",\n"
+            + "\t\t\"title\": \"A\",\n"
+            + "\t\t\"author\": \"Ruru; Jens.Ol; Aglarech; u.a.\",\n"
+            + "\t\t\"layerInfos\": \"base/s=spans cnx/c=spans cnx/l=tokens cnx/m=tokens cnx/p=tokens cnx/s=spans cnx/syn=tokens corenlp/s=spans mate/l=tokens mate/m=tokens mate/p=tokens opennlp/p=tokens opennlp/s=spans tt/l=tokens tt/p=tokens tt/s=spans xip/c=spans xip/l=tokens xip/p=tokens xip/s=spans\",\n"
+            + "\t\t\"startMore\": true,\n"
+            + "\t\t\"endMore\": true,\n"
+            + "\t\t\"snippet\": \"<span class=\\\"context-left\\\"><span class=\\\"more\\\"></span>Anordnung (Rechtswesen), Agent (Börse), Aufzeichung (Rechtsw.), </span><mark>das</mark><span class=\\\"context-right\\\"> Flächenmaß Acre und Ausgabe A ist<span class=\\\"more\\\"></span></span>\",\n"
+            + "\t\t\"matchID\": \"match-WPD_AAA.00001-p757-758\",\n"
+            + "\t\t\"UID\": 0,\n"
+            + "\t\t\"pubDate\": \"2005-03-28\"\n"
+            + "\t}, {\n"
+            + "\t\t\"field\": \"tokens\",\n"
+            + "\t\t\"textClass\": \"freizeit-unterhaltung reisen wissenschaft populaerwissenschaft\",\n"
+            + "\t\t\"pubPlace\": \"URL:http://de.wikipedia.org\",\n"
+            + "\t\t\"textSigle\": \"WPD_AAA.00001\",\n"
+            + "\t\t\"docSigle\": \"WPD_AAA\",\n"
+            + "\t\t\"corpusSigle\": \"WPD\",\n"
+            + "\t\t\"title\": \"A\",\n"
+            + "\t\t\"author\": \"Ruru; Jens.Ol; Aglarech; u.a.\",\n"
+            + "\t\t\"layerInfos\": \"base/s=spans cnx/c=spans cnx/l=tokens cnx/m=tokens cnx/p=tokens cnx/s=spans cnx/syn=tokens corenlp/s=spans mate/l=tokens mate/m=tokens mate/p=tokens opennlp/p=tokens opennlp/s=spans tt/l=tokens tt/p=tokens tt/s=spans xip/c=spans xip/l=tokens xip/p=tokens xip/s=spans\",\n"
+            + "\t\t\"startMore\": true,\n"
+            + "\t\t\"endMore\": true,\n"
+            + "\t\t\"snippet\": \"<span class=\\\"context-left\\\"><span class=\\\"more\\\"></span>Band). in Redewendungen für den Anfang (</span><mark>das</mark><span class=\\\"context-right\\\"> A und O, von A bis<span class=\\\"more\\\"></span></span>\",\n"
+            + "\t\t\"matchID\": \"match-WPD_AAA.00001-p777-778\",\n"
+            + "\t\t\"UID\": 0,\n"
+            + "\t\t\"pubDate\": \"2005-03-28\"\n"
+            + "\t}, {\n"
+            + "\t\t\"field\": \"tokens\",\n"
+            + "\t\t\"textClass\": \"freizeit-unterhaltung reisen wissenschaft populaerwissenschaft\",\n"
+            + "\t\t\"pubPlace\": \"URL:http://de.wikipedia.org\",\n"
+            + "\t\t\"textSigle\": \"WPD_AAA.00001\",\n"
+            + "\t\t\"docSigle\": \"WPD_AAA\",\n"
+            + "\t\t\"corpusSigle\": \"WPD\",\n"
+            + "\t\t\"title\": \"A\",\n"
+            + "\t\t\"author\": \"Ruru; Jens.Ol; Aglarech; u.a.\",\n"
+            + "\t\t\"layerInfos\": \"base/s=spans cnx/c=spans cnx/l=tokens cnx/m=tokens cnx/p=tokens cnx/s=spans cnx/syn=tokens corenlp/s=spans mate/l=tokens mate/m=tokens mate/p=tokens opennlp/p=tokens opennlp/s=spans tt/l=tokens tt/p=tokens tt/s=spans xip/c=spans xip/l=tokens xip/p=tokens xip/s=spans\",\n"
+            + "\t\t\"startMore\": true,\n"
+            + "\t\t\"endMore\": true,\n"
+            + "\t\t\"snippet\": \"<span class=\\\"context-left\\\"><span class=\\\"more\\\"></span>Z). a ist die Abkürzung für </span><mark>das</mark><span class=\\\"context-right\\\"> Flächenmaß Ar in der Kaufmannssprache bedeutet<span class=\\\"more\\\"></span></span>\",\n"
+            + "\t\t\"matchID\": \"match-WPD_AAA.00001-p790-791\",\n"
+            + "\t\t\"UID\": 0,\n"
+            + "\t\t\"pubDate\": \"2005-03-28\"\n"
+            + "\t}, {\n"
+            + "\t\t\"field\": \"tokens\",\n"
+            + "\t\t\"textClass\": \"freizeit-unterhaltung reisen wissenschaft populaerwissenschaft\",\n"
+            + "\t\t\"pubPlace\": \"URL:http://de.wikipedia.org\",\n"
+            + "\t\t\"textSigle\": \"WPD_AAA.00001\",\n"
+            + "\t\t\"docSigle\": \"WPD_AAA\",\n"
+            + "\t\t\"corpusSigle\": \"WPD\",\n"
+            + "\t\t\"title\": \"A\",\n"
+            + "\t\t\"author\": \"Ruru; Jens.Ol; Aglarech; u.a.\",\n"
+            + "\t\t\"layerInfos\": \"base/s=spans cnx/c=spans cnx/l=tokens cnx/m=tokens cnx/p=tokens cnx/s=spans cnx/syn=tokens corenlp/s=spans mate/l=tokens mate/m=tokens mate/p=tokens opennlp/p=tokens opennlp/s=spans tt/l=tokens tt/p=tokens tt/s=spans xip/c=spans xip/l=tokens xip/p=tokens xip/s=spans\",\n"
+            + "\t\t\"startMore\": true,\n"
+            + "\t\t\"endMore\": true,\n"
+            + "\t\t\"snippet\": \"<span class=\\\"context-left\\\"><span class=\\\"more\\\"></span>ad zu) ‚[das Stück] zu...‘ für </span><mark>das</mark><span class=\\\"context-right\\\"> Französische à „nach“, z. B. in<span class=\\\"more\\\"></span></span>\",\n"
+            + "\t\t\"matchID\": \"match-WPD_AAA.00001-p805-806\",\n"
+            + "\t\t\"UID\": 0,\n" + "\t\t\"pubDate\": \"2005-03-28\"\n"
+            + "\t}]\n" + "}";
+
+
+}
diff --git a/src/test/java/de/ids_mannheim/korap/handlers/DocumentDaoTest.java b/src/test/java/de/ids_mannheim/korap/handlers/DocumentDaoTest.java
index b3387c6..8061071 100644
--- a/src/test/java/de/ids_mannheim/korap/handlers/DocumentDaoTest.java
+++ b/src/test/java/de/ids_mannheim/korap/handlers/DocumentDaoTest.java
@@ -9,6 +9,8 @@
 
 import java.util.List;
 
+import static org.junit.Assert.*;
+
 /**
  * @author hanl
  * @date 12/11/2015
@@ -33,79 +35,83 @@
 
 
     @Test
-    public void testGet () {
+    public void testGet () throws KustvaktException {
         Document doc = new Document("BRZ13_APR.00002");
         doc.setDisabled(true);
-        try {
-            dao.storeResource(doc, null);
-            Document doc1 = dao.findbyId(doc.getPersistentID(), null);
-            assert doc1 != null && doc.isDisabled();
-        }
-        catch (KustvaktException e) {
-            e.printStackTrace();
-        }
+        dao.storeResource(doc, null);
+        Document doc1 = dao.findbyId(doc.getPersistentID(), null);
+        assertNotNull(doc1);
+        assertTrue(doc.isDisabled());
     }
 
 
     @Test
-    public void testRemove () {
+    public void testRemove () throws KustvaktException {
         Document doc = new Document("BRZ13_APR.00003");
         doc.setDisabled(true);
-        try {
-            dao.storeResource(doc, null);
-            Document doc1 = dao.findbyId(doc.getPersistentID(), null);
-            assert dao.deleteResource(doc.getPersistentID(), null) == 1;
-            doc1 = dao.findbyId(doc.getPersistentID(), null);
-            assert doc1 == null;
-        }
-        catch (KustvaktException e) {
-            e.printStackTrace();
-
-        }
+        dao.storeResource(doc, null);
+        Document doc1 = dao.findbyId(doc.getPersistentID(), null);
+        assertEquals(1, dao.deleteResource(doc.getPersistentID(), null));
+        doc1 = dao.findbyId(doc.getPersistentID(), null);
+        Assert.assertNull(doc1);
     }
 
 
     @Test
-    public void testEmptyFind () {
-        List<String> dc = null;
-        try {
-            dc = dao.findbyCorpus("WPD", true);
-        }
-        catch (KustvaktException e) {
-            e.printStackTrace();
-        }
-
-        Assert.assertNotNull(dc);
-        Assert.assertEquals("should be empty", 0, dc.size());
+    public void testEmptyFind () throws KustvaktException {
+        List<String> dc = dao.findbyCorpus("WPD", true);
+        assertNotNull(dc);
+        assertEquals("should be empty", 0, dc.size());
     }
 
 
     @Test
-    public void testFind () {
+    public void testFindText () throws KustvaktException {
         int length = 10;
         for (int i = 0; i < length; i++) {
             Document doc = new Document("WPD_APR.0000" + i);
             doc.setDisabled(true);
-            try {
-                dao.storeResource(doc, null);
-            }
-            catch (KustvaktException e) {
-                e.printStackTrace();
-                break;
-            }
+            dao.storeResource(doc, null);
         }
+        List<String> dc = dao.findbyCorpus("WPD", true);
 
-        List<String> dc = null;
-        try {
-            dc = dao.findbyCorpus("WPD", true);
-        }
-        catch (KustvaktException e) {
-            e.printStackTrace();
-        }
+        assertNotNull(dc);
+        assertNotSame("should not be empty", 0, dc.size());
+        assertEquals("not all found", length, dc.size());
+    }
 
-        Assert.assertNotNull(dc);
-        Assert.assertNotSame("should not be empty", 0, dc.size());
-        Assert.assertEquals("not all found", length, dc.size());
+
+    @Test
+    public void testFindDocByText () throws KustvaktException {
+        Document doc = new Document("WPD_AAA", "WPD_AAA.02439");
+        doc.setDisabled(true);
+        dao.storeResource(doc, null);
+
+        Document dfind = dao.findbyId(doc.getPersistentID(), null);
+        assertNotNull(dfind);
+        assertEquals(doc.getPersistentID(), dfind.getPersistentID());
+    }
+
+
+    @Test
+    public void testFindDocByPartial () throws KustvaktException {
+        Document doc = new Document("WPD_AAA.02439");
+        doc.setDisabled(true);
+        Document doc1 = new Document("WPD_AAA.02343");
+        dao.storeResource(doc, null);
+        dao.storeResource(doc1, null);
+
+        List<Document> dfind = dao.findbyPartialId(doc.getDocSigle(), null);
+        assertNotNull(dfind);
+        assertNotEquals(0, dfind.size());
+        assertEquals(2, dfind.size());
+        assertEquals(doc.getDocSigle(), dfind.get(0).getDocSigle());
+
+        dfind = dao.findbyPartialId(doc.getCorpus(), null);
+        assertNotNull(dfind);
+        assertNotEquals(0, dfind.size());
+        assertEquals(2, dfind.size());
+        assertEquals(doc.getDocSigle(), dfind.get(0).getDocSigle());
     }
 
 
diff --git a/src/test/java/de/ids_mannheim/korap/resource/rewrite/CollectionRewriteTest.java b/src/test/java/de/ids_mannheim/korap/resource/rewrite/CollectionRewriteTest.java
index 8e67a30..0e43b97 100644
--- a/src/test/java/de/ids_mannheim/korap/resource/rewrite/CollectionRewriteTest.java
+++ b/src/test/java/de/ids_mannheim/korap/resource/rewrite/CollectionRewriteTest.java
@@ -3,6 +3,7 @@
 import com.fasterxml.jackson.databind.JsonNode;
 import de.ids_mannheim.korap.config.BeanConfigTest;
 import de.ids_mannheim.korap.config.KustvaktConfiguration;
+import de.ids_mannheim.korap.config.TestVariables;
 import de.ids_mannheim.korap.exceptions.KustvaktException;
 import de.ids_mannheim.korap.query.serialize.QuerySerializer;
 import de.ids_mannheim.korap.user.User;
@@ -21,8 +22,6 @@
  */
 public class CollectionRewriteTest extends BeanConfigTest {
 
-    private static String simple_add_query = "[pos=ADJA]";
-
     private static KustvaktConfiguration config;
 
 
@@ -52,7 +51,7 @@
         handler.insertBeans(helper().getContext());
         handler.add(CollectionConstraint.class);
         QuerySerializer s = new QuerySerializer();
-        s.setQuery(simple_add_query, "poliqarp");
+        s.setQuery(TestVariables.SIMPLE_ADD_QUERY, "poliqarp");
         s.setCollection("textClass=politik & corpusSigle=WPD");
         String result = s.toJSON();
         JsonNode node = JsonUtils.readTree(handler.processQuery(result,
@@ -74,21 +73,17 @@
         handler.insertBeans(helper().getContext());
         handler.add(CollectionConstraint.class);
         QuerySerializer s = new QuerySerializer();
-        s.setQuery(simple_add_query, "poliqarp");
+        s.setQuery(TestVariables.SIMPLE_ADD_QUERY, "poliqarp");
         s.setCollection("corpusSigle=BRZ13 & corpusSigle=WPD");
         String result = s.toJSON();
-        try {
-            JsonNode node = JsonUtils.readTree(handler.processQuery(result,
-                    User.UserFactory.getUser("test_user")));
-            System.out.println(node);
-            assertNotNull(node);
-            assertEquals(0, node.at("/collection/operands").size());
-            assertEquals("koral:rewrite",
-                    node.at("/collection/rewrites/0/@type").asText());
-        }
-        catch (Exception e) {
-            e.printStackTrace();
-        }
+
+        JsonNode node = JsonUtils.readTree(handler.processQuery(result,
+                User.UserFactory.getUser("test_user")));
+        System.out.println(node);
+        assertNotNull(node);
+        assertEquals(0, node.at("/collection/operands").size());
+        assertEquals("koral:rewrite", node.at("/collection/rewrites/0/@type")
+                .asText());
     }
 
 
@@ -98,7 +93,7 @@
         handler.insertBeans(helper().getContext());
         handler.add(CollectionConstraint.class);
         QuerySerializer s = new QuerySerializer();
-        s.setQuery(simple_add_query, "poliqarp");
+        s.setQuery(TestVariables.SIMPLE_ADD_QUERY, "poliqarp");
         s.setCollection("(corpusSigle=BRZ13 & textClass=Wissenschaft) & corpusSigle=WPD");
         String result = s.toJSON();
         JsonNode node = JsonUtils.readTree(handler.processQuery(result,
@@ -122,7 +117,7 @@
         handler.add(CollectionConstraint.class);
         handler.add(CollectionCleanRewrite.class);
         QuerySerializer s = new QuerySerializer();
-        s.setQuery(simple_add_query, "poliqarp");
+        s.setQuery(TestVariables.SIMPLE_ADD_QUERY, "poliqarp");
         s.setCollection("(corpusSigle=BRZ13 & corpusSigle=WPD) & textClass=Wissenschaft & textClass=Sport");
         String result = s.toJSON();
 
@@ -150,7 +145,7 @@
         handler.add(CollectionConstraint.class);
         handler.add(CollectionCleanRewrite.class);
         QuerySerializer s = new QuerySerializer();
-        s.setQuery(simple_add_query, "poliqarp");
+        s.setQuery(TestVariables.SIMPLE_ADD_QUERY, "poliqarp");
         s.setCollection("(corpusSigle=BRZ13 & textClass=wissenschaft)");
         String result = s.toJSON();
         JsonNode node = JsonUtils.readTree(handler.processQuery(result,
@@ -171,7 +166,7 @@
         handler.add(CollectionConstraint.class);
         handler.add(CollectionCleanRewrite.class);
         QuerySerializer s = new QuerySerializer();
-        s.setQuery(simple_add_query, "poliqarp");
+        s.setQuery(TestVariables.SIMPLE_ADD_QUERY, "poliqarp");
         s.setCollection("(corpusSigle=BRZ13 & corpusSigle=WPD) & textClass=Wissenschaft");
         String result = s.toJSON();
         JsonNode node = JsonUtils.readTree(handler.processQuery(result,
@@ -192,7 +187,7 @@
         handler.add(CollectionConstraint.class);
         handler.add(CollectionCleanRewrite.class);
         QuerySerializer s = new QuerySerializer();
-        s.setQuery(simple_add_query, "poliqarp");
+        s.setQuery(TestVariables.SIMPLE_ADD_QUERY, "poliqarp");
         s.setCollection("(docID=random & textClass=Wissenschaft) & corpusSigle=WPD");
         String org = s.toJSON();
         JsonNode node = JsonUtils.readTree(handler.processQuery(org,
@@ -217,7 +212,7 @@
         handler.add(PublicCollection.class);
 
         QuerySerializer s = new QuerySerializer();
-        s.setQuery(simple_add_query, "poliqarp");
+        s.setQuery(TestVariables.SIMPLE_ADD_QUERY, "poliqarp");
         String org = s.toJSON();
         JsonNode node = JsonUtils.readTree(handler.processQuery(org,
                 User.UserFactory.getUser("test_user")));
@@ -240,7 +235,7 @@
         handler.add(PublicCollection.class);
 
         QuerySerializer s = new QuerySerializer();
-        s.setQuery(simple_add_query, "poliqarp");
+        s.setQuery(TestVariables.SIMPLE_ADD_QUERY, "poliqarp");
         s.setCollection("(docSigle=WPD_AAA & textClass=wissenschaft)");
         String org = s.toJSON();
         JsonNode node = JsonUtils.readTree(handler.processQuery(org,
@@ -262,7 +257,7 @@
         handler.insertBeans(helper().getContext());
         handler.add(CollectionConstraint.class);
         QuerySerializer s = new QuerySerializer();
-        s.setQuery(simple_add_query, "poliqarp");
+        s.setQuery(TestVariables.SIMPLE_ADD_QUERY, "poliqarp");
         s.setCollection("(corpusSigle=BRZ14 & textClass=wissenschaft) | (corpusSigle=AZPR | textClass=freizeit)");
         String org = s.toJSON();
         JsonNode node = JsonUtils.readTree(handler.processQuery(org,
@@ -289,7 +284,7 @@
         // todo: use this collection query also to test clean up filter! after reduction of corpusSigle (wiss | freizeit)!
         handler.add(CollectionCleanRewrite.class);
         QuerySerializer s = new QuerySerializer();
-        s.setQuery(simple_add_query, "poliqarp");
+        s.setQuery(TestVariables.SIMPLE_ADD_QUERY, "poliqarp");
         s.setCollection("(corpusSigle=BRZ14 & textClass=wissenschaft) | (corpusSigle=AZPR | textClass=freizeit)");
         String org = s.toJSON();
         JsonNode node = JsonUtils.readTree(handler.processQuery(org,
diff --git a/src/test/java/de/ids_mannheim/korap/resource/rewrite/ResultRewriteTest.java b/src/test/java/de/ids_mannheim/korap/resource/rewrite/ResultRewriteTest.java
index 068a424..479927c 100644
--- a/src/test/java/de/ids_mannheim/korap/resource/rewrite/ResultRewriteTest.java
+++ b/src/test/java/de/ids_mannheim/korap/resource/rewrite/ResultRewriteTest.java
@@ -2,6 +2,7 @@
 
 import com.fasterxml.jackson.databind.JsonNode;
 import de.ids_mannheim.korap.config.BeanConfigTest;
+import de.ids_mannheim.korap.config.TestVariables;
 import de.ids_mannheim.korap.exceptions.KustvaktException;
 import de.ids_mannheim.korap.handlers.DocumentDao;
 import de.ids_mannheim.korap.resources.Document;
@@ -16,8 +17,6 @@
  * @author hanl
  * @date 12/11/2015
  */
-// todo: should differentiate between docsigle and textsigle
-// todo: logging!
 public class ResultRewriteTest extends BeanConfigTest {
 
     @Override
@@ -47,9 +46,9 @@
                 .getPersistenceClient());
         Document d = dao.findbyId("BRZ13_APR.00014", null);
         assertNull(d);
-        String v = ha.processResult(RESULT, null);
-        assertEquals("results do not match", JsonUtils.readTree(RESULT),
-                JsonUtils.readTree(v));
+        String v = ha.processResult(TestVariables.RESULT, null);
+        assertEquals("results do not match",
+                JsonUtils.readTree(TestVariables.RESULT), JsonUtils.readTree(v));
     }
 
 
@@ -67,485 +66,21 @@
         assertEquals("Handler could not be added to rewrite handler instance!",
                 true, ha.add(DocMatchRewrite.class));
 
-        JsonNode check = JsonUtils.readTree(RESULT);
+        JsonNode check = JsonUtils.readTree(TestVariables.RESULT);
         assertNotNull(check);
         int check_size = check.at("/matches").size();
 
-        String v = ha.processResult(RESULT, null);
+        String v = ha.processResult(TestVariables.RESULT, null);
         JsonNode node = JsonUtils.readTree(v);
 
         assertNotNull(node);
         int size = node.at("/matches").size();
         assertNotEquals("documents were not removed", check_size, size);
-        assertEquals(22, size);
+        assertEquals("result does not contain required matches", 22, size);
 
         dao.deleteResource(doc.getPersistentID(), null);
         Document d = dao.findbyId(doc.getPersistentID(), null);
-        assertNull(d);
+        assertNull("document should not exist anymore!", d);
     }
 
-
-
-    private static final String RESULT = "{\n"
-            + "\t\"@context\": \"http://korap.ids-mannheim.de/ns/KoralQuery/v0.3/context.jsonld\",\n"
-            + "\t\"meta\": {\n"
-            + "\t\t\"count\": 25,\n"
-            + "\t\t\"startIndex\": 0,\n"
-            + "\t\t\"timeout\": 120000,\n"
-            + "\t\t\"context\": {\n"
-            + "\t\t\t\"left\": [\"token\", 6],\n"
-            + "\t\t\t\"right\": [\"token\", 6]\n"
-            + "\t\t},\n"
-            + "\t\t\"fields\": [\"pubDate\", \"subTitle\", \"author\", \"pubPlace\", \"title\", \"textSigle\", \"UID\", \"ID\", \"layerInfos\", \"corpusSigle\", \"docSigle\", \"corpusID\", \"textClass\"],\n"
-            + "\t\t\"version\": \"0.55.5\",\n"
-            + "\t\t\"benchmark\": \"0.117436617 s\",\n"
-            + "\t\t\"totalResults\": 31,\n"
-            + "\t\t\"serialQuery\": \"tokens:s:das\",\n"
-            + "\t\t\"itemsPerPage\": 25\n"
-            + "\t},\n"
-            + "\t\"query\": {\n"
-            + "\t\t\"@type\": \"koral:token\",\n"
-            + "\t\t\"wrap\": {\n"
-            + "\t\t\t\"@type\": \"koral:term\",\n"
-            + "\t\t\t\"key\": \"das\",\n"
-            + "\t\t\t\"layer\": \"orth\",\n"
-            + "\t\t\t\"match\": \"match:eq\",\n"
-            + "\t\t\t\"foundry\": \"opennlp\",\n"
-            + "\t\t\t\"rewrites\": [{\n"
-            + "\t\t\t\t\"@type\": \"koral:rewrite\",\n"
-            + "\t\t\t\t\"src\": \"Kustvakt\",\n"
-            + "\t\t\t\t\"operation\": \"operation:injection\",\n"
-            + "\t\t\t\t\"scope\": \"foundry\"\n"
-            + "\t\t\t}]\n"
-            + "\t\t},\n"
-            + "\t\t\"idn\": \"das_0\",\n"
-            + "\t\t\"rewrites\": [{\n"
-            + "\t\t\t\"@type\": \"koral:rewrite\",\n"
-            + "\t\t\t\"src\": \"Kustvakt\",\n"
-            + "\t\t\t\"operation\": \"operation:injection\",\n"
-            + "\t\t\t\"scope\": \"idn\"\n"
-            + "\t\t}]\n"
-            + "\t},\n"
-            + "\t\"collection\": {\n"
-            + "\t\t\"@type\": \"koral:docGroup\",\n"
-            + "\t\t\"operation\": \"operation:or\",\n"
-            + "\t\t\"operands\": [{\n"
-            + "\t\t\t\"@type\": \"koral:doc\",\n"
-            + "\t\t\t\"key\": \"corpusSigle\",\n"
-            + "\t\t\t\"value\": \"GOE\",\n"
-            + "\t\t\t\"match\": \"match:eq\"\n"
-            + "\t\t}, {\n"
-            + "\t\t\t\"@type\": \"koral:doc\",\n"
-            + "\t\t\t\"key\": \"corpusSigle\",\n"
-            + "\t\t\t\"value\": \"WPD\",\n"
-            + "\t\t\t\"match\": \"match:eq\"\n"
-            + "\t\t}],\n"
-            + "\t\t\"rewrites\": [{\n"
-            + "\t\t\t\"@type\": \"koral:rewrite\",\n"
-            + "\t\t\t\"src\": \"Kustvakt\",\n"
-            + "\t\t\t\"operation\": \"operation:insertion\",\n"
-            + "\t\t\t\"scope\": \"corpusSigle\"\n"
-            + "\t\t}]\n"
-            + "\t},\n"
-            + "\t\"matches\": [{\n"
-            + "\t\t\"field\": \"tokens\",\n"
-            + "\t\t\"textClass\": \"wissenschaft populaerwissenschaft\",\n"
-            + "\t\t\"pubPlace\": \"URL:http://de.wikipedia.org\",\n"
-            + "\t\t\"textSigle\": \"WPD_AAA.00004\",\n"
-            + "\t\t\"docSigle\": \"WPD_AAA\",\n"
-            + "\t\t\"corpusSigle\": \"WPD\",\n"
-            + "\t\t\"title\": \"A (Logik)\",\n"
-            + "\t\t\"author\": \"Zenogantner; ElRaki; 1\",\n"
-            + "\t\t\"layerInfos\": \"base/s=spans cnx/c=spans cnx/l=tokens cnx/m=tokens cnx/p=tokens cnx/s=spans cnx/syn=tokens corenlp/s=spans mate/l=tokens mate/m=tokens mate/p=tokens opennlp/p=tokens opennlp/s=spans tt/l=tokens tt/p=tokens tt/s=spans xip/c=spans xip/l=tokens xip/p=tokens xip/s=spans\",\n"
-            + "\t\t\"startMore\": true,\n"
-            + "\t\t\"endMore\": true,\n"
-            + "\t\t\"snippet\": \"<span class=\\\"context-left\\\"><span class=\\\"more\\\"></span>z.B. mit dem Wort Barbara&quot; bezeichnet, </span><mark>das</mark><span class=\\\"context-right\\\"> dreimal den Buchstaben a enthält, aber<span class=\\\"more\\\"></span></span>\",\n"
-            + "\t\t\"matchID\": \"match-WPD_AAA.00004-p195-196\",\n"
-            + "\t\t\"UID\": 0,\n"
-            + "\t\t\"pubDate\": \"2005-03-28\"\n"
-            + "\t}, {\n"
-            + "\t\t\"field\": \"tokens\",\n"
-            + "\t\t\"textClass\": \"kultur musik freizeit-unterhaltung reisen\",\n"
-            + "\t\t\"pubPlace\": \"URL:http://de.wikipedia.org\",\n"
-            + "\t\t\"textSigle\": \"WPD_AAA.02439\",\n"
-            + "\t\t\"docSigle\": \"WPD_AAA\",\n"
-            + "\t\t\"corpusSigle\": \"WPD\",\n"
-            + "\t\t\"title\": \"Aegukka\",\n"
-            + "\t\t\"author\": \"ThorstenS; 2\",\n"
-            + "\t\t\"layerInfos\": \"base/s=spans cnx/c=spans cnx/l=tokens cnx/m=tokens cnx/p=tokens cnx/s=spans cnx/syn=tokens corenlp/s=spans mate/l=tokens mate/m=tokens mate/p=tokens opennlp/p=tokens opennlp/s=spans tt/l=tokens tt/p=tokens tt/s=spans xip/c=spans xip/l=tokens xip/p=tokens xip/s=spans\",\n"
-            + "\t\t\"startMore\": true,\n"
-            + "\t\t\"endMore\": true,\n"
-            + "\t\t\"snippet\": \"<span class=\\\"context-left\\\"><span class=\\\"more\\\"></span>wörtlich &quot;Das Lied der Liebe für </span><mark>das</mark><span class=\\\"context-right\\\"> Land&quot;, oder &quot;Das patriotische Lied&quot;. Es<span class=\\\"more\\\"></span></span>\",\n"
-            + "\t\t\"matchID\": \"match-WPD_AAA.02439-p22-23\",\n"
-            + "\t\t\"UID\": 0,\n"
-            + "\t\t\"pubDate\": \"2005-03-28\"\n"
-            + "\t}, {\n"
-            + "\t\t\"field\": \"tokens\",\n"
-            + "\t\t\"textClass\": \"kultur musik freizeit-unterhaltung reisen\",\n"
-            + "\t\t\"pubPlace\": \"URL:http://de.wikipedia.org\",\n"
-            + "\t\t\"textSigle\": \"WPD_AAA.02439\",\n"
-            + "\t\t\"docSigle\": \"WPD_AAA\",\n"
-            + "\t\t\"corpusSigle\": \"WPD\",\n"
-            + "\t\t\"title\": \"Aegukka\",\n"
-            + "\t\t\"author\": \"ThorstenS; 2\",\n"
-            + "\t\t\"layerInfos\": \"base/s=spans cnx/c=spans cnx/l=tokens cnx/m=tokens cnx/p=tokens cnx/s=spans cnx/syn=tokens corenlp/s=spans mate/l=tokens mate/m=tokens mate/p=tokens opennlp/p=tokens opennlp/s=spans tt/l=tokens tt/p=tokens tt/s=spans xip/c=spans xip/l=tokens xip/p=tokens xip/s=spans\",\n"
-            + "\t\t\"startMore\": true,\n"
-            + "\t\t\"endMore\": true,\n"
-            + "\t\t\"snippet\": \"<span class=\\\"context-left\\\"><span class=\\\"more\\\"></span>Besatzungszeit von 1910 bis 1945 wurde </span><mark>das</mark><span class=\\\"context-right\\\"> Lied verboten. Im Ausland lebende Koreaner<span class=\\\"more\\\"></span></span>\",\n"
-            + "\t\t\"matchID\": \"match-WPD_AAA.02439-p74-75\",\n"
-            + "\t\t\"UID\": 0,\n"
-            + "\t\t\"pubDate\": \"2005-03-28\"\n"
-            + "\t}, {\n"
-            + "\t\t\"field\": \"tokens\",\n"
-            + "\t\t\"textClass\": \"kultur musik freizeit-unterhaltung reisen\",\n"
-            + "\t\t\"pubPlace\": \"URL:http://de.wikipedia.org\",\n"
-            + "\t\t\"textSigle\": \"WPD_AAA.02439\",\n"
-            + "\t\t\"docSigle\": \"WPD_AAA\",\n"
-            + "\t\t\"corpusSigle\": \"WPD\",\n"
-            + "\t\t\"title\": \"Aegukka\",\n"
-            + "\t\t\"author\": \"ThorstenS; 2\",\n"
-            + "\t\t\"layerInfos\": \"base/s=spans cnx/c=spans cnx/l=tokens cnx/m=tokens cnx/p=tokens cnx/s=spans cnx/syn=tokens corenlp/s=spans mate/l=tokens mate/m=tokens mate/p=tokens opennlp/p=tokens opennlp/s=spans tt/l=tokens tt/p=tokens tt/s=spans xip/c=spans xip/l=tokens xip/p=tokens xip/s=spans\",\n"
-            + "\t\t\"startMore\": true,\n"
-            + "\t\t\"endMore\": true,\n"
-            + "\t\t\"snippet\": \"<span class=\\\"context-left\\\"><span class=\\\"more\\\"></span>3. Deutsche Übersetzung 1. Strophe Bis </span><mark>das</mark><span class=\\\"context-right\\\"> Meer des Ostens ausdörrt und der<span class=\\\"more\\\"></span></span>\",\n"
-            + "\t\t\"matchID\": \"match-WPD_AAA.02439-p298-299\",\n"
-            + "\t\t\"UID\": 0,\n"
-            + "\t\t\"pubDate\": \"2005-03-28\"\n"
-            + "\t}, {\n"
-            + "\t\t\"field\": \"tokens\",\n"
-            + "\t\t\"textClass\": \"freizeit-unterhaltung reisen wissenschaft populaerwissenschaft\",\n"
-            + "\t\t\"pubPlace\": \"URL:http://de.wikipedia.org\",\n"
-            + "\t\t\"textSigle\": \"WPD_AAA.00001\",\n"
-            + "\t\t\"docSigle\": \"WPD_AAA\",\n"
-            + "\t\t\"corpusSigle\": \"WPD\",\n"
-            + "\t\t\"title\": \"A\",\n"
-            + "\t\t\"author\": \"Ruru; Jens.Ol; Aglarech; u.a.\",\n"
-            + "\t\t\"layerInfos\": \"base/s=spans cnx/c=spans cnx/l=tokens cnx/m=tokens cnx/p=tokens cnx/s=spans cnx/syn=tokens corenlp/s=spans mate/l=tokens mate/m=tokens mate/p=tokens opennlp/p=tokens opennlp/s=spans tt/l=tokens tt/p=tokens tt/s=spans xip/c=spans xip/l=tokens xip/p=tokens xip/s=spans\",\n"
-            + "\t\t\"startMore\": true,\n"
-            + "\t\t\"endMore\": true,\n"
-            + "\t\t\"snippet\": \"<span class=\\\"context-left\\\"><span class=\\\"more\\\"></span>Ausnahme von Fremdwörtern und Namen ist </span><mark>das</mark><span class=\\\"context-right\\\"> A der einzige Buchstabe im Deutschen<span class=\\\"more\\\"></span></span>\",\n"
-            + "\t\t\"matchID\": \"match-WPD_AAA.00001-p41-42\",\n"
-            + "\t\t\"UID\": 0,\n"
-            + "\t\t\"pubDate\": \"2005-03-28\"\n"
-            + "\t}, {\n"
-            + "\t\t\"field\": \"tokens\",\n"
-            + "\t\t\"textClass\": \"freizeit-unterhaltung reisen wissenschaft populaerwissenschaft\",\n"
-            + "\t\t\"pubPlace\": \"URL:http://de.wikipedia.org\",\n"
-            + "\t\t\"textSigle\": \"WPD_AAA.00001\",\n"
-            + "\t\t\"docSigle\": \"WPD_AAA\",\n"
-            + "\t\t\"corpusSigle\": \"WPD\",\n"
-            + "\t\t\"title\": \"A\",\n"
-            + "\t\t\"author\": \"Ruru; Jens.Ol; Aglarech; u.a.\",\n"
-            + "\t\t\"layerInfos\": \"base/s=spans cnx/c=spans cnx/l=tokens cnx/m=tokens cnx/p=tokens cnx/s=spans cnx/syn=tokens corenlp/s=spans mate/l=tokens mate/m=tokens mate/p=tokens opennlp/p=tokens opennlp/s=spans tt/l=tokens tt/p=tokens tt/s=spans xip/c=spans xip/l=tokens xip/p=tokens xip/s=spans\",\n"
-            + "\t\t\"startMore\": true,\n"
-            + "\t\t\"endMore\": true,\n"
-            + "\t\t\"snippet\": \"<span class=\\\"context-left\\\"><span class=\\\"more\\\"></span>flache Stellung niedergedrückt wird. Stellt man </span><mark>das</mark><span class=\\\"context-right\\\"> Verhältnis der drei Hauptvokale a, i<span class=\\\"more\\\"></span></span>\",\n"
-            + "\t\t\"matchID\": \"match-WPD_AAA.00001-p107-108\",\n"
-            + "\t\t\"UID\": 0,\n"
-            + "\t\t\"pubDate\": \"2005-03-28\"\n"
-            + "\t}, {\n"
-            + "\t\t\"field\": \"tokens\",\n"
-            + "\t\t\"textClass\": \"freizeit-unterhaltung reisen wissenschaft populaerwissenschaft\",\n"
-            + "\t\t\"pubPlace\": \"URL:http://de.wikipedia.org\",\n"
-            + "\t\t\"textSigle\": \"WPD_AAA.00001\",\n"
-            + "\t\t\"docSigle\": \"WPD_AAA\",\n"
-            + "\t\t\"corpusSigle\": \"WPD\",\n"
-            + "\t\t\"title\": \"A\",\n"
-            + "\t\t\"author\": \"Ruru; Jens.Ol; Aglarech; u.a.\",\n"
-            + "\t\t\"layerInfos\": \"base/s=spans cnx/c=spans cnx/l=tokens cnx/m=tokens cnx/p=tokens cnx/s=spans cnx/syn=tokens corenlp/s=spans mate/l=tokens mate/m=tokens mate/p=tokens opennlp/p=tokens opennlp/s=spans tt/l=tokens tt/p=tokens tt/s=spans xip/c=spans xip/l=tokens xip/p=tokens xip/s=spans\",\n"
-            + "\t\t\"startMore\": true,\n"
-            + "\t\t\"endMore\": true,\n"
-            + "\t\t\"snippet\": \"<span class=\\\"context-left\\\"><span class=\\\"more\\\"></span>kommt i als der hellste an </span><mark>das</mark><span class=\\\"context-right\\\"> obere, u als der dumpfeste an<span class=\\\"more\\\"></span></span>\",\n"
-            + "\t\t\"matchID\": \"match-WPD_AAA.00001-p127-128\",\n"
-            + "\t\t\"UID\": 0,\n"
-            + "\t\t\"pubDate\": \"2005-03-28\"\n"
-            + "\t}, {\n"
-            + "\t\t\"field\": \"tokens\",\n"
-            + "\t\t\"textClass\": \"freizeit-unterhaltung reisen wissenschaft populaerwissenschaft\",\n"
-            + "\t\t\"pubPlace\": \"URL:http://de.wikipedia.org\",\n"
-            + "\t\t\"textSigle\": \"WPD_AAA.00001\",\n"
-            + "\t\t\"docSigle\": \"WPD_AAA\",\n"
-            + "\t\t\"corpusSigle\": \"WPD\",\n"
-            + "\t\t\"title\": \"A\",\n"
-            + "\t\t\"author\": \"Ruru; Jens.Ol; Aglarech; u.a.\",\n"
-            + "\t\t\"layerInfos\": \"base/s=spans cnx/c=spans cnx/l=tokens cnx/m=tokens cnx/p=tokens cnx/s=spans cnx/syn=tokens corenlp/s=spans mate/l=tokens mate/m=tokens mate/p=tokens opennlp/p=tokens opennlp/s=spans tt/l=tokens tt/p=tokens tt/s=spans xip/c=spans xip/l=tokens xip/p=tokens xip/s=spans\",\n"
-            + "\t\t\"startMore\": true,\n"
-            + "\t\t\"endMore\": true,\n"
-            + "\t\t\"snippet\": \"<span class=\\\"context-left\\\"><span class=\\\"more\\\"></span>obere, u als der dumpfeste an </span><mark>das</mark><span class=\\\"context-right\\\"> untere Ende, a als der mittlere<span class=\\\"more\\\"></span></span>\",\n"
-            + "\t\t\"matchID\": \"match-WPD_AAA.00001-p134-135\",\n"
-            + "\t\t\"UID\": 0,\n"
-            + "\t\t\"pubDate\": \"2005-03-28\"\n"
-            + "\t}, {\n"
-            + "\t\t\"field\": \"tokens\",\n"
-            + "\t\t\"textClass\": \"freizeit-unterhaltung reisen wissenschaft populaerwissenschaft\",\n"
-            + "\t\t\"pubPlace\": \"URL:http://de.wikipedia.org\",\n"
-            + "\t\t\"textSigle\": \"WPD_AAA.00001\",\n"
-            + "\t\t\"docSigle\": \"WPD_AAA\",\n"
-            + "\t\t\"corpusSigle\": \"WPD\",\n"
-            + "\t\t\"title\": \"A\",\n"
-            + "\t\t\"author\": \"Ruru; Jens.Ol; Aglarech; u.a.\",\n"
-            + "\t\t\"layerInfos\": \"base/s=spans cnx/c=spans cnx/l=tokens cnx/m=tokens cnx/p=tokens cnx/s=spans cnx/syn=tokens corenlp/s=spans mate/l=tokens mate/m=tokens mate/p=tokens opennlp/p=tokens opennlp/s=spans tt/l=tokens tt/p=tokens tt/s=spans xip/c=spans xip/l=tokens xip/p=tokens xip/s=spans\",\n"
-            + "\t\t\"startMore\": true,\n"
-            + "\t\t\"endMore\": true,\n"
-            + "\t\t\"snippet\": \"<span class=\\\"context-left\\\"><span class=\\\"more\\\"></span>im 9. Jahrhundert v. Chr. war </span><mark>das</mark><span class=\\\"context-right\\\"> Schriftzeichen bereits stark stilisiert, die Hörner<span class=\\\"more\\\"></span></span>\",\n"
-            + "\t\t\"matchID\": \"match-WPD_AAA.00001-p271-272\",\n"
-            + "\t\t\"UID\": 0,\n"
-            + "\t\t\"pubDate\": \"2005-03-28\"\n"
-            + "\t}, {\n"
-            + "\t\t\"field\": \"tokens\",\n"
-            + "\t\t\"textClass\": \"freizeit-unterhaltung reisen wissenschaft populaerwissenschaft\",\n"
-            + "\t\t\"pubPlace\": \"URL:http://de.wikipedia.org\",\n"
-            + "\t\t\"textSigle\": \"WPD_AAA.00001\",\n"
-            + "\t\t\"docSigle\": \"WPD_AAA\",\n"
-            + "\t\t\"corpusSigle\": \"WPD\",\n"
-            + "\t\t\"title\": \"A\",\n"
-            + "\t\t\"author\": \"Ruru; Jens.Ol; Aglarech; u.a.\",\n"
-            + "\t\t\"layerInfos\": \"base/s=spans cnx/c=spans cnx/l=tokens cnx/m=tokens cnx/p=tokens cnx/s=spans cnx/syn=tokens corenlp/s=spans mate/l=tokens mate/m=tokens mate/p=tokens opennlp/p=tokens opennlp/s=spans tt/l=tokens tt/p=tokens tt/s=spans xip/c=spans xip/l=tokens xip/p=tokens xip/s=spans\",\n"
-            + "\t\t\"startMore\": true,\n"
-            + "\t\t\"endMore\": true,\n"
-            + "\t\t\"snippet\": \"<span class=\\\"context-left\\\"><span class=\\\"more\\\"></span>im Alphabet inne. Als die Griechen </span><mark>das</mark><span class=\\\"context-right\\\"> Phönizische Alphabet übernamen, drehten sie das<span class=\\\"more\\\"></span></span>\",\n"
-            + "\t\t\"matchID\": \"match-WPD_AAA.00001-p313-314\",\n"
-            + "\t\t\"UID\": 0,\n"
-            + "\t\t\"pubDate\": \"2005-03-28\"\n"
-            + "\t}, {\n"
-            + "\t\t\"field\": \"tokens\",\n"
-            + "\t\t\"textClass\": \"freizeit-unterhaltung reisen wissenschaft populaerwissenschaft\",\n"
-            + "\t\t\"pubPlace\": \"URL:http://de.wikipedia.org\",\n"
-            + "\t\t\"textSigle\": \"WPD_AAA.00001\",\n"
-            + "\t\t\"docSigle\": \"WPD_AAA\",\n"
-            + "\t\t\"corpusSigle\": \"WPD\",\n"
-            + "\t\t\"title\": \"A\",\n"
-            + "\t\t\"author\": \"Ruru; Jens.Ol; Aglarech; u.a.\",\n"
-            + "\t\t\"layerInfos\": \"base/s=spans cnx/c=spans cnx/l=tokens cnx/m=tokens cnx/p=tokens cnx/s=spans cnx/syn=tokens corenlp/s=spans mate/l=tokens mate/m=tokens mate/p=tokens opennlp/p=tokens opennlp/s=spans tt/l=tokens tt/p=tokens tt/s=spans xip/c=spans xip/l=tokens xip/p=tokens xip/s=spans\",\n"
-            + "\t\t\"startMore\": true,\n"
-            + "\t\t\"endMore\": true,\n"
-            + "\t\t\"snippet\": \"<span class=\\\"context-left\\\"><span class=\\\"more\\\"></span>das Phönizische Alphabet übernamen, drehten sie </span><mark>das</mark><span class=\\\"context-right\\\"> Zeichen um 90 Grad und machten<span class=\\\"more\\\"></span></span>\",\n"
-            + "\t\t\"matchID\": \"match-WPD_AAA.00001-p319-320\",\n"
-            + "\t\t\"UID\": 0,\n"
-            + "\t\t\"pubDate\": \"2005-03-28\"\n"
-            + "\t}, {\n"
-            + "\t\t\"field\": \"tokens\",\n"
-            + "\t\t\"textClass\": \"freizeit-unterhaltung reisen wissenschaft populaerwissenschaft\",\n"
-            + "\t\t\"pubPlace\": \"URL:http://de.wikipedia.org\",\n"
-            + "\t\t\"textSigle\": \"WPD_AAA.00001\",\n"
-            + "\t\t\"docSigle\": \"WPD_AAA\",\n"
-            + "\t\t\"corpusSigle\": \"WPD\",\n"
-            + "\t\t\"title\": \"A\",\n"
-            + "\t\t\"author\": \"Ruru; Jens.Ol; Aglarech; u.a.\",\n"
-            + "\t\t\"layerInfos\": \"base/s=spans cnx/c=spans cnx/l=tokens cnx/m=tokens cnx/p=tokens cnx/s=spans cnx/syn=tokens corenlp/s=spans mate/l=tokens mate/m=tokens mate/p=tokens opennlp/p=tokens opennlp/s=spans tt/l=tokens tt/p=tokens tt/s=spans xip/c=spans xip/l=tokens xip/p=tokens xip/s=spans\",\n"
-            + "\t\t\"startMore\": true,\n"
-            + "\t\t\"endMore\": true,\n"
-            + "\t\t\"snippet\": \"<span class=\\\"context-left\\\"><span class=\\\"more\\\"></span>um 90 Grad und machten daraus </span><mark>das</mark><span class=\\\"context-right\\\"> Alpha. Da das Griechische reich an<span class=\\\"more\\\"></span></span>\",\n"
-            + "\t\t\"matchID\": \"match-WPD_AAA.00001-p327-328\",\n"
-            + "\t\t\"UID\": 0,\n"
-            + "\t\t\"pubDate\": \"2005-03-28\"\n"
-            + "\t}, {\n"
-            + "\t\t\"field\": \"tokens\",\n"
-            + "\t\t\"textClass\": \"freizeit-unterhaltung reisen wissenschaft populaerwissenschaft\",\n"
-            + "\t\t\"pubPlace\": \"URL:http://de.wikipedia.org\",\n"
-            + "\t\t\"textSigle\": \"WPD_AAA.00001\",\n"
-            + "\t\t\"docSigle\": \"WPD_AAA\",\n"
-            + "\t\t\"corpusSigle\": \"WPD\",\n"
-            + "\t\t\"title\": \"A\",\n"
-            + "\t\t\"author\": \"Ruru; Jens.Ol; Aglarech; u.a.\",\n"
-            + "\t\t\"layerInfos\": \"base/s=spans cnx/c=spans cnx/l=tokens cnx/m=tokens cnx/p=tokens cnx/s=spans cnx/syn=tokens corenlp/s=spans mate/l=tokens mate/m=tokens mate/p=tokens opennlp/p=tokens opennlp/s=spans tt/l=tokens tt/p=tokens tt/s=spans xip/c=spans xip/l=tokens xip/p=tokens xip/s=spans\",\n"
-            + "\t\t\"startMore\": true,\n"
-            + "\t\t\"endMore\": true,\n"
-            + "\t\t\"snippet\": \"<span class=\\\"context-left\\\"><span class=\\\"more\\\"></span>und machten daraus das Alpha. Da </span><mark>das</mark><span class=\\\"context-right\\\"> Griechische reich an Vokalen war, verwendeten<span class=\\\"more\\\"></span></span>\",\n"
-            + "\t\t\"matchID\": \"match-WPD_AAA.00001-p330-331\",\n"
-            + "\t\t\"UID\": 0,\n"
-            + "\t\t\"pubDate\": \"2005-03-28\"\n"
-            + "\t}, {\n"
-            + "\t\t\"field\": \"tokens\",\n"
-            + "\t\t\"textClass\": \"freizeit-unterhaltung reisen wissenschaft populaerwissenschaft\",\n"
-            + "\t\t\"pubPlace\": \"URL:http://de.wikipedia.org\",\n"
-            + "\t\t\"textSigle\": \"WPD_AAA.00001\",\n"
-            + "\t\t\"docSigle\": \"WPD_AAA\",\n"
-            + "\t\t\"corpusSigle\": \"WPD\",\n"
-            + "\t\t\"title\": \"A\",\n"
-            + "\t\t\"author\": \"Ruru; Jens.Ol; Aglarech; u.a.\",\n"
-            + "\t\t\"layerInfos\": \"base/s=spans cnx/c=spans cnx/l=tokens cnx/m=tokens cnx/p=tokens cnx/s=spans cnx/syn=tokens corenlp/s=spans mate/l=tokens mate/m=tokens mate/p=tokens opennlp/p=tokens opennlp/s=spans tt/l=tokens tt/p=tokens tt/s=spans xip/c=spans xip/l=tokens xip/p=tokens xip/s=spans\",\n"
-            + "\t\t\"startMore\": true,\n"
-            + "\t\t\"endMore\": true,\n"
-            + "\t\t\"snippet\": \"<span class=\\\"context-left\\\"><span class=\\\"more\\\"></span>reich an Vokalen war, verwendeten sie </span><mark>das</mark><span class=\\\"context-right\\\"> Zeichen für den Lautwert a. Die<span class=\\\"more\\\"></span></span>\",\n"
-            + "\t\t\"matchID\": \"match-WPD_AAA.00001-p338-339\",\n"
-            + "\t\t\"UID\": 0,\n"
-            + "\t\t\"pubDate\": \"2005-03-28\"\n"
-            + "\t}, {\n"
-            + "\t\t\"field\": \"tokens\",\n"
-            + "\t\t\"textClass\": \"freizeit-unterhaltung reisen wissenschaft populaerwissenschaft\",\n"
-            + "\t\t\"pubPlace\": \"URL:http://de.wikipedia.org\",\n"
-            + "\t\t\"textSigle\": \"WPD_AAA.00001\",\n"
-            + "\t\t\"docSigle\": \"WPD_AAA\",\n"
-            + "\t\t\"corpusSigle\": \"WPD\",\n"
-            + "\t\t\"title\": \"A\",\n"
-            + "\t\t\"author\": \"Ruru; Jens.Ol; Aglarech; u.a.\",\n"
-            + "\t\t\"layerInfos\": \"base/s=spans cnx/c=spans cnx/l=tokens cnx/m=tokens cnx/p=tokens cnx/s=spans cnx/syn=tokens corenlp/s=spans mate/l=tokens mate/m=tokens mate/p=tokens opennlp/p=tokens opennlp/s=spans tt/l=tokens tt/p=tokens tt/s=spans xip/c=spans xip/l=tokens xip/p=tokens xip/s=spans\",\n"
-            + "\t\t\"startMore\": true,\n"
-            + "\t\t\"endMore\": true,\n"
-            + "\t\t\"snippet\": \"<span class=\\\"context-left\\\"><span class=\\\"more\\\"></span>den Lautwert a. Die Etrusker übernahmen </span><mark>das</mark><span class=\\\"context-right\\\"> frühgriechische Alpha und ließen es größtenteils<span class=\\\"more\\\"></span></span>\",\n"
-            + "\t\t\"matchID\": \"match-WPD_AAA.00001-p347-348\",\n"
-            + "\t\t\"UID\": 0,\n"
-            + "\t\t\"pubDate\": \"2005-03-28\"\n"
-            + "\t}, {\n"
-            + "\t\t\"field\": \"tokens\",\n"
-            + "\t\t\"textClass\": \"freizeit-unterhaltung reisen wissenschaft populaerwissenschaft\",\n"
-            + "\t\t\"pubPlace\": \"URL:http://de.wikipedia.org\",\n"
-            + "\t\t\"textSigle\": \"WPD_AAA.00001\",\n"
-            + "\t\t\"docSigle\": \"WPD_AAA\",\n"
-            + "\t\t\"corpusSigle\": \"WPD\",\n"
-            + "\t\t\"title\": \"A\",\n"
-            + "\t\t\"author\": \"Ruru; Jens.Ol; Aglarech; u.a.\",\n"
-            + "\t\t\"layerInfos\": \"base/s=spans cnx/c=spans cnx/l=tokens cnx/m=tokens cnx/p=tokens cnx/s=spans cnx/syn=tokens corenlp/s=spans mate/l=tokens mate/m=tokens mate/p=tokens opennlp/p=tokens opennlp/s=spans tt/l=tokens tt/p=tokens tt/s=spans xip/c=spans xip/l=tokens xip/p=tokens xip/s=spans\",\n"
-            + "\t\t\"startMore\": true,\n"
-            + "\t\t\"endMore\": true,\n"
-            + "\t\t\"snippet\": \"<span class=\\\"context-left\\\"><span class=\\\"more\\\"></span>von rechts nach links) versahen sie </span><mark>das</mark><span class=\\\"context-right\\\"> Zeichen mit einem Abschwung nach links<span class=\\\"more\\\"></span></span>\",\n"
-            + "\t\t\"matchID\": \"match-WPD_AAA.00001-p365-366\",\n"
-            + "\t\t\"UID\": 0,\n"
-            + "\t\t\"pubDate\": \"2005-03-28\"\n"
-            + "\t}, {\n"
-            + "\t\t\"field\": \"tokens\",\n"
-            + "\t\t\"textClass\": \"freizeit-unterhaltung reisen wissenschaft populaerwissenschaft\",\n"
-            + "\t\t\"pubPlace\": \"URL:http://de.wikipedia.org\",\n"
-            + "\t\t\"textSigle\": \"WPD_AAA.00001\",\n"
-            + "\t\t\"docSigle\": \"WPD_AAA\",\n"
-            + "\t\t\"corpusSigle\": \"WPD\",\n"
-            + "\t\t\"title\": \"A\",\n"
-            + "\t\t\"author\": \"Ruru; Jens.Ol; Aglarech; u.a.\",\n"
-            + "\t\t\"layerInfos\": \"base/s=spans cnx/c=spans cnx/l=tokens cnx/m=tokens cnx/p=tokens cnx/s=spans cnx/syn=tokens corenlp/s=spans mate/l=tokens mate/m=tokens mate/p=tokens opennlp/p=tokens opennlp/s=spans tt/l=tokens tt/p=tokens tt/s=spans xip/c=spans xip/l=tokens xip/p=tokens xip/s=spans\",\n"
-            + "\t\t\"startMore\": true,\n"
-            + "\t\t\"endMore\": true,\n"
-            + "\t\t\"snippet\": \"<span class=\\\"context-left\\\"><span class=\\\"more\\\"></span>Abschwung nach links. Als die Römer </span><mark>das</mark><span class=\\\"context-right\\\"> lateinische Alphabet schufen, verwendeten sie das<span class=\\\"more\\\"></span></span>\",\n"
-            + "\t\t\"matchID\": \"match-WPD_AAA.00001-p375-376\",\n"
-            + "\t\t\"UID\": 0,\n"
-            + "\t\t\"pubDate\": \"2005-03-28\"\n"
-            + "\t}, {\n"
-            + "\t\t\"field\": \"tokens\",\n"
-            + "\t\t\"textClass\": \"freizeit-unterhaltung reisen wissenschaft populaerwissenschaft\",\n"
-            + "\t\t\"pubPlace\": \"URL:http://de.wikipedia.org\",\n"
-            + "\t\t\"textSigle\": \"WPD_AAA.00001\",\n"
-            + "\t\t\"docSigle\": \"WPD_AAA\",\n"
-            + "\t\t\"corpusSigle\": \"WPD\",\n"
-            + "\t\t\"title\": \"A\",\n"
-            + "\t\t\"author\": \"Ruru; Jens.Ol; Aglarech; u.a.\",\n"
-            + "\t\t\"layerInfos\": \"base/s=spans cnx/c=spans cnx/l=tokens cnx/m=tokens cnx/p=tokens cnx/s=spans cnx/syn=tokens corenlp/s=spans mate/l=tokens mate/m=tokens mate/p=tokens opennlp/p=tokens opennlp/s=spans tt/l=tokens tt/p=tokens tt/s=spans xip/c=spans xip/l=tokens xip/p=tokens xip/s=spans\",\n"
-            + "\t\t\"startMore\": true,\n"
-            + "\t\t\"endMore\": true,\n"
-            + "\t\t\"snippet\": \"<span class=\\\"context-left\\\"><span class=\\\"more\\\"></span>das lateinische Alphabet schufen, verwendeten sie </span><mark>das</mark><span class=\\\"context-right\\\"> A aus dem etruskischen Alphabet, der<span class=\\\"more\\\"></span></span>\",\n"
-            + "\t\t\"matchID\": \"match-WPD_AAA.00001-p381-382\",\n"
-            + "\t\t\"UID\": 0,\n"
-            + "\t\t\"pubDate\": \"2005-03-28\"\n"
-            + "\t}, {\n"
-            + "\t\t\"field\": \"tokens\",\n"
-            + "\t\t\"textClass\": \"freizeit-unterhaltung reisen wissenschaft populaerwissenschaft\",\n"
-            + "\t\t\"pubPlace\": \"URL:http://de.wikipedia.org\",\n"
-            + "\t\t\"textSigle\": \"WPD_AAA.00001\",\n"
-            + "\t\t\"docSigle\": \"WPD_AAA\",\n"
-            + "\t\t\"corpusSigle\": \"WPD\",\n"
-            + "\t\t\"title\": \"A\",\n"
-            + "\t\t\"author\": \"Ruru; Jens.Ol; Aglarech; u.a.\",\n"
-            + "\t\t\"layerInfos\": \"base/s=spans cnx/c=spans cnx/l=tokens cnx/m=tokens cnx/p=tokens cnx/s=spans cnx/syn=tokens corenlp/s=spans mate/l=tokens mate/m=tokens mate/p=tokens opennlp/p=tokens opennlp/s=spans tt/l=tokens tt/p=tokens tt/s=spans xip/c=spans xip/l=tokens xip/p=tokens xip/s=spans\",\n"
-            + "\t\t\"startMore\": true,\n"
-            + "\t\t\"endMore\": true,\n"
-            + "\t\t\"snippet\": \"<span class=\\\"context-left\\\"><span class=\\\"more\\\"></span>in der Biologie steht A für </span><mark>das</mark><span class=\\\"context-right\\\"> Nukleosid Adenosin steht A die Base<span class=\\\"more\\\"></span></span>\",\n"
-            + "\t\t\"matchID\": \"match-WPD_AAA.00001-p404-405\",\n"
-            + "\t\t\"UID\": 0,\n"
-            + "\t\t\"pubDate\": \"2005-03-28\"\n"
-            + "\t}, {\n"
-            + "\t\t\"field\": \"tokens\",\n"
-            + "\t\t\"textClass\": \"freizeit-unterhaltung reisen wissenschaft populaerwissenschaft\",\n"
-            + "\t\t\"pubPlace\": \"URL:http://de.wikipedia.org\",\n"
-            + "\t\t\"textSigle\": \"WPD_AAA.00001\",\n"
-            + "\t\t\"docSigle\": \"WPD_AAA\",\n"
-            + "\t\t\"corpusSigle\": \"WPD\",\n"
-            + "\t\t\"title\": \"A\",\n"
-            + "\t\t\"author\": \"Ruru; Jens.Ol; Aglarech; u.a.\",\n"
-            + "\t\t\"layerInfos\": \"base/s=spans cnx/c=spans cnx/l=tokens cnx/m=tokens cnx/p=tokens cnx/s=spans cnx/syn=tokens corenlp/s=spans mate/l=tokens mate/m=tokens mate/p=tokens opennlp/p=tokens opennlp/s=spans tt/l=tokens tt/p=tokens tt/s=spans xip/c=spans xip/l=tokens xip/p=tokens xip/s=spans\",\n"
-            + "\t\t\"startMore\": true,\n"
-            + "\t\t\"endMore\": true,\n"
-            + "\t\t\"snippet\": \"<span class=\\\"context-left\\\"><span class=\\\"more\\\"></span>Wert 10, siehe auch Hexadezimalsystem. steht </span><mark>das</mark><span class=\\\"context-right\\\"> Symbol ∀ (ein auf den Kopf gestelltes<span class=\\\"more\\\"></span></span>\",\n"
-            + "\t\t\"matchID\": \"match-WPD_AAA.00001-p526-527\",\n"
-            + "\t\t\"UID\": 0,\n"
-            + "\t\t\"pubDate\": \"2005-03-28\"\n"
-            + "\t}, {\n"
-            + "\t\t\"field\": \"tokens\",\n"
-            + "\t\t\"textClass\": \"freizeit-unterhaltung reisen wissenschaft populaerwissenschaft\",\n"
-            + "\t\t\"pubPlace\": \"URL:http://de.wikipedia.org\",\n"
-            + "\t\t\"textSigle\": \"WPD_AAA.00001\",\n"
-            + "\t\t\"docSigle\": \"WPD_AAA\",\n"
-            + "\t\t\"corpusSigle\": \"WPD\",\n"
-            + "\t\t\"title\": \"A\",\n"
-            + "\t\t\"author\": \"Ruru; Jens.Ol; Aglarech; u.a.\",\n"
-            + "\t\t\"layerInfos\": \"base/s=spans cnx/c=spans cnx/l=tokens cnx/m=tokens cnx/p=tokens cnx/s=spans cnx/syn=tokens corenlp/s=spans mate/l=tokens mate/m=tokens mate/p=tokens opennlp/p=tokens opennlp/s=spans tt/l=tokens tt/p=tokens tt/s=spans xip/c=spans xip/l=tokens xip/p=tokens xip/s=spans\",\n"
-            + "\t\t\"startMore\": true,\n"
-            + "\t\t\"endMore\": true,\n"
-            + "\t\t\"snippet\": \"<span class=\\\"context-left\\\"><span class=\\\"more\\\"></span>für die Vorsilbe Atto ist A </span><mark>das</mark><span class=\\\"context-right\\\"> Einheitensymbol der elektrischen Stromstärke Ampere in<span class=\\\"more\\\"></span></span>\",\n"
-            + "\t\t\"matchID\": \"match-WPD_AAA.00001-p624-625\",\n"
-            + "\t\t\"UID\": 0,\n"
-            + "\t\t\"pubDate\": \"2005-03-28\"\n"
-            + "\t}, {\n"
-            + "\t\t\"field\": \"tokens\",\n"
-            + "\t\t\"textClass\": \"freizeit-unterhaltung reisen wissenschaft populaerwissenschaft\",\n"
-            + "\t\t\"pubPlace\": \"URL:http://de.wikipedia.org\",\n"
-            + "\t\t\"textSigle\": \"WPD_AAA.00001\",\n"
-            + "\t\t\"docSigle\": \"WPD_AAA\",\n"
-            + "\t\t\"corpusSigle\": \"WPD\",\n"
-            + "\t\t\"title\": \"A\",\n"
-            + "\t\t\"author\": \"Ruru; Jens.Ol; Aglarech; u.a.\",\n"
-            + "\t\t\"layerInfos\": \"base/s=spans cnx/c=spans cnx/l=tokens cnx/m=tokens cnx/p=tokens cnx/s=spans cnx/syn=tokens corenlp/s=spans mate/l=tokens mate/m=tokens mate/p=tokens opennlp/p=tokens opennlp/s=spans tt/l=tokens tt/p=tokens tt/s=spans xip/c=spans xip/l=tokens xip/p=tokens xip/s=spans\",\n"
-            + "\t\t\"startMore\": true,\n"
-            + "\t\t\"endMore\": true,\n"
-            + "\t\t\"snippet\": \"<span class=\\\"context-left\\\"><span class=\\\"more\\\"></span>Anordnung (Rechtswesen), Agent (Börse), Aufzeichung (Rechtsw.), </span><mark>das</mark><span class=\\\"context-right\\\"> Flächenmaß Acre und Ausgabe A ist<span class=\\\"more\\\"></span></span>\",\n"
-            + "\t\t\"matchID\": \"match-WPD_AAA.00001-p757-758\",\n"
-            + "\t\t\"UID\": 0,\n"
-            + "\t\t\"pubDate\": \"2005-03-28\"\n"
-            + "\t}, {\n"
-            + "\t\t\"field\": \"tokens\",\n"
-            + "\t\t\"textClass\": \"freizeit-unterhaltung reisen wissenschaft populaerwissenschaft\",\n"
-            + "\t\t\"pubPlace\": \"URL:http://de.wikipedia.org\",\n"
-            + "\t\t\"textSigle\": \"WPD_AAA.00001\",\n"
-            + "\t\t\"docSigle\": \"WPD_AAA\",\n"
-            + "\t\t\"corpusSigle\": \"WPD\",\n"
-            + "\t\t\"title\": \"A\",\n"
-            + "\t\t\"author\": \"Ruru; Jens.Ol; Aglarech; u.a.\",\n"
-            + "\t\t\"layerInfos\": \"base/s=spans cnx/c=spans cnx/l=tokens cnx/m=tokens cnx/p=tokens cnx/s=spans cnx/syn=tokens corenlp/s=spans mate/l=tokens mate/m=tokens mate/p=tokens opennlp/p=tokens opennlp/s=spans tt/l=tokens tt/p=tokens tt/s=spans xip/c=spans xip/l=tokens xip/p=tokens xip/s=spans\",\n"
-            + "\t\t\"startMore\": true,\n"
-            + "\t\t\"endMore\": true,\n"
-            + "\t\t\"snippet\": \"<span class=\\\"context-left\\\"><span class=\\\"more\\\"></span>Band). in Redewendungen für den Anfang (</span><mark>das</mark><span class=\\\"context-right\\\"> A und O, von A bis<span class=\\\"more\\\"></span></span>\",\n"
-            + "\t\t\"matchID\": \"match-WPD_AAA.00001-p777-778\",\n"
-            + "\t\t\"UID\": 0,\n"
-            + "\t\t\"pubDate\": \"2005-03-28\"\n"
-            + "\t}, {\n"
-            + "\t\t\"field\": \"tokens\",\n"
-            + "\t\t\"textClass\": \"freizeit-unterhaltung reisen wissenschaft populaerwissenschaft\",\n"
-            + "\t\t\"pubPlace\": \"URL:http://de.wikipedia.org\",\n"
-            + "\t\t\"textSigle\": \"WPD_AAA.00001\",\n"
-            + "\t\t\"docSigle\": \"WPD_AAA\",\n"
-            + "\t\t\"corpusSigle\": \"WPD\",\n"
-            + "\t\t\"title\": \"A\",\n"
-            + "\t\t\"author\": \"Ruru; Jens.Ol; Aglarech; u.a.\",\n"
-            + "\t\t\"layerInfos\": \"base/s=spans cnx/c=spans cnx/l=tokens cnx/m=tokens cnx/p=tokens cnx/s=spans cnx/syn=tokens corenlp/s=spans mate/l=tokens mate/m=tokens mate/p=tokens opennlp/p=tokens opennlp/s=spans tt/l=tokens tt/p=tokens tt/s=spans xip/c=spans xip/l=tokens xip/p=tokens xip/s=spans\",\n"
-            + "\t\t\"startMore\": true,\n"
-            + "\t\t\"endMore\": true,\n"
-            + "\t\t\"snippet\": \"<span class=\\\"context-left\\\"><span class=\\\"more\\\"></span>Z). a ist die Abkürzung für </span><mark>das</mark><span class=\\\"context-right\\\"> Flächenmaß Ar in der Kaufmannssprache bedeutet<span class=\\\"more\\\"></span></span>\",\n"
-            + "\t\t\"matchID\": \"match-WPD_AAA.00001-p790-791\",\n"
-            + "\t\t\"UID\": 0,\n"
-            + "\t\t\"pubDate\": \"2005-03-28\"\n"
-            + "\t}, {\n"
-            + "\t\t\"field\": \"tokens\",\n"
-            + "\t\t\"textClass\": \"freizeit-unterhaltung reisen wissenschaft populaerwissenschaft\",\n"
-            + "\t\t\"pubPlace\": \"URL:http://de.wikipedia.org\",\n"
-            + "\t\t\"textSigle\": \"WPD_AAA.00001\",\n"
-            + "\t\t\"docSigle\": \"WPD_AAA\",\n"
-            + "\t\t\"corpusSigle\": \"WPD\",\n"
-            + "\t\t\"title\": \"A\",\n"
-            + "\t\t\"author\": \"Ruru; Jens.Ol; Aglarech; u.a.\",\n"
-            + "\t\t\"layerInfos\": \"base/s=spans cnx/c=spans cnx/l=tokens cnx/m=tokens cnx/p=tokens cnx/s=spans cnx/syn=tokens corenlp/s=spans mate/l=tokens mate/m=tokens mate/p=tokens opennlp/p=tokens opennlp/s=spans tt/l=tokens tt/p=tokens tt/s=spans xip/c=spans xip/l=tokens xip/p=tokens xip/s=spans\",\n"
-            + "\t\t\"startMore\": true,\n"
-            + "\t\t\"endMore\": true,\n"
-            + "\t\t\"snippet\": \"<span class=\\\"context-left\\\"><span class=\\\"more\\\"></span>ad zu) ‚[das Stück] zu...‘ für </span><mark>das</mark><span class=\\\"context-right\\\"> Französische à „nach“, z. B. in<span class=\\\"more\\\"></span></span>\",\n"
-            + "\t\t\"matchID\": \"match-WPD_AAA.00001-p805-806\",\n"
-            + "\t\t\"UID\": 0,\n" + "\t\t\"pubDate\": \"2005-03-28\"\n"
-            + "\t}]\n" + "}";
-
 }
diff --git a/src/test/java/de/ids_mannheim/korap/resource/rewrite/RewriteBenchmarkTest.java b/src/test/java/de/ids_mannheim/korap/resource/rewrite/RewriteBenchmarkTest.java
new file mode 100644
index 0000000..29ddb89
--- /dev/null
+++ b/src/test/java/de/ids_mannheim/korap/resource/rewrite/RewriteBenchmarkTest.java
@@ -0,0 +1,102 @@
+package de.ids_mannheim.korap.resource.rewrite;
+
+import com.fasterxml.jackson.databind.JsonNode;
+import de.ids_mannheim.korap.config.BeanConfigTest;
+import de.ids_mannheim.korap.config.TestVariables;
+import de.ids_mannheim.korap.exceptions.KustvaktException;
+import de.ids_mannheim.korap.handlers.DocumentDao;
+import de.ids_mannheim.korap.resources.Document;
+import de.ids_mannheim.korap.utils.JsonUtils;
+import de.ids_mannheim.korap.utils.TimeUtils;
+import org.joda.time.DateTime;
+import org.junit.Test;
+
+import static org.junit.Assert.*;
+
+/**
+ * Created by hanl on 30.05.16.
+ */
+public class RewriteBenchmarkTest extends BeanConfigTest {
+
+
+    @Test
+    public void testDocMatchRewriteByTextSigle () throws KustvaktException {
+        DocumentDao dao = new DocumentDao(helper().getContext()
+                .getPersistenceClient());
+
+        int i = 999;
+        for (int j = 100; j < i; j++) {
+            Document doc = new Document("WPD_AAA.02" + j);
+            doc.setDisabled(true);
+            dao.storeResource(doc, null);
+        }
+        RewriteHandler ha = new RewriteHandler();
+        ha.insertBeans(helper().getContext());
+        assertEquals("Handler could not be added to rewrite handler instance!",
+                true, ha.add(DocMatchRewrite.class));
+
+        DateTime now = TimeUtils.getNow();
+        String v = ha.processResult(TestVariables.RESULT, null);
+        long diff = TimeUtils.calcDiff(now, new DateTime());
+        assertTrue(diff < 600);
+        JsonNode node = JsonUtils.readTree(v);
+
+        JsonNode check = JsonUtils.readTree(TestVariables.RESULT);
+        assertNotNull(check);
+        int check_size = check.at("/matches").size();
+
+        assertNotNull(node);
+        int size = node.at("/matches").size();
+        assertNotEquals("documents were not removed", check_size, size);
+
+        dao.truncate();
+    }
+
+
+    @Test
+    public void testDocMatchRewriteByDocSigle () throws KustvaktException {
+        DocumentDao dao = new DocumentDao(helper().getContext()
+                .getPersistenceClient());
+
+        Document doc = new Document("WPD_AAA");
+        doc.setDisabled(true);
+        dao.storeResource(doc, null);
+
+        RewriteHandler ha = new RewriteHandler();
+        ha.insertBeans(helper().getContext());
+        assertEquals("Handler could not be added to rewrite handler instance!",
+                true, ha.add(DocMatchRewrite.class));
+
+        DateTime now = TimeUtils.getNow();
+        String v = ha.processResult(TestVariables.RESULT, null);
+        long diff = TimeUtils.calcDiff(now, new DateTime());
+        assertTrue(diff < 600);
+        JsonNode node = JsonUtils.readTree(v);
+
+        JsonNode check = JsonUtils.readTree(TestVariables.RESULT);
+        assertNotNull(check);
+        int check_size = check.at("/matches").size();
+
+        assertNotNull(node);
+        int size = node.at("/matches").size();
+        assertNotEquals("documents were not removed", check_size, size);
+        assertEquals(0, size);
+        dao.truncate();
+    }
+
+
+    @Test
+    public void testCollectionRewriteInject () {
+
+    }
+
+
+    @Test
+    public void testCollectionRewriteRemoval () {
+
+    }
+
+
+    @Override
+    public void initMethod () throws KustvaktException {}
+}
diff --git a/src/test/java/de/ids_mannheim/korap/resource/rewrite/RewriteHandlerTest.java b/src/test/java/de/ids_mannheim/korap/resource/rewrite/RewriteHandlerTest.java
index 112282c..3cb528d 100644
--- a/src/test/java/de/ids_mannheim/korap/resource/rewrite/RewriteHandlerTest.java
+++ b/src/test/java/de/ids_mannheim/korap/resource/rewrite/RewriteHandlerTest.java
@@ -19,19 +19,6 @@
  */
 public class RewriteHandlerTest extends BeanConfigTest {
 
-    @Test
-    public void initHandler () {
-        try {
-            RewriteHandler handler = new RewriteHandler();
-            handler.insertBeans(helper().getContext());
-            assertTrue(handler.add(FoundryInject.class));
-        }
-        catch (Exception e) {
-            e.printStackTrace();
-
-        }
-    }
-
 
     @Test
     public void testRewriteTaskAdd () {
@@ -111,6 +98,7 @@
         UserDataDbIface settingsdao = BeansFactory.getTypeFactory()
                 .getTypedBean(helper().getContext().getUserDataDaos(),
                         UserSettings.class);
+        assertNotNull(settingsdao);
         UserSettings s = (UserSettings) settingsdao.get(helper().getUser());
         s.setField(Attributes.DEFAULT_LEMMA_FOUNDRY, "tt_test");
         settingsdao.update(s);
diff --git a/src/test/java/de/ids_mannheim/korap/web/service/SearchKrillTest.java b/src/test/java/de/ids_mannheim/korap/web/service/SearchKrillTest.java
index ff3679d..0deb98b 100644
--- a/src/test/java/de/ids_mannheim/korap/web/service/SearchKrillTest.java
+++ b/src/test/java/de/ids_mannheim/korap/web/service/SearchKrillTest.java
@@ -8,8 +8,12 @@
 import de.ids_mannheim.korap.query.serialize.QuerySerializer;
 import de.ids_mannheim.korap.utils.JsonUtils;
 import de.ids_mannheim.korap.web.SearchKrill;
+
+import org.junit.Assert;
 import org.junit.Test;
 
+import static org.junit.Assert.assertEquals;
+
 import static org.junit.Assert.assertNotEquals;
 import static org.junit.Assert.assertNotNull;
 
@@ -18,13 +22,11 @@
  */
 public class SearchKrillTest extends BeanConfigTest {
 
-
     @Override
     public void initMethod () throws KustvaktException {
 
     }
 
-
     @Test
     public void testInit () {
         KustvaktConfiguration config = helper().getContext().getConfiguration();
@@ -57,8 +59,7 @@
     @Test
     public void testSearch () {
         QuerySerializer s = new QuerySerializer();
-        s.setQuery("[orth=das]", "poliqarp");
-
+        s.setQuery("[orth=der]", "poliqarp");
 
         KustvaktConfiguration config = helper().getContext().getConfiguration();
         SearchKrill krill = new SearchKrill(config.getIndexDir());
@@ -67,7 +68,6 @@
         JsonNode node = JsonUtils.readTree(result);
         assertNotNull(node);
         assertNotEquals(0, node.at("/matches").size());
-
     }
 
 }
diff --git a/src/test/java/de/ids_mannheim/korap/web/service/full/AuthServiceTest.java b/src/test/java/de/ids_mannheim/korap/web/service/full/AuthServiceTest.java
index b394d68..47771b1 100644
--- a/src/test/java/de/ids_mannheim/korap/web/service/full/AuthServiceTest.java
+++ b/src/test/java/de/ids_mannheim/korap/web/service/full/AuthServiceTest.java
@@ -51,6 +51,31 @@
 
     }
 
+
+    @Test
+    public void testOpenIDLogin () {
+
+    }
+
+
+    @Test
+    public void testOpenIDLogout () {
+
+    }
+
+
+    // -- are these even right? auth - authorization
+    @Test
+    public void testOAuth2Login () {
+
+    }
+
+
+    @Test
+    public void testOAuth2Logout () {
+
+    }
+
     //todo: test basicauth via secure connection
 
 }
diff --git a/src/test/java/de/ids_mannheim/korap/web/service/full/ResourceServiceTest.java b/src/test/java/de/ids_mannheim/korap/web/service/full/ResourceServiceTest.java
index 039593e..7712e1b 100644
--- a/src/test/java/de/ids_mannheim/korap/web/service/full/ResourceServiceTest.java
+++ b/src/test/java/de/ids_mannheim/korap/web/service/full/ResourceServiceTest.java
@@ -3,6 +3,7 @@
 import com.fasterxml.jackson.databind.JsonNode;
 import com.sun.jersey.api.client.ClientResponse;
 import de.ids_mannheim.korap.exceptions.KustvaktException;
+import de.ids_mannheim.korap.query.serialize.QuerySerializer;
 import de.ids_mannheim.korap.security.auth.BasicHttpAuth;
 import de.ids_mannheim.korap.config.Attributes;
 import de.ids_mannheim.korap.utils.JsonUtils;
@@ -11,6 +12,8 @@
 import org.junit.Ignore;
 import org.junit.Test;
 
+import java.util.Iterator;
+
 import static org.junit.Assert.*;
 
 /**
@@ -28,11 +31,11 @@
 
 
     @Test
-    public void testSearchSimple () {
+    public void testSearchSimpleAuthorized () {
         ClientResponse response = resource()
                 .path(getAPIVersion())
                 .path("search")
-                .queryParam("q", "[orth=das]")
+                .queryParam("q", "[orth=die]")
                 .queryParam("ql", "poliqarp")
                 .header(Attributes.AUTHORIZATION,
                         BasicHttpAuth.encode("kustvakt", "kustvakt2015"))
@@ -42,13 +45,112 @@
 
         JsonNode node = JsonUtils.readTree(response.getEntity(String.class));
         assertNotNull(node);
-        System.out.println("NODE " + node);
         assertNotEquals(0, node.path("matches").size());
     }
 
 
     @Test
-    public void testCollectionGet () {
+    public void testSearchSimpleWithCQAuthorized () {
+        ClientResponse response = resource()
+                .path(getAPIVersion())
+                .path("search")
+                .queryParam("q", "[orth=das]")
+                .queryParam("ql", "poliqarp")
+                .queryParam("cq", "textClass=politik && corpusSigle=WPD")
+                .header(Attributes.AUTHORIZATION,
+                        BasicHttpAuth.encode("kustvakt", "kustvakt2015"))
+                .get(ClientResponse.class);
+        assertEquals(ClientResponse.Status.OK.getStatusCode(),
+                response.getStatus());
+
+        JsonNode node = JsonUtils.readTree(response.getEntity(String.class));
+        assertNotNull(node);
+
+    }
+
+
+    @Test
+    public void testSearchSimpleDemo () {
+        ClientResponse response = resource().path(getAPIVersion())
+                .path("search").queryParam("q", "[orth=der]")
+                .queryParam("ql", "poliqarp").get(ClientResponse.class);
+        assertEquals(response.getStatus(),
+                ClientResponse.Status.OK.getStatusCode());
+        String ent = response.getEntity(String.class);
+        JsonNode node = JsonUtils.readTree(ent);
+        assertNotNull(node);
+        assertNotEquals(0, node.path("matches").size());
+    }
+
+
+    @Test
+    public void testSearchSentenceMeta () {
+        ClientResponse response = resource().path(getAPIVersion())
+                .path("search").queryParam("q", "[orth=der]")
+                .queryParam("ql", "poliqarp").queryParam("context", "sentence")
+                .get(ClientResponse.class);
+        assertEquals(response.getStatus(),
+                ClientResponse.Status.OK.getStatusCode());
+        String ent = response.getEntity(String.class);
+        JsonNode node = JsonUtils.readTree(ent);
+        assertNotNull(node);
+        assertNotEquals(0, node.path("matches").size());
+        assertEquals("base/s:s", node.at("/meta/context").asText());
+        assertNotEquals("${project.version}", "/meta/version");
+    }
+
+
+    @Test
+    public void testSearchSimpleCQL () {
+        QuerySerializer s = new QuerySerializer();
+        s.setQuery("(der) or (das)", "CQL");
+
+        ClientResponse response = resource().path(getAPIVersion())
+                .path("search").post(ClientResponse.class, s.toJSON());
+        assertEquals(response.getStatus(),
+                ClientResponse.Status.OK.getStatusCode());
+        String ent = response.getEntity(String.class);
+
+        JsonNode node = JsonUtils.readTree(ent);
+        assertNotNull(node);
+        assertNotEquals(0, node.path("matches").size());
+    }
+
+
+    @Test
+    public void testSearchRawQuery () {
+        QuerySerializer s = new QuerySerializer();
+        s.setQuery("[orth=der]", "poliqarp");
+        //        s.setCollection("corpusSigle=WPD");
+
+        ClientResponse response = resource().path(getAPIVersion())
+                .path("search").post(ClientResponse.class, s.toJSON());
+        assertEquals(response.getStatus(),
+                ClientResponse.Status.OK.getStatusCode());
+        String ent = response.getEntity(String.class);
+
+
+        JsonNode node = JsonUtils.readTree(ent);
+        assertNotNull(node);
+        assertNotEquals(0, node.path("matches").size());
+    }
+
+
+    @Test
+    public void testCollectionsGetPublic () {
+        ClientResponse response = resource().path(getAPIVersion())
+                .path("collection").get(ClientResponse.class);
+        assertEquals(ClientResponse.Status.OK.getStatusCode(),
+                response.getStatus());
+
+        JsonNode node = JsonUtils.readTree(response.getEntity(String.class));
+        assertNotNull(node);
+        assertNotEquals(0, node.size());
+    }
+
+
+    @Test
+    public void testCollectionsGet () {
         ClientResponse response = resource()
                 .path(getAPIVersion())
                 .path("collection")
@@ -59,11 +161,40 @@
                 response.getStatus());
 
         JsonNode node = JsonUtils.readTree(response.getEntity(String.class));
+        assertNotNull(node);
         assertNotEquals(0, node.size());
     }
 
 
     @Test
+    public void testCorporaGet () {
+        ClientResponse response = resource().path(getAPIVersion())
+                .path("corpus").get(ClientResponse.class);
+        assertEquals(response.getStatus(),
+                ClientResponse.Status.OK.getStatusCode());
+        String ent = response.getEntity(String.class);
+        JsonNode node = JsonUtils.readTree(ent);
+        assertNotNull(node);
+        assertNotEquals(0, node.size());
+    }
+
+
+    @Test
+    public void testFoundriesGet () {
+        ClientResponse response = resource().path(getAPIVersion())
+                .path("foundry").get(ClientResponse.class);
+        assertEquals(response.getStatus(),
+                ClientResponse.Status.OK.getStatusCode());
+        String ent = response.getEntity(String.class);
+        JsonNode node = JsonUtils.readTree(ent);
+        assertNotNull(node);
+        assertNotEquals(0, node.size());
+    }
+
+
+    // create a simple test collection for user kustvakt, otherwise test fails
+    @Test
+    @Ignore
     public void testStats () {
         ClientResponse response = resource()
                 .path(getAPIVersion())
@@ -77,8 +208,7 @@
         JsonNode node = JsonUtils.readTree(response.getEntity(String.class));
         assertNotNull(node);
         assertNotEquals(0, node.size());
-
-        String id = node.path(0).path("id").asText();
+        String id = node.path(1).path("id").asText();
 
         response = resource()
                 .path(getAPIVersion())
@@ -93,6 +223,7 @@
                 response.getStatus());
         node = JsonUtils.readTree(response.getEntity(String.class));
         assertNotNull(node);
+        assertNotNull(node);
         int docs = node.path("documents").asInt();
         assertNotEquals(0, docs);
         assertTrue(docs < 15);
@@ -100,6 +231,46 @@
 
 
     @Test
+    public void testCollecionGet () {
+        ClientResponse response = resource().path(getAPIVersion())
+                .path("collection").path("id").get(ClientResponse.class);
+        assertEquals(response.getStatus(),
+                ClientResponse.Status.OK.getStatusCode());
+        String ent = response.getEntity(String.class);
+        JsonNode node = JsonUtils.readTree(ent);
+        assertNotNull(node);
+        assertNotEquals(0, node.size());
+
+    }
+
+
+    @Test
+    public void testCorpusGet () {
+        ClientResponse response = resource().path(getAPIVersion())
+                .path("corpus").path("id").get(ClientResponse.class);
+        assertEquals(response.getStatus(),
+                ClientResponse.Status.OK.getStatusCode());
+        String ent = response.getEntity(String.class);
+        JsonNode node = JsonUtils.readTree(ent);
+        assertNotNull(node);
+        assertNotEquals(0, node.size());
+    }
+
+
+    @Test
+    public void testFoundryGet () {
+        ClientResponse response = resource().path(getAPIVersion())
+                .path("foundry").path("id").get(ClientResponse.class);
+        assertEquals(response.getStatus(),
+                ClientResponse.Status.OK.getStatusCode());
+        String ent = response.getEntity(String.class);
+        JsonNode node = JsonUtils.readTree(ent);
+        assertNotNull(node);
+        assertNotEquals(0, node.size());
+    }
+
+
+    @Test
     public void testResourceStore () {
 
     }
@@ -112,26 +283,99 @@
 
 
     @Test
-    @Ignore
-    public void testSerializationQueryInCollection () {
+    public void testSerializationQueryWithCorpusUnAuthorized () {
         ClientResponse response = resource().path(getAPIVersion())
-                .path("corpus/WPD/search").queryParam("q", "[base=Haus]")
+                .path("corpus/WPD/search").queryParam("q", "[orth=der]")
                 .queryParam("ql", "poliqarp").queryParam("context", "base/s:s")
                 .method("TRACE", ClientResponse.class);
-        assertEquals(response.getStatus(),
-                ClientResponse.Status.OK.getStatusCode());
-        System.out.println("RESPONSE 1 " + response);
+        assertEquals(ClientResponse.Status.BAD_REQUEST.getStatusCode(),
+                response.getStatus());
         String ent = response.getEntity(String.class);
-        System.out.println("Entity 1 " + ent);
+        JsonNode node = JsonUtils.readTree(ent);
+        assertNotNull(node);
+        assertEquals(401, node.at("/errors/0/0").asInt());
     }
 
 
     @Test
-    public void testSerializationQueryPublic () {
-        ClientResponse response = resource().path(getAPIVersion())
-                .path("search").queryParam("q", "[base=Haus]")
-                .queryParam("ql", "poliqarp").queryParam("context", "sentence")
+    public void testSerializationQueryWithCorpus () {
+        ClientResponse response = resource()
+                .path(getAPIVersion())
+                .path("corpus/WPD/search")
+                .queryParam("q", "[orth=der]")
+                .queryParam("ql", "poliqarp")
+                .header(Attributes.AUTHORIZATION,
+                        BasicHttpAuth.encode("kustvakt", "kustvakt2015"))
                 .method("TRACE", ClientResponse.class);
+        assertEquals(ClientResponse.Status.OK.getStatusCode(),
+                response.getStatus());
+        String ent = response.getEntity(String.class);
+        JsonNode node = JsonUtils.readTree(ent);
+        assertNotNull(node);
+        assertEquals("koral:doc", node.at("/collection/@type").asText());
+        assertEquals("corpusSigle", node.at("/collection/key").asText());
+    }
+
+
+    @Test
+    public void testSerializationQueryWithCollection () {
+        ClientResponse response = resource()
+                .path(getAPIVersion())
+                .path("collection")
+                .header(Attributes.AUTHORIZATION,
+                        BasicHttpAuth.encode("kustvakt", "kustvakt2015"))
+                .get(ClientResponse.class);
+        assertEquals(ClientResponse.Status.OK.getStatusCode(),
+                response.getStatus());
+        String ent = response.getEntity(String.class);
+        JsonNode node = JsonUtils.readTree(ent);
+        assertNotNull(node);
+
+        Iterator it = node.elements();
+        String id = null;
+        while (it.hasNext()) {
+            JsonNode next = (JsonNode) it.next();
+            if ("Weimarer Werke".equals(next.path("name").asText()))
+                id = next.path("id").asText();
+        }
+        assertNotNull(id);
+        assertFalse(id.isEmpty());
+
+        response = resource()
+                .path(getAPIVersion())
+                .path("collection")
+                .path(id)
+                .path("search")
+                .queryParam("q", "[orth=der]")
+                .queryParam("ql", "poliqarp")
+                .queryParam("context", "base/s:s")
+                .header(Attributes.AUTHORIZATION,
+                        BasicHttpAuth.encode("kustvakt", "kustvakt2015"))
+                .method("TRACE", ClientResponse.class);
+        assertEquals(ClientResponse.Status.OK.getStatusCode(),
+                response.getStatus());
+        ent = response.getEntity(String.class);
+        node = JsonUtils.readTree(ent);
+        assertNotNull(node);
+
+        assertEquals("koral:docGroup", node.at("/collection/@type").asText());
+        assertEquals("koral:doc", node.at("/collection/operands/0/@type")
+                .asText());
+        assertEquals("koral:doc", node.at("/collection/operands/1/@type")
+                .asText());
+        assertEquals("creationDate", node.at("/collection/operands/0/key")
+                .asText());
+        assertEquals("corpusSigle", node.at("/collection/operands/1/key")
+                .asText());
+
+    }
+
+
+    @Test
+    public void testSearchQueryPublicCorpora () {
+        ClientResponse response = resource().path(getAPIVersion())
+                .path("search").queryParam("q", "[orth=der]")
+                .queryParam("ql", "poliqarp").get(ClientResponse.class);
         assertEquals(response.getStatus(),
                 ClientResponse.Status.OK.getStatusCode());
         String ent = response.getEntity(String.class);
@@ -143,60 +387,41 @@
     }
 
 
-    @Test
-    public void testQuery () {
-        ClientResponse response = resource().path(getAPIVersion())
-                .path("search").queryParam("q", "[base=Haus]")
-                .queryParam("ql", "poliqarp").queryParam("context", "sentence")
-                .get(ClientResponse.class);
-        assertEquals(response.getStatus(),
-                ClientResponse.Status.OK.getStatusCode());
-        String ent = response.getEntity(String.class);
-        JsonNode node = JsonUtils.readTree(ent);
-        assertNotNull(node);
-        assertEquals("base/s:s", node.at("/meta/context").asText());
-        assertNotEquals("${project.version}", "/meta/version");
-    }
-
-
+    // use trace for this
     @Test
     @Ignore
     public void testSerializationMeta () {
         ClientResponse response = resource().path(getAPIVersion())
                 .path("search").queryParam("context", "sentence")
                 .queryParam("q", "[pos=ADJA]").queryParam("ql", "poliqarp")
-                .get(ClientResponse.class);
+
+                .method("TRACE", ClientResponse.class);
         assertEquals(response.getStatus(),
                 ClientResponse.Status.OK.getStatusCode());
     }
 
 
     @Test
-    @Ignore
-    public void testSerializationCollection () {
-        ClientResponse response = resource().path(getAPIVersion()).path("")
-                .get(ClientResponse.class);
-        assertEquals(response.getStatus(),
-                ClientResponse.Status.OK.getStatusCode());
-    }
-
-
-    @Test
-    public void testMatchInfo () {
+    public void testMatchInfoGet () {
 
     }
 
 
     @Test
-    public void testGetResources () {
-        ClientResponse response = resource().path(getAPIVersion())
-                .path("collection").get(ClientResponse.class);
-        assertEquals(response.getStatus(),
-                ClientResponse.Status.OK.getStatusCode());
-        String ent = response.getEntity(String.class);
-        JsonNode node = JsonUtils.readTree(ent);
-        assertNotNull(node);
-        assertNotEquals(0, node.size());
+    public void testMatchInfoSave () {
+
+    }
+
+
+    @Test
+    public void testMatchInfoDelete () {
+
+    }
+
+
+    @Test
+    public void testGetMatches () {
+
     }
 
 
