diff --git a/src/main/java/de/ids_mannheim/korap/query/serialize/AbstractQueryProcessor.java b/src/main/java/de/ids_mannheim/korap/query/serialize/AbstractQueryProcessor.java
index 8a0a260..d6f024a 100644
--- a/src/main/java/de/ids_mannheim/korap/query/serialize/AbstractQueryProcessor.java
+++ b/src/main/java/de/ids_mannheim/korap/query/serialize/AbstractQueryProcessor.java
@@ -77,7 +77,7 @@
     /**
      * Virtual collection queries.
      */
-    private Object collection = new HashMap<String, Object>();
+    private Map<String, Object> collection = new HashMap<String, Object>();
     /**
      * Holds information on displaying directives.
      */
diff --git a/src/main/java/de/ids_mannheim/korap/query/serialize/QuerySerializer.java b/src/main/java/de/ids_mannheim/korap/query/serialize/QuerySerializer.java
index f5f7819..1929d0c 100644
--- a/src/main/java/de/ids_mannheim/korap/query/serialize/QuerySerializer.java
+++ b/src/main/java/de/ids_mannheim/korap/query/serialize/QuerySerializer.java
@@ -38,7 +38,7 @@
     }
 
     private static ObjectMapper mapper = new ObjectMapper();
-    private Logger qllogger = LoggerFactory.getLogger("ql");
+    private static Logger qllogger = LoggerFactory.getLogger(QuerySerializer.class);
     public static String queryLanguageVersion;
 
     private AbstractQueryProcessor ast;
@@ -47,13 +47,11 @@
     private List<Object> errors;
     private List<Object> warnings;
     private List<Object> messages;
