diff --git a/src/main/java/.gitignore b/src/main/java/.gitignore
new file mode 100644
index 0000000..688761c
--- /dev/null
+++ b/src/main/java/.gitignore
@@ -0,0 +1 @@
+/SerializationSandbox.java
diff --git a/src/main/java/de/ids_mannheim/korap/query/parse/.gitignore b/src/main/java/de/ids_mannheim/korap/query/parse/.gitignore
new file mode 100644
index 0000000..e92a46d
--- /dev/null
+++ b/src/main/java/de/ids_mannheim/korap/query/parse/.gitignore
@@ -0,0 +1,3 @@
+/annis/
+/collection/
+/poliqarpplus/
diff --git a/src/main/java/de/ids_mannheim/korap/query/parse/cosmas/c2ps_opAnnot.java b/src/main/java/de/ids_mannheim/korap/query/parse/cosmas/c2ps_opAnnot.java
index 4bb62a2..593988d 100644
--- a/src/main/java/de/ids_mannheim/korap/query/parse/cosmas/c2ps_opAnnot.java
+++ b/src/main/java/de/ids_mannheim/korap/query/parse/cosmas/c2ps_opAnnot.java
@@ -1,10 +1,5 @@
 package de.ids_mannheim.korap.query.parse.cosmas;
 
