diff --git a/Changes b/Changes
index 006c566..eb18673 100644
--- a/Changes
+++ b/Changes
@@ -1,6 +1,7 @@
 0.27 2017-09-12
-	- Changed Cosmas2 wildcards serialization as regex (margaretha).  
-	- Updated C2 OP OV frames (margaretha).
+	- Changed Cosmas2 wildcards serialization as regex (margaretha)  
+	- Fixed OP IN with classRefCheck.INCLUDES (margaretha)
+	- Implemented OP PV with exclusion (margaretha)
 	
 0.26 2017-06-29
 	- Updated collection query grammar (margaretha)
diff --git a/src/main/java/de/ids_mannheim/korap/query/serialize/Cosmas2QueryProcessor.java b/src/main/java/de/ids_mannheim/korap/query/serialize/Cosmas2QueryProcessor.java
index e6fb3c8..6ff2a4e 100644
--- a/src/main/java/de/ids_mannheim/korap/query/serialize/Cosmas2QueryProcessor.java
+++ b/src/main/java/de/ids_mannheim/korap/query/serialize/Cosmas2QueryProcessor.java
@@ -498,11 +498,9 @@
             classOut = classCounter + 128 + 1;
         }
         if (check.contains(ClassRefCheck.EQUALS)
-                || check.contains(ClassRefCheck.UNEQUALS)) {
-            classIn.add(classCounter + 128 - 2);
-            classIn.add(classCounter + 128 - 1);
-        }
-        else if (check.contains(ClassRefCheck.INTERSECTS)) {
+                || check.contains(ClassRefCheck.UNEQUALS) 
+                || check.contains(ClassRefCheck.INTERSECTS)
+                || check.contains(ClassRefCheck.DISJOINT)) {
             classIn.add(classCounter + 128 - 2);
             classIn.add(classCounter + 128 - 1);
         }
@@ -554,7 +552,7 @@
             positionOptions = parseOPINOptions(node, isExclusion);
         }
         else {
-            positionOptions = parseOPOVOptions(node);
+            positionOptions = parseOPOVOptions(node,isExclusion);
         }
 
         posGroup.put("frames", positionOptions.get("frames"));
@@ -1243,6 +1241,7 @@
     private void checkINOptions (String posOption,
             ArrayList<KoralFrame> positions,
             ArrayList<ClassRefCheck> classRefCheck) {
+        positions.add(KoralFrame.MATCHES);
         switch (posOption) {
             case "L":
                 positions.add(KoralFrame.ALIGNS_LEFT);
@@ -1260,13 +1259,14 @@
                 break;
             case "N":
                 positions.add(KoralFrame.IS_WITHIN);
+                positions.remove(KoralFrame.MATCHES);
                 break;
             default:
                 positions.add(KoralFrame.ALIGNS_LEFT);
                 positions.add(KoralFrame.ALIGNS_RIGHT);
                 positions.add(KoralFrame.IS_WITHIN);
         }
-        positions.add(KoralFrame.MATCHES);
+        
     }
 
 
@@ -1300,8 +1300,7 @@
     }
 
 