-    private org.slf4j.Logger log = LoggerFactory
-            .getLogger(QuerySerializer.class);
 
 	public QuerySerializer() {
-        this.errors = new LinkedList<>();
-        this.warnings = new LinkedList<>();
-        this.messages = new LinkedList<>();
+        this.errors = new ArrayList<>();
+        this.warnings = new ArrayList<>();
+        this.messages = new ArrayList<>();
     }
 
     /**
@@ -176,29 +174,30 @@
         return ser;
     }
 
-	public final Map build() {
+	public final Map<String, Object> build() {
         return raw();
     }
 
-    private Map raw () {
+    @SuppressWarnings("unchecked")
+    private Map<String, Object> raw () {
         if (ast != null) {
             Map<String, Object> requestMap = new HashMap<>(ast.getRequestMap());
-            Map meta = (Map) requestMap.get("meta");
-            Map collection = (Map) requestMap.get("collection");
-            List errors = (List) requestMap.get("errors");
-            List warnings = (List) requestMap.get("warnings");
-            List messages = (List) requestMap.get("messages");
+            Map<String, Object> meta = (Map<String, Object>) requestMap.get("meta");
+            Map<String, Object> collection = (Map<String, Object>) requestMap.get("collection");
+            List<Object> errors = (List<Object>) requestMap.get("errors");
+            List<Object> warnings = (List<Object>) requestMap.get("warnings");
+            List<Object> messages = (List<Object>) requestMap.get("messages");
             collection = mergeCollection(collection, this.collection);
             requestMap.put("collection", collection);
 
             if (meta == null)
-                meta = new HashMap();
+                meta = new HashMap<String, Object>();
             if (errors == null)
-                errors = new LinkedList();
+                errors = new ArrayList<Object>();
             if (warnings == null)
-                warnings = new LinkedList();
+                warnings = new ArrayList<Object>();
             if (messages == null)
-                messages = new LinkedList();
+                messages = new ArrayList<Object>();
 
             if (this.meta != null) {
                 meta.putAll(this.meta);
@@ -218,7 +217,7 @@
             }
             return cleanup(requestMap);
         }
-        return new HashMap<>();
+        return new HashMap<String, Object>();
     }
 
     private Map<String, Object> cleanup (Map<String, Object> requestMap) {
@@ -282,16 +281,17 @@
 		return this;
 	}
 
-	public QuerySerializer setCollection(String collection) {
+	@SuppressWarnings("unchecked")
+    public QuerySerializer setCollection(String collection) {
         CollectionQueryProcessor tree = new CollectionQueryProcessor();
         tree.process(collection);
         Map<String, Object> collectionRequest = tree.getRequestMap();
         if (collectionRequest.get("errors") != null)
-            this.errors.addAll((List) collectionRequest.get("errors"));
+            this.errors.addAll((List<Object>) collectionRequest.get("errors"));
         if (collectionRequest.get("warnings") != null)
-            this.warnings.addAll((List) collectionRequest.get("warnings"));
+            this.warnings.addAll((List<Object>) collectionRequest.get("warnings"));
         if (collectionRequest.get("messages") != null)
-            this.messages.addAll((List) collectionRequest.get("messages"));
+            this.messages.addAll((List<Object>) collectionRequest.get("messages"));
         this.collection = (Map<String, Object>) collectionRequest
                 .get("collection");
         return this;
diff --git a/src/test/java/de/ids_mannheim/korap/query/test/annis/RelationTests.java b/src/test/java/de/ids_mannheim/korap/query/test/annis/RelationTests.java
index 5acb0bb..053edc2 100644
--- a/src/test/java/de/ids_mannheim/korap/query/test/annis/RelationTests.java
+++ b/src/test/java/de/ids_mannheim/korap/query/test/annis/RelationTests.java
@@ -24,6 +24,7 @@
         query = "node & node & #1 ->malt/d=\"PP\" #2";
         qs.setQuery(query, "annis");
         res = mapper.readTree(qs.toJSON());
+        System.out.println(res.asText());
     }
     
     @Test
diff --git a/src/test/java/de/ids_mannheim/korap/test/cosmas2/OPINTest.java b/src/test/java/de/ids_mannheim/korap/test/cosmas2/OPINTest.java
index d5f165e..6f3dd6d 100644
--- a/src/test/java/de/ids_mannheim/korap/test/cosmas2/OPINTest.java
+++ b/src/test/java/de/ids_mannheim/korap/test/cosmas2/OPINTest.java
@@ -4,6 +4,7 @@
 
 import java.io.IOException;
 
+import org.junit.Ignore;
 import org.junit.Test;
 
 import com.fasterxml.jackson.core.JsonProcessingException;
@@ -74,6 +75,7 @@
 
 
     @Test
+   
     public void testOPINWithOptionN ()
             throws JsonProcessingException, IOException {
         query = "wegen #IN(N) <s>";
@@ -176,5 +178,40 @@
                 .isMissingNode());
     }
 
+    @Test
+    @Ignore
+    public void testOPINWithOptionN_MAX ()
+            throws JsonProcessingException, IOException {
+        query = "wegen #IN(N, MAX) <s>";
+        qs.setQuery(query, "cosmas2");
+        res = mapper.readTree(qs.toJSON());
+        System.out.println(res.toString());
+        assertEquals("koral:reference", res.at("/query/@type").asText());
+        assertEquals("operation:focus", res.at("/query/operation").asText());
+        assertEquals(130, res.at("/query/classRef/0").asInt());
+        assertEquals("koral:group", res.at("/query/operands/0/@type").asText());
+        assertEquals("operation:position",
+                res.at("/query/operands/0/operation").asText());
+        assertEquals("frames:isAround",
+                res.at("/query/operands/0/frames/0").asText());
+    }
+    
+    @Test
+    public void testOPINWithOptionN_HIT ()
+            throws JsonProcessingException, IOException {
+        query = "wegen #IN(N, HIT) <s>";
+        qs.setQuery(query, "cosmas2");
+        res = mapper.readTree(qs.toJSON());
+        System.out.println(res.toString());
+        assertEquals("koral:reference", res.at("/query/@type").asText());
+        assertEquals("operation:focus", res.at("/query/operation").asText());
+        assertEquals(130, res.at("/query/classRef/0").asInt());
+        assertEquals("koral:group", res.at("/query/operands/0/@type").asText());
+        assertEquals("operation:position",
+                res.at("/query/operands/0/operation").asText());
+        assertEquals("frames:isAround",
+                res.at("/query/operands/0/frames/0").asText());
+    }
+    
 
 }
diff --git a/src/test/java/de/ids_mannheim/korap/test/cosmas2/OPINWithExclusionTest.java b/src/test/java/de/ids_mannheim/korap/test/cosmas2/OPINWithExclusionTest.java
index 25eecf1..734f8d7 100644
--- a/src/test/java/de/ids_mannheim/korap/test/cosmas2/OPINWithExclusionTest.java
+++ b/src/test/java/de/ids_mannheim/korap/test/cosmas2/OPINWithExclusionTest.java
@@ -4,6 +4,7 @@
 
 import java.io.IOException;
 
+import org.junit.Ignore;
 import org.junit.Test;
 
 import com.fasterxml.jackson.core.JsonProcessingException;
@@ -91,15 +92,11 @@
         qs.setQuery(query, "cosmas2");
         res = mapper.readTree(qs.toJSON());
 
-        assertEquals("koral:reference", res.at("/query/@type").asText());
-        assertEquals("operation:focus", res.at("/query/operation").asText());
-        assertEquals("130", res.at("/query/classRef/0").asText());
-        
-        assertEquals("operation:class", res.at("/query/operands/0/operation").asText());
+        assertEquals("operation:class", res.at("/query/operation").asText());
         assertEquals("classRefCheck:unequals",
-                res.at("/query/operands/0/classRefCheck/0").asText());
+                res.at("/query/classRefCheck/0").asText());
 
-        JsonNode classRefCheckOperand = res.at("/query/operands/0/operands/0");
+        JsonNode classRefCheckOperand = res.at("/query/operands/0");
         assertEquals("operation:exclusion",
                 classRefCheckOperand.at("/operation").asText());
         assertEquals(1, classRefCheckOperand.at("/frames").size());
@@ -115,15 +112,11 @@
         qs.setQuery(query, "cosmas2");
         res = mapper.readTree(qs.toJSON());
 
-        assertEquals("koral:reference", res.at("/query/@type").asText());
-        assertEquals("operation:focus", res.at("/query/operation").asText());
-        assertEquals("130", res.at("/query/classRef/0").asText());
-        
-        assertEquals("operation:class", res.at("/query/operands/0/operation").asText());
+        assertEquals("operation:class", res.at("/query/operation").asText());
         assertEquals("classRefCheck:equals",
-                res.at("/query/operands/0/classRefCheck/0").asText());
+                res.at("/query/classRefCheck/0").asText());
 
-        JsonNode classRefCheckOperand = res.at("/query/operands/0/operands/0");
+        JsonNode classRefCheckOperand = res.at("/query/operands/0");
         assertEquals("operation:exclusion",
                 classRefCheckOperand.at("/operation").asText());
         assertEquals(1, classRefCheckOperand.at("/frames").size());
@@ -133,23 +126,98 @@
 
 
     @Test
-    public void testOPINwithMultipleExclusion1 ()
+    public void testOPINwithExclusionFE_MIN ()
             throws JsonProcessingException, IOException {
+        // MIN is the default value, thus the query below 
+        // is the same as "wegen #IN(FE,%) <s>"
         query = "wegen #IN(FE,%,MIN) <s>";
         qs.setQuery(query, "cosmas2");
         res = mapper.readTree(qs.toJSON());
+        assertEquals("operation:class", res.at("/query/operation").asText());
         assertEquals("classRefCheck:unequals",
-                res.at("/query/operands/0/classRefCheck/0").asText());
+                res.at("/query/classRefCheck/0").asText());
+        assertEquals(1, res.at("/query/operands/0/frames").size());
         assertEquals("frames:matches",
-                res.at("/query/operands/0/operands/0/frames/0").asText());
-        //        assertEquals(true,                            res.at("/query/operands/0/operands/0/exclude").isMissingNode());
+                res.at("/query/operands/0/frames/0").asText());
     }
 
 
     @Test
-    public void testOPINwithMultipleExclusion2 ()
+    public void testOPINwithExclusionN_MAX ()
             throws JsonProcessingException, IOException {
-        query = "wegen #IN(FE,ALL,%,MIN) <s>";
+        query = "wegen #IN(N,%,MAX) <s>";
+        qs.setQuery(query, "cosmas2");
+        res = mapper.readTree(qs.toJSON());
+
+        assertEquals("operation:merge", res.at("/query/operation").asText());
+        assertEquals("operation:exclusion",
+                res.at("/query/operands/0/operation").asText());
+        assertEquals(1, res.at("/query/operands/0/frames").size());
+        assertEquals("frames:isWithin",
+                res.at("/query/operands/0/frames/0").asText());
+    }
+
+
+    @Test
+    public void testOPINwithExclusionL_MAX ()
+            throws JsonProcessingException, IOException {
+        query = "wegen #IN(L,%,MAX) <s>";
+        qs.setQuery(query, "cosmas2");
+        res = mapper.readTree(qs.toJSON());
+        
+        assertEquals("operation:merge", res.at("/query/operation").asText());
+        assertEquals("operation:exclusion",
+                res.at("/query/operands/0/operation").asText());
+        assertEquals(2, res.at("/query/operands/0/frames").size());
+        assertEquals("frames:alignsLeft",
+                res.at("/query/operands/0/frames/0").asText());
+        assertEquals("frames:matches",
+                res.at("/query/operands/0/frames/1").asText());
+    }
+
+
+    @Test
+    public void testOPINwithExclusionFE_MAX ()
+            throws JsonProcessingException, IOException {
+        query = "wegen #IN(FE,%,MAX) <s>";
+        qs.setQuery(query, "cosmas2");
+        res = mapper.readTree(qs.toJSON());
+
+        assertEquals("operation:merge", res.at("/query/operation").asText());
+        assertEquals("operation:class",
+                res.at("/query/operands/0/operation").asText());
+        assertEquals("classRefCheck:unequals",
+                res.at("/query/operands/0/classRefCheck/0").asText());
+        JsonNode classOperand = res.at("/query/operands/0/operands/0");
+        assertEquals("operation:exclusion",
+                classOperand.at("/operation").asText());
+        assertEquals(1, classOperand.at("/frames").size());
+        assertEquals("frames:matches", classOperand.at("/frames/0").asText());
+    }
+
+    
+    @Test
+    @Ignore
+    public void testOPINwithMultipleExclusionN_ALL ()
+            throws JsonProcessingException, IOException {
+        query = "wegen #IN(N,ALL,%) <s>";
+        qs.setQuery(query, "cosmas2");
+        res = mapper.readTree(qs.toJSON());
+        System.out.println(res.toString());
+        assertEquals("operation:class", res.at("/query/operation").asText());
+        assertEquals("classRefOp:delete", res.at("/query/classRefOp").asText());
+        assertEquals(131, res.at("/query/classIn/0").asInt());
+        assertEquals("classRefCheck:unequals",
+                res.at("/query/operands/0/classRefCheck/0").asText());
+        assertEquals("frames:matches",
+                res.at("/query/operands/0/operands/0/frames/0").asText());
+    }
+
+    @Test
+    @Ignore
+    public void testOPINwithMultipleExclusionFE_ALL ()
+            throws JsonProcessingException, IOException {
+        query = "wegen #IN(FE,ALL,%) <s>";
         qs.setQuery(query, "cosmas2");
         res = mapper.readTree(qs.toJSON());
         assertEquals("operation:class", res.at("/query/operation").asText());
@@ -161,9 +229,17 @@
                 res.at("/query/operands/0/operands/0/frames/0").asText());
     }
 
-
     @Test
-    public void testOPINwithMultipleExclusion3 ()
+    public void testOPINwithMultipleExclusionN_ALL_MAX ()
+            throws JsonProcessingException, IOException {
+        query = "wegen #IN(N,ALL,%,MAX) <s>";
+        qs.setQuery(query, "cosmas2");
+        res = mapper.readTree(qs.toJSON());
+    }
+    
+    @Test
+    @Ignore
+    public void testOPINwithMultipleExclusionFE_ALL_MAX ()
             throws JsonProcessingException, IOException {
         query = "wegen #IN(FE,ALL,%,MAX) <s>";
         qs.setQuery(query, "cosmas2");