-import java.io.*;
-import org.antlr.runtime.*;
-import org.antlr.runtime.debug.DebugEventSocketProxy;
-import org.antlr.runtime.tree.*;
-
 /* COSMAS II Plain Syntax (c2ps).
  * lokale Grammatik für Optionen von #IN(Opts).
  * 12.12.12/FB
diff --git a/src/main/java/de/ids_mannheim/korap/query/parse/cosmas/c2ps_opBED.java b/src/main/java/de/ids_mannheim/korap/query/parse/cosmas/c2ps_opBED.java
index a6dc19b..713c289 100644
--- a/src/main/java/de/ids_mannheim/korap/query/parse/cosmas/c2ps_opBED.java
+++ b/src/main/java/de/ids_mannheim/korap/query/parse/cosmas/c2ps_opBED.java
@@ -1,8 +1,6 @@
 package de.ids_mannheim.korap.query.parse.cosmas;
 
-import java.io.*;
 import org.antlr.runtime.*;
-import org.antlr.runtime.debug.DebugEventSocketProxy;
 import org.antlr.runtime.tree.*;
 
 // parses Opts in #BED(x,Opts):
diff --git a/src/main/java/de/ids_mannheim/korap/query/parse/cosmas/c2ps_opELEM.java b/src/main/java/de/ids_mannheim/korap/query/parse/cosmas/c2ps_opELEM.java
index 9968e24..2e0c55c 100644
--- a/src/main/java/de/ids_mannheim/korap/query/parse/cosmas/c2ps_opELEM.java
+++ b/src/main/java/de/ids_mannheim/korap/query/parse/cosmas/c2ps_opELEM.java
@@ -1,8 +1,6 @@
 package de.ids_mannheim.korap.query.parse.cosmas;
 
-import java.io.*;
 import org.antlr.runtime.*;
-import org.antlr.runtime.debug.DebugEventSocketProxy;
 import org.antlr.runtime.tree.*;
 
 // parses Search Expression inside #ELEM(...):
diff --git a/src/main/java/de/ids_mannheim/korap/query/parse/cosmas/c2ps_opIN.java b/src/main/java/de/ids_mannheim/korap/query/parse/cosmas/c2ps_opIN.java
index 7d50a90..53f6429 100644
--- a/src/main/java/de/ids_mannheim/korap/query/parse/cosmas/c2ps_opIN.java
+++ b/src/main/java/de/ids_mannheim/korap/query/parse/cosmas/c2ps_opIN.java
@@ -1,8 +1,6 @@
 package de.ids_mannheim.korap.query.parse.cosmas;
 
-import java.io.*;
 import org.antlr.runtime.*;
-import org.antlr.runtime.debug.DebugEventSocketProxy;
 import org.antlr.runtime.tree.*;
 
 /* COSMAS II Plain Syntax (c2ps).
diff --git a/src/main/java/de/ids_mannheim/korap/query/parse/cosmas/c2ps_opOV.java b/src/main/java/de/ids_mannheim/korap/query/parse/cosmas/c2ps_opOV.java
index c47160c..27cd9de 100644
--- a/src/main/java/de/ids_mannheim/korap/query/parse/cosmas/c2ps_opOV.java
+++ b/src/main/java/de/ids_mannheim/korap/query/parse/cosmas/c2ps_opOV.java
@@ -1,8 +1,6 @@
 package de.ids_mannheim.korap.query.parse.cosmas;
 
-import java.io.*;
 import org.antlr.runtime.*;
-import org.antlr.runtime.debug.DebugEventSocketProxy;
 import org.antlr.runtime.tree.*;
 
 /* COSMAS II Plain Syntax (c2ps).
diff --git a/src/main/java/de/ids_mannheim/korap/query/parse/cosmas/c2ps_opPROX.java b/src/main/java/de/ids_mannheim/korap/query/parse/cosmas/c2ps_opPROX.java
index 4d8561d..12d8fa4 100644
--- a/src/main/java/de/ids_mannheim/korap/query/parse/cosmas/c2ps_opPROX.java
+++ b/src/main/java/de/ids_mannheim/korap/query/parse/cosmas/c2ps_opPROX.java
@@ -1,8 +1,6 @@
 package de.ids_mannheim.korap.query.parse.cosmas;
 
-import java.io.*;
 import org.antlr.runtime.*;
-import org.antlr.runtime.debug.DebugEventSocketProxy;
 import org.antlr.runtime.tree.*;
 
 /*
diff --git a/src/main/java/de/ids_mannheim/korap/query/parse/cosmas/c2ps_opWF.java b/src/main/java/de/ids_mannheim/korap/query/parse/cosmas/c2ps_opWF.java
index 5400bec..7cdac48 100644
--- a/src/main/java/de/ids_mannheim/korap/query/parse/cosmas/c2ps_opWF.java
+++ b/src/main/java/de/ids_mannheim/korap/query/parse/cosmas/c2ps_opWF.java
@@ -1,8 +1,6 @@
 package de.ids_mannheim.korap.query.parse.cosmas;
 
-import java.io.*;
 import org.antlr.runtime.*;
-import org.antlr.runtime.debug.DebugEventSocketProxy;
 import org.antlr.runtime.tree.*;
 
 /*
diff --git a/src/main/java/de/ids_mannheim/korap/query/parse/cosmas/c2ps_optCase.java b/src/main/java/de/ids_mannheim/korap/query/parse/cosmas/c2ps_optCase.java
index 8f1ad28..8a971d6 100644
--- a/src/main/java/de/ids_mannheim/korap/query/parse/cosmas/c2ps_optCase.java
+++ b/src/main/java/de/ids_mannheim/korap/query/parse/cosmas/c2ps_optCase.java
@@ -1,8 +1,6 @@
 package de.ids_mannheim.korap.query.parse.cosmas;
 
-import java.io.*;
 import org.antlr.runtime.*;
-import org.antlr.runtime.debug.DebugEventSocketProxy;
 import org.antlr.runtime.tree.*;
 
 // parses Case Options.
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 8e41b38..c8cc39f 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
@@ -352,7 +352,7 @@
                         "TPEND");
 
                 LinkedHashMap<String, Object> submatchgroup = 
-                        KoralObjectGenerator.makeReference(classCounter);
+                        KoralObjectGenerator.makeReference(classCounter+128);
                 ArrayList<Object> submatchOperands = new ArrayList<Object>();
                 submatchgroup.put("operands", submatchOperands);
                 putIntoSuperObject(submatchgroup);
@@ -397,7 +397,7 @@
                         // constraint applies
                         if (conditionCount > 1) {
                             LinkedHashMap<String, Object> focus = 
-                                    KoralObjectGenerator.makeReference(classCounter - 2);
+                                    KoralObjectGenerator.makeReference(classCounter +128 - 2);
                             ArrayList<Object> focusOperands = new ArrayList<Object>();
                             focus.put("operands", focusOperands);
                             focusOperands.add(matchesGroup);
@@ -415,22 +415,22 @@
             }
 
             private void processOPNHIT(Tree node) {
-                Integer[] classRef = new Integer[] { classCounter + 1,
-                        classCounter + 2 };
+                Integer[] classRef = new Integer[] { classCounter + 128 + 1,
+                        classCounter + 128 + 2 };
                 // classRef.add(classCounter + 1); // yes, do this twice (two
                 // classes)!
                 LinkedHashMap<String, Object> group = 
-                        KoralObjectGenerator.makeReference(classCounter);
+                        KoralObjectGenerator.makeReference(classCounter+128);
                 LinkedHashMap<String, Object> classRefCheck = 
                         KoralObjectGenerator.makeClassRefOp("classRefOp:inversion", classRef,
-                                classCounter);
+                                classCounter+128);
                 ArrayList<Object> operands = new ArrayList<Object>();
                 operands.add(classRefCheck);
                 group.put("operands", operands);
                 classCounter++;
                 // direct child is OPPROX
-                wrapOperandInClass(node.getChild(0), 1, classCounter++); 
-                wrapOperandInClass(node.getChild(0), 2, classCounter++);
+                wrapOperandInClass(node.getChild(0), 1, 128+classCounter++); 
+                wrapOperandInClass(node.getChild(0), 2, 128+classCounter++);
                 objectStack.push(classRefCheck);
                 stackedObjects++;
                 putIntoSuperObject(group, 1);
@@ -457,8 +457,8 @@
             private void processOPIN_OPOV(Tree node) {
                 // Step I: create group
                 String nodeCat = getNodeCat(node);
-                wrapOperandInClass(node, 2, classCounter++);
-                wrapOperandInClass(node, 1, classCounter++);
+                wrapOperandInClass(node, 2, 128+classCounter++);
+                wrapOperandInClass(node, 1, 128+classCounter++);
                 // LinkedHashMap<String, Object> posgroup =
                 // makePosition(null);
                 LinkedHashMap<String, Object> posGroup = KoralObjectGenerator
@@ -484,13 +484,13 @@
                 ArrayList<String> check = 
                         (ArrayList<String>) positionOptions.get("classRefCheck");
                 Integer[] classIn = 
-                        new Integer[] { classCounter - 2, classCounter - 1 };
+                        new Integer[] { classCounter+128-2, classCounter+128-1 };
                 LinkedHashMap<String, Object> topGroup;
                 if (! check.isEmpty()) {
                     // wrap position in a classRefCheck
                     topGroup = 
                             KoralObjectGenerator.makeClassRefCheck(check, classIn,
-                                    classCounter);
+                                    classCounter+128);
                     ((ArrayList<Object>) topGroup.get("operands")).add(posGroup);
                 } else {
                     topGroup = posGroup;
@@ -498,12 +498,12 @@
                 LinkedHashMap<String, Object> focusGroup = null;
                 if ((boolean) positionOptions.get("matchall") == true) {
                     focusGroup = KoralObjectGenerator.makeClassRefOp("classRefOp:delete", 
-                            new Integer[]{classCounter++}, classCounter);
+                            new Integer[]{128+classCounter++}, 128+classCounter);
                     ((ArrayList<Object>) focusGroup.get("operands")).add(topGroup);
                 }
                 else { // match only first argument
                     focusGroup = KoralObjectGenerator.wrapInReference(topGroup,
-                            classCounter-1);
+                            classCounter+128-1);
                     classCounter++;
                 }
                 // wrap in 'merge' operation if grouping option is set
@@ -599,8 +599,10 @@
                         || openNodeCats.get(1).equals("OPEND") 
                         || inOPALL 
                         || openNodeCats.get(1).equals("OPNHIT"))) {
-                    wrapOperandInClass(node, 1, classCounter);
-                    wrapOperandInClass(node, 2, classCounter);
+                    System.err.println(classCounter);
+                    wrapOperandInClass(node, 1, 128+classCounter);
+                    wrapOperandInClass(node, 2, 128+classCounter);
+                    System.err.println(classCounter);
                     // Deactivated, uncomment to wrap sequence in reference.
                     //            group = KoralObjectGenerator.wrapInReference(group,
                     //                    classCounter++);
@@ -1040,7 +1042,7 @@
                     positionGroup.put("exclude", true);
                 ArrayList<Object> posOperands = new ArrayList<Object>();
                 LinkedHashMap<String, Object> classGroup = 
-                        KoralObjectGenerator.makeSpanClass(classCounter++);
+                        KoralObjectGenerator.makeSpanClass(128+classCounter++);
                 classGroup.put("operands", distributedOperands);
                 positionGroup.put("operands", posOperands);
                 LinkedHashMap<String, Object> span = new LinkedHashMap<String, Object>();
diff --git a/src/main/java/de/ids_mannheim/korap/query/serialize/PoliqarpPlusQueryProcessor.java b/src/main/java/de/ids_mannheim/korap/query/serialize/PoliqarpPlusQueryProcessor.java
index 23958fa..b07d0f9 100644
--- a/src/main/java/de/ids_mannheim/korap/query/serialize/PoliqarpPlusQueryProcessor.java
+++ b/src/main/java/de/ids_mannheim/korap/query/serialize/PoliqarpPlusQueryProcessor.java
@@ -454,8 +454,9 @@
             catch (NumberFormatException e) {
                 String msg = "The specified class reference in the "
                         + "focus/split-Operator is not a number: " + ref;
+                classId = 0;
                 log.error(msg);
-                addError(StatusCodes.UNDEFINED_CLASS_REFERENCE, msg);
+                addError(StatusCodes.INVALID_CLASS_REFERENCE, msg);
             }
             // only allow class id up to 127
             if (classId > 128) {
@@ -464,7 +465,7 @@
                         + "Check for possible conflict with other classes.");
                 classId = 128;
             }
-        }
+        } 
         LinkedHashMap<String, Object> classGroup = 
                 KoralObjectGenerator.makeSpanClass(classId);
         addHighlightClass(classId);
@@ -502,13 +503,13 @@
                     catch (NumberFormatException e) {
                         String err = "The specified class reference in the "
                                 + "shrink/split-Operator is not a number.";
-                        addError(StatusCodes.UNDEFINED_CLASS_REFERENCE, err);
+                        addError(StatusCodes.INVALID_CLASS_REFERENCE, err);
                     }
                 }
             }
         }
         else {
-            classRefs.add(1);
+            classRefs.add(1); // default
         }
         LinkedHashMap<String, Object> referenceGroup = 
                 KoralObjectGenerator.makeReference(classRefs);
diff --git a/src/main/java/de/ids_mannheim/korap/query/serialize/util/KoralObjectGenerator.java b/src/main/java/de/ids_mannheim/korap/query/serialize/util/KoralObjectGenerator.java
index 610c83e..8fdf565 100644
--- a/src/main/java/de/ids_mannheim/korap/query/serialize/util/KoralObjectGenerator.java
+++ b/src/main/java/de/ids_mannheim/korap/query/serialize/util/KoralObjectGenerator.java
@@ -114,12 +114,7 @@
                     + "your query for later reference to a part of the query. The class id is "
                     + classId);
         }
-        group.put("class", classId);
         group.put("classOut", classId);
-        qp.addMessage(
-                StatusCodes.DEPRECATED_QUERY_ELEMENT,
-                "Deprecated 2014-10-07: 'class' only to be supported until 3 months from deprecation date. "
-                        + "Classes are now defined using the 'classOut' attribute.");
         group.put("operands", new ArrayList<Object>());
         return group;
     }
@@ -132,11 +127,6 @@
         group.put("classRefCheck", check);
         group.put("classIn", Arrays.asList(classIn));
         group.put("classOut", classOut);
-        group.put("class", classOut);
-        qp.addMessage(
-                StatusCodes.DEPRECATED_QUERY_ELEMENT,
-                "Deprecated 2014-10-07: 'class' only to be supported until 3 months from deprecation date. "
-                        + "Classes are now defined using the 'classOut' attribute.");
         group.put("operands", new ArrayList<Object>());
         return group;
     }
diff --git a/src/main/java/de/ids_mannheim/korap/query/serialize/util/StatusCodes.java b/src/main/java/de/ids_mannheim/korap/query/serialize/util/StatusCodes.java
index 6416b0e..993ba38 100644
--- a/src/main/java/de/ids_mannheim/korap/query/serialize/util/StatusCodes.java
+++ b/src/main/java/de/ids_mannheim/korap/query/serialize/util/StatusCodes.java
@@ -4,7 +4,7 @@
 	public final static int NO_QUERY = 301;
 	public final static int MALFORMED_QUERY = 302;
 	public final static int DEPRECATED_QUERY_ELEMENT = 303;
-	public final static int UNDEFINED_CLASS_REFERENCE = 304;
+	public final static int INVALID_CLASS_REFERENCE = 304;
 	public final static int INCOMPATIBLE_OPERATOR_AND_OPERAND = 305;
 	public final static int UNKNOWN_QUERY_ELEMENT = 306;
 	public final static int UNKNOWN_QL = 307;