-    private Map<String, Object> parseOPOVOptions (Tree node) {
-        boolean negatePosition = false;
+    private Map<String, Object> parseOPOVOptions (Tree node, boolean isExclusion) {
         Tree posnode = getFirstChildWithCat(node, "POS");
         Tree rangenode = getFirstChildWithCat(node, "RANGE");
         Tree exclnode = getFirstChildWithCat(node, "EXCL");
@@ -1313,38 +1312,17 @@
         String posOption = null;
         if (posnode != null) {
             posOption = posnode.getChild(0).toStringTree();
-            switch (posOption) {
-                case "L":
-                    positions.add(KoralFrame.ALIGNS_LEFT);
-                    positions.add(KoralFrame.OVERLAPS_LEFT);
-                    positions.add(KoralFrame.MATCHES);
-                    classRefCheck.add(ClassRefCheck.INTERSECTS);
-                    break;
-                case "R":
-                    positions.add(KoralFrame.ALIGNS_RIGHT);
-                    positions.add(KoralFrame.OVERLAPS_RIGHT);
-                    positions.add(KoralFrame.MATCHES);
-                    classRefCheck.add(ClassRefCheck.INTERSECTS);
-                    break;
-                case "F":
-                    positions.add(KoralFrame.MATCHES);
-                    classRefCheck.add(ClassRefCheck.INTERSECTS);
-                    break;
-                case "FE":
-                    positions.add(KoralFrame.MATCHES);
-                    classRefCheck.add(ClassRefCheck.EQUALS);
-                    break;
-                case "FI":
-                    positions.add(KoralFrame.MATCHES);
-                    classRefCheck.add(ClassRefCheck.UNEQUALS);
-                    break;
-                case "X":
-                    positions.add(KoralFrame.IS_WITHIN);
-                    classRefCheck.add(ClassRefCheck.INTERSECTS);
-                    break;
+            if (isExclusion){
+                checkOVExclusionOptions(posOption, positions, classRefCheck);
+            }
+            else{
+                checkOVOptions(posOption, positions, classRefCheck);
             }
         }
-        else {
+        else if (isExclusion){
+            classRefCheck.add(ClassRefCheck.DISJOINT);
+        }
+        else{
             classRefCheck.add(ClassRefCheck.INTERSECTS);
         }
 
@@ -1354,11 +1332,11 @@
             wrapOperandInClass(node, 1, 128 + classCounter++);
             wrapOperandInClass(node, 2, 128 + classCounter++);
         }
-        if (exclnode != null) {
-            if (exclnode.getChild(0).toStringTree().equals("YES")) {
-                negatePosition = !negatePosition;
-            }
-        }
+//        if (exclnode != null) {
+//            if (exclnode.getChild(0).toStringTree().equals("YES")) {
+//                negatePosition = !negatePosition;
+//            }
+//        }
 
         if (rangenode != null) {
             String range = rangenode.getChild(0).toStringTree().toLowerCase();
@@ -1370,9 +1348,9 @@
             }
         }
 
-        if (negatePosition) {
-            posOptions.put("exclude", "true");
-        }
+//        if (negatePosition) {
+//            posOptions.put("exclude", "true");
+//        }
 
         boolean grouping = false;
         if (groupnode != null) {
@@ -1386,6 +1364,70 @@
     }
 
 
+    private void checkOVExclusionOptions (String posOption,
+            ArrayList<KoralFrame> positions,
+            ArrayList<ClassRefCheck> classRefCheck) {
+        positions.add(KoralFrame.MATCHES);
+        switch (posOption) {
+            case "L":
+                positions.add(KoralFrame.ALIGNS_LEFT);
+                positions.add(KoralFrame.OVERLAPS_LEFT);
+                classRefCheck.add(ClassRefCheck.INTERSECTS);
+                classRefCheck.add(ClassRefCheck.DISJOINT);
+                break;
+            case "R":
+                positions.add(KoralFrame.ALIGNS_RIGHT);
+                positions.add(KoralFrame.OVERLAPS_RIGHT);
+                classRefCheck.add(ClassRefCheck.INTERSECTS);
+                classRefCheck.add(ClassRefCheck.DISJOINT);
+                break;
+            case "FE":
+                classRefCheck.add(ClassRefCheck.UNEQUALS);
+                break;
+            case "FI":
+                classRefCheck.add(ClassRefCheck.EQUALS);
+                break;
+            case "X":
+                positions.add(KoralFrame.IS_WITHIN);
+                positions.remove(KoralFrame.MATCHES);
+                break;
+        }
+        
+    }
+
+
+    private void checkOVOptions (String posOption, 
+            ArrayList<KoralFrame> positions, 
+            ArrayList<ClassRefCheck> classRefCheck) {
+        classRefCheck.add(ClassRefCheck.INTERSECTS);
+        positions.add(KoralFrame.MATCHES);
+        switch (posOption) {
+            case "L":
+                positions.add(KoralFrame.ALIGNS_LEFT);
+                positions.add(KoralFrame.OVERLAPS_LEFT);
+                break;
+            case "R":
+                positions.add(KoralFrame.ALIGNS_RIGHT);
+                positions.add(KoralFrame.OVERLAPS_RIGHT);
+                break;
+            case "F":
+                break;
+            case "FE":
+                classRefCheck.add(ClassRefCheck.EQUALS);
+                classRefCheck.remove(ClassRefCheck.INTERSECTS);
+                break;
+            case "FI":
+                classRefCheck.add(ClassRefCheck.UNEQUALS);
+                break;
+            case "X":
+                positions.add(KoralFrame.IS_WITHIN);
+                positions.remove(KoralFrame.MATCHES);
+                break;
+        }
+        
+    }
+
+
     @SuppressWarnings({ "unchecked" })
     private Map<String, Object> wrap (Map<String, Object>[] wrapCascade) {
         int i;
diff --git a/src/test/java/de/ids_mannheim/korap/test/cosmas2/Cosmas2QueryProcessorTest.java b/src/test/java/de/ids_mannheim/korap/test/cosmas2/Cosmas2QueryProcessorTest.java
index 7dc5046..2b8d809 100644
--- a/src/test/java/de/ids_mannheim/korap/test/cosmas2/Cosmas2QueryProcessorTest.java
+++ b/src/test/java/de/ids_mannheim/korap/test/cosmas2/Cosmas2QueryProcessorTest.java
@@ -763,11 +763,11 @@
         assertEquals("classRefCheck:intersects",
                 res.at("/query/classRefCheck/0").asText());
         assertEquals("frames:alignsLeft",
-                res.at("/query/operands/0/frames/0").asText());
-        assertEquals("frames:overlapsLeft",
                 res.at("/query/operands/0/frames/1").asText());
-        assertEquals("frames:matches",
+        assertEquals("frames:overlapsLeft",
                 res.at("/query/operands/0/frames/2").asText());
+        assertEquals("frames:matches",
+                res.at("/query/operands/0/frames/0").asText());
 
         query = "wegen #OV(F) <s>";
         qs.setQuery(query, "cosmas2");
@@ -782,8 +782,10 @@
         query = "wegen #OV(FI) <s>";
         qs.setQuery(query, "cosmas2");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("classRefCheck:unequals",
+        assertEquals("classRefCheck:intersects",
                 res.at("/query/classRefCheck/0").asText());
+        assertEquals("classRefCheck:unequals",
+                res.at("/query/classRefCheck/1").asText());
         assertEquals("frames:matches",
                 res.at("/query/operands/0/frames/0").asText());
 
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 1762a3b..c32d900 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
@@ -33,10 +33,10 @@
         assertEquals("koral:group", res.at("/query/@type").asText());
         assertEquals("operation:position", res.at("/query/operation").asText());
         assertEquals(4, res.at("/query/frames").size());
-        assertEquals("frames:alignsLeft", res.at("/query/frames/0").asText());
-        assertEquals("frames:alignsRight", res.at("/query/frames/1").asText());
-        assertEquals("frames:isWithin", res.at("/query/frames/2").asText());
-        assertEquals("frames:matches", res.at("/query/frames/3").asText());
+        assertEquals("frames:matches", res.at("/query/frames/0").asText());
+        assertEquals("frames:alignsLeft", res.at("/query/frames/1").asText());
+        assertEquals("frames:alignsRight", res.at("/query/frames/2").asText());
+        assertEquals("frames:isWithin", res.at("/query/frames/3").asText());
         assertEquals("koral:token", res.at("/query/operands/0/@type").asText());
         assertEquals("koral:span", res.at("/query/operands/1/@type").asText());
     }
@@ -48,6 +48,7 @@
         query = "wegen #IN(N) <s>";
         qs.setQuery(query, "cosmas2");
         res = mapper.readTree(qs.toJSON());
+        System.out.println(res);
         assertEquals("koral:group", res.at("/query/@type").asText());
         assertEquals("operation:position", res.at("/query/operation").asText());
         assertEquals("frames:isWithin", res.at("/query/frames/0").asText());
@@ -65,8 +66,8 @@
 
         assertEquals("operation:position", res.at("/query/operation").asText());
         assertEquals(2, res.at("/query/frames").size());
-        assertEquals("frames:alignsLeft", res.at("/query/frames/0").asText());
-        assertEquals("frames:matches", res.at("/query/frames/1").asText());
+        assertEquals("frames:matches", res.at("/query/frames/0").asText());
+        assertEquals("frames:alignsLeft", res.at("/query/frames/1").asText());
 
         assertEquals("wegen", res.at("/query/operands/0/wrap/key").asText());
         assertEquals("s", res.at("/query/operands/1/wrap/key").asText());
@@ -81,8 +82,9 @@
         res = mapper.readTree(qs.toJSON());
 
         assertEquals("operation:position", res.at("/query/operation").asText());
-        assertEquals("frames:alignsRight", res.at("/query/frames/0").asText());
-        assertEquals("frames:matches", res.at("/query/frames/1").asText());
+        assertEquals("frames:matches", res.at("/query/frames/0").asText());
+        assertEquals("frames:alignsRight", res.at("/query/frames/1").asText());
+
         assertEquals(2, res.at("/query/frames").size());
         assertEquals("wegen", res.at("/query/operands/0/wrap/key").asText());
         assertEquals("s", res.at("/query/operands/1/wrap/key").asText());
@@ -143,7 +145,6 @@
         assertEquals("koral:group", res.at("/query/@type").asText());
         assertEquals("operation:position", res.at("/query/operation").asText());
         assertEquals("frames:isWithin", res.at("/query/frames/0").asText());
-        assertEquals("frames:matches", res.at("/query/frames/1").asText());
         assertEquals("sich", res.at("/query/operands/0/wrap/key").asText());
         assertEquals("gelten",
                 res.at("/query/operands/1/operands/0/operands/0/wrap/key")
@@ -162,7 +163,7 @@
         query = "gilt #IN(N,HIT) (&gelten /w5:10 zurecht)";
         qs.setQuery(query, "cosmas2");
         res = mapper.readTree(qs.toJSON());
-//        System.out.println(res);
+        System.out.println(res);
         assertEquals("koral:group", res.at("/query/@type").asText());
         assertEquals("operation:class", res.at("/query/operation").asText());
         assertEquals("classRefCheck:includes",
@@ -175,8 +176,6 @@
                 res.at("/query/operands/0/operation").asText());
         assertEquals("frames:isWithin",
                 res.at("/query/operands/0/frames/0").asText());
-        assertEquals("frames:matches",
-                res.at("/query/operands/0/frames/1").asText());
         
         assertEquals("operation:class",
                 res.at("/query/operands/0/operands/0/operation").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 9d410dc..06f60fa 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
@@ -224,6 +224,7 @@
         query = "wegen #IN(N,ALL,%) <s>";
         qs.setQuery(query, "cosmas2");
         res = mapper.readTree(qs.toJSON());
+//        System.out.println(res);
         assertEquals("koral:group", res.at("/query/@type").asText());
         assertEquals("operation:exclusion",
                 res.at("/query/operation").asText());
@@ -276,4 +277,31 @@
                 res.at("/query/operands/0/frames/0").asText());
     }
 
+    // EM: Does exclusion HIT not need classRefCheck?
+    @Test
+    public void testOPINwithExclusionN_HIT ()
+            throws JsonProcessingException, IOException {
+        
+        query = "wegen #IN(N,HIT,%) (wegen /w5:10 des)";
+        qs.setQuery(query, "cosmas2");
+        res = mapper.readTree(qs.toJSON());
+//        System.out.println(res);
+        assertEquals("koral:group", res.at("/query/@type").asText());
+        assertEquals("operation:exclusion",
+                res.at("/query/operation").asText());
+        assertEquals(1, res.at("/query/frames").size());
+        assertEquals("frames:isWithin", res.at("/query/frames/0").asText());
+        assertEquals("koral:token", res.at("/query/operands/0/@type").asText());
+        
+        assertEquals("operation:sequence", res.at("/query/operands/1/operation").asText());
+        
+        JsonNode seqOperand = res.at("/query/operands/1/operands");
+                
+        assertEquals("operation:class", seqOperand.at("/0/operation").asText());
+        assertEquals(129, seqOperand.at("/0/classOut").asInt());
+        
+        assertEquals("operation:class", seqOperand.at("/1/operation").asText());
+        assertEquals(129, seqOperand.at("/1/classOut").asInt());
+    }
+    
 }
diff --git a/src/test/java/de/ids_mannheim/korap/test/cosmas2/OPOVWithExclusionTest.java b/src/test/java/de/ids_mannheim/korap/test/cosmas2/OPOVWithExclusionTest.java
new file mode 100644
index 0000000..262b1a1
--- /dev/null
+++ b/src/test/java/de/ids_mannheim/korap/test/cosmas2/OPOVWithExclusionTest.java
@@ -0,0 +1,186 @@
+package de.ids_mannheim.korap.test.cosmas2;
+
+import static org.junit.Assert.assertEquals;
+
+import java.io.IOException;
+
+import org.junit.Test;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+import de.ids_mannheim.korap.query.serialize.QuerySerializer;
+
+public class OPOVWithExclusionTest {
+
+    private String query;
+
+    private QuerySerializer qs = new QuerySerializer();
+    private ObjectMapper mapper = new ObjectMapper();
+    private JsonNode res;
+
+
+    @Test
+    public void testOPOVWithExclusion ()
+            throws JsonProcessingException, IOException {
+        query = "wegen #OV(%) <s>";
+        qs.setQuery(query, "cosmas2");
+        res = mapper.readTree(qs.toJSON());
+//        System.out.println(res);
+
+        assertEquals("koral:group", res.at("/query/@type").asText());
+        assertEquals("operation:class", res.at("/query/operation").asText());
+        assertEquals(1, res.at("/query/classRefCheck").size());
+        assertEquals("classRefCheck:disjoint",
+                res.at("/query/classRefCheck/0").asText());
+        
+        JsonNode classRefCheckOperand = res.at("/query/operands/0");
+        assertEquals("operation:exclusion",
+                classRefCheckOperand.at("/operation").asText());
+        assertEquals(0, classRefCheckOperand.at("/frames").size());
+    }
+    
+    @Test
+    public void testOPOVWithExclusionX ()
+            throws JsonProcessingException, IOException {
+        query = "wegen #OV(%, X) <s>";
+        qs.setQuery(query, "cosmas2");
+        res = mapper.readTree(qs.toJSON());
+//        System.out.println(res);
+
+        assertEquals("koral:group", res.at("/query/@type").asText());
+        assertEquals("operation:exclusion", res.at("/query/operation").asText());
+
+        assertEquals(1, res.at("/query/frames").size());
+        assertEquals("frames:isWithin", res.at("/query/frames/0").asText());
+    }
+    
+    @Test
+    public void testOPOVWithExclusionL ()
+            throws JsonProcessingException, IOException {
+        query = "wegen #OV(%, L) <s>";
+        qs.setQuery(query, "cosmas2");
+        res = mapper.readTree(qs.toJSON());
+//        System.out.println(res);
+
+        assertEquals("koral:group", res.at("/query/@type").asText());
+        assertEquals("operation:class", res.at("/query/operation").asText());
+        assertEquals(2, res.at("/query/classRefCheck").size());
+        assertEquals("classRefCheck:intersects",
+                res.at("/query/classRefCheck/0").asText());
+        assertEquals("classRefCheck:disjoint",
+                res.at("/query/classRefCheck/1").asText());
+        
+        JsonNode classRefCheckOperand = res.at("/query/operands/0");
+        assertEquals("operation:exclusion",
+                classRefCheckOperand.at("/operation").asText());
+        assertEquals(3, classRefCheckOperand.at("/frames").size());
+        assertEquals("frames:matches",
+                classRefCheckOperand.at("/frames/0").asText());
+        assertEquals("frames:alignsLeft",
+                classRefCheckOperand.at("/frames/1").asText());
+        assertEquals("frames:overlapsLeft",
+                classRefCheckOperand.at("/frames/2").asText());
+        
+        JsonNode exclusionOperands = classRefCheckOperand.at("/operands/0");
+        assertEquals("operation:class", exclusionOperands.at("/operation").asText());
+        assertEquals("wegen", exclusionOperands.at("/operands/0/wrap/key").asText());
+        assertEquals(129, exclusionOperands.at("/classOut").asInt());
+        
+        exclusionOperands = classRefCheckOperand.at("/operands/1");
+        assertEquals("s", exclusionOperands.at("/operands/0/wrap/key").asText());
+        assertEquals(130, exclusionOperands.at("/classOut").asInt());
+        
+    }
+    
+    
+    @Test
+    public void testOPOVWithExclusionR ()
+            throws JsonProcessingException, IOException {
+        query = "wegen #OV(%, R) <s>";
+        qs.setQuery(query, "cosmas2");
+        res = mapper.readTree(qs.toJSON());
+//        System.out.println(res);
+
+        assertEquals("koral:group", res.at("/query/@type").asText());
+        assertEquals("operation:class", res.at("/query/operation").asText());
+        assertEquals(2, res.at("/query/classRefCheck").size());
+        assertEquals("classRefCheck:intersects",
+                res.at("/query/classRefCheck/0").asText());
+        assertEquals("classRefCheck:disjoint",
+                res.at("/query/classRefCheck/1").asText());
+        
+        JsonNode classRefCheckOperand = res.at("/query/operands/0");
+        assertEquals("operation:exclusion",
+                classRefCheckOperand.at("/operation").asText());
+        assertEquals(3, classRefCheckOperand.at("/frames").size());
+        assertEquals("frames:matches",
+                classRefCheckOperand.at("/frames/0").asText());
+        assertEquals("frames:alignsRight",
+                classRefCheckOperand.at("/frames/1").asText());
+        assertEquals("frames:overlapsRight",
+                classRefCheckOperand.at("/frames/2").asText());
+    }
+    
+    @Test
+    public void testOPOVWithExclusionF ()
+            throws JsonProcessingException, IOException {
+        query = "wegen #OV(%, F) <s>";
+        qs.setQuery(query, "cosmas2");
+        res = mapper.readTree(qs.toJSON());
+//        System.out.println(res);
+
+        assertEquals("koral:group", res.at("/query/@type").asText());
+        assertEquals("operation:exclusion", res.at("/query/operation").asText());
+
+        assertEquals(1, res.at("/query/frames").size());
+        assertEquals("frames:matches", res.at("/query/frames/0").asText());
+    }
+    
+    @Test
+    public void testOPOVWithExclusionFE ()
+            throws JsonProcessingException, IOException {
+        query = "wegen #OV(%, FE) <s>";
+        qs.setQuery(query, "cosmas2");
+        res = mapper.readTree(qs.toJSON());
+        System.out.println(res);
+
+        assertEquals("koral:group", res.at("/query/@type").asText());
+        assertEquals("operation:class", res.at("/query/operation").asText());
+        assertEquals(1, res.at("/query/classRefCheck").size());
+        assertEquals("classRefCheck:unequals",
+                res.at("/query/classRefCheck/0").asText());
+        
+        JsonNode classRefCheckOperand = res.at("/query/operands/0");
+        assertEquals("operation:exclusion",
+                classRefCheckOperand.at("/operation").asText());
+        assertEquals(1, classRefCheckOperand.at("/frames").size());
+        assertEquals("frames:matches",
+                classRefCheckOperand.at("/frames/0").asText());
+    }
+    
+    @Test
+    public void testOPOVWithExclusionFI ()
+            throws JsonProcessingException, IOException {
+        query = "wegen #OV(%, FI) <s>";
+        qs.setQuery(query, "cosmas2");
+        res = mapper.readTree(qs.toJSON());
+//        System.out.println(res);
+
+        assertEquals("koral:group", res.at("/query/@type").asText());
+        assertEquals("operation:class", res.at("/query/operation").asText());
+        assertEquals(1, res.at("/query/classRefCheck").size());
+        assertEquals("classRefCheck:equals",
+                res.at("/query/classRefCheck/0").asText());
+        
+        JsonNode classRefCheckOperand = res.at("/query/operands/0");
+        assertEquals("operation:exclusion",
+                classRefCheckOperand.at("/operation").asText());
+        assertEquals(1, classRefCheckOperand.at("/frames").size());
+        assertEquals("frames:matches",
+                classRefCheckOperand.at("/frames/0").asText());
+    }
+    
+    
+}
