Cleanup for version 0.2

Change-Id: I383ed12da8abc96b233c0694612f837b49731201
diff --git a/.classpath b/.classpath
deleted file mode 100644
index 9c865fb..0000000
--- a/.classpath
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-	<classpathentry kind="src" output="target/classes" path="src/main/java">
-		<attributes>
-			<attribute name="optional" value="true"/>
-			<attribute name="maven.pomderived" value="true"/>
-		</attributes>
-	</classpathentry>
-	<classpathentry kind="src" output="target/test-classes" path="src/test/java">
-		<attributes>
-			<attribute name="optional" value="true"/>
-			<attribute name="maven.pomderived" value="true"/>
-		</attributes>
-	</classpathentry>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER">
-		<attributes>
-			<attribute name="maven.pomderived" value="true"/>
-		</attributes>
-	</classpathentry>
-	<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
-		<attributes>
-			<attribute name="maven.pomderived" value="true"/>
-		</attributes>
-	</classpathentry>
-	<classpathentry kind="output" path="target/classes"/>
-</classpath>
diff --git a/.project b/.project
deleted file mode 100644
index 53c51ae..0000000
--- a/.project
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>Koral</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.jdt.core.javabuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.m2e.core.maven2Builder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.jdt.core.javanature</nature>
-		<nature>org.eclipse.m2e.core.maven2Nature</nature>
-	</natures>
-</projectDescription>
diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs
deleted file mode 100644
index ec4300d..0000000
--- a/.settings/org.eclipse.jdt.core.prefs
+++ /dev/null
@@ -1,5 +0,0 @@
-eclipse.preferences.version=1
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
-org.eclipse.jdt.core.compiler.compliance=1.7
-org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
-org.eclipse.jdt.core.compiler.source=1.7
diff --git a/Changes b/Changes
new file mode 100644
index 0000000..d3afe61
--- /dev/null
+++ b/Changes
@@ -0,0 +1,7 @@
+0.2 2015-06-15
+        - Switch to "koral:" prefix.
+	- Coverage of KoralQuery 0.3
+	  (see http://korap.github.io/Koral/)
+
+0.1 2015-02-10
+        - First version published to GitHub.
diff --git a/Format.xml b/Format.xml
new file mode 100644
index 0000000..7c749b0
--- /dev/null
+++ b/Format.xml
@@ -0,0 +1,291 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<profiles version="12">
+<profile kind="CodeFormatterProfile" name="korap" version="12">
+<setting id="org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.disabling_tag" value="@formatter:off"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration" value="end_of_line"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_field" value="0"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.use_on_off_tags" value="false"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line" value="false"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_ellipsis" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_multiple_fields" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_conditional_expression" value="80"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_binary_operator" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.brace_position_for_array_initializer" value="end_of_line"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.blank_lines_after_package" value="1"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.continuation_indentation" value="2"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk" value="1"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_binary_operator" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_package" value="0"/>
+<setting id="org.eclipse.jdt.core.compiler.source" value="1.7"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.comment.format_line_comments" value="false"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.join_wrapped_lines" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_member_type" value="1"/>
+<setting id="org.eclipse.jdt.core.formatter.align_type_members_on_columns" value="false"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_unary_operator" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.comment.indent_parameter_description" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment" value="false"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.lineSplit" value="80"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration" value="0"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_method" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.indentation.size" value="4"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.enabling_tag" value="@formatter:on"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_assignment" value="0"/>
+<setting id="org.eclipse.jdt.core.compiler.problem.assertIdentifier" value="error"/>
+<setting id="org.eclipse.jdt.core.formatter.tabulation.char" value="space"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_try_resources" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.indent_statements_compare_to_body" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_method" value="2"/>
+<setting id="org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line" value="false"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration" value="18"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration" value="end_of_line"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_method_declaration" value="0"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_try" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.brace_position_for_switch" value="end_of_line"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_try" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.compiler.problem.enumIdentifier" value="error"/>
+<setting id="org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_ellipsis" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.brace_position_for_block" value="end_of_line"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.brace_position_for_method_declaration" value="end_of_line"/>
+<setting id="org.eclipse.jdt.core.formatter.compact_else_if" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.comment.indent_root_tags" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.brace_position_for_enum_constant" value="end_of_line"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_union_type_in_multicatch" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.tabulation.size" value="4"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment" value="false"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.indent_empty_lines" value="false"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.brace_position_for_block_in_case" value="end_of_line"/>
+<setting id="org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve" value="3"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter" value="insert"/>
+<setting id="org.eclipse.jdt.core.compiler.compliance" value="1.7"/>
+<setting id="org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer" value="2"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_unary_operator" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line" value="false"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line" value="false"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_binary_expression" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration" value="end_of_line"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode" value="enabled"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_try" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line" value="false"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_label" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.comment.format_javadoc_comments" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.comment.line_length" value="70"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.blank_lines_between_import_groups" value="1"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_semicolon" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration" value="end_of_line"/>
+<setting id="org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body" value="0"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.wrap_before_binary_operator" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations" value="1"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.indent_statements_compare_to_block" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.join_lines_in_comments" value="false"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_compact_if" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_imports" value="1"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.comment.format_html" value="false"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.comment.format_source_code" value="false"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration" value="16"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer" value="insert"/>
+<setting id="org.eclipse.jdt.core.compiler.codegen.targetPlatform" value="1.7"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_resources_in_try" value="80"/>
+<setting id="org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations" value="false"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation" value="0"/>
+<setting id="org.eclipse.jdt.core.formatter.comment.format_header" value="false"/>
+<setting id="org.eclipse.jdt.core.formatter.comment.format_block_comments" value="false"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.alignment_for_enum_constants" value="0"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.brace_position_for_type_declaration" value="end_of_line"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.blank_lines_after_imports" value="1"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header" value="true"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for" value="insert"/>
+<setting id="org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column" value="false"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_try_resources" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments" value="do not insert"/>
+<setting id="org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column" value="false"/>
+<setting id="org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line" value="false"/>
+</profile>
+</profiles>
diff --git a/README.md b/README.md
index a26ab9e..788241c 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,4 @@
-# Koral v0.1
+# Koral
 
 Koral is a library designed for the translation of different corpus query 
 languages to KoralQuery, a JSON-LD-based protocol for the common representation
@@ -37,44 +37,44 @@
 
 ```json
 {
-    "@context": "http://korap.ids-mannheim.de/ns/KoralQuery/v0.2/context.jsonld",
-    "query": {
+  "@context": "http://korap.ids-mannheim.de/ns/KoralQuery/v0.2/context.jsonld",
+  "query": {
+    "@type": "koral:group",
+    "operation": "operation:position",
+    "frames": [
+      "frames:isAround"
+    ],
+    "operands": [
+      {
+        "@type": "koral:span",
+        "key": "s"
+      },
+      {
         "@type": "koral:group",
-        "operation": "operation:position",
-        "frames": [
-            "frames:isAround"
-        ],
+        "operation": "operation:sequence",
         "operands": [
-            {
-                "@type": "koral:span",
-                "key": "s"
-            },
-            {
-                "@type": "koral:group",
-                "operation": "operation:sequence",
-                "operands": [
-                    {
-                        "@type": "koral:token",
-                        "wrap": {
-                            "@type": "koral:term",
-                            "layer": "orth",
-                            "key": "zu",
-                            "match": "match:eq"
-                        }
-                    },
-                    {
-                        "@type": "koral:token",
-                        "wrap": {
-                            "@type": "koral:term",
-                            "layer": "pos",
-                            "key": "ADJA",
-                            "match": "match:eq"
-                        }
-                    }
-                ]
+          {
+            "@type": "koral:token",
+            "wrap": {
+              "@type": "koral:term",
+              "layer": "orth",
+              "key": "zu",
+              "match": "match:eq"
             }
+          },
+          {
+            "@type": "koral:token",
+            "wrap": {
+              "@type": "koral:term",
+              "layer": "pos",
+              "key": "ADJA",
+              "match": "match:eq"
+            }
+          }
         ]
-    }
+      }
+    ]
+  }
 }
 ```
 
@@ -102,7 +102,7 @@
 
 There is also a command line version. After installation, simply run
 
-    java -jar target/Koral-0.1.jar [query] [queryLanguage]
+    java -jar target/Koral-0.2.jar [query] [queryLanguage]
     
 ## Authorship
 
diff --git a/pom.xml b/pom.xml
index f858cbc..27de904 100644
--- a/pom.xml
+++ b/pom.xml
@@ -1,226 +1,224 @@
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-	<modelVersion>4.0.0</modelVersion>
-	<!-- <parent> <groupId>KorAP-modules</groupId> <artifactId>KorAP-core-modules</artifactId> 
-		<version>1.1</version> </parent> -->
+	 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <!-- <parent> <groupId>KorAP-modules</groupId> <artifactId>KorAP-core-modules</artifactId> 
+       <version>1.1</version> </parent> -->
 
-	<groupId>KorAP-modules</groupId>
-	<artifactId>Koral</artifactId>
-	<version>0.1</version>
-	<packaging>jar</packaging>
-	<name>Koral</name>
-	<url>http://maven.apache.org</url>
-	<repositories>
-		<repository>
-			<id>id-maven-repo</id>
-			<url>http://maven.indexdata.com</url>
-		</repository>
-	</repositories>
-	<dependencies>
-		<dependency>
-			<groupId>org.antlr</groupId>
-			<artifactId>antlr4-runtime</artifactId>
-			<version>4.1</version>
-		</dependency>
-		<dependency>
-			<groupId>org.antlr</groupId>
-			<artifactId>antlr4-maven-plugin</artifactId>
-			<version>4.1</version>
-		</dependency>
-		<dependency>
-			<groupId>org.antlr</groupId>
-			<artifactId>antlr-runtime</artifactId>
-			<version>3.5</version>
-			<scope>compile</scope>
-		</dependency>
-		<dependency>
-			<groupId>com.google.guava</groupId>
-			<artifactId>guava</artifactId>
-			<version>15.0</version>
-		</dependency>
-		<dependency>
-			<groupId>com.fasterxml.jackson.core</groupId>
-			<artifactId>jackson-core</artifactId>
-			<version>2.3.3</version>
-		</dependency>
-		<dependency>
-			<groupId>com.fasterxml.jackson.core</groupId>
-			<artifactId>jackson-annotations</artifactId>
-			<version>2.3.3</version>
-		</dependency>
-		<dependency>
-			<groupId>com.fasterxml.jackson.core</groupId>
-			<artifactId>jackson-databind</artifactId>
-			<version>2.3.3</version>
-		</dependency>
-		<!-- dependency> <groupId>KorAP-modules</groupId> <artifactId>KorAP-PoliqarpParser</artifactId> 
-			<version>0.1</version> </dependency> <dependency> <groupId>KorAP-modules</groupId> 
-			<artifactId>KorAP-Cosmas2Parser</artifactId> <version>0.02</version> </dependency> 
-			<dependency> <groupId>KorAP-modules</groupId> <artifactId>KorAP-AnnisParser</artifactId> 
-			<version>0.01</version> </dependency -->
-		<dependency>
-			<groupId>junit</groupId>
-			<artifactId>junit</artifactId>
-			<version>4.11</version>
-			<scope>test</scope>
-		</dependency>
-		<dependency>
-			<groupId>commons-lang</groupId>
-			<artifactId>commons-lang</artifactId>
-			<version>2.6</version>
-		</dependency>
-		<dependency>
-			<groupId>org.z3950.zing</groupId>
-			<artifactId>cql-java</artifactId>
-			<version>1.12</version>
-		</dependency>
-		<dependency>
-			<groupId>org.projectlombok</groupId>
-			<artifactId>lombok</artifactId>
-			<version>0.11.8</version>
-		</dependency>
-		<dependency>
-			<groupId>log4j</groupId>
-			<artifactId>log4j</artifactId>
-			<version>1.2.17</version>
-		</dependency>
-		<dependency>
-			<groupId>log4j</groupId>
-			<artifactId>apache-log4j-extras</artifactId>
-			<version>1.2.17</version>
-		</dependency>
-		<dependency>
-			<groupId>org.slf4j</groupId>
-			<artifactId>slf4j-api</artifactId>
-			<version>1.7.5</version>
-		</dependency>
-		<dependency>
-			<groupId>org.slf4j</groupId>
-			<artifactId>slf4j-log4j12</artifactId>
-			<version>1.7.5</version>
-		</dependency>
-	</dependencies>
-	<build>
-		<sourceDirectory>${basedir}/src/main/java</sourceDirectory>
-		<outputDirectory>${basedir}/target/classes</outputDirectory>
-		<plugins>
-			<!-- Formatter plugin for Eclipse based coding conventions http://maven-java-formatter-plugin.googlecode.com/svn/site/0.4/usage.html -->
-			<plugin>
-				<groupId>com.googlecode.maven-java-formatter-plugin</groupId>
-				<artifactId>maven-java-formatter-plugin</artifactId>
-				<version>0.4</version>
-				<configuration>
-					<configFile>${project.basedir}/korap-style.xml</configFile>
-					<overrideConfigCompilerVersion>true</overrideConfigCompilerVersion>
-					<compilerSource>1.7</compilerSource>
-					<compilerCompliance>1.7</compilerCompliance>
-					<compilerTargetPlatform>1.7</compilerTargetPlatform>
-				</configuration>
-			</plugin>
-			<plugin>
-				<artifactId>maven-dependency-plugin</artifactId>
-				<executions>
-					<execution>
-						<phase>install</phase>
-						<goals>
-							<goal>copy-dependencies</goal>
-						</goals>
-						<configuration>
-							<outputDirectory>${project.build.directory}/../lib</outputDirectory>
-						</configuration>
-					</execution>
-				</executions>
-			</plugin>
-			<plugin>
-				<groupId>org.apache.maven.plugins</groupId>
-				<artifactId>maven-jar-plugin</artifactId>
-				<version>2.5</version>
-				<configuration>
-					<archive>
-						<manifest>
-							<addClasspath>true</addClasspath>
-							<classpathPrefix>../lib/</classpathPrefix>
-							<mainClass>de.ids_mannheim.korap.query.serialize.QuerySerializer</mainClass>
-						</manifest>
-					</archive>
-				</configuration>
-			</plugin>
-			<plugin>
-				<!-- This plugin will help to build the ANTLR4 grammar on the fly. The 
-					recipe is based on http://stackoverflow.com/questions/15310628/ customize-maven-to-automatically-create-antlr4-grammar-java-files-on-build -->
-				<groupId>org.antlr</groupId>
-				<artifactId>antlr4-maven-plugin</artifactId>
-				<version>4.1</version>
-				<executions>
-					<execution>
-						<id>poliqarpplus</id>
-						<goals>
-							<goal>antlr4</goal>
-						</goals>
-						<configuration>
-							<sourceDirectory>${basedir}/src/main/antlr/poliqarpplus</sourceDirectory>
-							<outputDirectory>${basedir}/src/main/java/de/ids_mannheim/korap/query/parse/poliqarpplus</outputDirectory>
-							<libDirectory>${basedir}/src/main/antlr/poliqarpplus</libDirectory>
-						</configuration>
-						<phase>generate-sources</phase>
-					</execution>
-					<execution>
-						<id>annis</id>
-						<goals>
-							<goal>antlr4</goal>
-						</goals>
-						<configuration>
-							<sourceDirectory>${basedir}/src/main/antlr/annis</sourceDirectory>
-							<outputDirectory>${basedir}/src/main/java/de/ids_mannheim/korap/query/parse/annis</outputDirectory>
-							<libDirectory>${basedir}/src/main/antlr/annis</libDirectory>
-						</configuration>
-						<phase>generate-sources</phase>
-					</execution>
-					<execution>
-						<id>collection</id>
-						<goals>
-							<goal>antlr4</goal>
-						</goals>
-						<configuration>
-							<sourceDirectory>${basedir}/src/main/antlr/collection</sourceDirectory>
-							<outputDirectory>${basedir}/src/main/java/de/ids_mannheim/korap/query/parse/collection</outputDirectory>
-							<libDirectory>${basedir}/src/main/antlr/collection</libDirectory>
-						</configuration>
-						<phase>generate-sources</phase>
-					</execution>
-				</executions>
-			</plugin>
-			<plugin>
-				<!-- This plugin will help to build the ANTLR3 grammar on the fly. The 
-					recipe is based on http://stackoverflow.com/questions/15310628/ customize-maven-to-automatically-create-antlr4-grammar-java-files-on-build -->
-				<groupId>org.antlr</groupId>
-				<artifactId>antlr3-maven-plugin</artifactId>
-				<version>3.5.1</version>
-				<configuration>
-					<sourceDirectory>${basedir}/src/main/antlr/cosmas</sourceDirectory>
-					<outputDirectory>${basedir}/src/main/java/de/ids_mannheim/korap/query/parse/cosmas</outputDirectory>
-					<libDirectory>${basedir}/src/main/antlr</libDirectory>
-				</configuration>
-
-				<executions>
-					<execution>
-						<goals>
-							<goal>antlr</goal>
-						</goals>
-						<phase>generate-sources</phase>
-					</execution>
-				</executions>
-
-			</plugin>
-			<plugin>
-				<artifactId>maven-compiler-plugin</artifactId>
-				<version>2.3.2</version>
-				<configuration>
-					<source>1.7</source>
-					<target>1.7</target>
-					<!-- excludes> <exclude>**/CosmasTree.java</exclude> </excludes -->
-				</configuration>
-			</plugin>
-		</plugins>
-	</build>
+  <groupId>KorAP-modules</groupId>
+  <artifactId>Koral</artifactId>
+  <version>0.2</version>
+  <packaging>jar</packaging>
+  <name>Koral</name>
+  <url>http://maven.apache.org</url>
+  <repositories>
+    <repository>
+      <id>id-maven-repo</id>
+      <url>http://maven.indexdata.com</url>
+    </repository>
+  </repositories>
+  <dependencies>
+    <dependency>
+      <groupId>org.antlr</groupId>
+      <artifactId>antlr4-runtime</artifactId>
+      <version>4.1</version>
+    </dependency>
+    <dependency>
+      <groupId>org.antlr</groupId>
+      <artifactId>antlr4-maven-plugin</artifactId>
+      <version>4.1</version>
+    </dependency>
+    <dependency>
+      <groupId>org.antlr</groupId>
+      <artifactId>antlr-runtime</artifactId>
+      <version>3.5</version>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>com.google.guava</groupId>
+      <artifactId>guava</artifactId>
+      <version>15.0</version>
+    </dependency>
+    <dependency>
+      <groupId>com.fasterxml.jackson.core</groupId>
+      <artifactId>jackson-core</artifactId>
+      <version>2.3.3</version>
+    </dependency>
+    <dependency>
+      <groupId>com.fasterxml.jackson.core</groupId>
+      <artifactId>jackson-annotations</artifactId>
+      <version>2.3.3</version>
+    </dependency>
+    <dependency>
+      <groupId>com.fasterxml.jackson.core</groupId>
+      <artifactId>jackson-databind</artifactId>
+      <version>2.3.3</version>
+    </dependency>
+    <dependency>
+      <groupId>junit</groupId>
+      <artifactId>junit</artifactId>
+      <version>4.11</version>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>commons-lang</groupId>
+      <artifactId>commons-lang</artifactId>
+      <version>2.6</version>
+    </dependency>
+    <dependency>
+      <groupId>org.z3950.zing</groupId>
+      <artifactId>cql-java</artifactId>
+      <version>1.12</version>
+    </dependency>
+    <dependency>
+      <groupId>org.projectlombok</groupId>
+      <artifactId>lombok</artifactId>
+      <version>0.11.8</version>
+    </dependency>
+    <dependency>
+      <groupId>log4j</groupId>
+      <artifactId>log4j</artifactId>
+      <version>1.2.17</version>
+    </dependency>
+    <dependency>
+      <groupId>log4j</groupId>
+      <artifactId>apache-log4j-extras</artifactId>
+      <version>1.2.17</version>
+    </dependency>
+    <dependency>
+      <groupId>org.slf4j</groupId>
+      <artifactId>slf4j-api</artifactId>
+      <version>1.7.5</version>
+    </dependency>
+    <dependency>
+      <groupId>org.slf4j</groupId>
+      <artifactId>slf4j-log4j12</artifactId>
+      <version>1.7.5</version>
+    </dependency>
+  </dependencies>
+  <build>
+    <sourceDirectory>${basedir}/src/main/java</sourceDirectory>
+    <outputDirectory>${basedir}/target/classes</outputDirectory>
+    <plugins>
+      <!--
+	  Formatter plugin for Eclipse based coding conventions
+	  http://maven-java-formatter-plugin.googlecode.com/svn/site/0.4/usage.html
+      -->
+      <plugin>
+	<groupId>com.googlecode.maven-java-formatter-plugin</groupId>
+	<artifactId>maven-java-formatter-plugin</artifactId>
+	<version>0.4</version>
+	<configuration>
+	  <configFile>${project.basedir}/Format.xml</configFile>
+	  <overrideConfigCompilerVersion>true</overrideConfigCompilerVersion>
+	  <compilerSource>1.7</compilerSource>
+	  <compilerCompliance>1.7</compilerCompliance>
+	  <compilerTargetPlatform>1.7</compilerTargetPlatform>
+	</configuration>
+      </plugin>
+      <plugin>
+	<artifactId>maven-dependency-plugin</artifactId>
+	<executions>
+	  <execution>
+	    <phase>install</phase>
+	    <goals>
+	      <goal>copy-dependencies</goal>
+	    </goals>
+	    <configuration>
+	      <outputDirectory>${project.build.directory}/../lib</outputDirectory>
+	    </configuration>
+	  </execution>
+	</executions>
+      </plugin>
+      <plugin>
+	<groupId>org.apache.maven.plugins</groupId>
+	<artifactId>maven-jar-plugin</artifactId>
+	<version>2.5</version>
+	<configuration>
+	  <archive>
+	    <manifest>
+	      <addClasspath>true</addClasspath>
+	      <classpathPrefix>../lib/</classpathPrefix>
+	      <mainClass>de.ids_mannheim.korap.query.serialize.QuerySerializer</mainClass>
+	    </manifest>
+	  </archive>
+	</configuration>
+      </plugin>
+      <plugin>
+	<!-- This plugin will help to build the ANTLR4 grammar on the fly. The 
+	     recipe is based on http://stackoverflow.com/questions/15310628/ customize-maven-to-automatically-create-antlr4-grammar-java-files-on-build -->
+	<groupId>org.antlr</groupId>
+	<artifactId>antlr4-maven-plugin</artifactId>
+	<version>4.1</version>
+	<executions>
+	  <execution>
+	    <id>poliqarpplus</id>
+	    <goals>
+	      <goal>antlr4</goal>
+	    </goals>
+	    <configuration>
+	      <sourceDirectory>${basedir}/src/main/antlr/poliqarpplus</sourceDirectory>
+	      <outputDirectory>${basedir}/src/main/java/de/ids_mannheim/korap/query/parse/poliqarpplus</outputDirectory>
+	      <libDirectory>${basedir}/src/main/antlr/poliqarpplus</libDirectory>
+	    </configuration>
+	    <phase>generate-sources</phase>
+	  </execution>
+	  <execution>
+	    <id>annis</id>
+	    <goals>
+	      <goal>antlr4</goal>
+	    </goals>
+	    <configuration>
+	      <sourceDirectory>${basedir}/src/main/antlr/annis</sourceDirectory>
+	      <outputDirectory>${basedir}/src/main/java/de/ids_mannheim/korap/query/parse/annis</outputDirectory>
+	      <libDirectory>${basedir}/src/main/antlr/annis</libDirectory>
+	    </configuration>
+	    <phase>generate-sources</phase>
+	  </execution>
+	  <execution>
+	    <id>collection</id>
+	    <goals>
+	      <goal>antlr4</goal>
+	    </goals>
+	    <configuration>
+	      <sourceDirectory>${basedir}/src/main/antlr/collection</sourceDirectory>
+	      <outputDirectory>${basedir}/src/main/java/de/ids_mannheim/korap/query/parse/collection</outputDirectory>
+	      <libDirectory>${basedir}/src/main/antlr/collection</libDirectory>
+	    </configuration>
+	    <phase>generate-sources</phase>
+	  </execution>
+	</executions>
+      </plugin>
+      <plugin>
+	<!-- This plugin will help to build the ANTLR3 grammar on the fly. The 
+	     recipe is based on http://stackoverflow.com/questions/15310628/ customize-maven-to-automatically-create-antlr4-grammar-java-files-on-build -->
+	<groupId>org.antlr</groupId>
+	<artifactId>antlr3-maven-plugin</artifactId>
+	<version>3.5.1</version>
+	<configuration>
+	  <sourceDirectory>${basedir}/src/main/antlr/cosmas</sourceDirectory>
+	  <outputDirectory>${basedir}/src/main/java/de/ids_mannheim/korap/query/parse/cosmas</outputDirectory>
+	  <libDirectory>${basedir}/src/main/antlr</libDirectory>
+	</configuration>
+	
+	<executions>
+	  <execution>
+	    <goals>
+	      <goal>antlr</goal>
+	    </goals>
+	    <phase>generate-sources</phase>
+	  </execution>
+	</executions>
+	
+      </plugin>
+      <plugin>
+	<artifactId>maven-compiler-plugin</artifactId>
+	<version>2.3.2</version>
+	<configuration>
+	  <source>1.7</source>
+	  <target>1.7</target>
+	  <!-- excludes> <exclude>**/CosmasTree.java</exclude> </excludes -->
+	</configuration>
+      </plugin>
+    </plugins>
+  </build>
 </project>
diff --git a/src/main/java/de/ids_mannheim/korap/query/parse/cosmas/IErrorReporter.java b/src/main/java/de/ids_mannheim/korap/query/parse/cosmas/IErrorReporter.java
index 9f92c7b..a209299 100644
--- a/src/main/java/de/ids_mannheim/korap/query/parse/cosmas/IErrorReporter.java
+++ b/src/main/java/de/ids_mannheim/korap/query/parse/cosmas/IErrorReporter.java
@@ -1,5 +1,5 @@
 package de.ids_mannheim.korap.query.parse.cosmas;
 
 public interface IErrorReporter {
-	void reportError(String error);
+    void reportError (String error);
 }
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 593988d..7ba505c 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
@@ -11,22 +11,19 @@
 
 {
 
- public static String strip(String input)
- 	{
-	if( input.startsWith("MORPH(") )
-		{
-		input = input.substring(6,input.length()-1);
-		}
+    public static String strip (String input) {
+        if (input.startsWith("MORPH(")) {
+            input = input.substring(6, input.length() - 1);
+        }
 
-	return input;
-	}
+        return input;
+    }
 
- /*
-  * main: testprogram:
-  */
 
- public static void main(String args[]) throws Exception 
-  {
-  } // main
+    /*
+     * main: testprogram:
+     */
 
-} 
+    public static void main (String args[]) throws Exception {} // main
+
+}
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 713c289..fb9df4e 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
@@ -9,91 +9,74 @@
 
 {
 
- public static Tree check(String input, int index)
- 	{
-	ANTLRStringStream
-		ss = new ANTLRStringStream(input);
-	c2ps_opBEDLexer
-		lex = new c2ps_opBEDLexer(ss);
-	CommonTokenStream tokens = 
-  		new CommonTokenStream(lex);
-	c2ps_opBEDParser 
-		g = new c2ps_opBEDParser(tokens);
-	c2ps_opBEDParser.opBEDOpts_return
-		c2PQReturn = null;
+    public static Tree check (String input, int index) {
+        ANTLRStringStream ss = new ANTLRStringStream(input);
+        c2ps_opBEDLexer lex = new c2ps_opBEDLexer(ss);
+        CommonTokenStream tokens = new CommonTokenStream(lex);
+        c2ps_opBEDParser g = new c2ps_opBEDParser(tokens);
+        c2ps_opBEDParser.opBEDOpts_return c2PQReturn = null;
 
-  /*
-  System.out.println("check opBED: " + index + ": " + input);
-  System.out.flush();
-  */
+        /*
+        System.out.println("check opBED: " + index + ": " + input);
+        System.out.flush();
+        */
 
-	try 
-		{
-		c2PQReturn = g.opBEDOpts();
-		}
-	catch (RecognitionException e) 
-		{
-		e.printStackTrace();
-		}
+        try {
+            c2PQReturn = g.opBEDOpts();
+        }
+        catch (RecognitionException e) {
+            e.printStackTrace();
+        }
 
-	// AST Tree anzeigen:
-	Tree tree = (Tree)c2PQReturn.getTree();
-	//System.out.println("#BED Opts: " + tree.toStringTree() );
+        // AST Tree anzeigen:
+        Tree tree = (Tree) c2PQReturn.getTree();
+        //System.out.println("#BED Opts: " + tree.toStringTree() );
 
-	return tree;
-	}
+        return tree;
+    }
 
- /*
-  * check Text Position starting at rule textpos.
-  */
 
- public static Tree checkTPos(String input, int index)
- 	{
-	ANTLRStringStream
-		ss = new ANTLRStringStream(input);
-	c2ps_opBEDLexer
-		lex = new c2ps_opBEDLexer(ss);
-	CommonTokenStream tokens = 
-  		new CommonTokenStream(lex);
-	c2ps_opBEDParser 
-		g = new c2ps_opBEDParser(tokens);
-	c2ps_opBEDParser.textpos_return
-		c2PQReturn = null;
+    /*
+     * check Text Position starting at rule textpos.
+     */
 
-  /*
-  System.out.println("check opBED: " + index + ": " + input);
-  System.out.flush();
-  */
+    public static Tree checkTPos (String input, int index) {
+        ANTLRStringStream ss = new ANTLRStringStream(input);
+        c2ps_opBEDLexer lex = new c2ps_opBEDLexer(ss);
+        CommonTokenStream tokens = new CommonTokenStream(lex);
+        c2ps_opBEDParser g = new c2ps_opBEDParser(tokens);
+        c2ps_opBEDParser.textpos_return c2PQReturn = null;
 
-	try 
-		{
-		c2PQReturn = g.textpos();
-		}
-	catch (RecognitionException e) 
-		{
-		e.printStackTrace();
-		}
+        /*
+        System.out.println("check opBED: " + index + ": " + input);
+        System.out.flush();
+        */
 
-	// AST Tree anzeigen:
-	Tree tree = (Tree)c2PQReturn.getTree();
-	// System.out.println("#BED Opts: " + tree.toStringTree() );
+        try {
+            c2PQReturn = g.textpos();
+        }
+        catch (RecognitionException e) {
+            e.printStackTrace();
+        }
 
-	return tree;
-	}
+        // AST Tree anzeigen:
+        Tree tree = (Tree) c2PQReturn.getTree();
+        // System.out.println("#BED Opts: " + tree.toStringTree() );
 
- public static void main(String args[]) throws Exception 
-  {
-   String[]
-		input = {",sa,se,-ta,-te/pa,-pe)", ",sa)", ",/pa,-pe)"};  
-	Tree
-		tree;
+        return tree;
+    }
 
-	for(int i=0; i<input.length; i++)
-		{
-		tree = check(input[i], 0);
-		System.out.println("Parsing input: " + input[i] + ": " + tree.toStringTree());
-		}
 
-  } // main
+    public static void main (String args[]) throws Exception {
+        String[] input = { ",sa,se,-ta,-te/pa,-pe)", ",sa)", ",/pa,-pe)" };
+        Tree tree;
 
-} 
+        for (int i = 0; i < input.length; i++) {
+            tree = check(input[i], 0);
+            System.out.println("Parsing input: " + input[i] + ": "
+                    + tree.toStringTree());
+        }
+
+    } // main
+
+}
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 2e0c55c..129ba49 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
@@ -9,69 +9,55 @@
 
 {
 
- /* Method check():
-  * input: e.g. #ELEM(S), #ELEM(W ANA='DET ADJ'),
-  *             #ELEM(ANA <> 'V sg' TYP !=VP), etc.
-  */
- public static Tree check(String input, int index)
- 	{
-	ANTLRStringStream
-		ss = new ANTLRStringStream(input);
-	c2ps_opELEMLexer
-		lex = new c2ps_opELEMLexer(ss);
-	CommonTokenStream tokens = 
-  		new CommonTokenStream(lex);
-	c2ps_opELEMParser 
-		g = new c2ps_opELEMParser(tokens);
-	c2ps_opELEMParser.opELEM_return
-		c2PQReturn = null;
+    /* Method check():
+     * input: e.g. #ELEM(S), #ELEM(W ANA='DET ADJ'),
+     *             #ELEM(ANA <> 'V sg' TYP !=VP), etc.
+     */
+    public static Tree check (String input, int index) {
+        ANTLRStringStream ss = new ANTLRStringStream(input);
+        c2ps_opELEMLexer lex = new c2ps_opELEMLexer(ss);
+        CommonTokenStream tokens = new CommonTokenStream(lex);
+        c2ps_opELEMParser g = new c2ps_opELEMParser(tokens);
+        c2ps_opELEMParser.opELEM_return c2PQReturn = null;
 
-  /*
-  System.out.println("check opELEM: " + index + ": " + "'" + input + "'");
-  System.out.flush();
-   */
+        /*
+        System.out.println("check opELEM: " + index + ": " + "'" + input + "'");
+        System.out.flush();
+         */
 
-	try 
-		{
-		c2PQReturn = g.opELEM();
-		}
-	catch (RecognitionException e) 
-		{
-		e.printStackTrace();
-		}
+        try {
+            c2PQReturn = g.opELEM();
+        }
+        catch (RecognitionException e) {
+            e.printStackTrace();
+        }
 
-	// AST Tree anzeigen:
-	Tree tree = (Tree)c2PQReturn.getTree();
-	//System.out.println("#ELEM Opts: " + tree.toStringTree() );
+        // AST Tree anzeigen:
+        Tree tree = (Tree) c2PQReturn.getTree();
+        //System.out.println("#ELEM Opts: " + tree.toStringTree() );
 
-	return tree;
-	}
+        return tree;
+    }
 
 
- /*
-  * main - Testprogramm for #ELEM(...)
-  */
+    /*
+     * main - Testprogramm for #ELEM(...)
+     */
 
- public static void main(String args[]) throws Exception 
-  {
-   String[]
-		input = {"#ELEM()", 
-					"#ELEM(   )", 
-					"#ELEM(S)", 
-					"#ELEM(W ANA='DET ADV')", 
-					"#ELEM( TITLE TYPE!=Unterüberschrift )",
-					"#ELEM(v='a b c' w!='d e f' x=y )",
-					"#ELEM(flexion='l\\'été' lemma='été')"};  
-	Tree
-		tree;
+    public static void main (String args[]) throws Exception {
+        String[] input = { "#ELEM()", "#ELEM(   )", "#ELEM(S)",
+                "#ELEM(W ANA='DET ADV')",
+                "#ELEM( TITLE TYPE!=Unterüberschrift )",
+                "#ELEM(v='a b c' w!='d e f' x=y )",
+                "#ELEM(flexion='l\\'été' lemma='été')" };
+        Tree tree;
 
-	for(int i=0; i<input.length; i++)
-		{
-		System.out.println("#ELEM input: " + input[i]);
-		tree = check(input[i], 0);
-		System.out.println("#ELEM AST  : " + tree.toStringTree());
-		}
+        for (int i = 0; i < input.length; i++) {
+            System.out.println("#ELEM input: " + input[i]);
+            tree = check(input[i], 0);
+            System.out.println("#ELEM AST  : " + tree.toStringTree());
+        }
 
-  } // main
+    } // main
 
-} 
+}
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 53f6429..859c68b 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
@@ -21,61 +21,50 @@
 
 {
 
- public static Tree check(String input, int index)
- 	{
-	ANTLRStringStream
-		ss = new ANTLRStringStream(input);
-	c2ps_opINLexer
-		lex = new c2ps_opINLexer(ss);
-	CommonTokenStream tokens = 
-  		new CommonTokenStream(lex);
-	c2ps_opINParser 
-		g = new c2ps_opINParser(tokens);
-	c2ps_opINParser.opIN_return
-		c2PQReturn = null;
+    public static Tree check (String input, int index) {
+        ANTLRStringStream ss = new ANTLRStringStream(input);
+        c2ps_opINLexer lex = new c2ps_opINLexer(ss);
+        CommonTokenStream tokens = new CommonTokenStream(lex);
+        c2ps_opINParser g = new c2ps_opINParser(tokens);
+        c2ps_opINParser.opIN_return c2PQReturn = null;
 
-  /*
-  System.out.println("check opIN:" + index + ": " + input);
-  System.out.flush();
-  */
+        /*
+        System.out.println("check opIN:" + index + ": " + input);
+        System.out.flush();
+        */
 
-	try 
-		{
-		c2PQReturn = g.opIN();
-		}
-	catch (RecognitionException e) 
-		{
-		e.printStackTrace();
-		}
+        try {
+            c2PQReturn = g.opIN();
+        }
+        catch (RecognitionException e) {
+            e.printStackTrace();
+        }
 
-	// AST Tree anzeigen:
-	Tree tree = (Tree)c2PQReturn.getTree();
-	// System.out.println("opIN: " + tree.toStringTree() );
+        // AST Tree anzeigen:
+        Tree tree = (Tree) c2PQReturn.getTree();
+        // System.out.println("opIN: " + tree.toStringTree() );
 
-	return tree;
-	}
+        return tree;
+    }
 
- /*
-  * main: testprogram:
-  */
 
- public static void main(String args[]) throws Exception 
-  {
-   String[]
-		input = {"#IN", "#IN()", "#IN(L)", "#IN(FE,min)", "#IN(R,%,max)", "#IN(FI,ALL)", 
-					"#IN(FE,ALL,%,MIN)"};  
-	Tree
-		tree;
+    /*
+     * main: testprogram:
+     */
 
-	System.out.println("Tests von #IN-Optionen:\n");
+    public static void main (String args[]) throws Exception {
+        String[] input = { "#IN", "#IN()", "#IN(L)", "#IN(FE,min)",
+                "#IN(R,%,max)", "#IN(FI,ALL)", "#IN(FE,ALL,%,MIN)" };
+        Tree tree;
 
-	for(int i=0; i<input.length; i++)
-		{
-		tree = check(input[i], 0);
-		System.out.println("#IN: input: " + input[i]);
-		System.out.println("#IN: AST  : " + tree.toStringTree() + "\n");
-		}
+        System.out.println("Tests von #IN-Optionen:\n");
 
-  } // main
+        for (int i = 0; i < input.length; i++) {
+            tree = check(input[i], 0);
+            System.out.println("#IN: input: " + input[i]);
+            System.out.println("#IN: AST  : " + tree.toStringTree() + "\n");
+        }
 
-} 
+    } // main
+
+}
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 27cd9de..6526935 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
@@ -20,61 +20,50 @@
 
 {
 
- public static Tree check(String input, int index)
- 	{
-	ANTLRStringStream
-		ss = new ANTLRStringStream(input);
-	c2ps_opOVLexer
-		lex = new c2ps_opOVLexer(ss);
-	CommonTokenStream tokens = 
-  		new CommonTokenStream(lex);
-	c2ps_opOVParser 
-		g = new c2ps_opOVParser(tokens);
-	c2ps_opOVParser.opOV_return
-		c2PQReturn = null;
+    public static Tree check (String input, int index) {
+        ANTLRStringStream ss = new ANTLRStringStream(input);
+        c2ps_opOVLexer lex = new c2ps_opOVLexer(ss);
+        CommonTokenStream tokens = new CommonTokenStream(lex);
+        c2ps_opOVParser g = new c2ps_opOVParser(tokens);
+        c2ps_opOVParser.opOV_return c2PQReturn = null;
 
-	try 
-		{
-		c2PQReturn = g.opOV();
-		}
-	catch (RecognitionException e) 
-		{
-		e.printStackTrace();
-		}
+        try {
+            c2PQReturn = g.opOV();
+        }
+        catch (RecognitionException e) {
+            e.printStackTrace();
+        }
 
-	// AST Tree anzeigen:
-	Tree tree = (Tree)c2PQReturn.getTree();
-	// System.out.println("opOV: " + tree.toStringTree() );
+        // AST Tree anzeigen:
+        Tree tree = (Tree) c2PQReturn.getTree();
+        // System.out.println("opOV: " + tree.toStringTree() );
 
-	return tree;
-	}
+        return tree;
+    }
 
- /*
-  * main: testprogram:
-  */
 
- // TODOO: input "OV()" führt zu unendlichem loop... 19.12.12/FB
- // TODOO: input "#OV(FI,ALL)" -> loop, weil ALL nicht bekannter Token...
+    /*
+     * main: testprogram:
+     */
 
- public static void main(String args[]) throws Exception 
-  {
-   String[]
-		input = {"#OV", "#OV()", "#OV(L)", "#OV(FE,min)", "#OV(R,% , max)"};  
-	Tree
-		tree;
+    // TODOO: input "OV()" führt zu unendlichem loop... 19.12.12/FB
+    // TODOO: input "#OV(FI,ALL)" -> loop, weil ALL nicht bekannter Token...
 
-	System.out.println("Tests von #OV-Optionen:\n");
+    public static void main (String args[]) throws Exception {
+        String[] input = { "#OV", "#OV()", "#OV(L)", "#OV(FE,min)",
+                "#OV(R,% , max)" };
+        Tree tree;
 
-	for(int i=0; i<input.length; i++)
-		{
-		System.out.println("#OV: input: " + input[i]);
-		tree = check(input[i], 0);
-		System.out.println("#OV: AST  : " + tree.toStringTree() + "\n");
-		}
+        System.out.println("Tests von #OV-Optionen:\n");
 
-	System.out.println("Tests von #OV-Optionen: quit.\n");
-	System.out.flush();
-  } // main
+        for (int i = 0; i < input.length; i++) {
+            System.out.println("#OV: input: " + input[i]);
+            tree = check(input[i], 0);
+            System.out.println("#OV: AST  : " + tree.toStringTree() + "\n");
+        }
 
-} 
+        System.out.println("Tests von #OV-Optionen: quit.\n");
+        System.out.flush();
+    } // main
 
+}
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 12d8fa4..2a5b163 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
@@ -11,67 +11,56 @@
 
 {
 
- public static Tree check(String input, int index)
- 	{
-	ANTLRStringStream
-		ss = new ANTLRStringStream(input);
-	c2ps_opPROXLexer
-		lex = new c2ps_opPROXLexer(ss);
-	CommonTokenStream tokens = 
-  		new CommonTokenStream(lex);
-	c2ps_opPROXParser 
-		g = new c2ps_opPROXParser(tokens);
-	c2ps_opPROXParser.opPROX_return
-		c2PQReturn = null;
+    public static Tree check (String input, int index) {
+        ANTLRStringStream ss = new ANTLRStringStream(input);
+        c2ps_opPROXLexer lex = new c2ps_opPROXLexer(ss);
+        CommonTokenStream tokens = new CommonTokenStream(lex);
+        c2ps_opPROXParser g = new c2ps_opPROXParser(tokens);
+        c2ps_opPROXParser.opPROX_return c2PQReturn = null;
 
-  /*
-  System.out.println("check opPROX:" + index + ": " + input);
-  System.out.flush();
-   */
+        /*
+        System.out.println("check opPROX:" + index + ": " + input);
+        System.out.flush();
+         */
 
-	try 
-		{
-		c2PQReturn = g.opPROX();
-		}
-	catch (RecognitionException e) 
-		{
-		e.printStackTrace();
-		}
+        try {
+            c2PQReturn = g.opPROX();
+        }
+        catch (RecognitionException e) {
+            e.printStackTrace();
+        }
 
-	// AST Tree anzeigen:
-	Tree tree = (Tree)c2PQReturn.getTree();
-	//System.out.println("PROX: " + tree.toStringTree() );
+        // AST Tree anzeigen:
+        Tree tree = (Tree) c2PQReturn.getTree();
+        //System.out.println("PROX: " + tree.toStringTree() );
 
-	return tree;
-	}
+        return tree;
+    }
 
- /*
-  * main testprogram:
-  */
 
- public static void main(String args[]) throws Exception 
-  {
-   String[]
-		input = {"/w1:3", "%w5", "/+w3,s0,max"};  
-	Tree
-		tree;
+    /*
+     * main testprogram:
+     */
 
-	System.out.println("Tests von PROX-Optionen:\n");
+    public static void main (String args[]) throws Exception {
+        String[] input = { "/w1:3", "%w5", "/+w3,s0,max" };
+        Tree tree;
 
-	for(int i=0; i<input.length; i++)
-		{
-		tree = check(input[i], 0);
-		System.out.println("PROX: input: " + input[i]);
-		System.out.println("PROX: AST  : " + tree.toStringTree() + "\n");
-		
-		// Visualize AST Tree:
-		/*
-		DOTTreeGenerator gen = new DOTTreeGenerator();
-		StringTemplate st = gen.toDOT(tree);
-		System.out.println("DOTTREE: " + st);
-		*/
-		}
+        System.out.println("Tests von PROX-Optionen:\n");
 
-  } // main
+        for (int i = 0; i < input.length; i++) {
+            tree = check(input[i], 0);
+            System.out.println("PROX: input: " + input[i]);
+            System.out.println("PROX: AST  : " + tree.toStringTree() + "\n");
 
-} 
+            // Visualize AST Tree:
+            /*
+            DOTTreeGenerator gen = new DOTTreeGenerator();
+            StringTemplate st = gen.toDOT(tree);
+            System.out.println("DOTTREE: " + st);
+            */
+        }
+
+    } // main
+
+}
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 7cdac48..f107d41 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
@@ -11,114 +11,103 @@
 public class c2ps_opWF
 
 {
- /* Arguments:
-  * bStrip: true: 'input' contains "wort" -> strip " away -> wort.
-  *        false: 'input' contains no " -> nothing to strip.
-  * bLem: true: input contains a Lemma; generates tree ^(OPLEM...).
-  *       false: input contains a Wordform; generates tree ^(OPWF...).
-  * input: may be a single Lemma or Wform or a list of Wforms.
-  */
+    /* Arguments:
+     * bStrip: true: 'input' contains "wort" -> strip " away -> wort.
+     *        false: 'input' contains no " -> nothing to strip.
+     * bLem: true: input contains a Lemma; generates tree ^(OPLEM...).
+     *       false: input contains a Wordform; generates tree ^(OPWF...).
+     * input: may be a single Lemma or Wform or a list of Wforms.
+     */
 
- public static Tree check(String input, boolean bStrip, boolean bLem, int index)
- 	{
-	if( bStrip )
-		input = input.substring(1, input.length()-1);
+    public static Tree check (String input, boolean bStrip, boolean bLem,
+            int index) {
+        if (bStrip)
+            input = input.substring(1, input.length() - 1);
 
-	if( bLem && input.charAt(0) == '&' )
-		{
-		input = input.substring(1, input.length());
-		//System.out.println("Lemma: strip '&' -> " + input);
-		}
+        if (bLem && input.charAt(0) == '&') {
+            input = input.substring(1, input.length());
+            //System.out.println("Lemma: strip '&' -> " + input);
+        }
 
-	ANTLRStringStream
-		ss = new ANTLRStringStream(input);
-	c2ps_opWFLexer
-		lex = new c2ps_opWFLexer(ss);
-	CommonTokenStream tokens = 
-  		new CommonTokenStream(lex);
-	c2ps_opWFParser 
-		g = new c2ps_opWFParser(tokens);
-	c2ps_opWFParser.searchWFs_return
-		c2PQWFReturn = null;
-	c2ps_opWFParser.searchLEM_return
-		c2PQLEMReturn = null;
+        ANTLRStringStream ss = new ANTLRStringStream(input);
+        c2ps_opWFLexer lex = new c2ps_opWFLexer(ss);
+        CommonTokenStream tokens = new CommonTokenStream(lex);
+        c2ps_opWFParser g = new c2ps_opWFParser(tokens);
+        c2ps_opWFParser.searchWFs_return c2PQWFReturn = null;
+        c2ps_opWFParser.searchLEM_return c2PQLEMReturn = null;
 
-  /*
-  System.out.println("check opWF:" + index + ": " + input);
-  System.out.flush();
-  */
-  
-	try 
-		{
-		if( bLem )
-			c2PQLEMReturn = g.searchLEM();
-		else
-			c2PQWFReturn = g.searchWFs();
-		}
-	catch (RecognitionException e) 
-		{
-		e.printStackTrace();
-		}
+        /*
+        System.out.println("check opWF:" + index + ": " + input);
+        System.out.flush();
+        */
 
-	// AST Tree anzeigen:
-	Tree tree = bLem ? (Tree)c2PQLEMReturn.getTree() : (Tree)c2PQWFReturn.getTree();
-	// System.out.println(bLem? "opLEM: " : "opWF: " + tree.toStringTree() );
+        try {
+            if (bLem)
+                c2PQLEMReturn = g.searchLEM();
+            else
+                c2PQWFReturn = g.searchWFs();
+        }
+        catch (RecognitionException e) {
+            e.printStackTrace();
+        }
 
-	return tree;
-	}
+        // AST Tree anzeigen:
+        Tree tree = bLem ? (Tree) c2PQLEMReturn.getTree() : (Tree) c2PQWFReturn
+                .getTree();
+        // System.out.println(bLem? "opLEM: " : "opWF: " + tree.toStringTree() );
 
-	/* Wordform Encoding, e.g. to insert a Wordform into an AST.
-	 * a) wf ->  "wf".
-	 * b) remove escape char before ':': abc\: -> abc:.
-	 * Returns a Tree.
-	 */
-	public static Tree encode(String wf, int tokenType)
+        return tree;
+    }
 
-	{
-	// b)
-   StringBuffer
-		sbWF = new StringBuffer(wf);
-	
-	for(int i=0; i<sbWF.length()-1; i++)
-		{
-		if( sbWF.charAt(i) == '\\' && sbWF.charAt(i+1) == ':' )
-			sbWF.deleteCharAt(i);
-		}
 
-	return new CommonTree(new CommonToken(tokenType, "\"" + sbWF.toString() + "\""));
-	}
+    /* Wordform Encoding, e.g. to insert a Wordform into an AST.
+     * a) wf ->  "wf".
+     * b) remove escape char before ':': abc\: -> abc:.
+     * Returns a Tree.
+     */
+    public static Tree encode (String wf, int tokenType)
 
- /*
-  * main testprogram:
-  */
+    {
+        // b)
+        StringBuffer sbWF = new StringBuffer(wf);
 
- public static void main(String args[]) throws Exception 
-  {
-   String[]
-		input = {":fi:Hendrix:sa", ":FiOlDs:été:sa", "&Gitarre", "&Gitarre:sa/-pe",
-					" \"Institut für \\:Deutsche\\: Sprache\" ",
-					":Fi:der:-sa Wilde:-se Western:/se" };
-	Tree
-		tree;
-	boolean
-		bLem;
+        for (int i = 0; i < sbWF.length() - 1; i++) {
+            if (sbWF.charAt(i) == '\\' && sbWF.charAt(i + 1) == ':')
+                sbWF.deleteCharAt(i);
+        }
 
-	System.out.println("Tests von WF und Lemma-Optionen:\n");
+        return new CommonTree(new CommonToken(tokenType, "\"" + sbWF.toString()
+                + "\""));
+    }
 
-	for(int i=0; i<input.length; i++)
-		{
-		bLem = input[i].charAt(0) == '&' ? true : false; 
 
-		System.out.println(bLem? "LEM: " : "WF: " + "input: " + input[i]);
+    /*
+     * main testprogram:
+     */
 
-		if( bLem )
-			tree = check(input[i], false, true, 0); // bStrip=false, bLem=true;
-		else
-			tree = check(input[i], false, false, 0); // bStrip=false, bLem=false.
-			
-		System.out.println(bLem? "LEM: " : "WF: " + "AST  : " + tree.toStringTree() + "\n");
-		}
+    public static void main (String args[]) throws Exception {
+        String[] input = { ":fi:Hendrix:sa", ":FiOlDs:été:sa", "&Gitarre",
+                "&Gitarre:sa/-pe", " \"Institut für \\:Deutsche\\: Sprache\" ",
+                ":Fi:der:-sa Wilde:-se Western:/se" };
+        Tree tree;
+        boolean bLem;
 
-  } // main
+        System.out.println("Tests von WF und Lemma-Optionen:\n");
 
-} 
+        for (int i = 0; i < input.length; i++) {
+            bLem = input[i].charAt(0) == '&' ? true : false;
+
+            System.out.println(bLem ? "LEM: " : "WF: " + "input: " + input[i]);
+
+            if (bLem)
+                tree = check(input[i], false, true, 0); // bStrip=false, bLem=true;
+            else
+                tree = check(input[i], false, false, 0); // bStrip=false, bLem=false.
+
+            System.out.println(bLem ? "LEM: " : "WF: " + "AST  : "
+                    + tree.toStringTree() + "\n");
+        }
+
+    } // main
+
+}
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 8a971d6..a2c5a3c 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
@@ -9,58 +9,48 @@
 
 {
 
- public static Tree check(String input, int index)
- 	{
-	ANTLRStringStream
-		ss = new ANTLRStringStream(input);
-	c2ps_optCaseLexer
-		lex = new c2ps_optCaseLexer(ss);
-	CommonTokenStream tokens = 
-  		new CommonTokenStream(lex);
-	c2ps_optCaseParser 
-		g = new c2ps_optCaseParser(tokens);
-	c2ps_optCaseParser.optCase_return
-		c2PQReturn = null;
+    public static Tree check (String input, int index) {
+        ANTLRStringStream ss = new ANTLRStringStream(input);
+        c2ps_optCaseLexer lex = new c2ps_optCaseLexer(ss);
+        CommonTokenStream tokens = new CommonTokenStream(lex);
+        c2ps_optCaseParser g = new c2ps_optCaseParser(tokens);
+        c2ps_optCaseParser.optCase_return c2PQReturn = null;
 
-  /*
-  System.out.println("check optCase: " + index + ": " + input);
-  System.out.flush();
-  */
+        /*
+        System.out.println("check optCase: " + index + ": " + input);
+        System.out.flush();
+        */
 
-	try 
-		{
-		c2PQReturn = g.optCase();
-		}
-	catch (RecognitionException e) 
-		{
-		e.printStackTrace();
-		}
+        try {
+            c2PQReturn = g.optCase();
+        }
+        catch (RecognitionException e) {
+            e.printStackTrace();
+        }
 
-	// AST Tree anzeigen:
-	Tree tree = (Tree)c2PQReturn.getTree();
-	//System.out.println("Case Opts: " + tree.toStringTree() );
+        // AST Tree anzeigen:
+        Tree tree = (Tree) c2PQReturn.getTree();
+        //System.out.println("Case Opts: " + tree.toStringTree() );
 
-	return tree;
-	}
+        return tree;
+    }
 
- /*
-  * Main Text programm.
-  *
-  */
 
- public static void main(String args[]) throws Exception 
-  {
-   String[]
-		input = {"Fi", "FiOsDi"};  
-	Tree
-		tree;
+    /*
+     * Main Text programm.
+     *
+     */
 
-	for(int i=0; i<input.length; i++)
-		{
-		tree = check(input[i], 0);
-		System.out.println("Parsing input: " + input[i] + ": " + tree.toStringTree());
-		}
+    public static void main (String args[]) throws Exception {
+        String[] input = { "Fi", "FiOsDi" };
+        Tree tree;
 
-  } // main
+        for (int i = 0; i < input.length; i++) {
+            tree = check(input[i], 0);
+            System.out.println("Parsing input: " + input[i] + ": "
+                    + tree.toStringTree());
+        }
 
-} 
+    } // main
+
+}
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 5c15114..60c2a51 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
@@ -11,11 +11,12 @@
 import org.slf4j.Logger;
 
 /**
- * This is an abstract class which provides fields and methods for concrete
- * query processor implementations. All of those must implement 
+ * This is an abstract class which provides fields and methods for
+ * concrete
+ * query processor implementations. All of those must implement
  * {@link #process(String)}, which is expected to process the query
  * and store a {@link #java.util.Map} representation of the KoralQuery
- * JSON-LD tree for that query. 
+ * JSON-LD tree for that query.
  * 
  * @author Joachim Bingel (bingel@ids-mannheim.de)
  * @version 0.3.0
@@ -25,14 +26,13 @@
 
     Logger log;
     /**
-     *  The query string.
+     * The query string.
      */
     String query;
     /**
      * Top-level map representing the whole request.
      */
-    LinkedHashMap<String, Object> requestMap = 
-            new LinkedHashMap<String, Object>();
+    LinkedHashMap<String, Object> requestMap = new LinkedHashMap<String, Object>();
     /**
      * Keeps track of open node categories.
      */
@@ -42,13 +42,14 @@
      */
     List<ParseTree> visited = new ArrayList<ParseTree>();
     /**
-     * Keeps track of active object, used for inserting new KoralQuery objects
+     * Keeps track of active object, used for inserting new KoralQuery
+     * objects
      * into last created objects.
      */
-    LinkedList<LinkedHashMap<String, Object>> objectStack = 
-            new LinkedList<LinkedHashMap<String, Object>>();
+    LinkedList<LinkedHashMap<String, Object>> objectStack = new LinkedList<LinkedHashMap<String, Object>>();
     /**
-     * Keeps track of how many objects there are to pop after every recursion
+     * Keeps track of how many objects there are to pop after every
+     * recursion
      * of {@link #processNode(ParseTree)}
      */
     LinkedList<Integer> objectsToPop = new LinkedList<Integer>();
@@ -58,11 +59,13 @@
     public static boolean verbose = false;
     protected Integer stackedObjects = 0;
     /**
-     * Contains error arrays, consisting of an error code and a message.
+     * Contains error arrays, consisting of an error code and a
+     * message.
      */
     private ArrayList<List<Object>> errors = new ArrayList<List<Object>>();
     /**
-     * Contains warning arrays, consisting of a warning code (optional) and a
+     * Contains warning arrays, consisting of a warning code
+     * (optional) and a
      * message.
      */
     private ArrayList<List<Object>> warnings = new ArrayList<List<Object>>();
@@ -73,24 +76,23 @@
     /**
      * Virtual collection queries.
      */
-    private LinkedHashMap<String, Object> collection = 
-            new LinkedHashMap<String,Object>();
+    private LinkedHashMap<String, Object> collection = new LinkedHashMap<String, Object>();
     /**
      * Holds information on displaying directives.
      */
-    private LinkedHashMap<String, Object> meta = 
-            new LinkedHashMap<String,Object>();
+    private LinkedHashMap<String, Object> meta = new LinkedHashMap<String, Object>();
     /**
      * Indicates which classes are to be highlighted in KWIC view.
      */
     private ArrayList<Integer> highlightClasses = new ArrayList<Integer>();
-    
+
     /**
      * Indicates positions of alignment rulers in KWIC view.
      */
     private ArrayList<List<Integer>> alignments = new ArrayList<List<Integer>>();
 
-    AbstractQueryProcessor() {
+
+    AbstractQueryProcessor () {
         requestMap.put("@context",
                 "http://korap.ids-mannheim.de/ns/koral/0.3/context.jsonld");
         requestMap.put("errors", errors);
@@ -101,92 +103,125 @@
         requestMap.put("meta", meta);
     }
 
+
     /**
-     * Called to process the query, is expected to generate a Map-based 
-     * KoralQuery representation in {@link #requestMap}. 
-     * @param query The query string.
+     * Called to process the query, is expected to generate a
+     * Map-based
+     * KoralQuery representation in {@link #requestMap}.
+     * 
+     * @param query
+     *            The query string.
      */
-    public abstract void process(String query);
+    public abstract void process (String query);
+
 
     /**
      * Adds a warning to {@link #warnings}.
-     * @param code The warning code.
-     * @param msg The warning message.
+     * 
+     * @param code
+     *            The warning code.
+     * @param msg
+     *            The warning message.
      */
-    public void addWarning(int code, String msg) {
-        List<Object> warning = Arrays.asList(new Object[]{code, msg}); 
+    public void addWarning (int code, String msg) {
+        List<Object> warning = Arrays.asList(new Object[] { code, msg });
         warnings.add(warning);
     }
 
+
     /**
      * Adds a warning to {@link #warnings}.
-     * @param msg The warning message.
+     * 
+     * @param msg
+     *            The warning message.
      */
-    public void addWarning(String msg) {
-        List<Object> warning = Arrays.asList(new Object[]{msg}); 
+    public void addWarning (String msg) {
+        List<Object> warning = Arrays.asList(new Object[] { msg });
         warnings.add(warning);
     }
 
-    /**
-     * Adds a generic message to {@link #messages}.
-     * @param code The message code.
-     * @param msg The message string.
-     */
-    public void addMessage(int code, String msg) {
-        List<Object> message = Arrays.asList(new Object[]{code, msg}); 
-        messages.add(message);
-    }
 
     /**
      * Adds a generic message to {@link #messages}.
-     * @param msg The message string.
+     * 
+     * @param code
+     *            The message code.
+     * @param msg
+     *            The message string.
      */
-    public void addMessage(String msg) {
-        List<Object> message = Arrays.asList(new Object[]{msg}); 
+    public void addMessage (int code, String msg) {
+        List<Object> message = Arrays.asList(new Object[] { code, msg });
         messages.add(message);
     }
 
+
+    /**
+     * Adds a generic message to {@link #messages}.
+     * 
+     * @param msg
+     *            The message string.
+     */
+    public void addMessage (String msg) {
+        List<Object> message = Arrays.asList(new Object[] { msg });
+        messages.add(message);
+    }
+
+
     /**
      * Adds an error to {@link #errors}.
-     * @param code The error code.
-     * @param msg The error message.
+     * 
+     * @param code
+     *            The error code.
+     * @param msg
+     *            The error message.
      */
-    public void addError(int code, String msg) {
-        List<Object> error = Arrays.asList(new Object[]{code, msg}); 
+    public void addError (int code, String msg) {
+        List<Object> error = Arrays.asList(new Object[] { code, msg });
         errors.add(error);
     }
 
+
     /**
      * Adds an error to {@link #errors}.
-     * @param fullErrorMsg First object is expected to be an integer
-     * error code, second a message.
+     * 
+     * @param fullErrorMsg
+     *            First object is expected to be an integer
+     *            error code, second a message.
      */
-    public void addError(List<Object> fullErrorMsg) {
+    public void addError (List<Object> fullErrorMsg) {
         errors.add(fullErrorMsg);
     }
 
+
     /**
      * Add a class to the list of classes highlighted in KWIC view.
-     * @param classId The class ID.
+     * 
+     * @param classId
+     *            The class ID.
      */
-    public void addHighlightClass(int classId) {
+    public void addHighlightClass (int classId) {
         highlightClasses.add(classId);
         meta.put("highlight", highlightClasses);
     }
-    
-    public void addAlignment(int leftClassId, int rightClassId) {
-        List<Integer> alignment = Arrays.asList(new Integer[]{leftClassId, rightClassId});
+
+
+    public void addAlignment (int leftClassId, int rightClassId) {
+        List<Integer> alignment = Arrays.asList(new Integer[] { leftClassId,
+                rightClassId });
         alignments.add(alignment);
         meta.put("alignment", alignments);
     }
 
+
     /**
      * Getter method for the {@link #requestMap}, which represents the
-     * entire KoralQuery request (query, displaying directives, virtual 
+     * entire KoralQuery request (query, displaying directives,
+     * virtual
      * collections, messages etc.) based on a Java Map.
+     * 
      * @return
      */
-    public Map<String, Object> getRequestMap() {
+    public Map<String, Object> getRequestMap () {
         return requestMap;
     }
 }
\ No newline at end of file
diff --git a/src/main/java/de/ids_mannheim/korap/query/serialize/AnnisQueryProcessor.java b/src/main/java/de/ids_mannheim/korap/query/serialize/AnnisQueryProcessor.java
index 2e9ac7b..528d799 100644
--- a/src/main/java/de/ids_mannheim/korap/query/serialize/AnnisQueryProcessor.java
+++ b/src/main/java/de/ids_mannheim/korap/query/serialize/AnnisQueryProcessor.java
@@ -27,10 +27,13 @@
 import de.ids_mannheim.korap.query.serialize.util.StatusCodes;
 
 /**
- * Processor class for ANNIS QL queries. This class uses an ANTLR v4 grammar
- * for query parsing, it therefore extends {@link Antlr4AbstractQueryProcessor}.
- * The parser object is inherited from the parent class and instantiated in
- * {@link #parseAnnisQuery(String)} as an {@link AqlParser}.
+ * Processor class for ANNIS QL queries. This class uses an ANTLR v4
+ * grammar
+ * for query parsing, it therefore extends
+ * {@link Antlr4AbstractQueryProcessor}.
+ * The parser object is inherited from the parent class and
+ * instantiated in {@link #parseAnnisQuery(String)} as an
+ * {@link AqlParser}.
  * 
  * @see http://annis-tools.org/aql.html
  * 
@@ -39,152 +42,187 @@
  * @since 0.1.0
  */
 public class AnnisQueryProcessor extends Antlr4AbstractQueryProcessor {
-    private static Logger log = LoggerFactory.getLogger(AnnisQueryProcessor.class);
+    private static Logger log = LoggerFactory
+            .getLogger(AnnisQueryProcessor.class);
     /**
-     * Flag that indicates whether token fields or meta fields are currently 
+     * Flag that indicates whether token fields or meta fields are
+     * currently
      * being processed
      */
     boolean inMeta = false;
     /**
-     * Keeps track of operands that are to be integrated into yet uncreated 
+     * Keeps track of operands that are to be integrated into yet
+     * uncreated
      * objects.
      */
-    LinkedList<LinkedHashMap<String,Object>> operandStack = 
-            new LinkedList<LinkedHashMap<String,Object>>();
+    LinkedList<LinkedHashMap<String, Object>> operandStack = new LinkedList<LinkedHashMap<String, Object>>();
     /**
-     * Keeps track of explicitly (by #-var definition) or implicitly (number 
-     * as reference) introduced entities (for later reference by #-operator)
+     * Keeps track of explicitly (by #-var definition) or implicitly
+     * (number
+     * as reference) introduced entities (for later reference by
+     * #-operator)
      */
-    Map<String, LinkedHashMap<String,Object>> nodeVariables = 
-            new LinkedHashMap<String, LinkedHashMap<String,Object>>();
+    Map<String, LinkedHashMap<String, Object>> nodeVariables = new LinkedHashMap<String, LinkedHashMap<String, Object>>();
     /**
-     * Keeps track of explicitly (by #-var definition) or implicitly (number 
-     * as reference) introduced entities (for later reference by #-operator)
+     * Keeps track of explicitly (by #-var definition) or implicitly
+     * (number
+     * as reference) introduced entities (for later reference by
+     * #-operator)
      */
-    Map<ParseTree, String> nodes2refs= new LinkedHashMap<ParseTree, String>(); 
+    Map<ParseTree, String> nodes2refs = new LinkedHashMap<ParseTree, String>();
     /**
      * Counter for variable definitions.
      */
     Integer variableCount = 1;
     /**
-     * Marks the currently active token in order to know where to add flags 
+     * Marks the currently active token in order to know where to add
+     * flags
      * (might already have been taken away from token stack).
      */
-    LinkedHashMap<String,Object> curToken = new LinkedHashMap<String,Object>();
+    LinkedHashMap<String, Object> curToken = new LinkedHashMap<String, Object>();
     /**
-     * Keeps track of operands lists that are to be serialised in an inverted
-     * order (e.g. the IN() operator) compared to their AST representation. 
+     * Keeps track of operands lists that are to be serialised in an
+     * inverted
+     * order (e.g. the IN() operator) compared to their AST
+     * representation.
      */
-    private LinkedList<ArrayList<Object>> invertedOperandsLists = 
-            new LinkedList<ArrayList<Object>>();
+    private LinkedList<ArrayList<Object>> invertedOperandsLists = new LinkedList<ArrayList<Object>>();
     /**
      * Keeps track of operation:class numbers.
      */
     int classCounter = 1;
     /**
-     * Keeps track of numers of relations processed (important when dealing 
+     * Keeps track of numers of relations processed (important when
+     * dealing
      * with multiple predications).
      */
     int relationCounter = 0;
     /**
-     * Keeps track of references to nodes that are operands of groups (e.g. 
-     * tree relations). Those nodes appear on the top level of the parse tree
-     * but are to be integrated into the AqlTree at a later point (namely as 
-     * operands of the respective group). Therefore, store references to these
-     * nodes here and exclude the operands from being written into the query 
-     * map individually.   
+     * Keeps track of references to nodes that are operands of groups
+     * (e.g.
+     * tree relations). Those nodes appear on the top level of the
+     * parse tree
+     * but are to be integrated into the AqlTree at a later point
+     * (namely as
+     * operands of the respective group). Therefore, store references
+     * to these
+     * nodes here and exclude the operands from being written into the
+     * query
+     * map individually.
      */
     private int totalRelationCount = 0;
     /**
-     * Keeps a record of reference-class-mapping, i.e. which 'class' has been 
-     * assigned to which #n reference. This is important when introducing 
-     * koral:reference spans to refer back to previously established classes for 
+     * Keeps a record of reference-class-mapping, i.e. which 'class'
+     * has been
+     * assigned to which #n reference. This is important when
+     * introducing
+     * koral:reference spans to refer back to previously established
+     * classes for
      * entities.
      */
-    private LinkedHashMap<String, Integer> refClassMapping = 
-            new LinkedHashMap<String, Integer>();
+    private LinkedHashMap<String, Integer> refClassMapping = new LinkedHashMap<String, Integer>();
     /**
      * Keeps a record of unary relations on spans/tokens.
      */
-    private LinkedHashMap<String, ArrayList<ParseTree>> unaryRelations = 
-            new LinkedHashMap<String, ArrayList<ParseTree>>();
+    private LinkedHashMap<String, ArrayList<ParseTree>> unaryRelations = new LinkedHashMap<String, ArrayList<ParseTree>>();
     /**
-     * Keeps track of the number of references to a node/token by means of #n. 
-     * E.g. in the query <tt>tok="x" & tok="y" & tok="z" & #1 . #2 & #2 . #3</tt>, 
+     * Keeps track of the number of references to a node/token by
+     * means of #n.
+     * E.g. in the query <tt>tok="x" & tok="y" & tok="z" & #1 . #2 &
+     * #2 . #3</tt>,
      * the 2nd token ("y") is referenced twice, the others once.
      */
-    private LinkedHashMap<String, Integer> nodeReferencesTotal = 
-            new LinkedHashMap<String, Integer>();
+    private LinkedHashMap<String, Integer> nodeReferencesTotal = new LinkedHashMap<String, Integer>();
     /**
-     * Keeps track of the number of references to a node/token that have 
+     * Keeps track of the number of references to a node/token that
+     * have
      * already been processed.
      */
-    private LinkedHashMap<String, Integer> nodeReferencesProcessed = 
-            new LinkedHashMap<String, Integer>();
+    private LinkedHashMap<String, Integer> nodeReferencesProcessed = new LinkedHashMap<String, Integer>();
     /**
-     * Keeps track of queued relations. Relations sometimes cannot be processed
-     * directly, namely in case it does not share any operands with the 
-     * previous relation. Then wait until a relation with a shared operand has 
+     * Keeps track of queued relations. Relations sometimes cannot be
+     * processed
+     * directly, namely in case it does not share any operands with
+     * the
+     * previous relation. Then wait until a relation with a shared
+     * operand has
      * been processed.
      */
     private LinkedList<ParseTree> queuedRelations = new LinkedList<ParseTree>();
     /**
-     * For some objects, it may be decided in the initial scan 
-     * ({@link #processAndTopExpr(ParseTree)} that they need to be wrapped in a
-     * class operation when retrieved later. This map stores this information.
-     * More precisely, it stores for every node in the tree which class ID its 
+     * For some objects, it may be decided in the initial scan
+     * ({@link #processAndTopExpr(ParseTree)} that they need to be
+     * wrapped in a
+     * class operation when retrieved later. This map stores this
+     * information.
+     * More precisely, it stores for every node in the tree which
+     * class ID its
      * derived KoralQuery object will receive.
      */
-    private LinkedHashMap<ParseTree, Integer> objectsToWrapInClass = 
-            new LinkedHashMap<ParseTree, Integer>();
+    private LinkedHashMap<ParseTree, Integer> objectsToWrapInClass = new LinkedHashMap<ParseTree, Integer>();
 
-    public AnnisQueryProcessor(String query) {
+
+    public AnnisQueryProcessor (String query) {
         KoralObjectGenerator.setQueryProcessor(this);
         process(query);
     }
 
+
     @Override
-    public void process(String query) {
+    public void process (String query) {
         ParseTree tree = parseAnnisQuery(query);
         if (this.parser != null) {
             super.parser = this.parser;
-        } else {
-            throw new NullPointerException("Parser has not been instantiated!"); 
         }
-        log.info("Processing Annis query: "+query);
+        else {
+            throw new NullPointerException("Parser has not been instantiated!");
+        }
+        log.info("Processing Annis query: " + query);
         if (tree != null) {
-            log.debug("ANTLR parse tree: "+tree.toStringTree(parser));
+            log.debug("ANTLR parse tree: " + tree.toStringTree(parser));
             processNode(tree);
             // Last check to see if all relations have left the queue
             if (!queuedRelations.isEmpty()) {
                 ParseTree queued = queuedRelations.pop();
-                if (verbose) System.out.println("Taking off queue (last rel): "
-                        + queued.getText());
+                if (verbose)
+                    System.out.println("Taking off queue (last rel): "
+                            + queued.getText());
                 if (checkOperandsProcessedPreviously(queued)) {
                     processNode(queued);
-                } else {
-                    addError(StatusCodes.UNBOUND_ANNIS_RELATION, 
-                            "The relation " +queued.getText()+ 
-                            " is not bound to any other relations.");
-                    requestMap.put("query", 
-                            new LinkedHashMap<String, Object>());
+                }
+                else {
+                    addError(StatusCodes.UNBOUND_ANNIS_RELATION,
+                            "The relation " + queued.getText()
+                                    + " is not bound to any other relations.");
+                    requestMap
+                            .put("query", new LinkedHashMap<String, Object>());
                 }
             }
         }
     }
 
+
     /**
-     * Traverses the parse tree by recursively calling itself, starting with
-     * the root node of the tree and calling itself with the children of its
-     * current node in a depth-first, left-to-right fashion. In each call,
-     * depending on the category of the current node, special processor
-     * methods for the respective node category are called to process the node.
-     * @param node The node currently visited in the parse tree traversal.
+     * Traverses the parse tree by recursively calling itself,
+     * starting with
+     * the root node of the tree and calling itself with the children
+     * of its
+     * current node in a depth-first, left-to-right fashion. In each
+     * call,
+     * depending on the category of the current node, special
+     * processor
+     * methods for the respective node category are called to process
+     * the node.
+     * 
+     * @param node
+     *            The node currently visited in the parse tree
+     *            traversal.
      */
-    private void processNode(ParseTree node) {
+    private void processNode (ParseTree node) {
         String nodeCat = getNodeCat(node);
         // Top-down processing
-        if (visited.contains(node)) return;
+        if (visited.contains(node))
+            return;
         openNodeCats.push(nodeCat);
         stackedObjects = 0;
         // Before doing anything else, check if any relations are queued
@@ -193,15 +231,16 @@
             if (!queuedRelations.isEmpty()) {
                 ParseTree queued = queuedRelations.getFirst();
                 if (checkOperandsProcessedPreviously(queued)) {
-                    if (verbose) System.out.println("Taking off queue: "+
-                            queued.getText());
+                    if (verbose)
+                        System.out.println("Taking off queue: "
+                                + queued.getText());
                     queuedRelations.removeFirst();
                     processNode(queued);
                 }
-            }  
+            }
         }
         if (verbose) {
-            System.err.println(" "+objectStack);
+            System.err.println(" " + objectStack);
             System.out.println(openNodeCats);
         }
 
@@ -233,7 +272,7 @@
          ****************************************************************
          ****************************************************************
          */
-        for (int i=0; i<node.getChildCount(); i++) {
+        for (int i = 0; i < node.getChildCount(); i++) {
             ParseTree child = node.getChild(i);
             processNode(child);
         }
@@ -244,21 +283,26 @@
          **************************************************************
          */
         if (!objectsToPop.isEmpty()) {
-            for (int i=0; i<objectsToPop.pop(); i++) {
-                objectStack.pop();   
+            for (int i = 0; i < objectsToPop.pop(); i++) {
+                objectStack.pop();
             }
         }
         openNodeCats.pop();
     }
 
+
     /**
-     * Processes an <tt>andTopExpr</tt> node. This is a child of the root
-     * and contains a set of expressions connected by logical conjunction.
+     * Processes an <tt>andTopExpr</tt> node. This is a child of the
+     * root
+     * and contains a set of expressions connected by logical
+     * conjunction.
      * Several of these nodes are possibly connected via disjunction.
-     * @param node The current parse tree node (must be of category 
-     * <tt>andTopExpr</tt>). 
+     * 
+     * @param node
+     *            The current parse tree node (must be of category
+     *            <tt>andTopExpr</tt>).
      */
-    private void processAndTopExpr(ParseTree node) {
+    private void processAndTopExpr (ParseTree node) {
         // Before processing any child expr node, check if it has one or more 
         // "*ary_linguistic_term" nodes.
         // Those nodes may use references to earlier established operand nodes.
@@ -266,52 +310,53 @@
         // individually but naturally as operands of the relations/groups 
         // introduced by the node. For that purpose, this section mines all 
         // used references and stores them in a list for later reference.
-        for (ParseTree unaryTermNode : 
-                getDescendantsWithCat(node, "unary_linguistic_term")) {
+        for (ParseTree unaryTermNode : getDescendantsWithCat(node,
+                "unary_linguistic_term")) {
             String ref = getNodeCat(unaryTermNode.getChild(0)).substring(1);
             ArrayList<ParseTree> unaryTermsForRef = unaryRelations.get(ref);
-            if (unaryTermsForRef == null) unaryTermsForRef = 
-                    new ArrayList<ParseTree>();
+            if (unaryTermsForRef == null)
+                unaryTermsForRef = new ArrayList<ParseTree>();
             unaryTermsForRef.add(unaryTermNode);
             unaryRelations.put(ref, unaryTermsForRef);
         }
-        for (ParseTree lingTermNode : 
-                getDescendantsWithCat(node, "n_ary_linguistic_term")) {
-            for (ParseTree refOrNode : 
-                    getChildrenWithCat(lingTermNode, "refOrNode")) {
-                String refOrNodeString = 
-                        refOrNode.getChild(0).toStringTree(parser);
+        for (ParseTree lingTermNode : getDescendantsWithCat(node,
+                "n_ary_linguistic_term")) {
+            for (ParseTree refOrNode : getChildrenWithCat(lingTermNode,
+                    "refOrNode")) {
+                String refOrNodeString = refOrNode.getChild(0).toStringTree(
+                        parser);
                 if (refOrNodeString.startsWith("#")) {
-                    String ref = refOrNode.getChild(0).toStringTree(parser).
-                            substring(1);
+                    String ref = refOrNode.getChild(0).toStringTree(parser)
+                            .substring(1);
                     if (nodeReferencesTotal.containsKey(ref)) {
-                        nodeReferencesTotal.put(ref, 
-                                nodeReferencesTotal.get(ref)+1);
-                    } else {
+                        nodeReferencesTotal.put(ref,
+                                nodeReferencesTotal.get(ref) + 1);
+                    }
+                    else {
                         nodeReferencesTotal.put(ref, 1);
-                        nodeReferencesProcessed.put(ref, 0);   
+                        nodeReferencesProcessed.put(ref, 0);
                     }
                 }
             }
             totalRelationCount++;
         }
         // Then, mine all object definitions. 
-        for (ParseTree variableExprNode : 
-                getDescendantsWithCat(node, "variableExpr")) {
+        for (ParseTree variableExprNode : getDescendantsWithCat(node,
+                "variableExpr")) {
             String ref;
             // might be a ref label rather than a counting number
-            ParseTree varDef = 
-                    getFirstChildWithCat(variableExprNode.getParent(),"varDef");
+            ParseTree varDef = getFirstChildWithCat(
+                    variableExprNode.getParent(), "varDef");
             if (varDef != null) {
                 // remove trailing #
-                ref = varDef.getText().replaceFirst("#", ""); 
-            } else {
+                ref = varDef.getText().replaceFirst("#", "");
+            }
+            else {
                 ref = variableCount.toString();
             }
             nodes2refs.put(variableExprNode, ref);
-            LinkedHashMap<String,Object> object = 
-                    processVariableExpr(variableExprNode);
-            nodeVariables.put(ref, object);            
+            LinkedHashMap<String, Object> object = processVariableExpr(variableExprNode);
+            nodeVariables.put(ref, object);
             variableCount++;
             // Check if this object definition is part of a "direct declaration
             // relation", i.e. a relation which declares its operands directly
@@ -319,90 +364,104 @@
             // objects must still be available for later reference, handle this 
             // here. Direct declaration relation is present when grandparent is
             // n_ary_linguistic_term node.
-            if (getNodeCat(variableExprNode.getParent().getParent()).
-                    equals("n_ary_linguistic_term")) {
+            if (getNodeCat(variableExprNode.getParent().getParent()).equals(
+                    "n_ary_linguistic_term")) {
                 if (nodeReferencesTotal.containsKey(ref)) {
-                    nodeReferencesTotal.put(ref,nodeReferencesTotal.get(ref)+1);
-                } else {
+                    nodeReferencesTotal.put(ref,
+                            nodeReferencesTotal.get(ref) + 1);
+                }
+                else {
                     nodeReferencesTotal.put(ref, 1);
                 }
                 // This is important for later relations wrapping the present 
                 // relation. If the object isn't registered as processed, it 
                 // won't be available  for referencing.
-                nodeReferencesProcessed.put(ref, 1);  
+                nodeReferencesProcessed.put(ref, 1);
                 // Register this node for latter wrapping in class.
                 if (nodeReferencesTotal.get(ref) > 1) {
-                    refClassMapping.put(ref, classCounter+128);
-                    objectsToWrapInClass.put(variableExprNode, 128+classCounter++);    
+                    refClassMapping.put(ref, classCounter + 128);
+                    objectsToWrapInClass.put(variableExprNode,
+                            128 + classCounter++);
                 }
             }
         }
     }
 
-    private void processExprTop(ParseTree node) {
+
+    private void processExprTop (ParseTree node) {
         List<ParseTree> andTopExprs = getChildrenWithCat(node, "andTopExpr");
         if (andTopExprs.size() > 1) {
-            LinkedHashMap<String, Object> topOr = 
-                    KoralObjectGenerator.makeGroup("disjunction");
+            LinkedHashMap<String, Object> topOr = KoralObjectGenerator
+                    .makeGroup("disjunction");
             requestMap.put("query", topOr);
             objectStack.push(topOr);
         }
     }
 
+
     @SuppressWarnings("unchecked")
-    private LinkedHashMap<String, Object> processVariableExpr(ParseTree node) {
+    private LinkedHashMap<String, Object> processVariableExpr (ParseTree node) {
         // simplex word or complex assignment (like qname = textSpec)?
         String firstChildNodeCat = getNodeCat(node.getChild(0));
         LinkedHashMap<String, Object> object = null;
         if (firstChildNodeCat.equals("node")) {
             object = KoralObjectGenerator.makeSpan();
-        } else if (firstChildNodeCat.equals("tok")) {
+        }
+        else if (firstChildNodeCat.equals("tok")) {
             object = KoralObjectGenerator.makeToken();
             if (node.getChildCount() > 1) { // empty tokens do not wrap a term
-                LinkedHashMap<String, Object> term = 
-                        KoralObjectGenerator.makeTerm();
+                LinkedHashMap<String, Object> term = KoralObjectGenerator
+                        .makeTerm();
                 term.put("layer", "orth");
                 object.put("wrap", term);
             }
-        } else if (firstChildNodeCat.equals("qName")) {	
+        }
+        else if (firstChildNodeCat.equals("qName")) {
             // Only (foundry/)?layer specified.
             // May be token or span, depending on indicated layer! 
             // (e.g. cnx/cat=NP vs mate/pos=NN)
             // TODO generalize the list below -> look up layers associated with
             // tokens rather than spans somewhere
-            HashMap<String, Object> qNameParse = 
-                    parseQNameNode(node.getChild(0));
-            if (Arrays.asList(new String[]{"p", "lemma", "m", "orth"}).
-                    contains(qNameParse.get("layer"))) { 
+            HashMap<String, Object> qNameParse = parseQNameNode(node
+                    .getChild(0));
+            if (Arrays.asList(new String[] { "p", "lemma", "m", "orth" })
+                    .contains(qNameParse.get("layer"))) {
                 object = KoralObjectGenerator.makeToken();
-                LinkedHashMap<String, Object> term = 
-                        KoralObjectGenerator.makeTerm();
+                LinkedHashMap<String, Object> term = KoralObjectGenerator
+                        .makeTerm();
                 object.put("wrap", term);
                 term.putAll(qNameParse);
-            } else {
+            }
+            else {
                 object = KoralObjectGenerator.makeSpan();
                 object.putAll(qNameParse);
             }
-        } else if (firstChildNodeCat.equals("textSpec")) {
+        }
+        else if (firstChildNodeCat.equals("textSpec")) {
             object = KoralObjectGenerator.makeToken();
-            LinkedHashMap<String, Object> term = 
-                    KoralObjectGenerator.makeTerm();
+            LinkedHashMap<String, Object> term = KoralObjectGenerator
+                    .makeTerm();
             object.put("wrap", term);
             term.put("layer", "orth");
             term.putAll(parseTextSpec(node.getChild(0)));
         }
-        if (node.getChildCount() == 3) {  			
+        if (node.getChildCount() == 3) {
             // (foundry/)?layer=key specification
             if (object.get("@type").equals("koral:token")) {
-                HashMap<String, Object> term = (HashMap<String, Object>) 
-                        object.get("wrap");
+                HashMap<String, Object> term = (HashMap<String, Object>) object
+                        .get("wrap");
                 term.putAll(parseTextSpec(node.getChild(2)));
-                term.put("match", parseMatchOperator(
-                        getFirstChildWithCat(node, "eqOperator")));
-            } else {
+                term.put(
+                        "match",
+                        parseMatchOperator(getFirstChildWithCat(node,
+                                "eqOperator")));
+            }
+            else {
                 object.putAll(parseTextSpec(node.getChild(2)));
-                object.put("match", parseMatchOperator(
-                        getFirstChildWithCat(node, "eqOperator")));
+                object.put(
+                        "match",
+                        parseMatchOperator(getFirstChildWithCat(node,
+                                "eqOperator")));
             }
         }
 
@@ -412,13 +471,13 @@
         if (unaryRelations.containsKey(ref)) {
             ArrayList<ParseTree> unaryTermsForRef = unaryRelations.get(ref);
             if (unaryTermsForRef.size() == 1) {
-                object.put("attr", 
-                        parseUnaryOperator(unaryTermsForRef.get(0)));   
-            } else {
-                LinkedHashMap<String, Object> termGroup = 
-                        KoralObjectGenerator.makeTermGroup("and");
-                ArrayList<Object> operands = (ArrayList<Object>) 
-                        termGroup.get("operands");
+                object.put("attr", parseUnaryOperator(unaryTermsForRef.get(0)));
+            }
+            else {
+                LinkedHashMap<String, Object> termGroup = KoralObjectGenerator
+                        .makeTermGroup("and");
+                ArrayList<Object> operands = (ArrayList<Object>) termGroup
+                        .get("operands");
                 for (ParseTree unaryTerm : unaryTermsForRef) {
                     operands.add(parseUnaryOperator(unaryTerm));
                 }
@@ -432,8 +491,9 @@
             }
             ParseTree parentsFirstChild = node.getParent().getChild(0);
             if (getNodeCat(parentsFirstChild).endsWith("#")) {
-                nodeVariables.put(getNodeCat(parentsFirstChild).
-                        replaceAll("#", ""), object);
+                nodeVariables.put(
+                        getNodeCat(parentsFirstChild).replaceAll("#", ""),
+                        object);
             }
             if (objectsToWrapInClass.containsKey(node)) {
                 int classId = objectsToWrapInClass.get(node);
@@ -443,66 +503,79 @@
         return object;
     }
 
+
     /**
-     * Processes an operand node, creating a map for the operand containing 
-     * all its information given in the node definition (referenced via '#'). 
-     * If this node has been referred to and used earlier, a reference is 
-     * created in its place. The operand will be wrapped in a class group if 
+     * Processes an operand node, creating a map for the operand
+     * containing
+     * all its information given in the node definition (referenced
+     * via '#').
+     * If this node has been referred to and used earlier, a reference
+     * is
+     * created in its place. The operand will be wrapped in a class
+     * group if
      * necessary.
-     * @param operandNode The operand node of a relation, e.g. '#1'
-     * @return A map object with the appropriate KoralQuery representation
-     * of the operand 
+     * 
+     * @param operandNode
+     *            The operand node of a relation, e.g. '#1'
+     * @return A map object with the appropriate KoralQuery
+     *         representation
+     *         of the operand
      */
-    private LinkedHashMap<String, Object> retrieveOperand(ParseTree operandNode) {
+    private LinkedHashMap<String, Object> retrieveOperand (ParseTree operandNode) {
         LinkedHashMap<String, Object> operand = null;
         if (!getNodeCat(operandNode.getChild(0)).equals("variableExpr")) {
-            String ref = 
-                    operandNode.getChild(0).toStringTree(parser).substring(1);
+            String ref = operandNode.getChild(0).toStringTree(parser)
+                    .substring(1);
             operand = nodeVariables.get(ref);
             if (nodeReferencesTotal.get(ref) > 1) {
-                if (nodeReferencesProcessed.get(ref)==0) {
-                    refClassMapping.put(ref, classCounter+128);
-                    operand = KoralObjectGenerator.
-                            wrapInClass(operand, 128+classCounter++);
-                } else if (nodeReferencesProcessed.get(ref)>0 && 
-                        nodeReferencesTotal.get(ref)>1) {
+                if (nodeReferencesProcessed.get(ref) == 0) {
+                    refClassMapping.put(ref, classCounter + 128);
+                    operand = KoralObjectGenerator.wrapInClass(operand,
+                            128 + classCounter++);
+                }
+                else if (nodeReferencesProcessed.get(ref) > 0
+                        && nodeReferencesTotal.get(ref) > 1) {
                     try {
                         operand = KoralObjectGenerator.wrapInReference(
                                 operandStack.pop(), refClassMapping.get(ref));
-                    } catch (NoSuchElementException e) {
-                        operand = KoralObjectGenerator.makeReference(
-                                refClassMapping.get(ref));
+                    }
+                    catch (NoSuchElementException e) {
+                        operand = KoralObjectGenerator
+                                .makeReference(refClassMapping.get(ref));
                     }
                 }
-                nodeReferencesProcessed.put(ref, 
-                        nodeReferencesProcessed.get(ref)+1);
+                nodeReferencesProcessed.put(ref,
+                        nodeReferencesProcessed.get(ref) + 1);
             }
-        } else {
+        }
+        else {
             operand = processVariableExpr(operandNode.getChild(0));
         }
         return operand;
     }
 
+
     /**
      * @param node
      * @return
      */
-    private boolean checkOperandsProcessedPreviously(ParseTree node) {
+    private boolean checkOperandsProcessedPreviously (ParseTree node) {
         // We can assume two operands.
         ParseTree operand1 = node.getChild(0);
         ParseTree operand2 = node.getChild(2);
-        if (checkOperandProcessedPreviously(operand1) || 
-                checkOperandProcessedPreviously(operand2)) {
+        if (checkOperandProcessedPreviously(operand1)
+                || checkOperandProcessedPreviously(operand2)) {
             return true;
         }
         return false;
     }
 
+
     /**
-     * @param operand 
+     * @param operand
      * @return
      */
-    private boolean checkOperandProcessedPreviously(ParseTree operand) {
+    private boolean checkOperandProcessedPreviously (ParseTree operand) {
         String operandRef = operand.getText();
         if (operandRef.startsWith("#")) {
             operandRef = operandRef.substring(1, operandRef.length());
@@ -513,20 +586,21 @@
         return false;
     }
 
+
     @SuppressWarnings("unchecked")
-    private void processN_ary_linguistic_term(ParseTree node) {
+    private void processN_ary_linguistic_term (ParseTree node) {
         relationCounter++;
         // Get operator and determine type of group (sequence/treeRelation/
         // relation/...). It's possible in Annis QL to concatenate operatiors,
         // so there may be several operators under one n_ary_linguistic_term 
         // node. Counter 'i' will iteratively point to all operator nodes 
         // (odd-numbered children) under this node.
-        for (int i=1; i<node.getChildCount(); i = i+2) {
-            ParseTree operandTree1 = node.getChild(i-1);
-            ParseTree operandTree2 = node.getChild(i+1);
+        for (int i = 1; i < node.getChildCount(); i = i + 2) {
+            ParseTree operandTree1 = node.getChild(i - 1);
+            ParseTree operandTree2 = node.getChild(i + 1);
             String reltype = getNodeCat(node.getChild(i).getChild(0));
 
-            LinkedHashMap<String,Object> group = null;
+            LinkedHashMap<String, Object> group = null;
             ArrayList<Object> operands = null;
             // make sure one of the operands has already been put into a 
             // relation (if this is not the 1st relation). If none of the
@@ -534,21 +608,20 @@
             // unavailable for refrencing), queue this relation for later 
             // processing.
             if (relationCounter != 1) {
-                if (! checkOperandsProcessedPreviously(node)) {
+                if (!checkOperandsProcessedPreviously(node)) {
                     queuedRelations.add(node);
                     relationCounter--;
                     if (verbose) {
-                        System.out.println("Adding to queue: "+node.getText());
+                        System.out
+                                .println("Adding to queue: " + node.getText());
                     }
                     objectsToPop.push(stackedObjects);
                     return;
                 }
             }
             // Retrieve operands.
-            LinkedHashMap<String, Object> operand1 = 
-                    retrieveOperand(operandTree1);
-            LinkedHashMap<String, Object> operand2 = 
-                    retrieveOperand(operandTree2);
+            LinkedHashMap<String, Object> operand1 = retrieveOperand(operandTree1);
+            LinkedHashMap<String, Object> operand2 = retrieveOperand(operandTree2);
             // 'Proper' n_ary_linguistic_operators receive a considerably 
             // different serialisation than 'commonparent' and 'commonancestor'
             // For the latter cases, a dummy span is introduced and declared as
@@ -557,122 +630,132 @@
             // relations! A Poliqarp+ equivalent for A $ B would be
             // contains(focus(1:contains({1:<>},A)), B).
             // This is modeled here...
-            if (reltype.equals("commonparent") || 
-                    reltype.equals("commonancestor")) {
+            if (reltype.equals("commonparent")
+                    || reltype.equals("commonancestor")) {
                 // make an (outer) group and an inner group containing the dummy 
                 // node or previous relations
                 group = KoralObjectGenerator.makeGroup("relation");
-                LinkedHashMap<String,Object> innerGroup = 
-                        KoralObjectGenerator.makeGroup("relation");
-                LinkedHashMap<String,Object> relation = 
-                        KoralObjectGenerator.makeRelation();
-                LinkedHashMap<String,Object> term = 
-                        KoralObjectGenerator.makeTerm();
+                LinkedHashMap<String, Object> innerGroup = KoralObjectGenerator
+                        .makeGroup("relation");
+                LinkedHashMap<String, Object> relation = KoralObjectGenerator
+                        .makeRelation();
+                LinkedHashMap<String, Object> term = KoralObjectGenerator
+                        .makeTerm();
                 term.put("layer", "c");
                 relation.put("wrap", term);
                 // commonancestor is an indirect commonparent relation
-                if (reltype.equals("commonancestor")) relation.put("boundary",
-                        KoralObjectGenerator.makeBoundary(1, null));
+                if (reltype.equals("commonancestor"))
+                    relation.put("boundary",
+                            KoralObjectGenerator.makeBoundary(1, null));
                 group.put("relation", relation);
                 innerGroup.put("relation", relation);
                 // Get operands list before possible re-assignment of 'group' 
                 // (see following 'if')
-                ArrayList<Object> outerOperands  = 
-                        (ArrayList<Object>) group.get("operands");
-                ArrayList<Object> innerOperands  = 
-                        (ArrayList<Object>) innerGroup.get("operands");
+                ArrayList<Object> outerOperands = (ArrayList<Object>) group
+                        .get("operands");
+                ArrayList<Object> innerOperands = (ArrayList<Object>) innerGroup
+                        .get("operands");
                 // for lowest level, add the underspecified node as first 
                 // operand and wrap it in a class group
                 if (i == 1) {
-                    innerOperands.add(KoralObjectGenerator.wrapInClass(
-                            KoralObjectGenerator.makeSpan(), classCounter+128));
+                    innerOperands
+                            .add(KoralObjectGenerator.wrapInClass(
+                                    KoralObjectGenerator.makeSpan(),
+                                    classCounter + 128));
                     // add the first operand and wrap the whole group in a 
                     // focusing reference 
                     innerOperands.add(operand1);
-                    innerGroup = KoralObjectGenerator.
-                            wrapInReference(innerGroup, classCounter+128);
+                    innerGroup = KoralObjectGenerator.wrapInReference(
+                            innerGroup, classCounter + 128);
                     outerOperands.add(innerGroup);
-                } else {
+                }
+                else {
                     outerOperands.add(operandStack.pop());
                 }
                 // Lookahead: if next operator is not commonparent or 
                 // commonancestor, wrap in class for accessibility
-                if (i < node.getChildCount()-2 && !getNodeCat(
-                        node.getChild(i+2).getChild(0)).startsWith("common")) {
-                    operand2 = KoralObjectGenerator.wrapInClass(
-                            operand2, ++classCounter+128);
+                if (i < node.getChildCount() - 2
+                        && !getNodeCat(node.getChild(i + 2).getChild(0))
+                                .startsWith("common")) {
+                    operand2 = KoralObjectGenerator.wrapInClass(operand2,
+                            ++classCounter + 128);
                 }
                 outerOperands.add(operand2);
                 // Wrap in another reference object in case other relations
                 // are following
-                if (i < node.getChildCount()-2) {
-                    group = KoralObjectGenerator.wrapInReference(
-                            group, classCounter+128);
+                if (i < node.getChildCount() - 2) {
+                    group = KoralObjectGenerator.wrapInReference(group,
+                            classCounter + 128);
                 }
                 // All other n-ary linguistic relations have special 'relation' 
                 // attributes defined in KoralQ. and can be handled more easily
-            } else {
-                LinkedHashMap<String, Object> operatorGroup = 
-                        parseOperatorNode(node.getChild(i).getChild(0));
+            }
+            else {
+                LinkedHashMap<String, Object> operatorGroup = parseOperatorNode(node
+                        .getChild(i).getChild(0));
                 String groupType;
                 try {
                     groupType = (String) operatorGroup.get("groupType");
-                } catch (ClassCastException | NullPointerException n) {
+                }
+                catch (ClassCastException | NullPointerException n) {
                     groupType = "relation";
                 }
-                if (groupType.equals("relation") || 
-                        groupType.equals("treeRelation")) {
+                if (groupType.equals("relation")
+                        || groupType.equals("treeRelation")) {
                     group = KoralObjectGenerator.makeGroup(groupType);
-                    LinkedHashMap<String, Object> relation = 
-                            new LinkedHashMap<String, Object>();
+                    LinkedHashMap<String, Object> relation = new LinkedHashMap<String, Object>();
                     putAllButGroupType(relation, operatorGroup);
                     group.put("relation", relation);
-                } else if (groupType.equals("sequence")) {
+                }
+                else if (groupType.equals("sequence")) {
                     group = KoralObjectGenerator.makeGroup(groupType);
                     putAllButGroupType(group, operatorGroup);
-                } else if (groupType.equals("position")) {
-                    group = new LinkedHashMap<String,Object>();
+                }
+                else if (groupType.equals("position")) {
+                    group = new LinkedHashMap<String, Object>();
                     putAllButGroupType(group, operatorGroup);
                 }
 
                 // Get operands list before possible re-assignment of 'group'
                 // (see following 'if')
-                operands  = (ArrayList<Object>) group.get("operands");
+                operands = (ArrayList<Object>) group.get("operands");
 
-                ParseTree leftChildSpec = getFirstChildWithCat(
-                        node.getChild(i).getChild(0), "@l");
-                ParseTree rightChildSpec = getFirstChildWithCat(
-                        node.getChild(i).getChild(0), "@r");
+                ParseTree leftChildSpec = getFirstChildWithCat(node.getChild(i)
+                        .getChild(0), "@l");
+                ParseTree rightChildSpec = getFirstChildWithCat(node
+                        .getChild(i).getChild(0), "@r");
                 if (leftChildSpec != null || rightChildSpec != null) {
-                    String frame = (leftChildSpec!=null) ? 
-                            "frames:startsWith" : "frames:endsWith";
-                    LinkedHashMap<String,Object> positionGroup = 
-                            KoralObjectGenerator.
-                            makePosition(new String[]{frame});
-                    operand2 = KoralObjectGenerator.wrapInClass(
-                            operand2, ++classCounter+128);
-                    ((ArrayList<Object>) positionGroup.get("operands")).
-                            add(group);
-                    ((ArrayList<Object>) positionGroup.get("operands")).
-                            add(KoralObjectGenerator.
-                                    makeReference(classCounter+128));
+                    String frame = (leftChildSpec != null) ? "frames:startsWith"
+                            : "frames:endsWith";
+                    LinkedHashMap<String, Object> positionGroup = KoralObjectGenerator
+                            .makePosition(new String[] { frame });
+                    operand2 = KoralObjectGenerator.wrapInClass(operand2,
+                            ++classCounter + 128);
+                    ((ArrayList<Object>) positionGroup.get("operands"))
+                            .add(group);
+                    ((ArrayList<Object>) positionGroup.get("operands"))
+                            .add(KoralObjectGenerator
+                                    .makeReference(classCounter + 128));
                     group = positionGroup;
                 }
 
                 // Wrap in reference object in case other relations follow
-                if (i < node.getChildCount()-2) {
-                    group = KoralObjectGenerator.wrapInReference(
-                            group, classCounter+128);
+                if (i < node.getChildCount() - 2) {
+                    group = KoralObjectGenerator.wrapInReference(group,
+                            classCounter + 128);
                 }
 
                 // Inject operands.
                 // -> Case distinction:
-                if (node.getChildCount()==3) {
+                if (node.getChildCount() == 3) {
                     // Things are easy when there's just one operator 
                     // (thus 3 children incl. operands)...
-                    if (operand1 != null) operands.add(operand1);
-                    if (operand2 != null) operands.add(operand2);
-                } else {
+                    if (operand1 != null)
+                        operands.add(operand1);
+                    if (operand2 != null)
+                        operands.add(operand2);
+                }
+                else {
                     // ... but things get a little more complicated here. The 
                     // AST is of this form: (operand1 operator1 operand2 
                     // operator2 operand3 operator3 ...), but we'll have
@@ -681,67 +764,82 @@
                     // The following code will do just that:
                     if (i == 1) {
                         // for the first operator, include both operands
-                        if (operand1 != null) operands.add(operand1);
-                        if (operand2 != null) operands.add(KoralObjectGenerator.
-                                wrapInClass(operand2, 128+classCounter++));
+                        if (operand1 != null)
+                            operands.add(operand1);
+                        if (operand2 != null)
+                            operands.add(KoralObjectGenerator.wrapInClass(
+                                    operand2, 128 + classCounter++));
                         // Don't put this into the super object directly but 
                         // store on operandStack (because this group will have  
                         // to be an operand of a subsequent operator)
                         operandStack.push(group);
                         // for all subsequent operators, only take 2nd operand
                         // (1st was already added by previous operator)
-                    } else if (i < node.getChildCount()-2) {
+                    }
+                    else if (i < node.getChildCount() - 2) {
                         // for all intermediate operators, include other 
                         // previous groups and 2nd operand. Store this on the
                         // operandStack, too.
-                        if (operand2 != null) operands.add(KoralObjectGenerator.
-                                wrapInClass(operand2, 128+classCounter++));
+                        if (operand2 != null)
+                            operands.add(KoralObjectGenerator.wrapInClass(
+                                    operand2, 128 + classCounter++));
                         operands.add(0, operandStack.pop());
                         operandStack.push(group);
-                    } else if (i == node.getChildCount()-2) {
+                    }
+                    else if (i == node.getChildCount() - 2) {
                         // This is the last operator. Include 2nd operand only
-                        if (operand2 != null) operands.add(operand2);
+                        if (operand2 != null)
+                            operands.add(operand2);
                     }
                 }
             }
             // Final step: decide what to do with the 'group' object, depending
             // on whether all relations have been processed
-            if (i == node.getChildCount()-2 && 
-                    relationCounter == totalRelationCount) {
+            if (i == node.getChildCount() - 2
+                    && relationCounter == totalRelationCount) {
                 putIntoSuperObject(group);
                 if (!operandStack.isEmpty()) {
                     operands.add(0, operandStack.pop());
                 }
                 objectStack.push(group);
                 stackedObjects++;
-            } else {
+            }
+            else {
                 operandStack.push(group);
             }
         }
     }
 
+
     /**
-     * Parses a unary_linguistic_operator node. Possible operators are: 
-     * root, arity, tokenarity. Operators are embedded into a koral:term,
+     * Parses a unary_linguistic_operator node. Possible operators
+     * are:
+     * root, arity, tokenarity. Operators are embedded into a
+     * koral:term,
      * in turn wrapped by an 'attr' property in a koral:span.
-     * @param node The unary_linguistic_operator node
-     * @return A map containing the attr key, to be inserted into koral:span 
+     * 
+     * @param node
+     *            The unary_linguistic_operator node
+     * @return A map containing the attr key, to be inserted into
+     *         koral:span
      */
-    private LinkedHashMap<String, Object> parseUnaryOperator(ParseTree node) {
+    private LinkedHashMap<String, Object> parseUnaryOperator (ParseTree node) {
         LinkedHashMap<String, Object> term = KoralObjectGenerator.makeTerm();
         String op = node.getChild(1).toStringTree(parser).substring(1);
         if (op.equals("arity") || op.equals("tokenarity")) {
-            LinkedHashMap<String, Object> boundary = 
-                    boundaryFromRangeSpec(node.getChild(3), false);
+            LinkedHashMap<String, Object> boundary = boundaryFromRangeSpec(
+                    node.getChild(3), false);
             term.put(op, boundary);
-        } else {
+        }
+        else {
             term.put(op, true);
         }
         return term;
     }
 
+
     @SuppressWarnings("unchecked")
-    private LinkedHashMap<String, Object> parseOperatorNode(
+    private LinkedHashMap<String, Object> parseOperatorNode (
             ParseTree operatorNode) {
         LinkedHashMap<String, Object> relation = null;
         String operator = getNodeCat(operatorNode);
@@ -749,68 +847,72 @@
         if (operator.equals("dominance")) {
             relation = KoralObjectGenerator.makeRelation();
             relation.put("groupType", "relation");
-            ParseTree qName = getFirstChildWithCat(
-                    operatorNode, "qName");
-            ParseTree edgeSpecNode = getFirstChildWithCat(
-                    operatorNode, "edgeSpec");
+            ParseTree qName = getFirstChildWithCat(operatorNode, "qName");
+            ParseTree edgeSpecNode = getFirstChildWithCat(operatorNode,
+                    "edgeSpec");
             ParseTree star = getFirstChildWithCat(operatorNode, "*");
-            ParseTree rangeSpec = getFirstChildWithCat(
-                    operatorNode, "rangeSpec");
-            LinkedHashMap<String,Object> term= KoralObjectGenerator.makeTerm();
+            ParseTree rangeSpec = getFirstChildWithCat(operatorNode,
+                    "rangeSpec");
+            LinkedHashMap<String, Object> term = KoralObjectGenerator
+                    .makeTerm();
             term.put("layer", "c");
-            if (qName != null) term = parseQNameNode(qName);
+            if (qName != null)
+                term = parseQNameNode(qName);
             if (edgeSpecNode != null) {
-                LinkedHashMap<String,Object> edgeSpec = 
-                        parseEdgeSpec(edgeSpecNode);
+                LinkedHashMap<String, Object> edgeSpec = parseEdgeSpec(edgeSpecNode);
                 String edgeSpecType = (String) edgeSpec.get("@type");
                 if (edgeSpecType.equals("koral:termGroup")) {
                     ((ArrayList<Object>) edgeSpec.get("operands")).add(term);
                     term = edgeSpec;
-                } else {
+                }
+                else {
                     term = KoralObjectGenerator.makeTermGroup("and");
-                    ArrayList<Object> termGroupOperands = 
-                            (ArrayList<Object>) term.get("operands");
+                    ArrayList<Object> termGroupOperands = (ArrayList<Object>) term
+                            .get("operands");
                     termGroupOperands.add(edgeSpec);
-                    LinkedHashMap<String,Object> constTerm = 
-                            KoralObjectGenerator.makeTerm();
+                    LinkedHashMap<String, Object> constTerm = KoralObjectGenerator
+                            .makeTerm();
                     constTerm.put("layer", "c");
                     termGroupOperands.add(constTerm);
                 }
             }
-            if (star != null) relation.put("boundary", 
-                    KoralObjectGenerator.makeBoundary(0, null));
-            if (rangeSpec != null) relation.put("boundary", 
-                    boundaryFromRangeSpec(rangeSpec));
+            if (star != null)
+                relation.put("boundary",
+                        KoralObjectGenerator.makeBoundary(0, null));
+            if (rangeSpec != null)
+                relation.put("boundary", boundaryFromRangeSpec(rangeSpec));
             relation.put("wrap", term);
         }
         else if (operator.equals("pointing")) {
             relation = KoralObjectGenerator.makeRelation();
             relation.put("groupType", "relation");
             ParseTree qName = getFirstChildWithCat(operatorNode, "qName");
-            ParseTree edgeSpec = 
-                    getFirstChildWithCat(operatorNode, "edgeSpec");
+            ParseTree edgeSpec = getFirstChildWithCat(operatorNode, "edgeSpec");
             ParseTree star = getFirstChildWithCat(operatorNode, "*");
-            ParseTree rangeSpec = 
-                    getFirstChildWithCat(operatorNode, "rangeSpec");
-            LinkedHashMap<String,Object> term= KoralObjectGenerator.makeTerm();
-            if (qName != null) term.putAll(parseQNameNode(qName));
-            if (edgeSpec != null) term.putAll(parseEdgeSpec(edgeSpec));
-            if (star != null) relation.put("boundary",
-                    KoralObjectGenerator.makeBoundary(0, null));
-            if (rangeSpec != null) relation.put("boundary",
-                    boundaryFromRangeSpec(rangeSpec));
+            ParseTree rangeSpec = getFirstChildWithCat(operatorNode,
+                    "rangeSpec");
+            LinkedHashMap<String, Object> term = KoralObjectGenerator
+                    .makeTerm();
+            if (qName != null)
+                term.putAll(parseQNameNode(qName));
+            if (edgeSpec != null)
+                term.putAll(parseEdgeSpec(edgeSpec));
+            if (star != null)
+                relation.put("boundary",
+                        KoralObjectGenerator.makeBoundary(0, null));
+            if (rangeSpec != null)
+                relation.put("boundary", boundaryFromRangeSpec(rangeSpec));
             relation.put("wrap", term);
         }
         else if (operator.equals("precedence")) {
             relation = new LinkedHashMap<String, Object>();
             relation.put("groupType", "sequence");
-            ParseTree rangeSpec = 
-                    getFirstChildWithCat(operatorNode, "rangeSpec");
+            ParseTree rangeSpec = getFirstChildWithCat(operatorNode,
+                    "rangeSpec");
             ParseTree star = getFirstChildWithCat(operatorNode, "*");
             ArrayList<Object> distances = new ArrayList<Object>();
             if (star != null) {
-                distances.add(KoralObjectGenerator.
-                        makeDistance("w", 0, null));
+                distances.add(KoralObjectGenerator.makeDistance("w", 0, null));
                 relation.put("distances", distances);
             }
             if (rangeSpec != null) {
@@ -821,46 +923,44 @@
         }
         else if (operator.equals("spanrelation")) {
             String reltype = operatorNode.getChild(0).toStringTree(parser);
-            String[] frames = new String[]{};
+            String[] frames = new String[] {};
             switch (reltype) {
                 case "_=_":
-                    frames = new String[]{"frames:matches"}; 
+                    frames = new String[] { "frames:matches" };
                     break;
                 case "_l_":
-                    frames = new String[]{"frames:startsWith", 
-                            "frames:matches"};
+                    frames = new String[] { "frames:startsWith",
+                            "frames:matches" };
                     break;
                 case "_r_":
-                    frames = new String[]{"frames:endsWith", 
-                            "frames:matches"};
+                    frames = new String[] { "frames:endsWith", "frames:matches" };
                     break;
                 case "_i_":
-                    frames = new String[]{"frames:isAround"};
+                    frames = new String[] { "frames:isAround" };
                     break;
                 case "_o_":
-                    frames = new String[]{"frames:overlapsLeft", 
-                            "frames:overlapsRight"};
+                    frames = new String[] { "frames:overlapsLeft",
+                            "frames:overlapsRight" };
                     break;
                 case "_ol_":
-                    frames = new String[]{"frames:overlapsLeft"};
+                    frames = new String[] { "frames:overlapsLeft" };
                     break;
                 case "_or_":
-                    frames = new String[]{"frames:overlapsRight"};
+                    frames = new String[] { "frames:overlapsRight" };
                     break;
             }
             relation = KoralObjectGenerator.makePosition(frames);
             relation.put("groupType", "position");
-        } 
+        }
         else if (operator.equals("near")) {
             relation = new LinkedHashMap<String, Object>();
             relation.put("groupType", "sequence");
-            ParseTree rangeSpec = 
-                    getFirstChildWithCat(operatorNode, "rangeSpec");
+            ParseTree rangeSpec = getFirstChildWithCat(operatorNode,
+                    "rangeSpec");
             ParseTree star = getFirstChildWithCat(operatorNode, "*");
             ArrayList<Object> distances = new ArrayList<Object>();
             if (star != null) {
-                distances.add(KoralObjectGenerator.
-                        makeDistance("w", 0, null));
+                distances.add(KoralObjectGenerator.makeDistance("w", 0, null));
                 relation.put("distances", distances);
             }
             if (rangeSpec != null) {
@@ -881,15 +981,17 @@
         return relation;
     }
 
+
     @SuppressWarnings("unchecked")
-    private LinkedHashMap<String,Object> parseEdgeSpec(ParseTree edgeSpec) {
+    private LinkedHashMap<String, Object> parseEdgeSpec (ParseTree edgeSpec) {
         List<ParseTree> annos = getChildrenWithCat(edgeSpec, "edgeAnno");
-        if (annos.size() == 1) return parseEdgeAnno(annos.get(0));
+        if (annos.size() == 1)
+            return parseEdgeAnno(annos.get(0));
         else {
-            LinkedHashMap<String,Object> termGroup = 
-                    KoralObjectGenerator.makeTermGroup("and");
-            ArrayList<Object> operands = 
-                    (ArrayList<Object>) termGroup.get("operands");
+            LinkedHashMap<String, Object> termGroup = KoralObjectGenerator
+                    .makeTermGroup("and");
+            ArrayList<Object> operands = (ArrayList<Object>) termGroup
+                    .get("operands");
             for (ParseTree anno : annos) {
                 operands.add(parseEdgeAnno(anno));
             }
@@ -897,42 +999,46 @@
         }
     }
 
-    private LinkedHashMap<String, Object> parseEdgeAnno(
-            ParseTree edgeAnnoSpec) {
-        LinkedHashMap<String, Object> edgeAnno = 
-                KoralObjectGenerator.makeTerm();
-        ParseTree textSpecNode= getFirstChildWithCat(edgeAnnoSpec, "textSpec");
+
+    private LinkedHashMap<String, Object> parseEdgeAnno (ParseTree edgeAnnoSpec) {
+        LinkedHashMap<String, Object> edgeAnno = KoralObjectGenerator
+                .makeTerm();
+        ParseTree textSpecNode = getFirstChildWithCat(edgeAnnoSpec, "textSpec");
         ParseTree layerNode = getFirstChildWithCat(edgeAnnoSpec, "layer");
         ParseTree foundryNode = getFirstChildWithCat(edgeAnnoSpec, "foundry");
-        ParseTree matchOperatorNode = 
-                getFirstChildWithCat(edgeAnnoSpec, "eqOperator");
-        if (foundryNode!=null) edgeAnno.put("foundry", 
-                foundryNode.getChild(0).toStringTree(parser));
-        if (layerNode!=null) edgeAnno.put("layer", 
-                layerNode.getChild(0).toStringTree(parser));
+        ParseTree matchOperatorNode = getFirstChildWithCat(edgeAnnoSpec,
+                "eqOperator");
+        if (foundryNode != null)
+            edgeAnno.put("foundry", foundryNode.getChild(0)
+                    .toStringTree(parser));
+        if (layerNode != null)
+            edgeAnno.put("layer", layerNode.getChild(0).toStringTree(parser));
         edgeAnno.putAll(parseTextSpec(textSpecNode));
         edgeAnno.put("match", parseMatchOperator(matchOperatorNode));
         return edgeAnno;
     }
 
-    private LinkedHashMap<String, Object> boundaryFromRangeSpec(
+
+    private LinkedHashMap<String, Object> boundaryFromRangeSpec (
             ParseTree rangeSpec) {
-        return boundaryFromRangeSpec(rangeSpec, true); 
+        return boundaryFromRangeSpec(rangeSpec, true);
     }
 
-    private LinkedHashMap<String, Object> boundaryFromRangeSpec(
+
+    private LinkedHashMap<String, Object> boundaryFromRangeSpec (
             ParseTree rangeSpec, boolean expandToMax) {
-        Integer min = Integer.parseInt(
-                rangeSpec.getChild(0).toStringTree(parser));
+        Integer min = Integer.parseInt(rangeSpec.getChild(0).toStringTree(
+                parser));
         Integer max = min;
-        if (expandToMax) max = null;
-        if (rangeSpec.getChildCount()==3) 
-            max = Integer.parseInt(
-                    rangeSpec.getChild(2).toStringTree(parser));
+        if (expandToMax)
+            max = null;
+        if (rangeSpec.getChildCount() == 3)
+            max = Integer.parseInt(rangeSpec.getChild(2).toStringTree(parser));
         return KoralObjectGenerator.makeBoundary(min, max);
     }
 
-    private LinkedHashMap<String, Object> parseDistance(ParseTree rangeSpec) {
+
+    private LinkedHashMap<String, Object> parseDistance (ParseTree rangeSpec) {
         String minString = rangeSpec.getChild(0).toStringTree(parser);
         String maxString = null; // not always given, prevent NPE
         if (minString.equals("0")) {
@@ -941,77 +1047,88 @@
         }
         // decrease by 1 to account for disparity between ANNIS distance and 
         // koral:distance (ANNIS "x .1,3 y" means distance range 0,2 in KoralQ)
-        Integer min = Integer.parseInt(minString)-1; 
+        Integer min = Integer.parseInt(minString) - 1;
         Integer max = null;
         if (rangeSpec.getChildCount() == 3) {
             maxString = rangeSpec.getChild(2).toStringTree(parser);
-            max = Integer.parseInt(maxString)-1;
+            max = Integer.parseInt(maxString) - 1;
         }
         return KoralObjectGenerator.makeDistance("w", min, max);
     }
 
-    private LinkedHashMap<String, Object> parseTextSpec(ParseTree node) {
+
+    private LinkedHashMap<String, Object> parseTextSpec (ParseTree node) {
         LinkedHashMap<String, Object> term = new LinkedHashMap<String, Object>();
         if (hasChild(node, "regex")) {
             term.put("type", "type:regex");
-            term.put("key", node.getChild(0).getChild(0).toStringTree(parser).
-                    replaceAll("/", ""));
-        } else {
+            term.put("key", node.getChild(0).getChild(0).toStringTree(parser)
+                    .replaceAll("/", ""));
+        }
+        else {
             term.put("key", node.getChild(1).toStringTree(parser));
         }
         term.put("match", "match:eq");
         return term;
     }
 
+
     /**
      * Parses the match operator (= or !=)
+     * 
      * @param node
      * @return
      */
-    private String parseMatchOperator(ParseTree node) {
-        if (node.getChildCount()>0) {
-            return node.getChild(0).getText().equals("=") ? 
-                    "match:eq" : "match:ne";
+    private String parseMatchOperator (ParseTree node) {
+        if (node.getChildCount() > 0) {
+            return node.getChild(0).getText().equals("=") ? "match:eq"
+                    : "match:ne";
         }
         return "match:eq";
     }
 
-    private LinkedHashMap<String, Object> parseQNameNode(ParseTree node) {
-        LinkedHashMap<String, Object> fields = 
-                new LinkedHashMap<String, Object>();
+
+    private LinkedHashMap<String, Object> parseQNameNode (ParseTree node) {
+        LinkedHashMap<String, Object> fields = new LinkedHashMap<String, Object>();
         ParseTree layerNode = getFirstChildWithCat(node, "layer");
         ParseTree foundryNode = getFirstChildWithCat(node, "foundry");
-        if (foundryNode != null) fields.put("foundry", 
-                foundryNode.getChild(0).toStringTree(parser));
+        if (foundryNode != null)
+            fields.put("foundry", foundryNode.getChild(0).toStringTree(parser));
         String layer = layerNode.getChild(0).toStringTree(parser);
-        if (layer.equals("pos")) layer = "p";
-        if (layer.equals("cat")) layer = "c";
+        if (layer.equals("pos"))
+            layer = "p";
+        if (layer.equals("cat"))
+            layer = "c";
         fields.put("layer", layer);
         return fields;
     }
 
-    private void putIntoSuperObject(LinkedHashMap<String, Object> object) {
+
+    private void putIntoSuperObject (LinkedHashMap<String, Object> object) {
         putIntoSuperObject(object, 0);
     }
 
+
     @SuppressWarnings({ "unchecked" })
-    private void putIntoSuperObject(
-            LinkedHashMap<String, Object> object, int objStackPosition) {
-        if (objectStack.size()>objStackPosition) {
-            ArrayList<Object> topObjectOperands = (ArrayList<Object>) 
-                    objectStack.get(objStackPosition).get("operands");
+    private void putIntoSuperObject (LinkedHashMap<String, Object> object,
+            int objStackPosition) {
+        if (objectStack.size() > objStackPosition) {
+            ArrayList<Object> topObjectOperands = (ArrayList<Object>) objectStack
+                    .get(objStackPosition).get("operands");
             if (!invertedOperandsLists.contains(topObjectOperands)) {
                 topObjectOperands.add(object);
-            } else {
+            }
+            else {
                 topObjectOperands.add(0, object);
             }
-        } else {
+        }
+        else {
             requestMap.put("query", object);
         }
     }
 
-    private void putAllButGroupType(
-            Map<String, Object> container, Map<String, Object> input) {
+
+    private void putAllButGroupType (Map<String, Object> container,
+            Map<String, Object> input) {
         for (String key : input.keySet()) {
             if (!key.equals("groupType")) {
                 container.put(key, input.get(key));
@@ -1019,11 +1136,12 @@
         }
     }
 
+
     private ParserRuleContext parseAnnisQuery (String query) {
-        Lexer lexer = new AqlLexer((CharStream)null);
+        Lexer lexer = new AqlLexer((CharStream) null);
         ParserRuleContext tree = null;
-        Antlr4DescriptiveErrorListener errorListener = 
-                new Antlr4DescriptiveErrorListener(query);
+        Antlr4DescriptiveErrorListener errorListener = new Antlr4DescriptiveErrorListener(
+                query);
         // Like p. 111
         try {
             // Tokenize input data
@@ -1038,8 +1156,9 @@
             parser.removeErrorListeners();
             parser.addErrorListener(errorListener);
             // Get starting rule from parser
-            Method startRule = AqlParser.class.getMethod("start"); 
-            tree = (ParserRuleContext)startRule.invoke(parser, (Object[])null);
+            Method startRule = AqlParser.class.getMethod("start");
+            tree = (ParserRuleContext) startRule
+                    .invoke(parser, (Object[]) null);
         }
         // Some things went wrong ...
         catch (Exception e) {
diff --git a/src/main/java/de/ids_mannheim/korap/query/serialize/Antlr3AbstractQueryProcessor.java b/src/main/java/de/ids_mannheim/korap/query/serialize/Antlr3AbstractQueryProcessor.java
index 9b86e69..e6b2d59 100644
--- a/src/main/java/de/ids_mannheim/korap/query/serialize/Antlr3AbstractQueryProcessor.java
+++ b/src/main/java/de/ids_mannheim/korap/query/serialize/Antlr3AbstractQueryProcessor.java
@@ -9,11 +9,15 @@
 import org.antlr.runtime.tree.Tree;
 
 /**
- * This class is provides methods for navigation and search in Abstract Syntax
- * Trees returned by ANTLR v3 parsers, using ANTLR v3 libraries. Any class that
- * extends this abstract class will thus be equipped with such methods,
- * which makes it easier to, e.g., retrieve children of a specific category
- * for some node. 
+ * This class is provides methods for navigation and search in
+ * Abstract Syntax
+ * Trees returned by ANTLR v3 parsers, using ANTLR v3 libraries. Any
+ * class that
+ * extends this abstract class will thus be equipped with such
+ * methods,
+ * which makes it easier to, e.g., retrieve children of a specific
+ * category
+ * for some node.
  * 
  * @author Joachim Bingel (bingel@ids-mannheim.de)
  * @version 0.3.0
@@ -27,17 +31,19 @@
      */
     protected Parser parser;
 
+
     /**
      * Returns the category (or 'label') of the root of a (sub-)
      * ParseTree (ANTLR 3).
-     *
-     * @param node The tree node. 
+     * 
+     * @param node
+     *            The tree node.
      * @return The category of the node.
      */
-    protected static String getNodeCat(Tree node) {
+    protected static String getNodeCat (Tree node) {
         String nodeCat = node.toStringTree();
         // from opening parenthesis to 1st whitespace
-        Pattern p = Pattern.compile("\\((.*?)\\s"); 
+        Pattern p = Pattern.compile("\\((.*?)\\s");
         Matcher m = p.matcher(node.toStringTree());
         if (m.find()) {
             nodeCat = m.group(1);
@@ -45,9 +51,10 @@
         return nodeCat;
     }
 
+
     /**
      * Tests whether a certain node has a child of a certain category.
-     *
+     * 
      * @param node
      *            The parent node.
      * @param childCat
@@ -55,7 +62,7 @@
      * @return true iff one or more children belong to the specified
      *         category.
      */
-    protected static boolean hasChild(Tree node, String childCat) {
+    protected static boolean hasChild (Tree node, String childCat) {
         for (int i = 0; i < node.getChildCount(); i++) {
             if (getNodeCat(node.getChild(i)).equals(childCat)) {
                 return true;
@@ -64,18 +71,21 @@
         return false;
     }
 
+
     /**
-     * Tests whether a certain node has a descendant (direct or indirect child)
+     * Tests whether a certain node has a descendant (direct or
+     * indirect child)
      * of a certain category.
-     *
+     * 
      * @param node
      *            The parent node.
      * @param childCat
      *            The category of the potential descendant.
-     * @return true iff one or more descendants belong to the specified
+     * @return true iff one or more descendants belong to the
+     *         specified
      *         category.
      */
-    protected static boolean hasDescendantWithCat(Tree node, String childCat) {
+    protected static boolean hasDescendantWithCat (Tree node, String childCat) {
         for (int i = 0; i < node.getChildCount(); i++) {
             Tree child = node.getChild(i);
             if (getNodeCat(child).equals(childCat)) {
@@ -88,12 +98,15 @@
         return false;
     }
 
+
     /**
      * Returns all children of a node.
-     * @param node The node.
-     * @return A list containing all children. 
+     * 
+     * @param node
+     *            The node.
+     * @return A list containing all children.
      */
-    protected static List<Tree> getChildren(Tree node) {
+    protected static List<Tree> getChildren (Tree node) {
         ArrayList<Tree> children = new ArrayList<Tree>();
         for (int i = 0; i < node.getChildCount(); i++) {
             children.add(node.getChild(i));
@@ -101,14 +114,20 @@
         return children;
     }
 
+
     /**
      * Returns all children of a node which are of a given category.
-     * @param node The node.
-     * @param nodeCat The node category constraining the returned children. 
-     * @return A (possibly empty) list containing all children of the given
-     *      category. 
+     * 
+     * @param node
+     *            The node.
+     * @param nodeCat
+     *            The node category constraining the returned
+     *            children.
+     * @return A (possibly empty) list containing all children of the
+     *         given
+     *         category.
      */
-    protected static List<Tree> getChildrenWithCat(Tree node, String nodeCat) {
+    protected static List<Tree> getChildrenWithCat (Tree node, String nodeCat) {
         ArrayList<Tree> children = new ArrayList<Tree>();
         for (int i = 0; i < node.getChildCount(); i++) {
             if (getNodeCat(node.getChild(i)).equals(nodeCat)) {
@@ -118,15 +137,22 @@
         return children;
     }
 
+
     /**
-     * Returns all descendants (direct or indirect children) of a node which
+     * Returns all descendants (direct or indirect children) of a node
+     * which
      * are of a given category.
-     * @param node The node.
-     * @param nodeCat The node category constraining the returned descendants. 
-     * @return A (possibly empty) list containing all descendants of the given
-     *      category. 
+     * 
+     * @param node
+     *            The node.
+     * @param nodeCat
+     *            The node category constraining the returned
+     *            descendants.
+     * @return A (possibly empty) list containing all descendants of
+     *         the given
+     *         category.
      */
-    protected List<Tree> getDescendantsWithCat(Tree node, String nodeCat) {
+    protected List<Tree> getDescendantsWithCat (Tree node, String nodeCat) {
         ArrayList<Tree> descendants = new ArrayList<Tree>();
         for (Tree child : getChildren(node)) {
             if (getNodeCat(child).equals(nodeCat)) {
@@ -136,29 +162,42 @@
         }
         return descendants;
     }
-    
+
+
     /**
      * Returns the first child of a node which is of a given category.
-     * @param node The node.
-     * @param nodeCat The node category constraining the returned child. 
-     * @return The first child with the given category, <tt>null</tt> if no
-     *      such child exists. 
+     * 
+     * @param node
+     *            The node.
+     * @param nodeCat
+     *            The node category constraining the returned child.
+     * @return The first child with the given category, <tt>null</tt>
+     *         if no
+     *         such child exists.
      */
-    protected static Tree getFirstChildWithCat(Tree node, String nodeCat) {
+    protected static Tree getFirstChildWithCat (Tree node, String nodeCat) {
         return getNthChildWithCat(node, nodeCat, 1);
     }
 
+
     /**
      * Returns the nth child of a node which is of a given category.
-     * @param node The node.
-     * @param nodeCat The node category constraining the returned child. 
-     * @param n The index of the child to return, among all children with the
-     *      given category.
-     * @return The nth child with the given category, <tt>null</tt> if no
-     *      such child exists (i.e., if n is larger than the number of children
-     *      with the given category). 
+     * 
+     * @param node
+     *            The node.
+     * @param nodeCat
+     *            The node category constraining the returned child.
+     * @param n
+     *            The index of the child to return, among all children
+     *            with the
+     *            given category.
+     * @return The nth child with the given category, <tt>null</tt> if
+     *         no
+     *         such child exists (i.e., if n is larger than the number
+     *         of children
+     *         with the given category).
      */
-    protected static Tree getNthChildWithCat(Tree node,String nodeCat, int n) {
+    protected static Tree getNthChildWithCat (Tree node, String nodeCat, int n) {
         int counter = 0;
         for (int i = 0; i < node.getChildCount(); i++) {
             if (getNodeCat(node.getChild(i)).equals(nodeCat)) {
diff --git a/src/main/java/de/ids_mannheim/korap/query/serialize/Antlr4AbstractQueryProcessor.java b/src/main/java/de/ids_mannheim/korap/query/serialize/Antlr4AbstractQueryProcessor.java
index d22c8b3..042b177 100644
--- a/src/main/java/de/ids_mannheim/korap/query/serialize/Antlr4AbstractQueryProcessor.java
+++ b/src/main/java/de/ids_mannheim/korap/query/serialize/Antlr4AbstractQueryProcessor.java
@@ -9,46 +9,54 @@
 import org.antlr.v4.runtime.tree.ParseTree;
 
 /**
- * This class is provides methods for navigation and search in Abstract Syntax
- * Trees returned by ANTLR v4 parsers, using ANTLR v4 libraries. Any class that
- * extends this abstract class will thus be equipped with such methods,
- * which makes it easier to, e.g., retrieve children of a specific category
- * for some node. 
+ * This class is provides methods for navigation and search in
+ * Abstract Syntax
+ * Trees returned by ANTLR v4 parsers, using ANTLR v4 libraries. Any
+ * class that
+ * extends this abstract class will thus be equipped with such
+ * methods,
+ * which makes it easier to, e.g., retrieve children of a specific
+ * category
+ * for some node.
  * 
  * @author Joachim Bingel (bingel@ids-mannheim.de)
  * @version 0.3.0
  * @since 0.1.0
  */
-public abstract class Antlr4AbstractQueryProcessor extends  
+public abstract class Antlr4AbstractQueryProcessor extends
         AbstractQueryProcessor {
 
     /**
-     * The ANTLR parser. Subclasses need to instantiate this field such that it
+     * The ANTLR parser. Subclasses need to instantiate this field
+     * such that it
      * can be used in the methods of this class.
      */
-	protected Parser parser;
+    protected Parser parser;
 
-	 /**
-     * Returns the category (or 'label') of the root of a (sub-) 
+
+    /**
+     * Returns the category (or 'label') of the root of a (sub-)
      * ParseTree (ANTLR 4).
-     *
-     * @param node The tree node. 
+     * 
+     * @param node
+     *            The tree node.
      * @return The category of the node.
      */
-	protected String getNodeCat(ParseTree node) {
+    protected String getNodeCat (ParseTree node) {
         String nodeCat = node.toStringTree(parser);
         // pattern: from opening parenthesis to 1st whitespace
-        Pattern p = Pattern.compile("\\((.*?)\\s"); 
+        Pattern p = Pattern.compile("\\((.*?)\\s");
         Matcher m = p.matcher(node.toStringTree(parser));
         if (m.find()) {
             nodeCat = m.group(1);
         }
         return nodeCat;
     }
-    
-	/**
+
+
+    /**
      * Tests whether a certain node has a child of a certain category.
-     *
+     * 
      * @param node
      *            The parent node.
      * @param childCat
@@ -56,7 +64,7 @@
      * @return true iff one or more children belong to the specified
      *         category.
      */
-    protected boolean hasChild(ParseTree node, String childCat) {
+    protected boolean hasChild (ParseTree node, String childCat) {
         for (int i = 0; i < node.getChildCount(); i++) {
             if (getNodeCat(node.getChild(i)).equals(childCat)) {
                 return true;
@@ -65,18 +73,21 @@
         return false;
     }
 
+
     /**
-     * Tests whether a certain node has a descendant (direct or indirect child)
+     * Tests whether a certain node has a descendant (direct or
+     * indirect child)
      * of a certain category.
-     *
+     * 
      * @param node
      *            The parent node.
      * @param childCat
      *            The category of the potential descendant.
-     * @return true iff one or more descendants belong to the specified
+     * @return true iff one or more descendants belong to the
+     *         specified
      *         category.
      */
-    protected boolean hasDescendantWithCat(ParseTree node, String childCat) {
+    protected boolean hasDescendantWithCat (ParseTree node, String childCat) {
         for (int i = 0; i < node.getChildCount(); i++) {
             ParseTree child = node.getChild(i);
             if (getNodeCat(child).equals(childCat)) {
@@ -88,29 +99,37 @@
         }
         return false;
     }
-    
+
+
     /**
      * Returns all children of a node.
-     * @param node The node.
-     * @return A list containing all children. 
+     * 
+     * @param node
+     *            The node.
+     * @return A list containing all children.
      */
-    protected List<ParseTree> getChildren(ParseTree node) {
+    protected List<ParseTree> getChildren (ParseTree node) {
         ArrayList<ParseTree> children = new ArrayList<ParseTree>();
         for (int i = 0; i < node.getChildCount(); i++) {
-                children.add(node.getChild(i));
+            children.add(node.getChild(i));
         }
         return children;
     }
-    
+
+
     /**
      * Returns all children of a node which are of a given category.
-     * @param node The node.
-     * @param nodeCat The node category constraining the returned children. 
-     * @return A (possibly empty) list containing all children of the given
-     *      category. 
+     * 
+     * @param node
+     *            The node.
+     * @param nodeCat
+     *            The node category constraining the returned
+     *            children.
+     * @return A (possibly empty) list containing all children of the
+     *         given
+     *         category.
      */
-    protected List<ParseTree> getChildrenWithCat(ParseTree node, 
-            String nodeCat) {
+    protected List<ParseTree> getChildrenWithCat (ParseTree node, String nodeCat) {
         ArrayList<ParseTree> children = new ArrayList<ParseTree>();
         for (int i = 0; i < node.getChildCount(); i++) {
             if (getNodeCat(node.getChild(i)).equals(nodeCat)) {
@@ -119,16 +138,23 @@
         }
         return children;
     }
-    
+
+
     /**
-     * Returns all descendants (direct or indirect children) of a node which
+     * Returns all descendants (direct or indirect children) of a node
+     * which
      * are of a given category.
-     * @param node The node.
-     * @param nodeCat The node category constraining the returned descendants. 
-     * @return A (possibly empty) list containing all descendants of the given
-     *      category. 
+     * 
+     * @param node
+     *            The node.
+     * @param nodeCat
+     *            The node category constraining the returned
+     *            descendants.
+     * @return A (possibly empty) list containing all descendants of
+     *         the given
+     *         category.
      */
-    protected List<ParseTree> getDescendantsWithCat(ParseTree node, 
+    protected List<ParseTree> getDescendantsWithCat (ParseTree node,
             String nodeCat) {
         ArrayList<ParseTree> descendants = new ArrayList<ParseTree>();
         for (ParseTree child : getChildren(node)) {
@@ -140,38 +166,51 @@
         return descendants;
     }
 
+
     /**
      * Returns the first child of a node which is of a given category.
-     * @param node The node.
-     * @param nodeCat The node category constraining the returned child. 
-     * @return The first child with the given category, <tt>null</tt> if no
-     *      such child exists. 
+     * 
+     * @param node
+     *            The node.
+     * @param nodeCat
+     *            The node category constraining the returned child.
+     * @return The first child with the given category, <tt>null</tt>
+     *         if no
+     *         such child exists.
      */
-    protected ParseTree getFirstChildWithCat(ParseTree node, String nodeCat) {
+    protected ParseTree getFirstChildWithCat (ParseTree node, String nodeCat) {
         return getNthChildWithCat(node, nodeCat, 1);
     }
-    
+
+
     /**
      * Returns the nth child of a node which is of a given category.
-     * @param node The node.
-     * @param nodeCat The node category constraining the returned child. 
-     * @param n The index of the child to return, among all children with the
-     *      given category.
-     * @return The nth child with the given category, <tt>null</tt> if no
-     *      such child exists (i.e., if n is larger than the number of children
-     *      with the given category). 
+     * 
+     * @param node
+     *            The node.
+     * @param nodeCat
+     *            The node category constraining the returned child.
+     * @param n
+     *            The index of the child to return, among all children
+     *            with the
+     *            given category.
+     * @return The nth child with the given category, <tt>null</tt> if
+     *         no
+     *         such child exists (i.e., if n is larger than the number
+     *         of children
+     *         with the given category).
      */
-    protected ParseTree getNthChildWithCat(ParseTree node, String nodeCat, 
+    protected ParseTree getNthChildWithCat (ParseTree node, String nodeCat,
             int n) {
-    	int counter = 0;
-    	for (int i = 0; i < node.getChildCount(); i++) {
-    		if (getNodeCat(node.getChild(i)).equals(nodeCat)) {
-    			counter++;
-    			if (counter == n) {
-    				return node.getChild(i);
-    			}
-    		}
-    	}
+        int counter = 0;
+        for (int i = 0; i < node.getChildCount(); i++) {
+            if (getNodeCat(node.getChild(i)).equals(nodeCat)) {
+                counter++;
+                if (counter == n) {
+                    return node.getChild(i);
+                }
+            }
+        }
         return null;
     }
 }
\ No newline at end of file
diff --git a/src/main/java/de/ids_mannheim/korap/query/serialize/CollectionQueryProcessor.java b/src/main/java/de/ids_mannheim/korap/query/serialize/CollectionQueryProcessor.java
index d85c03e..7003425 100644
--- a/src/main/java/de/ids_mannheim/korap/query/serialize/CollectionQueryProcessor.java
+++ b/src/main/java/de/ids_mannheim/korap/query/serialize/CollectionQueryProcessor.java
@@ -17,9 +17,12 @@
 import java.util.regex.Pattern;
 
 /**
- * This class processes queries that define virtual collections and create
- * an KoralQuery representation of these in the <tt>collection</tt> attribute
- * of the KoralQuery tree. See the official documentation for VC query syntax
+ * This class processes queries that define virtual collections and
+ * create
+ * an KoralQuery representation of these in the <tt>collection</tt>
+ * attribute
+ * of the KoralQuery tree. See the official documentation for VC query
+ * syntax
  * and functionality.
  * 
  * @author Michael Hanl (hanl@ids-mannheim.de)
@@ -29,44 +32,51 @@
  */
 public class CollectionQueryProcessor extends Antlr4AbstractQueryProcessor {
 
-	private static Logger log = 
-	        LoggerFactory.getLogger(CollectionQueryProcessor.class);
+    private static Logger log = LoggerFactory
+            .getLogger(CollectionQueryProcessor.class);
 
-    public CollectionQueryProcessor() {
-    	KoralObjectGenerator.setQueryProcessor(this);
-	}
-    
-    public CollectionQueryProcessor(boolean verbose) {
-    	KoralObjectGenerator.setQueryProcessor(this);
-    	CollectionQueryProcessor.verbose = verbose;
-	}
-    
-    public CollectionQueryProcessor(String query) {
-    	KoralObjectGenerator.setQueryProcessor(this);
-    	process(query);
-	}
 
-	@Override
-    public void process(String query) {
+    public CollectionQueryProcessor () {
+        KoralObjectGenerator.setQueryProcessor(this);
+    }
+
+
+    public CollectionQueryProcessor (boolean verbose) {
+        KoralObjectGenerator.setQueryProcessor(this);
+        CollectionQueryProcessor.verbose = verbose;
+    }
+
+
+    public CollectionQueryProcessor (String query) {
+        KoralObjectGenerator.setQueryProcessor(this);
+        process(query);
+    }
+
+
+    @Override
+    public void process (String query) {
         ParseTree tree = parseCollectionQuery(query);
         if (this.parser != null) {
             super.parser = this.parser;
-        } else {
-            throw new NullPointerException(
-                    "Parser has not been instantiated!");
         }
-        log.info("Processing virtual collection query: "+query);
-        if (verbose) System.out.println(tree.toStringTree(parser));
+        else {
+            throw new NullPointerException("Parser has not been instantiated!");
+        }
+        log.info("Processing virtual collection query: " + query);
+        if (verbose)
+            System.out.println(tree.toStringTree(parser));
         if (tree != null) {
-			log.debug("ANTLR parse tree: "+tree.toStringTree(parser));
-			processNode(tree);
-		} else {
-			addError(StatusCodes.MALFORMED_QUERY, 
-			        "Could not parse query >>> "+query+" <<<.");
-		}
+            log.debug("ANTLR parse tree: " + tree.toStringTree(parser));
+            processNode(tree);
+        }
+        else {
+            addError(StatusCodes.MALFORMED_QUERY, "Could not parse query >>> "
+                    + query + " <<<.");
+        }
     }
 
-    private void processNode(ParseTree node) {
+
+    private void processNode (ParseTree node) {
         // Top-down processing
         String nodeCat = getNodeCat(node);
         openNodeCats.push(nodeCat);
@@ -77,19 +87,19 @@
             System.out.println(openNodeCats);
         }
 
-		/*
+        /*
          ****************************************************************
-		 **************************************************************** 
-		 * 			Processing individual node categories  				*
-		 ****************************************************************
-		 ****************************************************************
-		 */
+         **************************************************************** 
+         * 			Processing individual node categories  				*
+         ****************************************************************
+         ****************************************************************
+         */
 
         if (nodeCat.equals("relation")) {
-        	String operator = getNodeCat(node.getChild(1).getChild(0))
-        	        .equals("&") ? "and" : "or";
-            LinkedHashMap<String, Object> relationGroup = 
-                    KoralObjectGenerator.makeDocGroup(operator);
+            String operator = getNodeCat(node.getChild(1).getChild(0)).equals(
+                    "&") ? "and" : "or";
+            LinkedHashMap<String, Object> relationGroup = KoralObjectGenerator
+                    .makeDocGroup(operator);
             putIntoSuperObject(relationGroup);
             objectStack.push(relationGroup);
             stackedObjects++;
@@ -100,116 +110,116 @@
             String field = fieldNode.getChild(0).toStringTree(parser);
             ParseTree operatorNode = getFirstChildWithCat(node, "operator");
             ParseTree valueNode = getFirstChildWithCat(node, "value");
-            LinkedHashMap<String, Object> term = 
-                    KoralObjectGenerator.makeDoc();
+            LinkedHashMap<String, Object> term = KoralObjectGenerator.makeDoc();
             term.put("key", field);
             term.putAll(parseValue(valueNode));
             String match = operatorNode.getText();
             term.put("match", "match:" + interpretMatchOperator(match));
             if (checkOperatorValueConformance(term) == false) {
-            	requestMap = new LinkedHashMap<String,Object>();
-            	return;
+                requestMap = new LinkedHashMap<String, Object>();
+                return;
             }
             if (checkDateValidity(valueNode)) {
-        		addWarning("The collection query contains a value that looks"
-        		        + " like a date ('"+valueNode.getText()+"') and an"
-        				+ " operator that is only defined for strings"
-        				+ " ('"+match+"'). The value is interpreted as"
-        				+ " a string. Use a date operator to ensure the value"
-        				+ " is treated as a date");            	
+                addWarning("The collection query contains a value that looks"
+                        + " like a date ('" + valueNode.getText() + "') and an"
+                        + " operator that is only defined for strings" + " ('"
+                        + match + "'). The value is interpreted as"
+                        + " a string. Use a date operator to ensure the value"
+                        + " is treated as a date");
             }
             putIntoSuperObject(term);
         }
-        
+
         if (nodeCat.equals("dateconstraint")) {
             ParseTree fieldNode = getFirstChildWithCat(node, "field");
             String field = fieldNode.getChild(0).toStringTree(parser);
             ParseTree dateOpNode = getFirstChildWithCat(node, "dateOp");
             ParseTree dateNode = getFirstChildWithCat(node, "date");
 
-            LinkedHashMap<String, Object> term = 
-                    KoralObjectGenerator.makeDoc();
+            LinkedHashMap<String, Object> term = KoralObjectGenerator.makeDoc();
             term.put("key", field);
             term.putAll(parseValue(dateNode));
             String match = dateOpNode.getText();
             term.put("match", "match:" + interpretMatchOperator(match));
             if (checkOperatorValueConformance(term) == false) {
-            	requestMap = new LinkedHashMap<String,Object>();
-            	return;
+                requestMap = new LinkedHashMap<String, Object>();
+                return;
             }
             putIntoSuperObject(term);
         }
-        
+
         if (nodeCat.equals("token")) {
-			LinkedHashMap<String,Object> token = 
-			        KoralObjectGenerator.makeToken();
-			// handle negation
-			List<ParseTree> negations = getChildrenWithCat(node, "!");
-			boolean negated = false;
-			boolean isRegex = false;
-			if (negations.size() % 2 == 1) negated = true;
-			if (getNodeCat(node.getChild(0)).equals("key")) {
-				// no 'term' child, but direct key specification: process here
-				LinkedHashMap<String,Object> term = 
-				        KoralObjectGenerator.makeTerm();
-				String key = node.getChild(0).getText();
-				if (getNodeCat(node.getChild(0).getChild(0)).equals("regex")) {
-					isRegex = true;
-					term.put("type", "type:regex");
-					key = key.substring(1,key.length()-1);
-				}
-				term.put("layer", "orth");
-				term.put("key", key);
-				String matches = negated ? "ne" : "eq";
-				term.put("match", "match:"+matches);
-				ParseTree flagNode = getFirstChildWithCat(node, "flag");
-				if (flagNode != null) {
-				    // substring removes leading slash '/'
-					String flag = getNodeCat(flagNode.getChild(0)).substring(1); 
-					if (flag.contains("i")) 
-					    term.put("caseInsensitive", true);
-					else if (flag.contains("I")) 
-					    term.put("caseInsensitive", false);
-					if (flag.contains("x")) {
-						term.put("type", "type:regex");
-						if (!isRegex) {
-							key = QueryUtils.escapeRegexSpecialChars(key); 
-						}
-						term.put("key", ".*?"+key+".*?"); // overwrite key
-					}
-				}
-				token.put("wrap", term);
-			} else {
-				// child is 'term' or 'termGroup' -> process in extra method 
-				LinkedHashMap<String,Object> termOrTermGroup = 
-				        parseTermOrTermGroup(node.getChild(1), negated);
-				token.put("wrap", termOrTermGroup);
-			}
-			putIntoSuperObject(token);
-			visited.add(node.getChild(0));
-			visited.add(node.getChild(2));
-		}
+            LinkedHashMap<String, Object> token = KoralObjectGenerator
+                    .makeToken();
+            // handle negation
+            List<ParseTree> negations = getChildrenWithCat(node, "!");
+            boolean negated = false;
+            boolean isRegex = false;
+            if (negations.size() % 2 == 1)
+                negated = true;
+            if (getNodeCat(node.getChild(0)).equals("key")) {
+                // no 'term' child, but direct key specification: process here
+                LinkedHashMap<String, Object> term = KoralObjectGenerator
+                        .makeTerm();
+                String key = node.getChild(0).getText();
+                if (getNodeCat(node.getChild(0).getChild(0)).equals("regex")) {
+                    isRegex = true;
+                    term.put("type", "type:regex");
+                    key = key.substring(1, key.length() - 1);
+                }
+                term.put("layer", "orth");
+                term.put("key", key);
+                String matches = negated ? "ne" : "eq";
+                term.put("match", "match:" + matches);
+                ParseTree flagNode = getFirstChildWithCat(node, "flag");
+                if (flagNode != null) {
+                    // substring removes leading slash '/'
+                    String flag = getNodeCat(flagNode.getChild(0)).substring(1);
+                    if (flag.contains("i"))
+                        term.put("caseInsensitive", true);
+                    else if (flag.contains("I"))
+                        term.put("caseInsensitive", false);
+                    if (flag.contains("x")) {
+                        term.put("type", "type:regex");
+                        if (!isRegex) {
+                            key = QueryUtils.escapeRegexSpecialChars(key);
+                        }
+                        term.put("key", ".*?" + key + ".*?"); // overwrite key
+                    }
+                }
+                token.put("wrap", term);
+            }
+            else {
+                // child is 'term' or 'termGroup' -> process in extra method 
+                LinkedHashMap<String, Object> termOrTermGroup = parseTermOrTermGroup(
+                        node.getChild(1), negated);
+                token.put("wrap", termOrTermGroup);
+            }
+            putIntoSuperObject(token);
+            visited.add(node.getChild(0));
+            visited.add(node.getChild(2));
+        }
         objectsToPop.push(stackedObjects);
 
-		/*
+        /*
          ****************************************************************
-		 **************************************************************** 
-		 *  recursion until 'request' node (root of tree) is processed  *
-		 ****************************************************************
-		 ****************************************************************
-		 */
+         **************************************************************** 
+         *  recursion until 'request' node (root of tree) is processed  *
+         ****************************************************************
+         ****************************************************************
+         */
         for (int i = 0; i < node.getChildCount(); i++) {
             ParseTree child = node.getChild(i);
             processNode(child);
         }
 
-		/*
+        /*
          **************************************************************
-		 * Stuff that happens after processing the children of a node *
-		 **************************************************************
-		 */
+         * Stuff that happens after processing the children of a node *
+         **************************************************************
+         */
         if (!objectsToPop.isEmpty()) {
-        	int toPop = objectsToPop.pop();
+            int toPop = objectsToPop.pop();
             for (int i = 0; i < toPop; i++) {
                 objectStack.pop();
             }
@@ -219,76 +229,83 @@
 
     }
 
-	/**
-	 * Checks whether the combination of operator and value is legal 
-	 * (inequation operators <,>,<=,>= may only be used with dates).
-	 */
-    private boolean checkOperatorValueConformance(
+
+    /**
+     * Checks whether the combination of operator and value is legal
+     * (inequation operators <,>,<=,>= may only be used with dates).
+     */
+    private boolean checkOperatorValueConformance (
             LinkedHashMap<String, Object> term) {
-		String match = (String) term.get("match");
-		String type = (String) term.get("type");
-		if (type == null || type.equals("type:regex")) {
-			if (!(match.equals("match:eq") 
-			        || match.equals("match:ne") 
-			        || match.equals("match:contains") 
-			        || match.equals("match:containsnot"))) {
-				addError(StatusCodes.INCOMPATIBLE_OPERATOR_AND_OPERAND, 
-				       "You used an inequation operator with a string value.");
-				return false;
-			}
-		}
-		return true;
-	}
+        String match = (String) term.get("match");
+        String type = (String) term.get("type");
+        if (type == null || type.equals("type:regex")) {
+            if (!(match.equals("match:eq") || match.equals("match:ne")
+                    || match.equals("match:contains") || match
+                        .equals("match:containsnot"))) {
+                addError(StatusCodes.INCOMPATIBLE_OPERATOR_AND_OPERAND,
+                        "You used an inequation operator with a string value.");
+                return false;
+            }
+        }
+        return true;
+    }
 
-	private LinkedHashMap<String, Object> parseValue(ParseTree valueNode) {
-    	LinkedHashMap<String, Object> map = 
-    	        new LinkedHashMap<String, Object>();
-    	if (getNodeCat(valueNode).equals("date")) {
-    		map.put("type", "type:date");
-    		checkDateValidity(valueNode);
-    	}
-    	if (getNodeCat(valueNode.getChild(0)).equals("regex")) {
-    		String regex = 
-    		        valueNode.getChild(0).getChild(0).toStringTree(parser);
-    		map.put("value", regex.substring(1, regex.length()-1));
-    		map.put("type", "type:regex");
-    	} else if (getNodeCat(valueNode.getChild(0)).equals("multiword")) {
-    		String mw = ""; // multiword
-    		for (int i=1; i<valueNode.getChild(0).getChildCount()-1; i++) {
-    			mw += valueNode.getChild(0).getChild(i).getText() + " ";
-    		}
-    		map.put("value", mw.substring(0, mw.length()-1));
-    	} else {
-    		map.put("value", valueNode.getChild(0).toStringTree(parser));
-    	}
-		return map;
-	}
 
-	/**
-	 * Checks if a date 
-	 * @param valueNode
-	 * @return
-	 */
-	private boolean checkDateValidity(ParseTree valueNode) {
-		Pattern p = Pattern.compile("[0-9]{4}(-([0-9]{2})(-([0-9]{2}))?)?");
-		Matcher m = p.matcher(valueNode.getText());
-		
-		if (!m.find()) return false;
-		String month = m.group(2);
-		String day = m.group(4);
-		if (month != null) {
-			if (Integer.parseInt(month) > 12) {
-				return false;
-			} else if (day != null) {
-				if (Integer.parseInt(day) > 31) {
-					return false;
-				}
-			}
-		}
-		return true;
-	}
+    private LinkedHashMap<String, Object> parseValue (ParseTree valueNode) {
+        LinkedHashMap<String, Object> map = new LinkedHashMap<String, Object>();
+        if (getNodeCat(valueNode).equals("date")) {
+            map.put("type", "type:date");
+            checkDateValidity(valueNode);
+        }
+        if (getNodeCat(valueNode.getChild(0)).equals("regex")) {
+            String regex = valueNode.getChild(0).getChild(0)
+                    .toStringTree(parser);
+            map.put("value", regex.substring(1, regex.length() - 1));
+            map.put("type", "type:regex");
+        }
+        else if (getNodeCat(valueNode.getChild(0)).equals("multiword")) {
+            String mw = ""; // multiword
+            for (int i = 1; i < valueNode.getChild(0).getChildCount() - 1; i++) {
+                mw += valueNode.getChild(0).getChild(i).getText() + " ";
+            }
+            map.put("value", mw.substring(0, mw.length() - 1));
+        }
+        else {
+            map.put("value", valueNode.getChild(0).toStringTree(parser));
+        }
+        return map;
+    }
 
-	private String interpretMatchOperator(String match) {
+
+    /**
+     * Checks if a date
+     * 
+     * @param valueNode
+     * @return
+     */
+    private boolean checkDateValidity (ParseTree valueNode) {
+        Pattern p = Pattern.compile("[0-9]{4}(-([0-9]{2})(-([0-9]{2}))?)?");
+        Matcher m = p.matcher(valueNode.getText());
+
+        if (!m.find())
+            return false;
+        String month = m.group(2);
+        String day = m.group(4);
+        if (month != null) {
+            if (Integer.parseInt(month) > 12) {
+                return false;
+            }
+            else if (day != null) {
+                if (Integer.parseInt(day) > 31) {
+                    return false;
+                }
+            }
+        }
+        return true;
+    }
+
+
+    private String interpretMatchOperator (String match) {
         String out = null;
         switch (match) {
             case "<":
@@ -311,10 +328,10 @@
                 break;
             case "~":
                 out = "contains";
-                break;    
+                break;
             case "!~":
                 out = "containsnot";
-                break;    
+                break;
             case "in":
                 out = "eq";
                 break;
@@ -323,21 +340,22 @@
                 break;
             case "until":
                 out = "leq";
-                break;    
+                break;
             case "since":
                 out = "geq";
                 break;
             default:
-            	out = match;
-            	addError(StatusCodes.UNKNOWN_QUERY_ELEMENT, 
-            	        "Unknown operator '"+match+"'.");
-            	break;
+                out = match;
+                addError(StatusCodes.UNKNOWN_QUERY_ELEMENT,
+                        "Unknown operator '" + match + "'.");
+                break;
         }
         return out;
     }
-	
-	@Deprecated
-    private String invertInequation(String op) {
+
+
+    @Deprecated
+    private String invertInequation (String op) {
         String inv = null;
         switch (op) {
             case "lt":
@@ -356,132 +374,157 @@
         return inv;
     }
 
-    private void putIntoSuperObject(LinkedHashMap<String, Object> object) {
+
+    private void putIntoSuperObject (LinkedHashMap<String, Object> object) {
         putIntoSuperObject(object, 0);
     }
 
-    @SuppressWarnings({"unchecked"})
-    private void putIntoSuperObject(LinkedHashMap<String, Object> object, 
+
+    @SuppressWarnings({ "unchecked" })
+    private void putIntoSuperObject (LinkedHashMap<String, Object> object,
             int objStackPosition) {
         if (objectStack.size() > objStackPosition) {
-            ArrayList<Object> topObjectOperands = (ArrayList<Object>) 
-                    objectStack.get(objStackPosition).get("operands");
+            ArrayList<Object> topObjectOperands = (ArrayList<Object>) objectStack
+                    .get(objStackPosition).get("operands");
             topObjectOperands.add(object);
-        } else {
-//        	requestMap = object;
-        	requestMap.put("collection", object);
+        }
+        else {
+            //        	requestMap = object;
+            requestMap.put("collection", object);
         }
     }
 
-    private LinkedHashMap<String, Object> parseTermOrTermGroup(
-			ParseTree node, boolean negated) {
-		return parseTermOrTermGroup(node, negated, "token");
-	}
-    
+
+    private LinkedHashMap<String, Object> parseTermOrTermGroup (ParseTree node,
+            boolean negated) {
+        return parseTermOrTermGroup(node, negated, "token");
+    }
+
+
     /**
-	 * Parses a (term) or (termGroup) node
-	 * @param node
-	 * @param negatedGlobal Indicates whether the term/termGroup is globally 
-	 * negated, e.g. through a negation operator preceding the related token  
-	 * like "![base=foo]". Global negation affects the "match" parameter.
-	 * @return A term or termGroup object, depending on input
-	 */
-	@SuppressWarnings("unchecked")
-	private LinkedHashMap<String, Object> parseTermOrTermGroup(
-	        ParseTree node, boolean negatedGlobal, String mode) {
-		if (getNodeCat(node).equals("term")) {
-			String key = null;
-			LinkedHashMap<String,Object> term = 
-			        KoralObjectGenerator.makeTerm();
-			// handle negation
-			boolean negated = negatedGlobal;
-			boolean isRegex = false;
-			List<ParseTree> negations = getChildrenWithCat(node, "!");
-			if (negations.size() % 2 == 1) negated = !negated;
-			// retrieve possible nodes
-			ParseTree keyNode = getFirstChildWithCat(node, "key");
-			ParseTree valueNode = getFirstChildWithCat(node, "value");
-			ParseTree layerNode = getFirstChildWithCat(node, "layer");
-			ParseTree foundryNode = getFirstChildWithCat(node, "foundry");
-			ParseTree termOpNode = getFirstChildWithCat(node, "termOp");
-			ParseTree flagNode = getFirstChildWithCat(node, "flag");
-			// process foundry
-			if (foundryNode != null) 
-			    term.put("foundry", foundryNode.getText());
-			// process layer: map "base" -> "lemma"
-			if (layerNode != null) {
-				String layer = layerNode.getText();
-				if (layer.equals("base")) layer="lemma";
-				if (mode.equals("span")) term.put("key", layer);
-				else term.put("layer", layer);
-			}
-			// process key: 'normal' or regex?
-			key = keyNode.getText();
-			if (getNodeCat(keyNode.getChild(0)).equals("regex")) {
-				isRegex = true;
-				term.put("type", "type:regex");
-				// remove leading and trailing slashes
-				key = key.substring(1, key.length()-1); 
-			}
-			if (mode.equals("span")) term.put("value", key);
-			else term.put("key", key);
-			// process value
-			if (valueNode != null) term.put("value", valueNode.getText());
-			// process operator ("match" property)
-			if (termOpNode != null) {
-				String termOp = termOpNode.getText();
-				negated = termOp.contains("!") ? !negated : negated; 
-				if (!negated) term.put("match", "match:eq");
-				else term.put("match", "match:ne");
-			}
-			// process possible flags
-			if (flagNode != null) {
-			    // substring removes leading slash '/'
-				String flag = getNodeCat(flagNode.getChild(0)).substring(1); 
-				if (flag.contains("i")) term.put("caseInsensitive", true);
-				else if (flag.contains("I")) term.put("caseInsensitive", false);
-				if (flag.contains("x")) {
-					if (!isRegex) {
-						key = QueryUtils.escapeRegexSpecialChars(key); 
-					}
-					// flag 'x' allows submatches: append .*? to key
-					term.put("key", ".*?"+key+".*?");   
-					term.put("type", "type:regex");
-				}
-			}
-			return term;
-		} else {
-			// For termGroups, establish a boolean relation between operands 
-		    // and recursively call this function with the term or termGroup 
-			// operands.
-			LinkedHashMap<String,Object> termGroup = null;
-			ParseTree leftOp = null;
-			ParseTree rightOp = null;
-			// check for leading/trailing parantheses
-			if (!getNodeCat(node.getChild(0)).equals("(")) 
-			    leftOp = node.getChild(0);
-			else leftOp = node.getChild(1);
-			if (!getNodeCat(node.getChild(node.getChildCount()-1)).equals(")")) 
-			    rightOp = node.getChild(node.getChildCount()-1);
-			else rightOp = node.getChild(node.getChildCount()-2);
-			// establish boolean relation
-			ParseTree boolOp = getFirstChildWithCat(node, "booleanOp"); 
-			String operator = boolOp.getText().equals("&") ? "and" : "or";
-			termGroup = KoralObjectGenerator.makeTermGroup(operator);
-			ArrayList<Object> operands = 
-			        (ArrayList<Object>) termGroup.get("operands");
-			// recursion with left/right operands
-			operands.add(parseTermOrTermGroup(leftOp, negatedGlobal, mode));
-			operands.add(parseTermOrTermGroup(rightOp, negatedGlobal, mode));
-			return termGroup;
-		}
-	}
-    
-    private ParserRuleContext parseCollectionQuery(String query) {
+     * Parses a (term) or (termGroup) node
+     * 
+     * @param node
+     * @param negatedGlobal
+     *            Indicates whether the term/termGroup is globally
+     *            negated, e.g. through a negation operator preceding
+     *            the related token
+     *            like "![base=foo]". Global negation affects the
+     *            "match" parameter.
+     * @return A term or termGroup object, depending on input
+     */
+    @SuppressWarnings("unchecked")
+    private LinkedHashMap<String, Object> parseTermOrTermGroup (ParseTree node,
+            boolean negatedGlobal, String mode) {
+        if (getNodeCat(node).equals("term")) {
+            String key = null;
+            LinkedHashMap<String, Object> term = KoralObjectGenerator
+                    .makeTerm();
+            // handle negation
+            boolean negated = negatedGlobal;
+            boolean isRegex = false;
+            List<ParseTree> negations = getChildrenWithCat(node, "!");
+            if (negations.size() % 2 == 1)
+                negated = !negated;
+            // retrieve possible nodes
+            ParseTree keyNode = getFirstChildWithCat(node, "key");
+            ParseTree valueNode = getFirstChildWithCat(node, "value");
+            ParseTree layerNode = getFirstChildWithCat(node, "layer");
+            ParseTree foundryNode = getFirstChildWithCat(node, "foundry");
+            ParseTree termOpNode = getFirstChildWithCat(node, "termOp");
+            ParseTree flagNode = getFirstChildWithCat(node, "flag");
+            // process foundry
+            if (foundryNode != null)
+                term.put("foundry", foundryNode.getText());
+            // process layer: map "base" -> "lemma"
+            if (layerNode != null) {
+                String layer = layerNode.getText();
+                if (layer.equals("base"))
+                    layer = "lemma";
+                if (mode.equals("span"))
+                    term.put("key", layer);
+                else
+                    term.put("layer", layer);
+            }
+            // process key: 'normal' or regex?
+            key = keyNode.getText();
+            if (getNodeCat(keyNode.getChild(0)).equals("regex")) {
+                isRegex = true;
+                term.put("type", "type:regex");
+                // remove leading and trailing slashes
+                key = key.substring(1, key.length() - 1);
+            }
+            if (mode.equals("span"))
+                term.put("value", key);
+            else
+                term.put("key", key);
+            // process value
+            if (valueNode != null)
+                term.put("value", valueNode.getText());
+            // process operator ("match" property)
+            if (termOpNode != null) {
+                String termOp = termOpNode.getText();
+                negated = termOp.contains("!") ? !negated : negated;
+                if (!negated)
+                    term.put("match", "match:eq");
+                else
+                    term.put("match", "match:ne");
+            }
+            // process possible flags
+            if (flagNode != null) {
+                // substring removes leading slash '/'
+                String flag = getNodeCat(flagNode.getChild(0)).substring(1);
+                if (flag.contains("i"))
+                    term.put("caseInsensitive", true);
+                else if (flag.contains("I"))
+                    term.put("caseInsensitive", false);
+                if (flag.contains("x")) {
+                    if (!isRegex) {
+                        key = QueryUtils.escapeRegexSpecialChars(key);
+                    }
+                    // flag 'x' allows submatches: append .*? to key
+                    term.put("key", ".*?" + key + ".*?");
+                    term.put("type", "type:regex");
+                }
+            }
+            return term;
+        }
+        else {
+            // For termGroups, establish a boolean relation between operands 
+            // and recursively call this function with the term or termGroup 
+            // operands.
+            LinkedHashMap<String, Object> termGroup = null;
+            ParseTree leftOp = null;
+            ParseTree rightOp = null;
+            // check for leading/trailing parantheses
+            if (!getNodeCat(node.getChild(0)).equals("("))
+                leftOp = node.getChild(0);
+            else
+                leftOp = node.getChild(1);
+            if (!getNodeCat(node.getChild(node.getChildCount() - 1))
+                    .equals(")"))
+                rightOp = node.getChild(node.getChildCount() - 1);
+            else
+                rightOp = node.getChild(node.getChildCount() - 2);
+            // establish boolean relation
+            ParseTree boolOp = getFirstChildWithCat(node, "booleanOp");
+            String operator = boolOp.getText().equals("&") ? "and" : "or";
+            termGroup = KoralObjectGenerator.makeTermGroup(operator);
+            ArrayList<Object> operands = (ArrayList<Object>) termGroup
+                    .get("operands");
+            // recursion with left/right operands
+            operands.add(parseTermOrTermGroup(leftOp, negatedGlobal, mode));
+            operands.add(parseTermOrTermGroup(rightOp, negatedGlobal, mode));
+            return termGroup;
+        }
+    }
+
+
+    private ParserRuleContext parseCollectionQuery (String query) {
         Lexer lexer = new CollectionQueryLexer((CharStream) null);
         ParserRuleContext tree = null;
-        Antlr4DescriptiveErrorListener errorListener = 
-                new Antlr4DescriptiveErrorListener(query);
+        Antlr4DescriptiveErrorListener errorListener = new Antlr4DescriptiveErrorListener(
+                query);
         // Like p. 111
         try {
 
@@ -499,12 +542,13 @@
             parser.addErrorListener(errorListener);
             // Get starting rule from parser
             Method startRule = CollectionQueryParser.class.getMethod("start");
-            tree = (ParserRuleContext) 
-                    startRule.invoke(parser, (Object[]) null);
+            tree = (ParserRuleContext) startRule
+                    .invoke(parser, (Object[]) null);
         }
         // Some things went wrong ...
         catch (Exception e) {
-        	System.err.println("ERROR: "+errorListener.generateFullErrorMsg());
+            System.err
+                    .println("ERROR: " + errorListener.generateFullErrorMsg());
             System.err.println("Parsing exception message: " + e);
         }
         // Return the generated tree
diff --git a/src/main/java/de/ids_mannheim/korap/query/serialize/CollectionTypes.java b/src/main/java/de/ids_mannheim/korap/query/serialize/CollectionTypes.java
index 414179b..c0398e3 100644
--- a/src/main/java/de/ids_mannheim/korap/query/serialize/CollectionTypes.java
+++ b/src/main/java/de/ids_mannheim/korap/query/serialize/CollectionTypes.java
@@ -15,11 +15,13 @@
 
     private ObjectMapper mapper;
 
-    public CollectionTypes() {
+
+    public CollectionTypes () {
         this.mapper = new ObjectMapper();
     }
 
-    public Map createGroup(String relation, String field, List terms) {
+
+    public Map createGroup (String relation, String field, List terms) {
         if (relation == null)
             return null;
 
@@ -32,7 +34,9 @@
         return kgroup;
     }
 
-    public Map createTerm(String field, String subtype, String value, String type) {
+
+    public Map createTerm (String field, String subtype, String value,
+            String type) {
         Map term = new LinkedHashMap<>();
         if (type == null)
             type = "korap:term";
@@ -45,15 +49,18 @@
         return term;
     }
 
-    public Map createTerm(String field, String value, String type) {
+
+    public Map createTerm (String field, String value, String type) {
         return createTerm(field, null, value, type);
     }
 
-    public Map createTerm(String field, String value) {
+
+    public Map createTerm (String field, String value) {
         return createTerm(field, value, null);
     }
 
-    public Map createResourceFilter(String resource, Map value) {
+
+    public Map createResourceFilter (String resource, Map value) {
         Map meta = new LinkedHashMap();
         meta.put("@type", "korap:meta-filter");
         meta.put("@id", "korap-filter#" + resource);
@@ -61,11 +68,14 @@
         return meta;
     }
 
-    public Map createResourceFilter(String resource, String value) throws IOException {
+
+    public Map createResourceFilter (String resource, String value)
+            throws IOException {
         return createResourceFilter(resource, mapify(value));
     }
 
-    public Map createResourceExtend(String resource, Map value) {
+
+    public Map createResourceExtend (String resource, Map value) {
         Map meta = new LinkedHashMap();
         meta.put("@type", "korap:meta-extend");
         meta.put("@id", "korap-filter#" + resource);
@@ -73,14 +83,16 @@
         return meta;
     }
 
-    public Map createMetaFilter(Map value) {
+
+    public Map createMetaFilter (Map value) {
         Map meta = new LinkedHashMap();
         meta.put("@type", "korap:meta-filter");
         meta.put("@value", value);
         return meta;
     }
 
-    public Map createMetaExtend(Map value) {
+
+    public Map createMetaExtend (Map value) {
         Map meta = new LinkedHashMap();
         meta.put("@type", "korap:meta-extend");
         meta.put("@value", value);
@@ -88,7 +100,7 @@
     }
 
 
-    public Map mapify(String s) throws IOException {
+    public Map mapify (String s) throws IOException {
         return mapper.readValue(s, Map.class);
     }
 
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 bdac037..1b22f39 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
@@ -23,7 +23,7 @@
 
 /**
  * Map representation of CosmasII syntax tree as returned by ANTLR
- *
+ * 
  * @author Joachim Bingel (bingel@ids-mannheim.de)
  * @version 0.3
  */
@@ -32,1286 +32,1322 @@
     private static Logger log = LoggerFactory
             .getLogger(Cosmas2QueryProcessor.class);
 
-    LinkedList<LinkedHashMap<String, Object>[]> toWrapStack = 
-            new LinkedList<LinkedHashMap<String,Object>[]>();
-            /**
-             * Field for repetition query (Kleene + or * operations, or
-             * min/max queries: {2,4}
-             */
-            String repetition = "";
-            /**
-             * Global control structure for fieldGroups, keeps track of open
-             * fieldGroups.
-             */
-            LinkedList<ArrayList<Object>> openFieldGroups = 
-                    new LinkedList<ArrayList<Object>>();
-            /**
-             * Keeps track of how many toWrap objects there are to pop after
-             * every recursion of {@link #processNode(ParseTree)}
-             */
-            LinkedList<Integer> toWrapsToPop = new LinkedList<Integer>();
-            /**
-             * Flag that indicates whether token fields or meta fields are
-             * currently being processed
-             */
-            boolean inMeta = false;
-            /**
-             * If true, a sequence (OPPROX node) is governed by an OPALL node
-             * (ALL()-operator), which requires to match all tokens of the
-             * sequence.
-             */
-            boolean inOPALL = false;
-            boolean inOPNHIT = false;
-            /**
+    LinkedList<LinkedHashMap<String, Object>[]> toWrapStack = new LinkedList<LinkedHashMap<String, Object>[]>();
+    /**
+     * Field for repetition query (Kleene + or * operations, or
+     * min/max queries: {2,4}
+     */
+    String repetition = "";
+    /**
+     * Global control structure for fieldGroups, keeps track of open
+     * fieldGroups.
+     */
+    LinkedList<ArrayList<Object>> openFieldGroups = new LinkedList<ArrayList<Object>>();
+    /**
+     * Keeps track of how many toWrap objects there are to pop after
+     * every recursion of {@link #processNode(ParseTree)}
+     */
+    LinkedList<Integer> toWrapsToPop = new LinkedList<Integer>();
+    /**
+     * Flag that indicates whether token fields or meta fields are
+     * currently being processed
+     */
+    boolean inMeta = false;
+    /**
+     * If true, a sequence (OPPROX node) is governed by an OPALL node
+     * (ALL()-operator), which requires to match all tokens of the
+     * sequence.
+     */
+    boolean inOPALL = false;
+    boolean inOPNHIT = false;
+    /**
              *
              */
-            int classCounter = 1;
-            boolean negate = false;
+    int classCounter = 1;
+    boolean negate = false;
 
-            /**
-             * Allows for the definition of objects to be wrapped around the
-             * arguments of an operation. Each record in the table holds the
-             * parent node of the argument, the number of the argument and an
-             * object in whose operands list the argument shall be wrapped.
-             */
-            Table<Tree, Integer, LinkedHashMap<String, Object>> operandWrap = 
-                    HashBasedTable.create();
+    /**
+     * Allows for the definition of objects to be wrapped around the
+     * arguments of an operation. Each record in the table holds the
+     * parent node of the argument, the number of the argument and an
+     * object in whose operands list the argument shall be wrapped.
+     */
+    Table<Tree, Integer, LinkedHashMap<String, Object>> operandWrap = HashBasedTable
+            .create();
 
-            /**
-             * Keeps track of all visited nodes in a tree
-             */
-            List<Tree> visited = new ArrayList<Tree>();
+    /**
+     * Keeps track of all visited nodes in a tree
+     */
+    List<Tree> visited = new ArrayList<Tree>();
 
-            Integer stackedToWrap = 0;
-            /**
-             * A list of node categories that can be sequenced (i.e. which can
-             * be in a sequence with any number of other nodes in this list)
-             */
-            private final List<String> sequentiableNodeTypes = Arrays
-                    .asList(new String[] { "OPWF", "OPLEM", "OPMORPH", "OPBEG",
-                            "OPEND", "OPIN", "OPBED", "OPELEM", "OPOR", "OPAND" });
-            /**
-             * Keeps track of sequenced nodes, i.e. nodes that implicitly
-             * govern a sequence, as in (C2PQ (OPWF der) (OPWF Mann)). This is
-             * necessary in order to know when to take the sequence off the
-             * object stack, as the sequence is introduced by the first child
-             * but cannot be closed after this first child in order not to
-             * lose its siblings
-             */
-            private LinkedList<Tree> sequencedNodes = new LinkedList<Tree>();
+    Integer stackedToWrap = 0;
+    /**
+     * A list of node categories that can be sequenced (i.e. which can
+     * be in a sequence with any number of other nodes in this list)
+     */
+    private final List<String> sequentiableNodeTypes = Arrays
+            .asList(new String[] { "OPWF", "OPLEM", "OPMORPH", "OPBEG",
+                    "OPEND", "OPIN", "OPBED", "OPELEM", "OPOR", "OPAND" });
+    /**
+     * Keeps track of sequenced nodes, i.e. nodes that implicitly
+     * govern a sequence, as in (C2PQ (OPWF der) (OPWF Mann)). This is
+     * necessary in order to know when to take the sequence off the
+     * object stack, as the sequence is introduced by the first child
+     * but cannot be closed after this first child in order not to
+     * lose its siblings
+     */
+    private LinkedList<Tree> sequencedNodes = new LinkedList<Tree>();
 
-            private boolean nodeHasSequentiableSiblings;
+    private boolean nodeHasSequentiableSiblings;
 
-            /**
-             * Keeps track of operands lists that are to be serialised in an
-             * inverted order (e.g. the IN() operator) compared to their AST
-             * representation.
-             */
-            private LinkedList<ArrayList<Object>> invertedOperandsLists = 
-                    new LinkedList<ArrayList<Object>>();
+    /**
+     * Keeps track of operands lists that are to be serialised in an
+     * inverted order (e.g. the IN() operator) compared to their AST
+     * representation.
+     */
+    private LinkedList<ArrayList<Object>> invertedOperandsLists = new LinkedList<ArrayList<Object>>();
 
-            /**
-             * @param tree
-             *            The syntax tree as returned by ANTLR
-             * @param parser
-             *            The ANTLR parser instance that generated the parse
-             *            tree
-             * @throws QueryException
-             */
-            public Cosmas2QueryProcessor (String query) {
-                KoralObjectGenerator.setQueryProcessor(this);
-                this.query = query;
-                process(query);
-                log.info(">>> " + requestMap.get("query") + " <<<");
-            }
 
-            @Override
-            public void process(String query) {
-                Tree tree = null;
-                tree = parseCosmasQuery(query);
-                log.info("Processing CosmasII query: " + query);
-                if (tree != null) {
-                    log.debug("ANTLR parse tree: " + tree.toStringTree());
-                    processNode(tree);
-                }
-            }
+    /**
+     * @param tree
+     *            The syntax tree as returned by ANTLR
+     * @param parser
+     *            The ANTLR parser instance that generated the parse
+     *            tree
+     * @throws QueryException
+     */
+    public Cosmas2QueryProcessor (String query) {
+        KoralObjectGenerator.setQueryProcessor(this);
+        this.query = query;
+        process(query);
+        log.info(">>> " + requestMap.get("query") + " <<<");
+    }
 
-            private void processNode(Tree node) {
-                // Top-down processing
-                if (visited.contains(node))
-                    return;
-                else
-                    visited.add(node);
 
-                String nodeCat = getNodeCat(node);
-                openNodeCats.push(nodeCat);
+    @Override
+    public void process (String query) {
+        Tree tree = null;
+        tree = parseCosmasQuery(query);
+        log.info("Processing CosmasII query: " + query);
+        if (tree != null) {
+            log.debug("ANTLR parse tree: " + tree.toStringTree());
+            processNode(tree);
+        }
+    }
 
-                stackedObjects = 0;
-                stackedToWrap = 0;
 
-                if (verbose) {
-                    System.err.println(" " + objectStack);
-                    System.out.println(openNodeCats);
-                }
+    private void processNode (Tree node) {
+        // Top-down processing
+        if (visited.contains(node))
+            return;
+        else
+            visited.add(node);
 
-                /* ***************************************
-                 * Processing individual node categories *
-                 * ***************************************
-                 */
+        String nodeCat = getNodeCat(node);
+        openNodeCats.push(nodeCat);
 
-                // Check for potential implicit sequences as in (C2PQ (OPWF
-                // der) (OPWF Mann)). The sequence is introduced
-                // by the first child if it (and its siblings) is
-                // sequentiable.
-                if (sequentiableNodeTypes.contains(nodeCat)) {
-                    // for each node, check if parent has more than one child
-                    // (-> could be implicit sequence)
-                    Tree parent = node.getParent();
-                    if (parent.getChildCount() > 1) {
-                        // if node is first child of parent...
-                        if (node == parent.getChild(0)) {
-                            nodeHasSequentiableSiblings = false;
-                            for (int i = 1; i < parent.getChildCount(); i++) {
-                                if (sequentiableNodeTypes.contains(getNodeCat(parent
-                                        .getChild(i)))) {
-                                    nodeHasSequentiableSiblings = true;
-                                    continue;
-                                }
-                            }
-                            if (nodeHasSequentiableSiblings) {
-                                // Step I: create sequence
-                                LinkedHashMap<String, Object> sequence = 
-                                        KoralObjectGenerator.makeGroup("sequence");
-                                // push sequence on object stack but don't
-                                // increment stackedObjects counter since
-                                // we've got to wait until the parent node is
-                                // processed - therefore, add the parent
-                                // to the sequencedNodes list and remove the
-                                // sequence from the stack when the parent
-                                // has been processed
-                                objectStack.push(sequence);
-                                sequencedNodes.push(parent);
-                                // Step II: decide where to put sequence
-                                putIntoSuperObject(sequence, 1);
-                            }
+        stackedObjects = 0;
+        stackedToWrap = 0;
+
+        if (verbose) {
+            System.err.println(" " + objectStack);
+            System.out.println(openNodeCats);
+        }
+
+        /* ***************************************
+         * Processing individual node categories *
+         * ***************************************
+         */
+
+        // Check for potential implicit sequences as in (C2PQ (OPWF
+        // der) (OPWF Mann)). The sequence is introduced
+        // by the first child if it (and its siblings) is
+        // sequentiable.
+        if (sequentiableNodeTypes.contains(nodeCat)) {
+            // for each node, check if parent has more than one child
+            // (-> could be implicit sequence)
+            Tree parent = node.getParent();
+            if (parent.getChildCount() > 1) {
+                // if node is first child of parent...
+                if (node == parent.getChild(0)) {
+                    nodeHasSequentiableSiblings = false;
+                    for (int i = 1; i < parent.getChildCount(); i++) {
+                        if (sequentiableNodeTypes.contains(getNodeCat(parent
+                                .getChild(i)))) {
+                            nodeHasSequentiableSiblings = true;
+                            continue;
                         }
                     }
-                }
-
-                if (nodeCat.equals("OPWF") || nodeCat.equals("OPLEM")) {
-                    processOPWF_OPLEM(node);
-                }
-
-                if (nodeCat.equals("OPMORPH")) {
-                    processOPMORPH(node);
-                }
-
-                if (nodeCat.equals("OPELEM")) {
-                    processOPELEM(node);
-                }
-
-                if (nodeCat.equals("OPLABEL")) {
-                    processOPLABEL(node);
-                }
-
-                if (nodeCat.equals("OPAND") || nodeCat.equals("OPNOT")) {
-                    processOPAND_OPNOT(node);
-                }
-
-                if (nodeCat.equals("OPOR")) {
-                    processOPOR(node);
-                }
-
-                if (nodeCat.equals("OPPROX")) {
-                    processOPPROX(node);
-                }
-
-                // inlcusion or overlap
-                if (nodeCat.equals("OPIN") || nodeCat.equals("OPOV")) {
-                    processOPIN_OPOV(node);
-                }
-
-                // Wrap the argument of an #IN operator in a previously
-                // defined container
-                if (nodeCat.equals("ARG1") || nodeCat.equals("ARG2")) {
-                    processARG1_ARG2(node);
-                }
-
-                if (nodeCat.equals("OPALL")) {
-                    inOPALL = true;
-                }
-
-                if (nodeCat.equals("OPNHIT")) {
-                    processOPNHIT(node);
-                }
-
-                if (nodeCat.equals("OPEND") || nodeCat.equals("OPBEG")) {
-                    processOPEND_OPBEG(node);
-                }
-
-                if (nodeCat.equals("OPBED")) {
-                    processOPBED(node);
-                }
-                objectsToPop.push(stackedObjects);
-                toWrapsToPop.push(stackedToWrap);
-
-                /*
-                 * ***************************************************************
-                 * ***************************************************************
-                 * recursion until 'request' node (root of tree) is processed
-                 * *
-                 * ***********************************************************
-                 * ****
-                 * ********************************************************
-                 * *******
-                 */
-                for (int i = 0; i < node.getChildCount(); i++) {
-                    Tree child = node.getChild(i);
-                    processNode(child);
-                }
-
-                /*
-                 * *************************************************************
-                 * Stuff that happens after processing the children of a node
-                 * *
-                 * ***********************************************************
-                 * **
-                 */
-
-                // remove sequence from object stack if node is implicitly
-                // sequenced
-                if (sequencedNodes.size() > 0) {
-                    if (node == sequencedNodes.getFirst()) {
-                        objectStack.pop();
-                        sequencedNodes.pop();
+                    if (nodeHasSequentiableSiblings) {
+                        // Step I: create sequence
+                        LinkedHashMap<String, Object> sequence = KoralObjectGenerator
+                                .makeGroup("sequence");
+                        // push sequence on object stack but don't
+                        // increment stackedObjects counter since
+                        // we've got to wait until the parent node is
+                        // processed - therefore, add the parent
+                        // to the sequencedNodes list and remove the
+                        // sequence from the stack when the parent
+                        // has been processed
+                        objectStack.push(sequence);
+                        sequencedNodes.push(parent);
+                        // Step II: decide where to put sequence
+                        putIntoSuperObject(sequence, 1);
                     }
                 }
-
-                for (int i = 0; i < objectsToPop.get(0); i++) {
-                    objectStack.pop();
-                }
-                objectsToPop.pop();
-
-                // if (!toWrapStack.isEmpty())
-                // System.err.println(toWrapStack.get(0)[0]);
-                for (int i = 0; i < toWrapsToPop.get(0); i++) {
-                    putIntoSuperObject(wrap(toWrapStack.pop()));
-                }
-                toWrapsToPop.pop();
-
-                if (nodeCat.equals("ARG2") && openNodeCats.get(1).equals("OPNOT")) {
-                    negate = false;
-                }
-
-                if (nodeCat.equals("OPALL")) {
-                    inOPALL = false;
-                }
-
-                openNodeCats.pop();
             }
+        }
 
-            private void processOPEND_OPBEG(Tree node) {
-                // Step I: create group
-                String nodeCat = getNodeCat(node);
-                LinkedHashMap<String, Object> beggroup = new LinkedHashMap<String, Object>();
-                beggroup.put("@type", "koral:reference");
-                beggroup.put("operation", "operation:focus");
-                ArrayList<Integer> spanRef = new ArrayList<Integer>();
-                if (nodeCat.equals("OPBEG")) {
-                    spanRef.add(0);
-                    spanRef.add(1);
+        if (nodeCat.equals("OPWF") || nodeCat.equals("OPLEM")) {
+            processOPWF_OPLEM(node);
+        }
+
+        if (nodeCat.equals("OPMORPH")) {
+            processOPMORPH(node);
+        }
+
+        if (nodeCat.equals("OPELEM")) {
+            processOPELEM(node);
+        }
+
+        if (nodeCat.equals("OPLABEL")) {
+            processOPLABEL(node);
+        }
+
+        if (nodeCat.equals("OPAND") || nodeCat.equals("OPNOT")) {
+            processOPAND_OPNOT(node);
+        }
+
+        if (nodeCat.equals("OPOR")) {
+            processOPOR(node);
+        }
+
+        if (nodeCat.equals("OPPROX")) {
+            processOPPROX(node);
+        }
+
+        // inlcusion or overlap
+        if (nodeCat.equals("OPIN") || nodeCat.equals("OPOV")) {
+            processOPIN_OPOV(node);
+        }
+
+        // Wrap the argument of an #IN operator in a previously
+        // defined container
+        if (nodeCat.equals("ARG1") || nodeCat.equals("ARG2")) {
+            processARG1_ARG2(node);
+        }
+
+        if (nodeCat.equals("OPALL")) {
+            inOPALL = true;
+        }
+
+        if (nodeCat.equals("OPNHIT")) {
+            processOPNHIT(node);
+        }
+
+        if (nodeCat.equals("OPEND") || nodeCat.equals("OPBEG")) {
+            processOPEND_OPBEG(node);
+        }
+
+        if (nodeCat.equals("OPBED")) {
+            processOPBED(node);
+        }
+        objectsToPop.push(stackedObjects);
+        toWrapsToPop.push(stackedToWrap);
+
+        /*
+         * ***************************************************************
+         * ***************************************************************
+         * recursion until 'request' node (root of tree) is processed
+         * *
+         * ***********************************************************
+         * ****
+         * ********************************************************
+         * *******
+         */
+        for (int i = 0; i < node.getChildCount(); i++) {
+            Tree child = node.getChild(i);
+            processNode(child);
+        }
+
+        /*
+         * *************************************************************
+         * Stuff that happens after processing the children of a node
+         * *
+         * ***********************************************************
+         * **
+         */
+
+        // remove sequence from object stack if node is implicitly
+        // sequenced
+        if (sequencedNodes.size() > 0) {
+            if (node == sequencedNodes.getFirst()) {
+                objectStack.pop();
+                sequencedNodes.pop();
+            }
+        }
+
+        for (int i = 0; i < objectsToPop.get(0); i++) {
+            objectStack.pop();
+        }
+        objectsToPop.pop();
+
+        // if (!toWrapStack.isEmpty())
+        // System.err.println(toWrapStack.get(0)[0]);
+        for (int i = 0; i < toWrapsToPop.get(0); i++) {
+            putIntoSuperObject(wrap(toWrapStack.pop()));
+        }
+        toWrapsToPop.pop();
+
+        if (nodeCat.equals("ARG2") && openNodeCats.get(1).equals("OPNOT")) {
+            negate = false;
+        }
+
+        if (nodeCat.equals("OPALL")) {
+            inOPALL = false;
+        }
+
+        openNodeCats.pop();
+    }
+
+
+    private void processOPEND_OPBEG (Tree node) {
+        // Step I: create group
+        String nodeCat = getNodeCat(node);
+        LinkedHashMap<String, Object> beggroup = new LinkedHashMap<String, Object>();
+        beggroup.put("@type", "koral:reference");
+        beggroup.put("operation", "operation:focus");
+        ArrayList<Integer> spanRef = new ArrayList<Integer>();
+        if (nodeCat.equals("OPBEG")) {
+            spanRef.add(0);
+            spanRef.add(1);
+        }
+        else if (nodeCat.equals("OPEND")) {
+            spanRef.add(-1);
+            spanRef.add(1);
+        }
+        beggroup.put("spanRef", spanRef);
+        beggroup.put("operands", new ArrayList<Object>());
+        objectStack.push(beggroup);
+        stackedObjects++;
+
+        // Step II: decide where to put
+        putIntoSuperObject(beggroup, 1);
+    }
+
+
+    private void processOPBED (Tree node) {
+        // Node structure is (OPBED X+ (OPTS (TPBEG tpos*) (TPEND
+        // tpos*)))
+        // X is some segment, TPBEG or TPEND must be present
+        // (inclusive OR)
+        // tpos is a three-char string of the form "[+-]?[spt][ae]".
+        // s/p/t indicates span, a/e beginning/end, - means negation
+        // See C-II QL documentation for more detail:
+        // http://www.ids-mannheim.de/cosmas2/win-app/hilfe/suchanfrage/eingabe-grafisch/syntax/textpositionen.html
+
+        // Step I: create group
+        int optsChild = node.getChildCount() - 1;
+        Tree begConditions = getFirstChildWithCat(node.getChild(optsChild),
+                "TPBEG");
+        Tree endConditions = getFirstChildWithCat(node.getChild(optsChild),
+                "TPEND");
+
+        LinkedHashMap<String, Object> submatchgroup = KoralObjectGenerator
+                .makeReference(classCounter + 128);
+        ArrayList<Object> submatchOperands = new ArrayList<Object>();
+        submatchgroup.put("operands", submatchOperands);
+        putIntoSuperObject(submatchgroup);
+
+        // Step II: collect all conditions, create groups for them in
+        // processPositionCondition()
+        ArrayList<Object> distributedOperands = new ArrayList<Object>();
+        ArrayList<LinkedHashMap<String, Object>> conditionGroups = new ArrayList<LinkedHashMap<String, Object>>();
+        if (begConditions != null) {
+            for (Tree condition : getChildren(begConditions)) {
+                conditionGroups.add(processPositionCondition(condition,
+                        distributedOperands, "beg"));
+            }
+        }
+        if (endConditions != null) {
+            for (Tree condition : getChildren(endConditions)) {
+                conditionGroups.add(processPositionCondition(condition,
+                        distributedOperands, "end"));
+            }
+        }
+        // Step III: insert conditions. need to stack matches-groups
+        // because position groups may only have two operands
+        // indicates where to insert next condition group
+        ArrayList<Object> currentLowestOperands = submatchOperands;
+        int conditionCount = 0;
+        for (LinkedHashMap<String, Object> conditionGroup : conditionGroups) {
+            conditionCount++;
+            if (conditionGroups.size() == 1) {
+                submatchOperands.add(conditionGroup);
+            }
+            else if (conditionCount < conditionGroups.size()) {
+                LinkedHashMap<String, Object> matchesGroup = KoralObjectGenerator
+                        .makePosition(new String[] { "frames:matches" });
+                @SuppressWarnings("unchecked")
+                ArrayList<Object> matchesOperands = (ArrayList<Object>) matchesGroup
+                        .get("operands");
+                matchesOperands.add(conditionGroup);
+                // matches groups that are embedded at the second or
+                // lower level receive an additional
+                // focus to grep out only the query term to which the
+                // constraint applies
+                if (conditionCount > 1) {
+                    LinkedHashMap<String, Object> focus = KoralObjectGenerator
+                            .makeReference(classCounter + 128 - 2);
+                    ArrayList<Object> focusOperands = new ArrayList<Object>();
+                    focus.put("operands", focusOperands);
+                    focusOperands.add(matchesGroup);
+                    currentLowestOperands.add(focus);
                 }
-                else if (nodeCat.equals("OPEND")) {
-                    spanRef.add(-1);
-                    spanRef.add(1);
+                else {
+                    currentLowestOperands.add(matchesGroup);
                 }
-                beggroup.put("spanRef", spanRef);
-                beggroup.put("operands", new ArrayList<Object>());
-                objectStack.push(beggroup);
+                currentLowestOperands = matchesOperands;
+            }
+            else {
+                currentLowestOperands.add(conditionGroup);
+            }
+        }
+    }
+
+
+    private void processOPNHIT (Tree node) {
+        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 + 128);
+        LinkedHashMap<String, Object> classRefCheck = KoralObjectGenerator
+                .makeClassRefOp("classRefOp:inversion", classRef,
+                        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, 128 + classCounter++);
+        wrapOperandInClass(node.getChild(0), 2, 128 + classCounter++);
+        objectStack.push(classRefCheck);
+        stackedObjects++;
+        putIntoSuperObject(group, 1);
+    }
+
+
+    private void processARG1_ARG2 (Tree node) {
+        String nodeCat = getNodeCat(node);
+        Tree parent = node.getParent();
+        if (operandWrap.containsRow(parent)) {
+            // Step I: create group
+            int argNr = nodeCat.equals("ARG1") ? 1 : 2;
+            LinkedHashMap<String, Object> container = operandWrap.row(parent)
+                    .get(argNr);
+            // Step II: ingest
+            if (container != null) {
+                objectStack.push(container);
                 stackedObjects++;
-
-                // Step II: decide where to put
-                putIntoSuperObject(beggroup, 1);
+                putIntoSuperObject(container, 1);
             }
+        }
+    }
 
-            private void processOPBED(Tree node) {
-                // Node structure is (OPBED X+ (OPTS (TPBEG tpos*) (TPEND
-                // tpos*)))
-                // X is some segment, TPBEG or TPEND must be present
-                // (inclusive OR)
-                // tpos is a three-char string of the form "[+-]?[spt][ae]".
-                // s/p/t indicates span, a/e beginning/end, - means negation
-                // See C-II QL documentation for more detail:
-                // http://www.ids-mannheim.de/cosmas2/win-app/hilfe/suchanfrage/eingabe-grafisch/syntax/textpositionen.html
 
-                // Step I: create group
-                int optsChild = node.getChildCount() - 1;
-                Tree begConditions = getFirstChildWithCat(node.getChild(optsChild),
-                        "TPBEG");
-                Tree endConditions = getFirstChildWithCat(node.getChild(optsChild),
-                        "TPEND");
+    @SuppressWarnings("unchecked")
+    private void processOPIN_OPOV (Tree node) {
+        // Step I: create group
+        String nodeCat = getNodeCat(node);
+        wrapOperandInClass(node, 2, 128 + classCounter++);
+        wrapOperandInClass(node, 1, 128 + classCounter++);
+        // LinkedHashMap<String, Object> posgroup =
+        // makePosition(null);
+        LinkedHashMap<String, Object> posGroup = KoralObjectGenerator
+                .makeGroup("position");
+        LinkedHashMap<String, Object> positionOptions;
+        // posgroup
+        if (nodeCat.equals("OPIN")) {
+            positionOptions = parseOPINOptions(node);
+        }
+        else {
+            positionOptions = parseOPOVOptions(node);
+        }
+        posGroup.put("frames", positionOptions.get("frames"));
+        posGroup.put("frame", positionOptions.get("frame"));
+        if (positionOptions.containsKey("exclude")) {
+            posGroup.put("exclude", positionOptions.get("exclude"));
+        }
+        objectStack.push(posGroup);
+        // mark this an inverted operands object
+        invertedOperandsLists
+                .push((ArrayList<Object>) posGroup.get("operands"));
+        stackedObjects++;
+        // Step II: wrap in classRefCheck and/or focus and decide where to put
+        ArrayList<String> check = (ArrayList<String>) positionOptions
+                .get("classRefCheck");
+        Integer[] classIn = 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 + 128);
+            ((ArrayList<Object>) topGroup.get("operands")).add(posGroup);
+        }
+        else {
+            topGroup = posGroup;
+        }
+        LinkedHashMap<String, Object> focusGroup = null;
+        if ((boolean) positionOptions.get("matchall") == true) {
+            focusGroup = KoralObjectGenerator.makeClassRefOp(
+                    "classRefOp:delete",
+                    new Integer[] { 128 + classCounter++ }, 128 + classCounter);
+            ((ArrayList<Object>) focusGroup.get("operands")).add(topGroup);
+        }
+        else { // match only first argument
+            focusGroup = KoralObjectGenerator.wrapInReference(topGroup,
+                    classCounter + 128 - 1);
+            classCounter++;
+        }
+        // wrap in 'merge' operation if grouping option is set
+        if (positionOptions.containsKey("grouping")) {
+            if (positionOptions.get("grouping").equals(true)) {
+                LinkedHashMap<String, Object> mergeOperation = KoralObjectGenerator
+                        .makeGroup("merge");
+                ArrayList<Object> mergeOperands = (ArrayList<Object>) mergeOperation
+                        .get("operands");
+                mergeOperands.add(focusGroup);
+                focusGroup = mergeOperation;
+            }
+        }
+        putIntoSuperObject(focusGroup, 1);
+    }
 
-                LinkedHashMap<String, Object> submatchgroup = 
-                        KoralObjectGenerator.makeReference(classCounter+128);
-                ArrayList<Object> submatchOperands = new ArrayList<Object>();
-                submatchgroup.put("operands", submatchOperands);
-                putIntoSuperObject(submatchgroup);
 
-                // Step II: collect all conditions, create groups for them in
-                // processPositionCondition()
-                ArrayList<Object> distributedOperands = new ArrayList<Object>();
-                ArrayList<LinkedHashMap<String, Object>> conditionGroups = 
-                        new ArrayList<LinkedHashMap<String, Object>>();
-                if (begConditions != null) {
-                    for (Tree condition : getChildren(begConditions)) {
-                        conditionGroups.add(processPositionCondition(condition,
-                                distributedOperands, "beg"));
-                    }
+    @SuppressWarnings("unchecked")
+    private void processOPPROX (Tree node) {
+        // collect info
+        Tree prox_opts = node.getChild(0);
+        Tree typ = prox_opts.getChild(0);
+        Tree dist_list = prox_opts.getChild(1);
+        // Step I: create group
+        LinkedHashMap<String, Object> group = KoralObjectGenerator
+                .makeGroup("sequence");
+
+        ArrayList<Object> constraints = new ArrayList<Object>();
+        boolean exclusion = typ.getChild(0).toStringTree().equals("EXCL");
+
+        boolean inOrder = false;
+        boolean invertedOperands = false;
+
+        group.put("inOrder", inOrder);
+        group.put("distances", constraints);
+
+        boolean putIntoOverlapDisjunction = false;
+
+        int min = 0, max = 0;
+        // possibly several distance constraints
+        for (int i = 0; i < dist_list.getChildCount(); i++) {
+            String direction = dist_list.getChild(i).getChild(0).getChild(0)
+                    .toStringTree().toLowerCase();
+            String minStr = dist_list.getChild(i).getChild(1).getChild(0)
+                    .toStringTree();
+            String maxStr = dist_list.getChild(i).getChild(1).getChild(1)
+                    .toStringTree();
+            String meas = dist_list.getChild(i).getChild(2).getChild(0)
+                    .toStringTree();
+            if (minStr.equals("VAL0")) {
+                minStr = "0";
+            }
+            min = Integer.parseInt(minStr);
+            max = Integer.parseInt(maxStr);
+            // If zero word-distance, wrap this sequence in a
+            // disjunction along with an overlap position
+            // between the two operands
+            /*
+             * XXX: This is currently deactivated. Uncomment to
+             * activate treatment of zero-word distances as
+             * overlap-alternatives (see google doc on special
+             * distances serialization)
+             * 
+             * if (meas.equals("w") && min == 0) { min = 1;
+             * putIntoOverlapDisjunction = true; }
+             */
+            if (!meas.equals("w") && min == 0) {
+                processSpanDistance(meas, min, max);
+            }
+            LinkedHashMap<String, Object> distance = KoralObjectGenerator
+                    .makeDistance(meas, min, max);
+            // override @type, min/max to be treated according to 
+            // Cosmas particularities
+            distance.put("@type", "cosmas:distance");
+            if (exclusion) {
+                distance.put("exclude", true);
+            }
+            // if (! openNodeCats.get(1).equals("OPNHIT")) {
+            constraints.add(distance);
+            // }
+            if (i == 0) {
+                if (direction.equals("plus")) {
+                    inOrder = true;
                 }
-                if (endConditions != null) {
-                    for (Tree condition : getChildren(endConditions)) {
-                        conditionGroups.add(processPositionCondition(condition,
-                                distributedOperands, "end"));
-                    }
+                else if (direction.equals("minus")) {
+                    inOrder = true;
+                    invertedOperands = true;
                 }
-                // Step III: insert conditions. need to stack matches-groups
-                // because position groups may only have two operands
-                // indicates where to insert next condition group
-                ArrayList<Object> currentLowestOperands = submatchOperands; 
-                int conditionCount = 0;
-                for (LinkedHashMap<String, Object> conditionGroup : conditionGroups) {
-                    conditionCount++;
-                    if (conditionGroups.size() == 1) {
-                        submatchOperands.add(conditionGroup);
-                    }
-                    else if (conditionCount < conditionGroups.size()) {
-                        LinkedHashMap<String, Object> matchesGroup = KoralObjectGenerator
-                                .makePosition(new String[] { "frames:matches" });
-                        @SuppressWarnings("unchecked")
-                        ArrayList<Object> matchesOperands = 
-                        (ArrayList<Object>) matchesGroup.get("operands");
-                        matchesOperands.add(conditionGroup);
-                        // matches groups that are embedded at the second or
-                        // lower level receive an additional
-                        // focus to grep out only the query term to which the
-                        // constraint applies
-                        if (conditionCount > 1) {
-                            LinkedHashMap<String, Object> focus = 
-                                    KoralObjectGenerator.makeReference(classCounter +128 - 2);
-                            ArrayList<Object> focusOperands = new ArrayList<Object>();
-                            focus.put("operands", focusOperands);
-                            focusOperands.add(matchesGroup);
-                            currentLowestOperands.add(focus);
+                else if (direction.equals("both")) {
+                    inOrder = false;
+                }
+            }
+        }
+        group.put("inOrder", inOrder);
+        LinkedHashMap<String, Object> embeddedSequence = group;
+
+        if (!(openNodeCats.get(1).equals("OPBEG")
+                || openNodeCats.get(1).equals("OPEND") || inOPALL || openNodeCats
+                .get(1).equals("OPNHIT"))) {
+            wrapOperandInClass(node, 1, 128 + classCounter);
+            wrapOperandInClass(node, 2, 128 + classCounter);
+            // Deactivated, uncomment to wrap sequence in reference.
+            //            group = KoralObjectGenerator.wrapInReference(group,
+            //                    classCounter++);
+            classCounter++;
+        }
+        else if (openNodeCats.get(1).equals("OPNHIT")) {
+            LinkedHashMap<String, Object> repetition = KoralObjectGenerator
+                    .makeRepetition(min, max);
+            ((ArrayList<Object>) repetition.get("operands"))
+                    .add(KoralObjectGenerator.makeToken());
+            // TODO go on with this: put the repetition into a class
+            // and put it in between the operands
+            // -> what if there's several distance constraints. with
+            // different keys, like /w4,s0?
+        }
+
+        //        LinkedHashMap<String, Object> sequence = null;
+        //        if (putIntoOverlapDisjunction) {
+        //            sequence = embeddedSequence;
+        //            group = KoralObjectGenerator.makeGroup("or");
+        //            ArrayList<Object> disjOperands = 
+        //                    (ArrayList<Object>) group.get("operands");
+        //            LinkedHashMap<String, Object> overlapsGroup = KoralObjectGenerator
+        //                    .makePosition(new String[0]);
+        //
+        //            ArrayList<Object> overlapsOperands = 
+        //                    (ArrayList<Object>) overlapsGroup.get("operands");
+        //            // this ensures identity of the operands lists and thereby
+        //            // a distribution of the operands for both created objects
+        //            sequence.put("operands", overlapsOperands);
+        //            if (invertedOperands) {
+        //                invertedOperandsLists.push(overlapsOperands);
+        //            }
+        //            disjOperands.add(overlapsGroup);
+        //            disjOperands.add(KoralObjectGenerator.wrapInReference(sequence, 0));
+        //            // Step II: decide where to put
+        //            putIntoSuperObject(group, 0);
+        //            objectStack.push(sequence);
+        //        }
+        //        else {
+        if (invertedOperands) {
+            ArrayList<Object> operands = (ArrayList<Object>) embeddedSequence
+                    .get("operands");
+            invertedOperandsLists.push(operands);
+        }
+        // Step II: decide where to put
+        putIntoSuperObject(group, 0);
+        objectStack.push(embeddedSequence);
+        //        }
+        stackedObjects++;
+        visited.add(node.getChild(0));
+    }
+
+
+    private void processOPOR (Tree node) {
+        // Step I: create group
+        LinkedHashMap<String, Object> disjunction = KoralObjectGenerator
+                .makeGroup("disjunction");
+        objectStack.push(disjunction);
+        stackedObjects++;
+        // Step II: decide where to put
+        putIntoSuperObject(disjunction, 1);
+    }
+
+
+    private void processOPAND_OPNOT (Tree node) {
+        // Step I: create group
+        String nodeCat = getNodeCat(node);
+        LinkedHashMap<String, Object> distgroup = KoralObjectGenerator
+                .makeGroup("sequence");
+        ArrayList<Object> distances = new ArrayList<Object>();
+        LinkedHashMap<String, Object> zerodistance = KoralObjectGenerator
+                .makeDistance("t", 0, 0);
+        zerodistance.put("@type", "cosmas:distance"); // overwrite @type: cosmas:distance! 
+        if (nodeCat.equals("OPNOT"))
+            zerodistance.put("exclude", true);
+        distances.add(zerodistance);
+        distgroup.put("distances", distances);
+        distgroup.put("operands", new ArrayList<Object>());
+        objectStack.push(distgroup);
+        stackedObjects++;
+        // Step II: decide where to put
+        putIntoSuperObject(distgroup, 1);
+    }
+
+
+    private void processOPLABEL (Tree node) {
+        // Step I: create element
+        String key = node.getChild(0).toStringTree().replaceAll("<|>", "");
+        LinkedHashMap<String, Object> elem = KoralObjectGenerator.makeSpan(key);
+        // Step II: decide where to put
+        putIntoSuperObject(elem);
+    }
+
+
+    @SuppressWarnings("unchecked")
+    private void processOPELEM (Tree node) {
+        // Step I: create element
+        LinkedHashMap<String, Object> span = KoralObjectGenerator.makeSpan();
+        if (node.getChild(0).toStringTree().equals("EMPTY")) {
+            addError(
+                    StatusCodes.MALFORMED_QUERY,
+                    "Empty #ELEM() operator."
+                            + " Please specify a valid element key (like 's' for sentence).");
+            return;
+        }
+        else {
+            int elname = 0;
+            Tree elnameNode = getFirstChildWithCat(node, "ELNAME");
+            if (elnameNode != null) {
+                span.put("key", elnameNode.getChild(0).toStringTree()
+                        .toLowerCase());
+                elname = 1;
+            }
+            if (node.getChildCount() > elname) {
+                /*
+                 * Attributes can carry several values, like #ELEM(W
+                 * ANA != 'N V'), denoting a word whose POS is neither
+                 * N nor V. When seeing this, create a sub-termGroup
+                 * and put it into the top-level term group, but only
+                 * if there are other attributes in that group. If
+                 * not, put the several values as distinct
+                 * attr-val-pairs into the top-level group (in order
+                 * to avoid a top-level group that only contains a
+                 * sub-group).
+                 */
+                LinkedHashMap<String, Object> termGroup = KoralObjectGenerator
+                        .makeTermGroup("and");
+                ArrayList<Object> termGroupOperands = (ArrayList<Object>) termGroup
+                        .get("operands");
+                for (int i = elname; i < node.getChildCount(); i++) {
+                    Tree attrNode = node.getChild(i);
+                    if (attrNode.getChildCount() == 2) {
+                        LinkedHashMap<String, Object> term = KoralObjectGenerator
+                                .makeTerm();
+                        termGroupOperands.add(term);
+                        String layer = attrNode.getChild(0).toStringTree();
+                        String[] splitted = layer.split("/");
+                        if (splitted.length > 1) {
+                            term.put("foundry", splitted[0]);
+                            layer = splitted[1];
                         }
-                        else {
-                            currentLowestOperands.add(matchesGroup);
-                        }
-                        currentLowestOperands = matchesOperands;
+                        term.put("layer", translateMorph(layer));
+                        term.put("key", attrNode.getChild(1).toStringTree());
+                        String match = getNodeCat(attrNode).equals("EQ") ? "eq"
+                                : "ne";
+                        term.put("match", "match:" + match);
                     }
                     else {
-                        currentLowestOperands.add(conditionGroup);
-                    }
-                }
-            }
-
-            private void processOPNHIT(Tree node) {
-                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+128);
-                LinkedHashMap<String, Object> classRefCheck = 
-                        KoralObjectGenerator.makeClassRefOp("classRefOp:inversion", classRef,
-                                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, 128+classCounter++); 
-                wrapOperandInClass(node.getChild(0), 2, 128+classCounter++);
-                objectStack.push(classRefCheck);
-                stackedObjects++;
-                putIntoSuperObject(group, 1);
-            }
-
-            private void processARG1_ARG2(Tree node) {
-                String nodeCat = getNodeCat(node);
-                Tree parent = node.getParent();
-                if (operandWrap.containsRow(parent)) {
-                    // Step I: create group
-                    int argNr = nodeCat.equals("ARG1") ? 1 : 2;
-                    LinkedHashMap<String, Object> container = operandWrap.row(parent)
-                            .get(argNr);
-                    // Step II: ingest
-                    if (container != null) {
-                        objectStack.push(container);
-                        stackedObjects++;
-                        putIntoSuperObject(container, 1);
-                    }
-                }
-            }
-
-            @SuppressWarnings("unchecked")
-            private void processOPIN_OPOV(Tree node) {
-                // Step I: create group
-                String nodeCat = getNodeCat(node);
-                wrapOperandInClass(node, 2, 128+classCounter++);
-                wrapOperandInClass(node, 1, 128+classCounter++);
-                // LinkedHashMap<String, Object> posgroup =
-                // makePosition(null);
-                LinkedHashMap<String, Object> posGroup = KoralObjectGenerator
-                        .makeGroup("position");
-                LinkedHashMap<String, Object> positionOptions;
-                // posgroup
-                if (nodeCat.equals("OPIN")) {
-                    positionOptions = parseOPINOptions(node);
-                }
-                else {
-                    positionOptions = parseOPOVOptions(node);
-                }
-                posGroup.put("frames", positionOptions.get("frames"));
-                posGroup.put("frame", positionOptions.get("frame"));
-                if (positionOptions.containsKey("exclude")) {
-                    posGroup.put("exclude", positionOptions.get("exclude"));
-                }
-                objectStack.push(posGroup);
-                // mark this an inverted operands object
-                invertedOperandsLists.push((ArrayList<Object>) posGroup.get("operands"));
-                stackedObjects++;
-                // Step II: wrap in classRefCheck and/or focus and decide where to put
-                ArrayList<String> check = 
-                        (ArrayList<String>) positionOptions.get("classRefCheck");
-                Integer[] classIn = 
-                        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+128);
-                    ((ArrayList<Object>) topGroup.get("operands")).add(posGroup);
-                } else {
-                    topGroup = posGroup;
-                }
-                LinkedHashMap<String, Object> focusGroup = null;
-                if ((boolean) positionOptions.get("matchall") == true) {
-                    focusGroup = KoralObjectGenerator.makeClassRefOp("classRefOp:delete", 
-                            new Integer[]{128+classCounter++}, 128+classCounter);
-                    ((ArrayList<Object>) focusGroup.get("operands")).add(topGroup);
-                }
-                else { // match only first argument
-                    focusGroup = KoralObjectGenerator.wrapInReference(topGroup,
-                            classCounter+128-1);
-                    classCounter++;
-                }
-                // wrap in 'merge' operation if grouping option is set
-                if (positionOptions.containsKey("grouping")) {
-                    if (positionOptions.get("grouping").equals(true)) {
-                        LinkedHashMap<String, Object> mergeOperation = 
-                                KoralObjectGenerator.makeGroup("merge");
-                        ArrayList<Object> mergeOperands = (ArrayList<Object>) mergeOperation.get("operands");
-                        mergeOperands.add(focusGroup);
-                        focusGroup = mergeOperation;
-                    }
-                }
-                putIntoSuperObject(focusGroup, 1);
-            }
-
-            @SuppressWarnings("unchecked")
-            private void processOPPROX(Tree node) {
-                // collect info
-                Tree prox_opts = node.getChild(0);
-                Tree typ = prox_opts.getChild(0);
-                Tree dist_list = prox_opts.getChild(1);
-                // Step I: create group
-                LinkedHashMap<String, Object> group = KoralObjectGenerator
-                        .makeGroup("sequence");
-
-                ArrayList<Object> constraints = new ArrayList<Object>();
-                boolean exclusion = typ.getChild(0).toStringTree().equals("EXCL");
-
-                boolean inOrder = false;
-                boolean invertedOperands = false;
-
-                group.put("inOrder", inOrder);
-                group.put("distances", constraints);
-
-                boolean putIntoOverlapDisjunction = false;
-
-                int min = 0, max = 0;
-                // possibly several distance constraints
-                for (int i = 0; i < dist_list.getChildCount(); i++) {
-                    String direction = dist_list.getChild(i).getChild(0).getChild(0)
-                            .toStringTree().toLowerCase();
-                    String minStr = dist_list.getChild(i).getChild(1).getChild(0)
-                            .toStringTree();
-                    String maxStr = dist_list.getChild(i).getChild(1).getChild(1)
-                            .toStringTree();
-                    String meas = dist_list.getChild(i).getChild(2).getChild(0)
-                            .toStringTree();
-                    if (minStr.equals("VAL0")) {
-                        minStr = "0";
-                    }
-                    min = Integer.parseInt(minStr);
-                    max = Integer.parseInt(maxStr);
-                    // If zero word-distance, wrap this sequence in a
-                    // disjunction along with an overlap position
-                    // between the two operands
-                    /*
-                     * XXX: This is currently deactivated. Uncomment to
-                     * activate treatment of zero-word distances as
-                     * overlap-alternatives (see google doc on special
-                     * distances serialization)
-                     * 
-                     * if (meas.equals("w") && min == 0) { min = 1;
-                     * putIntoOverlapDisjunction = true; }
-                     */
-                    if (!meas.equals("w") && min == 0) {
-                        processSpanDistance(meas, min, max);
-                    }
-                    LinkedHashMap<String, Object> distance = KoralObjectGenerator
-                            .makeDistance(meas, min, max);
-                    if (exclusion) {
-                        distance.put("exclude", true);
-                    }
-                    // if (! openNodeCats.get(1).equals("OPNHIT")) {
-                    constraints.add(distance);
-                    // }
-                    if (i == 0) {
-                        if (direction.equals("plus")) {
-                            inOrder = true;
-                        }
-                        else if (direction.equals("minus")) {
-                            inOrder = true;
-                            invertedOperands = true;
-                        }
-                        else if (direction.equals("both")) {
-                            inOrder = false;
-                        }
-                    }
-                }
-                group.put("inOrder", inOrder);
-                LinkedHashMap<String, Object> embeddedSequence = group;
-
-                if (!(openNodeCats.get(1).equals("OPBEG")
-                        || openNodeCats.get(1).equals("OPEND") 
-                        || inOPALL 
-                        || openNodeCats.get(1).equals("OPNHIT"))) {
-                    wrapOperandInClass(node, 1, 128+classCounter);
-                    wrapOperandInClass(node, 2, 128+classCounter);
-                    // Deactivated, uncomment to wrap sequence in reference.
-                    //            group = KoralObjectGenerator.wrapInReference(group,
-                    //                    classCounter++);
-                    classCounter++;
-                }
-                else if (openNodeCats.get(1).equals("OPNHIT")) {
-                    LinkedHashMap<String, Object> repetition = KoralObjectGenerator
-                            .makeRepetition(min, max);
-                    ((ArrayList<Object>) repetition.get("operands"))
-                    .add(KoralObjectGenerator.makeToken());
-                    // TODO go on with this: put the repetition into a class
-                    // and put it in between the operands
-                    // -> what if there's several distance constraints. with
-                    // different keys, like /w4,s0?
-                }
-
-                //        LinkedHashMap<String, Object> sequence = null;
-                //        if (putIntoOverlapDisjunction) {
-                //            sequence = embeddedSequence;
-                //            group = KoralObjectGenerator.makeGroup("or");
-                //            ArrayList<Object> disjOperands = 
-                //                    (ArrayList<Object>) group.get("operands");
-                //            LinkedHashMap<String, Object> overlapsGroup = KoralObjectGenerator
-                //                    .makePosition(new String[0]);
-                //
-                //            ArrayList<Object> overlapsOperands = 
-                //                    (ArrayList<Object>) overlapsGroup.get("operands");
-                //            // this ensures identity of the operands lists and thereby
-                //            // a distribution of the operands for both created objects
-                //            sequence.put("operands", overlapsOperands);
-                //            if (invertedOperands) {
-                //                invertedOperandsLists.push(overlapsOperands);
-                //            }
-                //            disjOperands.add(overlapsGroup);
-                //            disjOperands.add(KoralObjectGenerator.wrapInReference(sequence, 0));
-                //            // Step II: decide where to put
-                //            putIntoSuperObject(group, 0);
-                //            objectStack.push(sequence);
-                //        }
-                //        else {
-                if (invertedOperands) {
-                    ArrayList<Object> operands = 
-                            (ArrayList<Object>) embeddedSequence.get("operands");
-                    invertedOperandsLists.push(operands);
-                }
-                // Step II: decide where to put
-                putIntoSuperObject(group, 0);
-                objectStack.push(embeddedSequence);
-                //        }
-                stackedObjects++;
-                visited.add(node.getChild(0));
-            }
-
-            private void processOPOR(Tree node) {
-                // Step I: create group
-                LinkedHashMap<String, Object> disjunction = 
-                        KoralObjectGenerator.makeGroup("disjunction");
-                objectStack.push(disjunction);
-                stackedObjects++;
-                // Step II: decide where to put
-                putIntoSuperObject(disjunction, 1);
-            }
-
-            private void processOPAND_OPNOT(Tree node) {
-                // Step I: create group
-                String nodeCat = getNodeCat(node);
-                LinkedHashMap<String, Object> distgroup = KoralObjectGenerator.makeGroup("sequence");
-                ArrayList<Object> distances = new ArrayList<Object>();
-                LinkedHashMap<String, Object> zerodistance =  KoralObjectGenerator.makeDistance("t", 0, 0);
-                zerodistance.put("@type", "cosmas:distance"); // overwrite @type: cosmas:distance! 
-                if (nodeCat.equals("OPNOT"))
-                    zerodistance.put("exclude", true);
-                distances.add(zerodistance);
-                distgroup.put("distances", distances);
-                distgroup.put("operands", new ArrayList<Object>());
-                objectStack.push(distgroup);
-                stackedObjects++;
-                // Step II: decide where to put
-                putIntoSuperObject(distgroup, 1);
-            }
-
-            private void processOPLABEL(Tree node) {
-                // Step I: create element
-                String key = node.getChild(0).toStringTree().replaceAll("<|>", "");
-                LinkedHashMap<String, Object> elem = KoralObjectGenerator.makeSpan(key);
-                // Step II: decide where to put
-                putIntoSuperObject(elem);
-            }
-
-            @SuppressWarnings("unchecked")
-            private void processOPELEM(Tree node) {
-                // Step I: create element
-                LinkedHashMap<String, Object> span = KoralObjectGenerator.makeSpan();
-                if (node.getChild(0).toStringTree().equals("EMPTY")) {
-                    addError(StatusCodes.MALFORMED_QUERY, "Empty #ELEM() operator."
-                            + " Please specify a valid element key (like 's' for sentence).");
-                    return;
-                }
-                else {
-                    int elname = 0;
-                    Tree elnameNode = getFirstChildWithCat(node, "ELNAME");
-                    if (elnameNode != null) {
-                        span.put("key", elnameNode.getChild(0).toStringTree()
-                                .toLowerCase());
-                        elname = 1;
-                    }
-                    if (node.getChildCount() > elname) {
-                        /*
-                         * Attributes can carry several values, like #ELEM(W
-                         * ANA != 'N V'), denoting a word whose POS is neither
-                         * N nor V. When seeing this, create a sub-termGroup
-                         * and put it into the top-level term group, but only
-                         * if there are other attributes in that group. If
-                         * not, put the several values as distinct
-                         * attr-val-pairs into the top-level group (in order
-                         * to avoid a top-level group that only contains a
-                         * sub-group).
-                         */
-                        LinkedHashMap<String, Object> termGroup = 
-                                KoralObjectGenerator.makeTermGroup("and");
-                        ArrayList<Object> termGroupOperands = 
-                                (ArrayList<Object>) termGroup.get("operands");
-                        for (int i = elname; i < node.getChildCount(); i++) {
-                            Tree attrNode = node.getChild(i);
-                            if (attrNode.getChildCount() == 2) {
-                                LinkedHashMap<String, Object> term = 
-                                        KoralObjectGenerator.makeTerm();
+                        LinkedHashMap<String, Object> subTermGroup = KoralObjectGenerator
+                                .makeTermGroup("and");
+                        ArrayList<Object> subTermGroupOperands = (ArrayList<Object>) subTermGroup
+                                .get("operands");
+                        int j;
+                        for (j = 1; j < attrNode.getChildCount(); j++) {
+                            LinkedHashMap<String, Object> term = KoralObjectGenerator
+                                    .makeTerm();
+                            String layer = attrNode.getChild(0).toStringTree();
+                            String[] splitted = layer.split("/");
+                            if (splitted.length > 1) {
+                                term.put("foundry", splitted[0]);
+                                layer = splitted[1];
+                            }
+                            term.put("layer", translateMorph(layer));
+                            term.put("key", attrNode.getChild(j).toStringTree());
+                            String match = getNodeCat(attrNode).equals("EQ") ? "eq"
+                                    : "ne";
+                            term.put("match", "match:" + match);
+                            if (node.getChildCount() == elname + 1) {
                                 termGroupOperands.add(term);
-                                String layer = attrNode.getChild(0).toStringTree();
-                                String[] splitted = layer.split("/");
-                                if (splitted.length > 1) {
-                                    term.put("foundry", splitted[0]);
-                                    layer = splitted[1];
-                                }
-                                term.put("layer", translateMorph(layer));
-                                term.put("key", attrNode.getChild(1).toStringTree());
-                                String match = getNodeCat(attrNode).equals("EQ") ? "eq":"ne";
-                                term.put("match", "match:" + match);
                             }
                             else {
-                                LinkedHashMap<String, Object> subTermGroup = 
-                                        KoralObjectGenerator.makeTermGroup("and");
-                                ArrayList<Object> subTermGroupOperands = 
-                                        (ArrayList<Object>) subTermGroup.get("operands");
-                                int j;
-                                for (j = 1; j < attrNode.getChildCount(); j++) {
-                                    LinkedHashMap<String, Object> term = 
-                                            KoralObjectGenerator.makeTerm();
-                                    String layer = attrNode.getChild(0).toStringTree();
-                                    String[] splitted = layer.split("/");
-                                    if (splitted.length > 1) {
-                                        term.put("foundry", splitted[0]);
-                                        layer = splitted[1];
-                                    }
-                                    term.put("layer", translateMorph(layer));
-                                    term.put("key", attrNode.getChild(j).toStringTree());
-                                    String match = 
-                                            getNodeCat(attrNode).equals("EQ") ? "eq" : "ne";
-                                    term.put("match", "match:" + match);
-                                    if (node.getChildCount() == elname + 1) {
-                                        termGroupOperands.add(term);
-                                    }
-                                    else {
-                                        subTermGroupOperands.add(term);
-                                    }
-                                }
-                                if (node.getChildCount() > elname + 1) {
-                                    termGroupOperands.add(subTermGroup);
-                                }
+                                subTermGroupOperands.add(term);
                             }
-                            if (getNodeCat(attrNode).equals("NOTEQ"))
-                                negate = true;
                         }
-                        // possibly only one term was present throughout all
-                        // nodes: extract it from the group
-                        if (termGroupOperands.size() == 1) {
-                            termGroup = (LinkedHashMap<String, Object>) 
-                                    termGroupOperands.get(0);
+                        if (node.getChildCount() > elname + 1) {
+                            termGroupOperands.add(subTermGroup);
                         }
-                        span.put("attr", termGroup);
                     }
+                    if (getNodeCat(attrNode).equals("NOTEQ"))
+                        negate = true;
                 }
-                // Step II: decide where to put
-                putIntoSuperObject(span);
+                // possibly only one term was present throughout all
+                // nodes: extract it from the group
+                if (termGroupOperands.size() == 1) {
+                    termGroup = (LinkedHashMap<String, Object>) termGroupOperands
+                            .get(0);
+                }
+                span.put("attr", termGroup);
+            }
+        }
+        // Step II: decide where to put
+        putIntoSuperObject(span);
+    }
+
+
+    private void processOPMORPH (Tree node) {
+        // Step I: get info
+        String[] morphterms = node.getChild(0).toStringTree().replace(" ", "")
+                .split("&");
+        LinkedHashMap<String, Object> token = KoralObjectGenerator.makeToken();
+        ArrayList<Object> terms = new ArrayList<Object>();
+        LinkedHashMap<String, Object> fieldMap = null;
+        // regex group #2 is foundry, #4 layer, #5 operator,
+        // #6 key, #8 value
+        String wordOrRegex = "\\w+|\".+?\"";
+        Pattern p = Pattern.compile("((\\w+)/)?((\\w*)(!?=))?(" + wordOrRegex
+                + ")(:(" + wordOrRegex + "))?");
+        Matcher m;
+        for (String morphterm : morphterms) {
+            m = p.matcher(morphterm);
+            if (!m.matches()) {
+                addError(StatusCodes.INCOMPATIBLE_OPERATOR_AND_OPERAND,
+                        "Something went wrong parsing the argument in MORPH().");
+                requestMap.put("query", new LinkedHashMap<String, Object>());
+                return;
             }
 
-            private void processOPMORPH(Tree node) {
-                // Step I: get info
-                String[] morphterms = 
-                        node.getChild(0).toStringTree().replace(" ", "").split("&");
-                LinkedHashMap<String, Object> token = KoralObjectGenerator.makeToken();
-                ArrayList<Object> terms = new ArrayList<Object>();
-                LinkedHashMap<String, Object> fieldMap = null;
-                // regex group #2 is foundry, #4 layer, #5 operator,
-                // #6 key, #8 value
-                String wordOrRegex = "\\w+|\".+?\"";
-                Pattern p = Pattern
-                        .compile("((\\w+)/)?((\\w*)(!?=))?("+wordOrRegex+")(:("+wordOrRegex+"))?");
-                Matcher m;
-                for (String morphterm : morphterms) {
-                    m = p.matcher(morphterm);
-                    if (!m.matches()) {
-                        addError(StatusCodes.INCOMPATIBLE_OPERATOR_AND_OPERAND,
-                                "Something went wrong parsing the argument in MORPH().");
-                        requestMap.put("query", new LinkedHashMap<String, Object>());
-                        return;
-                    }
+            fieldMap = KoralObjectGenerator.makeTerm();
 
-                    fieldMap = KoralObjectGenerator.makeTerm();
-
-                    if (m.group(2) != null)
-                        fieldMap.put("foundry", m.group(2));
-                    if (m.group(4) != null)
-                        fieldMap.put("layer", m.group(4));
-                    if (m.group(5) != null) {
-                        if ("!=".equals(m.group(5)))
-                            negate = !negate;
-                    }
-                    if (m.group(6) != null) {
-                        String key = m.group(6);
-                        if (key.startsWith("\"") && key.endsWith("\"")) {
-                            key = key.substring(1, key.length()-1);
-                            fieldMap.put("type", "type:regex");
-                        }
-                        fieldMap.put("key", key);
-                    }
-
-                    if (m.group(8) != null) {
-                        String value = m.group(8);
-                        if (value.startsWith("\"") && value.endsWith("\"")) {
-                            value = value.substring(1, value.length()-1);
-                            fieldMap.put("type", "type:regex");
-                        }
-                        fieldMap.put("value", value);
-                    }
-
-                    // negate field (see above)
-                    if (negate) {
-                        fieldMap.put("match", "match:ne");
-                    }
-                    else {
-                        fieldMap.put("match", "match:eq");
-                    }
-                    terms.add(fieldMap);
+            if (m.group(2) != null)
+                fieldMap.put("foundry", m.group(2));
+            if (m.group(4) != null)
+                fieldMap.put("layer", m.group(4));
+            if (m.group(5) != null) {
+                if ("!=".equals(m.group(5)))
+                    negate = !negate;
+            }
+            if (m.group(6) != null) {
+                String key = m.group(6);
+                if (key.startsWith("\"") && key.endsWith("\"")) {
+                    key = key.substring(1, key.length() - 1);
+                    fieldMap.put("type", "type:regex");
                 }
-                if (morphterms.length == 1) {
-                    token.put("wrap", fieldMap);
-                }
-                else {
-                    LinkedHashMap<String, Object> termGroup = 
-                            KoralObjectGenerator.makeTermGroup("and");
-                    termGroup.put("operands", terms);
-                    token.put("wrap", termGroup);
-                }
-                // Step II: decide where to put
-                putIntoSuperObject(token, 0);
-                visited.add(node.getChild(0));
+                fieldMap.put("key", key);
             }
 
-            /**
-             * Nodes introducing tokens. Process all in the same manner,
-             * except for the fieldMap entry
-             * 
-             * @param node
-             */
-            private void processOPWF_OPLEM(Tree node) {
-                String nodeCat = getNodeCat(node);
-                // Step I: get info
-                LinkedHashMap<String, Object> token = KoralObjectGenerator.makeToken();
-                objectStack.push(token);
-                stackedObjects++;
-                LinkedHashMap<String, Object> fieldMap = 
-                        KoralObjectGenerator.makeTerm();
-                token.put("wrap", fieldMap);
-                // make category-specific fieldMap entry
-                String attr = nodeCat.equals("OPWF") ? "orth" : "lemma";
-                String value = node.getChild(0).toStringTree().replaceAll("\"", "");
-                // check for wildcard string
-                Pattern p = Pattern.compile("[+*?]");
-                Matcher m = p.matcher(value);
-                if (m.find())
-                    fieldMap.put("type", "type:wildcard");
-
-                if (value.startsWith("$")) {
-                    value = value.substring(1);
-                    ArrayList<String> flags = new ArrayList<String>();
-                    flags.add("flags:caseInsensitive");
-                    fieldMap.put("flags", flags);
+            if (m.group(8) != null) {
+                String value = m.group(8);
+                if (value.startsWith("\"") && value.endsWith("\"")) {
+                    value = value.substring(1, value.length() - 1);
+                    fieldMap.put("type", "type:regex");
                 }
-
-                fieldMap.put("key", value);
-                fieldMap.put("layer", attr);
-
-                // negate field (see above)
-                if (negate) {
-                    fieldMap.put("match", "match:ne");
-                }
-                else {
-                    fieldMap.put("match", "match:eq");
-                }
-                // Step II: decide where to put
-                if (!hasChild(node, "TPOS")) {
-                    putIntoSuperObject(token, 1);
-                    visited.add(node.getChild(0));
-                }
-                else {
-                    // TODO
-                }
+                fieldMap.put("value", value);
             }
 
-            private void processSpanDistance(String meas, int min, int max) {
-                // Do stuff here in case we'll decide one day to treat span distances
-                // in a special way (see GDoc Special Distances Serialization).
+            // negate field (see above)
+            if (negate) {
+                fieldMap.put("match", "match:ne");
             }
-
-            /**
-             * Registers an entry in the {@link #operandWrap} table in order
-             * to allow an operator's arguments (or only one of them) to be
-             * wrapped in a class group.
-             * 
-             * @param node
-             *            The operator node (parent node of the ARG1/ARG2
-             *            node)
-             * @param arg
-             *            The argument number (1 or 2)
-             * @param cls
-             *            The class id.
-             */
-            private void wrapOperandInClass(Tree node, int arg, int cls) {
-                LinkedHashMap<String, Object> clsGroup = 
-                        KoralObjectGenerator.makeSpanClass(cls);
-                wrapOperand(node, arg, clsGroup);
+            else {
+                fieldMap.put("match", "match:eq");
             }
+            terms.add(fieldMap);
+        }
+        if (morphterms.length == 1) {
+            token.put("wrap", fieldMap);
+        }
+        else {
+            LinkedHashMap<String, Object> termGroup = KoralObjectGenerator
+                    .makeTermGroup("and");
+            termGroup.put("operands", terms);
+            token.put("wrap", termGroup);
+        }
+        // Step II: decide where to put
+        putIntoSuperObject(token, 0);
+        visited.add(node.getChild(0));
+    }
 
-            /**
-             * Registers an entry in the {@link #operandWrap} table in order
-             * to allow an operator's arguments (or only one of them) to be
-             * wrapped in an arbitrary object, e.g. a reference group.
-             * 
-             * @param node
-             *            The operator node (parent node of the ARG1/ARG2
-             *            node)
-             * @param arg
-             *            The argument number (1 or 2)
-             * @param container
-             *            The object in whose operand list the argument shall
-             *            be wrapped.
-             */
-            private void wrapOperand(Tree node, int arg,
-                    LinkedHashMap<String, Object> container) {
-                operandWrap.put(node, arg, container);
+
+    /**
+     * Nodes introducing tokens. Process all in the same manner,
+     * except for the fieldMap entry
+     * 
+     * @param node
+     */
+    private void processOPWF_OPLEM (Tree node) {
+        String nodeCat = getNodeCat(node);
+        // Step I: get info
+        LinkedHashMap<String, Object> token = KoralObjectGenerator.makeToken();
+        objectStack.push(token);
+        stackedObjects++;
+        LinkedHashMap<String, Object> fieldMap = KoralObjectGenerator
+                .makeTerm();
+        token.put("wrap", fieldMap);
+        // make category-specific fieldMap entry
+        String attr = nodeCat.equals("OPWF") ? "orth" : "lemma";
+        String value = node.getChild(0).toStringTree().replaceAll("\"", "");
+        // check for wildcard string
+        Pattern p = Pattern.compile("[+*?]");
+        Matcher m = p.matcher(value);
+        if (m.find())
+            fieldMap.put("type", "type:wildcard");
+
+        if (value.startsWith("$")) {
+            value = value.substring(1);
+            ArrayList<String> flags = new ArrayList<String>();
+            flags.add("flags:caseInsensitive");
+            fieldMap.put("flags", flags);
+        }
+
+        fieldMap.put("key", value);
+        fieldMap.put("layer", attr);
+
+        // negate field (see above)
+        if (negate) {
+            fieldMap.put("match", "match:ne");
+        }
+        else {
+            fieldMap.put("match", "match:eq");
+        }
+        // Step II: decide where to put
+        if (!hasChild(node, "TPOS")) {
+            putIntoSuperObject(token, 1);
+            visited.add(node.getChild(0));
+        }
+        else {
+            // TODO
+        }
+    }
+
+
+    private void processSpanDistance (String meas, int min, int max) {
+        // Do stuff here in case we'll decide one day to treat span distances
+        // in a special way (see GDoc Special Distances Serialization).
+    }
+
+
+    /**
+     * Registers an entry in the {@link #operandWrap} table in order
+     * to allow an operator's arguments (or only one of them) to be
+     * wrapped in a class group.
+     * 
+     * @param node
+     *            The operator node (parent node of the ARG1/ARG2
+     *            node)
+     * @param arg
+     *            The argument number (1 or 2)
+     * @param cls
+     *            The class id.
+     */
+    private void wrapOperandInClass (Tree node, int arg, int cls) {
+        LinkedHashMap<String, Object> clsGroup = KoralObjectGenerator
+                .makeSpanClass(cls);
+        wrapOperand(node, arg, clsGroup);
+    }
+
+
+    /**
+     * Registers an entry in the {@link #operandWrap} table in order
+     * to allow an operator's arguments (or only one of them) to be
+     * wrapped in an arbitrary object, e.g. a reference group.
+     * 
+     * @param node
+     *            The operator node (parent node of the ARG1/ARG2
+     *            node)
+     * @param arg
+     *            The argument number (1 or 2)
+     * @param container
+     *            The object in whose operand list the argument shall
+     *            be wrapped.
+     */
+    private void wrapOperand (Tree node, int arg,
+            LinkedHashMap<String, Object> container) {
+        operandWrap.put(node, arg, container);
+    }
+
+
+    private Object translateMorph (String layer) {
+        // might be extended...
+        if (layer.equals("ANA"))
+            return ResourceMapper.descriptor2policy("ANA");
+        else
+            return layer;
+
+    }
+
+
+    @SuppressWarnings("unchecked")
+    /**
+     * Processes individual position conditions as provided in the OPTS node under the OPBEG node.
+     * #BEG allows to specify position constrains that apply to the beginning or the end of the subquery X.
+     * E.g., in #BEG(X, tpos/tpos), the 'tpos' constraints before the slash indicate conditions that apply 
+     * to the beginning of X, those after the slash are conditions that apply to the end of X.
+     * See the official C-II documentation for more details. <br/><br/>
+     * What's important here is what follows: <br/>
+     * Assume the query #BED(der Mann, sa/pa). This means that <b>the beginning<b/> of "der Mann" stands at
+     * the beginning of a sentence and that <b>the end</b> (because this constraint comes after the slash) stands at the 
+     * beginning of a paragraph. The "end" means the last item, here "Mann", so this token comes at the beginning
+     * of a paragraph. To capture this, we choose spanRefs: The last item of X matches the first item of the span (here: P). 
+     * @param cond
+     * @param distributedOperands
+     * @param mode
+     * @return
+     */
+    private LinkedHashMap<String, Object> processPositionCondition (Tree cond,
+            ArrayList<Object> distributedOperands, String mode) {
+        boolean negated = false;
+        String elem; // the 'span' (s/p/t)
+        String position = "frames:matches"; // default
+        // spanRef to be used for the element ('span')
+        Integer[] elemSpanRef = null;
+        // spanRef to be used for the subquery X
+        Integer[] hitSpanRef = null;
+
+        String nodeString = cond.toStringTree();
+        if (nodeString.startsWith("-")) {
+            negated = true;
+            nodeString = nodeString.substring(1);
+        }
+        else if (nodeString.startsWith("+")) {
+            nodeString = nodeString.substring(1);
+        }
+        elem = nodeString.substring(0, 1);
+        nodeString = nodeString.substring(1);
+        // in cases where the end of X shall match the beginning of
+        // the span, or vice versa,
+        // we need to define spanRefs
+        if (mode.equals("beg")) {
+            if (nodeString.equals("a")) {
+                position = "frames:startsWith";
             }
-
-            private Object translateMorph(String layer) {
-                // might be extended...
-                if (layer.equals("ANA"))
-                    return ResourceMapper.descriptor2policy("ANA");
-                else
-                    return layer;
-
+            else if (nodeString.equals("e")) {
+                hitSpanRef = new Integer[] { 0, 1 };
+                elemSpanRef = new Integer[] { -1, 1 };
             }
-
-            @SuppressWarnings("unchecked")
-            /**
-             * Processes individual position conditions as provided in the OPTS node under the OPBEG node.
-             * #BEG allows to specify position constrains that apply to the beginning or the end of the subquery X.
-             * E.g., in #BEG(X, tpos/tpos), the 'tpos' constraints before the slash indicate conditions that apply 
-             * to the beginning of X, those after the slash are conditions that apply to the end of X.
-             * See the official C-II documentation for more details. <br/><br/>
-             * What's important here is what follows: <br/>
-             * Assume the query #BED(der Mann, sa/pa). This means that <b>the beginning<b/> of "der Mann" stands at
-             * the beginning of a sentence and that <b>the end</b> (because this constraint comes after the slash) stands at the 
-             * beginning of a paragraph. The "end" means the last item, here "Mann", so this token comes at the beginning
-             * of a paragraph. To capture this, we choose spanRefs: The last item of X matches the first item of the span (here: P). 
-             * @param cond
-             * @param distributedOperands
-             * @param mode
-             * @return
-             */
-            private LinkedHashMap<String, Object> processPositionCondition(Tree cond,
-                    ArrayList<Object> distributedOperands, String mode) {
-                boolean negated = false;
-                String elem; // the 'span' (s/p/t)
-                String position = "frames:matches"; // default
-                // spanRef to be used for the element ('span')
-                Integer[] elemSpanRef = null;
-                // spanRef to be used for the subquery X
-                Integer[] hitSpanRef = null; 
-
-                String nodeString = cond.toStringTree();
-                if (nodeString.startsWith("-")) {
-                    negated = true;
-                    nodeString = nodeString.substring(1);
-                }
-                else if (nodeString.startsWith("+")) {
-                    nodeString = nodeString.substring(1);
-                }
-                elem = nodeString.substring(0, 1);
-                nodeString = nodeString.substring(1);
-                // in cases where the end of X shall match the beginning of
-                // the span, or vice versa,
-                // we need to define spanRefs
-                if (mode.equals("beg")) {
-                    if (nodeString.equals("a")) {
-                        position = "frames:startsWith";
-                    }
-                    else if (nodeString.equals("e")) {
-                        hitSpanRef = new Integer[] { 0, 1 };
-                        elemSpanRef = new Integer[] { -1, 1 };
-                    }
-                }
-                else if (mode.equals("end")) {
-                    if (nodeString.equals("e")) {
-                        position = "frames:endsWith";
-                    }
-                    else if (nodeString.equals("a")) {
-                        hitSpanRef = new Integer[] { 0, 1 };
-                        elemSpanRef = new Integer[] { -1, 1 };
-                    }
-                }
-                // Create the position group and add the span and the subquery
-                // as operands, possibly wrapped in spanRefs
-                LinkedHashMap<String, Object> positionGroup = KoralObjectGenerator
-                        .makePosition(new String[] { position });
-                if (negated)
-                    positionGroup.put("exclude", true);
-                ArrayList<Object> posOperands = new ArrayList<Object>();
-                LinkedHashMap<String, Object> classGroup = 
-                        KoralObjectGenerator.makeSpanClass(128+classCounter++);
-                classGroup.put("operands", distributedOperands);
-                positionGroup.put("operands", posOperands);
-                LinkedHashMap<String, Object> span = KoralObjectGenerator.makeSpan(elem);
-                objectStack.push(classGroup);
-                if (hitSpanRef != null) {
-                    LinkedHashMap<String, Object> spanRefAroundHit = 
-                            KoralObjectGenerator.makeSpanReference(hitSpanRef, "focus");
-                    ((ArrayList<Object>) spanRefAroundHit.get("operands"))
+        }
+        else if (mode.equals("end")) {
+            if (nodeString.equals("e")) {
+                position = "frames:endsWith";
+            }
+            else if (nodeString.equals("a")) {
+                hitSpanRef = new Integer[] { 0, 1 };
+                elemSpanRef = new Integer[] { -1, 1 };
+            }
+        }
+        // Create the position group and add the span and the subquery
+        // as operands, possibly wrapped in spanRefs
+        LinkedHashMap<String, Object> positionGroup = KoralObjectGenerator
+                .makePosition(new String[] { position });
+        if (negated)
+            positionGroup.put("exclude", true);
+        ArrayList<Object> posOperands = new ArrayList<Object>();
+        LinkedHashMap<String, Object> classGroup = KoralObjectGenerator
+                .makeSpanClass(128 + classCounter++);
+        classGroup.put("operands", distributedOperands);
+        positionGroup.put("operands", posOperands);
+        LinkedHashMap<String, Object> span = KoralObjectGenerator
+                .makeSpan(elem);
+        objectStack.push(classGroup);
+        if (hitSpanRef != null) {
+            LinkedHashMap<String, Object> spanRefAroundHit = KoralObjectGenerator
+                    .makeSpanReference(hitSpanRef, "focus");
+            ((ArrayList<Object>) spanRefAroundHit.get("operands"))
                     .add(classGroup);
-                    // re-assign after wrapping classGroup in spanRef
-                    classGroup = spanRefAroundHit; 
-                }
-                if (elemSpanRef != null) {
-                    LinkedHashMap<String, Object> spanRefAroundSpan = 
-                            KoralObjectGenerator.makeSpanReference(elemSpanRef, "focus");
-                    ((ArrayList<Object>) spanRefAroundSpan.get("operands")).add(span);
-                    // re-assign after wrapping span in spanRef
-                    span = spanRefAroundSpan; 
-                }
-                posOperands.add(span);
-                posOperands.add(classGroup);
-                return positionGroup;
+            // re-assign after wrapping classGroup in spanRef
+            classGroup = spanRefAroundHit;
+        }
+        if (elemSpanRef != null) {
+            LinkedHashMap<String, Object> spanRefAroundSpan = KoralObjectGenerator
+                    .makeSpanReference(elemSpanRef, "focus");
+            ((ArrayList<Object>) spanRefAroundSpan.get("operands")).add(span);
+            // re-assign after wrapping span in spanRef
+            span = spanRefAroundSpan;
+        }
+        posOperands.add(span);
+        posOperands.add(classGroup);
+        return positionGroup;
+    }
+
+
+    private LinkedHashMap<String, Object> parseOPINOptions (Tree node) {
+        Tree posnode = getFirstChildWithCat(node, "POS");
+        Tree rangenode = getFirstChildWithCat(node, "RANGE");
+        Tree exclnode = getFirstChildWithCat(node, "EXCL");
+        Tree groupnode = getFirstChildWithCat(node, "GROUP");
+        boolean negatePosition = false;
+        LinkedHashMap<String, Object> posOptions = new LinkedHashMap<String, Object>();
+        ArrayList<String> positions = new ArrayList<String>();
+        ArrayList<String> classRefCheck = new ArrayList<String>();
+        posOptions.put("matchall", false);
+        String posOption = null;
+        if (posnode != null) {
+            posOption = posnode.getChild(0).toStringTree();
+            switch (posOption) {
+                case "L":
+                    positions.add("frames:startsWith");
+                    positions.add("frames:matches");
+                    //                    classRefCheck.add("classRefCheck:includes");
+                    break;
+                case "R":
+                    positions.add("frames:endsWith");
+                    positions.add("frames:matches");
+                    //                    classRefCheck.add("classRefCheck:includes");
+                    break;
+                case "F":
+                    positions.add("frames:matches");
+                    //                    classRefCheck.add("classRefCheck:includes");
+                    break;
+                case "FE":
+                    positions.add("frames:matches");
+                    classRefCheck.add("classRefCheck:equals");
+                    break;
+                case "FI":
+                    positions.add("frames:matches");
+                    classRefCheck.add("classRefCheck:unequals");
+                    //                    classRefCheck.add("classRefCheck:includes");
+                    break;
+                case "N":
+                    positions.add("frames:contains");
+                    //                    classRefCheck.add("classRefCheck:includes");
+                    break;
             }
-
-            private LinkedHashMap<String, Object> parseOPINOptions(Tree node) {
-                Tree posnode = getFirstChildWithCat(node, "POS");
-                Tree rangenode = getFirstChildWithCat(node, "RANGE");
-                Tree exclnode = getFirstChildWithCat(node, "EXCL");
-                Tree groupnode = getFirstChildWithCat(node, "GROUP");
-                boolean negatePosition = false;
-                LinkedHashMap<String, Object> posOptions = new LinkedHashMap<String, Object>();
-                ArrayList<String> positions = new ArrayList<String>();
-                ArrayList<String> classRefCheck = new ArrayList<String>();
-                posOptions.put("matchall", false);
-                String posOption = null;
-                if (posnode != null) {
-                    posOption = posnode.getChild(0).toStringTree();
-                    switch (posOption) {
-                        case "L":
-                            positions.add("frames:startsWith");
-                            positions.add("frames:matches");
-                            //                    classRefCheck.add("classRefCheck:includes");
-                            break;
-                        case "R":
-                            positions.add("frames:endsWith");
-                            positions.add("frames:matches");
-                            //                    classRefCheck.add("classRefCheck:includes");
-                            break;
-                        case "F":
-                            positions.add("frames:matches");
-                            //                    classRefCheck.add("classRefCheck:includes");
-                            break;
-                        case "FE":
-                            positions.add("frames:matches");
-                            classRefCheck.add("classRefCheck:equals");
-                            break;
-                        case "FI":
-                            positions.add("frames:matches");
-                            classRefCheck.add("classRefCheck:unequals");
-                            //                    classRefCheck.add("classRefCheck:includes");
-                            break;
-                        case "N":
-                            positions.add("frames:contains");
-                            //                    classRefCheck.add("classRefCheck:includes");
-                            break;
-                    }
-                } else {
-                    classRefCheck.add("classRefCheck:includes");
-                }
-                posOptions.put("frames", positions);
-                posOptions.put("classRefCheck", classRefCheck);
-                if (exclnode != null) {
-                    if (exclnode.getChild(0).toStringTree().equals("YES")) {
-                        negatePosition = !negatePosition;
-                    }
-                }
-
-                if (rangenode != null) {
-                    String range = rangenode.getChild(0).toStringTree().toLowerCase();
-                    if (range.equals("all")) {
-                        posOptions.put("matchall", true);
-                        // LinkedHashMap<String,Object> ref =
-                        // makeResetReference(); // reset all defined classes
-                        // wrapOperand(node,2,ref);
-                    }
-                }
-
-                if (negatePosition) {
-                    posOptions.put("exclude", true);
-                }
-
-                boolean grouping = false;
-                if (groupnode != null) {
-                    if (groupnode.getChild(0).toStringTree().equalsIgnoreCase("max")) {
-                        grouping = true;
-                    }
-                } 
-                posOptions.put("grouping", grouping);
-
-                return posOptions;
+        }
+        else {
+            classRefCheck.add("classRefCheck:includes");
+        }
+        posOptions.put("frames", positions);
+        posOptions.put("classRefCheck", classRefCheck);
+        if (exclnode != null) {
+            if (exclnode.getChild(0).toStringTree().equals("YES")) {
+                negatePosition = !negatePosition;
             }
+        }
 
-            private LinkedHashMap<String, Object> parseOPOVOptions(Tree node) {
-                boolean negatePosition = false;
-                Tree posnode = getFirstChildWithCat(node, "POS");
-                Tree rangenode = getFirstChildWithCat(node, "RANGE");
-                Tree exclnode = getFirstChildWithCat(node, "EXCL");
-                Tree groupnode = getFirstChildWithCat(node, "GROUP");
-                LinkedHashMap<String, Object> posOptions = new LinkedHashMap<String, Object>();
-                ArrayList<String> positions = new ArrayList<String>();
-                ArrayList<String> classRefCheck = new ArrayList<String>();
-                posOptions.put("matchall", false);
-                String posOption = null;
-                if (posnode != null) {
-                    posOption = posnode.getChild(0).toStringTree();
-                    switch (posOption) {
-                        case "L":
-                            positions.add("frames:startsWith");
-                            positions.add("frames:overlapsLeft");
-                            positions.add("frames:matches");
-                            classRefCheck.add("classRefCheck:intersects");
-                            break;
-                        case "R":
-                            positions.add("frames:endsWith");
-                            positions.add("frames:overlapsRight");
-                            positions.add("frames:matches");
-                            classRefCheck.add("classRefCheck:intersects");
-                            break;
-                        case "F":
-                            positions.add("frames:matches");
-                            classRefCheck.add("classRefCheck:intersects");
-                            break;
-                        case "FE":
-                            positions.add("frames:matches");
-                            classRefCheck.add("classRefCheck:equals");
-                            break;
-                        case "FI":
-                            positions.add("frames:matches");
-                            classRefCheck.add("classRefCheck:unequals");
-                            break;
-                        case "X":
-                            positions.add("frames:contains");
-                            classRefCheck.add("classRefCheck:intersects");
-                            break;
-                    }
-                }
-                else {
+        if (rangenode != null) {
+            String range = rangenode.getChild(0).toStringTree().toLowerCase();
+            if (range.equals("all")) {
+                posOptions.put("matchall", true);
+                // LinkedHashMap<String,Object> ref =
+                // makeResetReference(); // reset all defined classes
+                // wrapOperand(node,2,ref);
+            }
+        }
+
+        if (negatePosition) {
+            posOptions.put("exclude", true);
+        }
+
+        boolean grouping = false;
+        if (groupnode != null) {
+            if (groupnode.getChild(0).toStringTree().equalsIgnoreCase("max")) {
+                grouping = true;
+            }
+        }
+        posOptions.put("grouping", grouping);
+
+        return posOptions;
+    }
+
+
+    private LinkedHashMap<String, Object> parseOPOVOptions (Tree node) {
+        boolean negatePosition = false;
+        Tree posnode = getFirstChildWithCat(node, "POS");
+        Tree rangenode = getFirstChildWithCat(node, "RANGE");
+        Tree exclnode = getFirstChildWithCat(node, "EXCL");
+        Tree groupnode = getFirstChildWithCat(node, "GROUP");
+        LinkedHashMap<String, Object> posOptions = new LinkedHashMap<String, Object>();
+        ArrayList<String> positions = new ArrayList<String>();
+        ArrayList<String> classRefCheck = new ArrayList<String>();
+        posOptions.put("matchall", false);
+        String posOption = null;
+        if (posnode != null) {
+            posOption = posnode.getChild(0).toStringTree();
+            switch (posOption) {
+                case "L":
+                    positions.add("frames:startsWith");
+                    positions.add("frames:overlapsLeft");
+                    positions.add("frames:matches");
                     classRefCheck.add("classRefCheck:intersects");
-                }
-
-                posOptions.put("frames", positions);
-                posOptions.put("classRefCheck", classRefCheck);
-                if (exclnode != null) {
-                    if (exclnode.getChild(0).toStringTree().equals("YES")) {
-                        negatePosition = !negatePosition;
-                    }
-                }
-
-                if (rangenode != null) {
-                    String range = rangenode.getChild(0).toStringTree().toLowerCase();
-                    if (range.equals("all")) {
-                        posOptions.put("matchall", true);
-                        // LinkedHashMap<String,Object> ref =
-                        // makeResetReference(); // reset all defined classes
-                        // wrapOperand(node,2,ref);
-                    }
-                }
-
-                if (negatePosition) {
-                    posOptions.put("exclude", "true");
-                }
-
-                boolean grouping = false;
-                if (groupnode != null) {
-                    if (groupnode.getChild(0).toStringTree().equalsIgnoreCase("max")) {
-                        grouping = true;
-                    }
-                } 
-                posOptions.put("grouping", grouping);
-
-                return posOptions;
+                    break;
+                case "R":
+                    positions.add("frames:endsWith");
+                    positions.add("frames:overlapsRight");
+                    positions.add("frames:matches");
+                    classRefCheck.add("classRefCheck:intersects");
+                    break;
+                case "F":
+                    positions.add("frames:matches");
+                    classRefCheck.add("classRefCheck:intersects");
+                    break;
+                case "FE":
+                    positions.add("frames:matches");
+                    classRefCheck.add("classRefCheck:equals");
+                    break;
+                case "FI":
+                    positions.add("frames:matches");
+                    classRefCheck.add("classRefCheck:unequals");
+                    break;
+                case "X":
+                    positions.add("frames:contains");
+                    classRefCheck.add("classRefCheck:intersects");
+                    break;
             }
+        }
+        else {
+            classRefCheck.add("classRefCheck:intersects");
+        }
 
-            @SuppressWarnings({ "unchecked" })
-            private LinkedHashMap<String, Object> wrap(LinkedHashMap<String, Object>[] wrapCascade) {
-                int i;
-                for (i = 0; i < wrapCascade.length - 1; i++) {
-                    ArrayList<Object> containerOperands = (ArrayList<Object>) wrapCascade[i + 1]
-                            .get("operands");
-                    containerOperands.add(0, wrapCascade[i]);
-                }
-                return wrapCascade[i];
+        posOptions.put("frames", positions);
+        posOptions.put("classRefCheck", classRefCheck);
+        if (exclnode != null) {
+            if (exclnode.getChild(0).toStringTree().equals("YES")) {
+                negatePosition = !negatePosition;
             }
+        }
 
-            @SuppressWarnings("unchecked")
-            private void putIntoSuperObject(LinkedHashMap<String, Object> object,
-                    int objStackPosition) {
-                if (objectStack.size() > objStackPosition) {
-                    ArrayList<Object> topObjectOperands = (ArrayList<Object>) objectStack
-                            .get(objStackPosition).get("operands");
-                    if (!invertedOperandsLists.contains(topObjectOperands)) {
-                        topObjectOperands.add(object);
-                    }
-                    else {
-                        topObjectOperands.add(0, object);
-                    }
-                }
-                else {
-                    requestMap.put("query", object);
-                }
+        if (rangenode != null) {
+            String range = rangenode.getChild(0).toStringTree().toLowerCase();
+            if (range.equals("all")) {
+                posOptions.put("matchall", true);
+                // LinkedHashMap<String,Object> ref =
+                // makeResetReference(); // reset all defined classes
+                // wrapOperand(node,2,ref);
             }
+        }
 
-            private void putIntoSuperObject(LinkedHashMap<String, Object> object) {
-                putIntoSuperObject(object, 0);
+        if (negatePosition) {
+            posOptions.put("exclude", "true");
+        }
+
+        boolean grouping = false;
+        if (groupnode != null) {
+            if (groupnode.getChild(0).toStringTree().equalsIgnoreCase("max")) {
+                grouping = true;
             }
+        }
+        posOptions.put("grouping", grouping);
 
-            /**
-             * Normalises position operators to equivalents using #BED
-             */
-            private String rewritePositionQuery(String q) {
-                Pattern p = Pattern.compile("(\\w+):((\\+|-)?(sa|se|pa|pe|ta|te),?)+");
-                Matcher m = p.matcher(q);
+        return posOptions;
+    }
 
-                String rewrittenQuery = q;
-                while (m.find()) {
-                    String match = m.group();
-                    String conditionsString = match.split(":")[1];
-                    Pattern conditionPattern = Pattern
-                            .compile("(\\+|-)?(sa|se|pa|pe|ta|te)");
-                    Matcher conditionMatcher = conditionPattern
-                            .matcher(conditionsString);
-                    String replacement = "#BED(" + m.group(1) + " , ";
-                    while (conditionMatcher.find()) {
-                        replacement = replacement + conditionMatcher.group() + ",";
-                    }
-                    // remove trailing comma and close parenthesis
-                    replacement = 
-                            replacement.substring(0, replacement.length() - 1)+ ")"; 
-                    rewrittenQuery = rewrittenQuery.replace(match, replacement);
-                }
-                return rewrittenQuery;
+
+    @SuppressWarnings({ "unchecked" })
+    private LinkedHashMap<String, Object> wrap (
+            LinkedHashMap<String, Object>[] wrapCascade) {
+        int i;
+        for (i = 0; i < wrapCascade.length - 1; i++) {
+            ArrayList<Object> containerOperands = (ArrayList<Object>) wrapCascade[i + 1]
+                    .get("operands");
+            containerOperands.add(0, wrapCascade[i]);
+        }
+        return wrapCascade[i];
+    }
+
+
+    @SuppressWarnings("unchecked")
+    private void putIntoSuperObject (LinkedHashMap<String, Object> object,
+            int objStackPosition) {
+        if (objectStack.size() > objStackPosition) {
+            ArrayList<Object> topObjectOperands = (ArrayList<Object>) objectStack
+                    .get(objStackPosition).get("operands");
+            if (!invertedOperandsLists.contains(topObjectOperands)) {
+                topObjectOperands.add(object);
             }
-
-            private Tree parseCosmasQuery(String query) {
-                query = rewritePositionQuery(query);
-                Tree tree = null;
-                Antlr3DescriptiveErrorListener errorListener = 
-                        new Antlr3DescriptiveErrorListener(query);
-                try {
-                    ANTLRStringStream ss = new ANTLRStringStream(query);
-                    c2psLexer lex = new c2psLexer(ss);
-                    org.antlr.runtime.CommonTokenStream tokens = 
-                            new org.antlr.runtime.CommonTokenStream(lex); // v3
-                    parser = new c2psParser(tokens);
-                    // Use custom error reporters
-                    lex.setErrorReporter(errorListener);
-                    ((c2psParser) parser).setErrorReporter(errorListener); 
-                    c2psParser.c2ps_query_return c2Return = ((c2psParser) parser)
-                            .c2ps_query(); // statt t().
-                    // AST Tree anzeigen:
-                    tree = (Tree) c2Return.getTree();
-
-                }
-                catch (RecognitionException e) {
-                    log.error("Could not parse query. Please make sure it is well-formed.");
-                    addError(StatusCodes.MALFORMED_QUERY,
-                            "Could not parse query. Please make sure it is well-formed.");
-                }
-                String treestring = tree.toStringTree();
-
-                boolean erroneous = false;
-                if (parser.failed() || parser.getNumberOfSyntaxErrors() > 0) {
-                    erroneous = true;
-                    tree = null;
-                }
-
-                if (erroneous || treestring.contains("<mismatched token")
-                        || treestring.contains("<error")
-                        || treestring.contains("<unexpected")) {
-                    log.error(errorListener.generateFullErrorMsg().toString());
-                    addError(errorListener.generateFullErrorMsg());
-                }
-                return tree;
+            else {
+                topObjectOperands.add(0, object);
             }
+        }
+        else {
+            requestMap.put("query", object);
+        }
+    }
+
+
+    private void putIntoSuperObject (LinkedHashMap<String, Object> object) {
+        putIntoSuperObject(object, 0);
+    }
+
+
+    /**
+     * Normalises position operators to equivalents using #BED
+     */
+    private String rewritePositionQuery (String q) {
+        Pattern p = Pattern.compile("(\\w+):((\\+|-)?(sa|se|pa|pe|ta|te),?)+");
+        Matcher m = p.matcher(q);
+
+        String rewrittenQuery = q;
+        while (m.find()) {
+            String match = m.group();
+            String conditionsString = match.split(":")[1];
+            Pattern conditionPattern = Pattern
+                    .compile("(\\+|-)?(sa|se|pa|pe|ta|te)");
+            Matcher conditionMatcher = conditionPattern
+                    .matcher(conditionsString);
+            String replacement = "#BED(" + m.group(1) + " , ";
+            while (conditionMatcher.find()) {
+                replacement = replacement + conditionMatcher.group() + ",";
+            }
+            // remove trailing comma and close parenthesis
+            replacement = replacement.substring(0, replacement.length() - 1)
+                    + ")";
+            rewrittenQuery = rewrittenQuery.replace(match, replacement);
+        }
+        return rewrittenQuery;
+    }
+
+
+    private Tree parseCosmasQuery (String query) {
+        query = rewritePositionQuery(query);
+        Tree tree = null;
+        Antlr3DescriptiveErrorListener errorListener = new Antlr3DescriptiveErrorListener(
+                query);
+        try {
+            ANTLRStringStream ss = new ANTLRStringStream(query);
+            c2psLexer lex = new c2psLexer(ss);
+            org.antlr.runtime.CommonTokenStream tokens = new org.antlr.runtime.CommonTokenStream(
+                    lex); // v3
+            parser = new c2psParser(tokens);
+            // Use custom error reporters
+            lex.setErrorReporter(errorListener);
+            ((c2psParser) parser).setErrorReporter(errorListener);
+            c2psParser.c2ps_query_return c2Return = ((c2psParser) parser)
+                    .c2ps_query(); // statt t().
+            // AST Tree anzeigen:
+            tree = (Tree) c2Return.getTree();
+
+        }
+        catch (RecognitionException e) {
+            log.error("Could not parse query. Please make sure it is well-formed.");
+            addError(StatusCodes.MALFORMED_QUERY,
+                    "Could not parse query. Please make sure it is well-formed.");
+        }
+        String treestring = tree.toStringTree();
+
+        boolean erroneous = false;
+        if (parser.failed() || parser.getNumberOfSyntaxErrors() > 0) {
+            erroneous = true;
+            tree = null;
+        }
+
+        if (erroneous || treestring.contains("<mismatched token")
+                || treestring.contains("<error")
+                || treestring.contains("<unexpected")) {
+            log.error(errorListener.generateFullErrorMsg().toString());
+            addError(errorListener.generateFullErrorMsg());
+        }
+        return tree;
+    }
 }
\ No newline at end of file
diff --git a/src/main/java/de/ids_mannheim/korap/query/serialize/CqlQueryProcessor.java b/src/main/java/de/ids_mannheim/korap/query/serialize/CqlQueryProcessor.java
index 6ed5f6b..b06731c 100644
--- a/src/main/java/de/ids_mannheim/korap/query/serialize/CqlQueryProcessor.java
+++ b/src/main/java/de/ids_mannheim/korap/query/serialize/CqlQueryProcessor.java
@@ -35,16 +35,19 @@
     private String version;
     private boolean isCaseSensitive; // default true
 
+
     public CqlQueryProcessor (String query) {
         this(query, VERSION_1_2, true);
     }
 
+
     public CqlQueryProcessor (String query, String version) {
         this(query, version, true);
     }
 
+
     public CqlQueryProcessor (String query, String version,
-            boolean isCaseSensitive) {
+                              boolean isCaseSensitive) {
         this.version = version;
         this.isCaseSensitive = isCaseSensitive;
         this.requestMap = new LinkedHashMap<>();
@@ -52,13 +55,15 @@
         process(query);
     }
 
+
     @Override
-    public Map<String, Object> getRequestMap() {
+    public Map<String, Object> getRequestMap () {
         return this.requestMap;
     }
 
+
     @Override
-    public void process(String query) {
+    public void process (String query) {
         if ((query == null) || query.isEmpty())
             addError(StatusCodes.MALFORMED_QUERY,
                     "SRU diagnostic 27: An empty query is unsupported.");
@@ -69,7 +74,8 @@
         // requestMap.put("query", sentenceWrapper(queryMap));
     }
 
-    private Map<String, Object> sentenceWrapper(Map<String, Object> m) {
+
+    private Map<String, Object> sentenceWrapper (Map<String, Object> m) {
         Map<String, Object> map = new LinkedHashMap<String, Object>();
         map.put("@type", "koral:group");
         map.put("operation", OPERATION_POSITION);
@@ -87,7 +93,8 @@
         return map;
     }
 
-    private CQLNode parseQuerytoCQLNode(String query) {
+
+    private CQLNode parseQuerytoCQLNode (String query) {
         try {
             int compat = -1;
             switch (version) {
@@ -106,7 +113,8 @@
         }
     }
 
-    private Map<String, Object> parseCQLNode(CQLNode node) {
+
+    private Map<String, Object> parseCQLNode (CQLNode node) {
 
         if (node instanceof CQLTermNode) {
             return parseTermNode((CQLTermNode) node);
@@ -126,7 +134,8 @@
         }
     }
 
-    private Map<String, Object> parseTermNode(CQLTermNode node) {
+
+    private Map<String, Object> parseTermNode (CQLTermNode node) {
         checkTermNode(node);
         final String term = node.getTerm();
         if ((term == null) || term.isEmpty()) {
@@ -142,7 +151,8 @@
         }
     }
 
-    private Map<String, Object> parseAndNode(CQLAndNode node) {
+
+    private Map<String, Object> parseAndNode (CQLAndNode node) {
         checkBooleanModifier(node);
 
         Map<String, Object> map = new LinkedHashMap<String, Object>();
@@ -167,7 +177,8 @@
         return map;
     }
 
-    private Map<String, Object> parseOrNode(CQLOrNode node) {
+
+    private Map<String, Object> parseOrNode (CQLOrNode node) {
         checkBooleanModifier(node);
 
         Map<String, Object> map = new LinkedHashMap<String, Object>();
@@ -182,7 +193,8 @@
         return map;
     }
 
-    private Map<String, Object> writeSequence(String str) {
+
+    private Map<String, Object> writeSequence (String str) {
         Map<String, Object> sequenceMap = new LinkedHashMap<String, Object>();
         sequenceMap.put("@type", "koral:group");
         sequenceMap.put("operation", OPERATION_SEQUENCE);
@@ -197,7 +209,8 @@
         return sequenceMap;
     }
 
-    private Map<String, Object> writeTerm(String term) {
+
+    private Map<String, Object> writeTerm (String term) {
         Map<String, Object> map = new LinkedHashMap<String, Object>();
         map.put("@type", "koral:term");
         if (!isCaseSensitive) {
@@ -213,7 +226,8 @@
         return tokenMap;
     }
 
-    private void checkBooleanModifier(CQLBooleanNode node) {
+
+    private void checkBooleanModifier (CQLBooleanNode node) {
         List<Modifier> modifiers = node.getModifiers();
         if ((modifiers != null) && !modifiers.isEmpty()) {
             Modifier modifier = modifiers.get(0);
@@ -223,7 +237,8 @@
         }
     }
 
-    private void checkTermNode(CQLTermNode node) {
+
+    private void checkTermNode (CQLTermNode node) {
         // only allow "cql.serverChoice" and "words" index
         if (!(INDEX_CQL_SERVERCHOICE.equals(node.getIndex()) || INDEX_WORDS
                 .equals(node.getIndex()))) {
diff --git a/src/main/java/de/ids_mannheim/korap/query/serialize/DummyQueryProcessor.java b/src/main/java/de/ids_mannheim/korap/query/serialize/DummyQueryProcessor.java
index 5ce7a0c..e6ad629 100644
--- a/src/main/java/de/ids_mannheim/korap/query/serialize/DummyQueryProcessor.java
+++ b/src/main/java/de/ids_mannheim/korap/query/serialize/DummyQueryProcessor.java
@@ -7,12 +7,12 @@
  * instatiating a class, errors/warnings cannot be reported.
  * 
  * @author bingel
- *
+ * 
  */
 public final class DummyQueryProcessor extends AbstractQueryProcessor {
 
     @Override
-    public void process(String query) {
+    public void process (String query) {
         // This is just a dummy class. Do nothing!
     }
 }
diff --git a/src/main/java/de/ids_mannheim/korap/query/serialize/IdWriter.java b/src/main/java/de/ids_mannheim/korap/query/serialize/IdWriter.java
index 966b3d3..d9302aa 100644
--- a/src/main/java/de/ids_mannheim/korap/query/serialize/IdWriter.java
+++ b/src/main/java/de/ids_mannheim/korap/query/serialize/IdWriter.java
@@ -10,8 +10,8 @@
 /**
  * @author hanl
  * @date 04/06/2014
- * <p/>
- * create idn for korap:token
+ *       <p/>
+ *       create idn for korap:token
  */
 public class IdWriter {
 
@@ -19,17 +19,20 @@
     private int counter;
     private ObjectMapper mapper = new ObjectMapper();
 
-    public IdWriter(String json) {
+
+    public IdWriter (String json) {
         node = mapper.valueToTree(json);
         counter = 0;
     }
 
-    public IdWriter process() {
+
+    public IdWriter process () {
         process(node.path("query"));
         return this;
     }
 
-    private void process(JsonNode node) {
+
+    private void process (JsonNode node) {
         if (node.path("@type").asText().equals("korap:group")) {
             Iterator<JsonNode> operands = node.path("operands").elements();
             while (operands.hasNext())
@@ -39,7 +42,8 @@
             addId(node);
     }
 
-    private JsonNode addId(JsonNode node) {
+
+    private JsonNode addId (JsonNode node) {
         if (node.isObject()) {
             ObjectNode o = (ObjectNode) node;
             String s = extractToken(node);
@@ -49,7 +53,8 @@
         return node;
     }
 
-    private String extractToken(JsonNode token) {
+
+    private String extractToken (JsonNode token) {
         if (!token.path("@type").equals("korap:term")) {
             JsonNode wrap = token.path("wrap");
             JsonNode op = token.path("operands");
@@ -65,11 +70,14 @@
 
     }
 
-    @Deprecated public JsonNode getFinalNode() {
+
+    @Deprecated
+    public JsonNode getFinalNode () {
         return this.node;
     }
 
-    public String toJSON() {
+
+    public String toJSON () {
         try {
             return mapper.writeValueAsString(node);
         }
diff --git a/src/main/java/de/ids_mannheim/korap/query/serialize/MetaQueryBuilder.java b/src/main/java/de/ids_mannheim/korap/query/serialize/MetaQueryBuilder.java
index 85b7a0e..eaca680 100644
--- a/src/main/java/de/ids_mannheim/korap/query/serialize/MetaQueryBuilder.java
+++ b/src/main/java/de/ids_mannheim/korap/query/serialize/MetaQueryBuilder.java
@@ -16,39 +16,43 @@
     private Map meta;
     private SpanContext spanContext;
 
+
     public MetaQueryBuilder () {
         this.meta = new LinkedHashMap();
     }
 
+
     /**
      * context segment if context is either of type char or token.
      * size can differ for left and right span
-     *
+     * 
      * @param left
      * @param leftType
      * @param right
      * @param rightType
      * @return
      */
-    public MetaQueryBuilder setSpanContext(Integer left, String leftType,
+    public MetaQueryBuilder setSpanContext (Integer left, String leftType,
             Integer right, String rightType) {
         this.spanContext = new SpanContext(left, leftType, right, rightType);
         return this;
     }
 
-    public SpanContext getSpanContext() {
+
+    public SpanContext getSpanContext () {
         return this.spanContext;
     }
 
+
     /**
      * context if of type paragraph or sentence where left and right
      * size delimiters are irrelevant; or 2-token, 2-char p/paragraph,
      * s/sentence or token, char
-     *
+     * 
      * @param context
      * @return
      */
-    public MetaQueryBuilder setSpanContext(String context) {
+    public MetaQueryBuilder setSpanContext (String context) {
         if (context.startsWith("s") | context.startsWith("p"))
             this.spanContext = new SpanContext(context);
         else {
@@ -61,7 +65,8 @@
         return this;
     }
 
-    public MetaQueryBuilder fillMeta(Integer pageIndex, Integer pageInteger,
+
+    public MetaQueryBuilder fillMeta (Integer pageIndex, Integer pageInteger,
             Integer pageLength, String ctx, Boolean cutoff) {
         if (pageIndex != null)
             this.addEntry("startIndex", pageIndex);
@@ -76,12 +81,14 @@
         return this;
     }
 
-    public MetaQueryBuilder addEntry(String name, Object value) {
+
+    public MetaQueryBuilder addEntry (String name, Object value) {
         meta.put(name, value);
         return this;
     }
 
-    public Map raw() {
+
+    public Map raw () {
         if (this.spanContext != null)
             meta.putAll(this.spanContext.raw());
         return meta;
@@ -95,10 +102,11 @@
         private int right_size;
         private String context = null;
 
+
         /**
          * context segment if context is either of type char or token.
          * size can differ for left and right span
-         *
+         * 
          * @param ls
          * @param lt
          * @param rs
@@ -112,11 +120,13 @@
             this.right_size = rs;
         }
 
+
         public SpanContext (String context) {
             this.context = context;
         }
 
-        public Map raw() {
+
+        public Map raw () {
             Map meta = new LinkedHashMap();
             if (this.context == null) {
                 Map map = new LinkedHashMap();
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 b188301..c3bd53f 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
@@ -15,7 +15,8 @@
 import java.util.*;
 
 /**
- * Map representation of PoliqarpPlus syntax tree as returned by ANTLR.
+ * Map representation of PoliqarpPlus syntax tree as returned by
+ * ANTLR.
  * Most centrally, this class maintains a set of nested maps and
  * lists which represent the JSON tree, which is built by the JSON
  * serialiser on basis of the {@link #requestMap} at the root of
@@ -24,8 +25,9 @@
  * keep track of which objects to embed in which containing
  * objects.
  * 
- * This class expects the Poliqarp+ ANTLR grammar shipped with Koral v0.3.0.
- *
+ * This class expects the Poliqarp+ ANTLR grammar shipped with Koral
+ * v0.3.0.
+ * 
  * @author Joachim Bingel (bingel@ids-mannheim.de)
  * @version 0.3.0
  * @since 0.1.0
@@ -37,9 +39,11 @@
     private int classCounter = 1;
 
     LinkedHashMap<ParseTree, Integer> classWrapRegistry = new LinkedHashMap<ParseTree, Integer>();
-    
+
+
     /**
      * Constructor
+     * 
      * @param query
      *            The syntax tree as returned by ANTLR
      * @throws QueryException
@@ -50,8 +54,9 @@
         log.info(">>> " + requestMap.get("query") + " <<<");
     }
 
+
     @Override
-    public void process(String query) {
+    public void process (String query) {
         ParseTree tree;
         tree = parsePoliqarpQuery(query);
         super.parser = this.parser;
@@ -66,6 +71,7 @@
         }
     }
 
+
     /**
      * Recursively calls itself with the children of the currently
      * active node, traversing the tree nodes in a top-down,
@@ -76,13 +82,13 @@
      * This method is effectively a list of if-statements that are
      * responsible for treating the different node types correctly and
      * filling the respective maps/lists.
-     *
+     * 
      * @param node
      *            The currently processed node. The process(String
      *            query) method calls this method with the root.
      * @throws QueryException
      */
-    private void processNode(ParseTree node) {
+    private void processNode (ParseTree node) {
         // Top-down processing
         if (visited.contains(node))
             return;
@@ -103,13 +109,13 @@
         // in a class, e.g. by an alignment operation
         if (classWrapRegistry.containsKey(node)) {
             Integer classId = classWrapRegistry.get(node);
-            LinkedHashMap<String, Object> spanClass = 
-                    KoralObjectGenerator.makeSpanClass(classId);
+            LinkedHashMap<String, Object> spanClass = KoralObjectGenerator
+                    .makeSpanClass(classId);
             putIntoSuperObject(spanClass);
             objectStack.push(spanClass);
             stackedObjects++;
         }
-        
+
         /*
          ****************************************************************
          **************************************************************** 
@@ -200,11 +206,13 @@
         openNodeCats.pop();
     }
 
+
     /**
      * Processes a 'segment' node.
+     * 
      * @param node
      */
-    private void processSegment(ParseTree node) {
+    private void processSegment (ParseTree node) {
         // Cover possible quantification (i.e. repetition) of segment
         ParseTree quantification = getFirstChildWithCat(node, "repetition");
         if (quantification != null) {
@@ -219,11 +227,13 @@
         }
     }
 
+
     /**
      * Process a 'sequence' node.
+     * 
      * @param node
      */
-    private void processSequence(ParseTree node) {
+    private void processSequence (ParseTree node) {
         // skip in case of emptyTokenSequence or emptyTokenSequenceClass
         if (node.getChildCount() == 1
                 && getNodeCat(node.getChild(0))
@@ -233,8 +243,7 @@
         // skip in case this sequence is just a container for an alignment 
         // node with just one child
         if (node.getChildCount() == 1
-                && getNodeCat(node.getChild(0))
-                        .equals("alignment")) {
+                && getNodeCat(node.getChild(0)).equals("alignment")) {
             ParseTree alignmentNode = node.getChild(0);
             if (alignmentNode.getChildCount() == 2) { // one child is the 
                 // alignment operator (^), the other a segment
@@ -261,12 +270,13 @@
         stackedObjects++;
     }
 
+
     @SuppressWarnings("unchecked")
     /**
      * empty tokens at beginning/end of sequence
      * @param node
      */
-    private void processEmptyTokenSequence(ParseTree node) {
+    private void processEmptyTokenSequence (ParseTree node) {
         Integer[] minmax = parseEmptySegments(node);
         // object will be either a repetition group or a single empty
         // token
@@ -285,7 +295,8 @@
         stackedObjects++;
     }
 
-    private void processEmptyTokenSequenceClass(ParseTree node) {
+
+    private void processEmptyTokenSequenceClass (ParseTree node) {
         int classId = 1;
         if (hasChild(node, "spanclass_id")) {
             classId = Integer.parseInt(node.getChild(1).getChild(0)
@@ -299,7 +310,8 @@
         stackedObjects++;
     }
 
-    private void processToken(ParseTree node) {
+
+    private void processToken (ParseTree node) {
         LinkedHashMap<String, Object> token = KoralObjectGenerator.makeToken();
         // handle negation
         List<ParseTree> negations = getChildrenWithCat(node, "!");
@@ -356,40 +368,48 @@
         visited.addAll(getChildren(node));
     }
 
+
     /**
-     * Processes an 'alignment' node. These nodes represent alignment anchors
-     * which introduce an alignment ruler in KWIC display. The serialization
-     * for this expects the two segments to the left and to the right of each
-     * anchor to be wrapped in classes, then these classes are referenced in
+     * Processes an 'alignment' node. These nodes represent alignment
+     * anchors
+     * which introduce an alignment ruler in KWIC display. The
+     * serialization
+     * for this expects the two segments to the left and to the right
+     * of each
+     * anchor to be wrapped in classes, then these classes are
+     * referenced in
      * the <tt>alignment</tt> array of the request tree.
+     * 
      * @param node
      */
-    private void processAlignment(ParseTree node) {
-        int i=1;
+    private void processAlignment (ParseTree node) {
+        int i = 1;
         if (node.getChild(0).getText().equals("^")) {
             i = 0; // if there is no first child (anchor is at extreme left or
                    // right of segment), start counting at 0 in the loop
         }
         // for every alignment anchor, get its left and right child and register
         // these to be wrapped in classes.
-        for (; i<node.getChildCount(); i+=2) {
+        for (; i < node.getChildCount(); i += 2) {
             int alignmentFirstArg = -1;
             int alignmentSecondArg = -1;
-            ParseTree leftChild = node.getChild(i-1);
-            ParseTree rightChild = node.getChild(i+1);
+            ParseTree leftChild = node.getChild(i - 1);
+            ParseTree rightChild = node.getChild(i + 1);
             if (leftChild != null) {
-                if (! classWrapRegistry.containsKey(leftChild)) {
+                if (!classWrapRegistry.containsKey(leftChild)) {
                     alignmentFirstArg = classCounter++;
                     classWrapRegistry.put(leftChild, alignmentFirstArg);
-                } else {
+                }
+                else {
                     alignmentFirstArg = classWrapRegistry.get(leftChild);
                 }
             }
             if (rightChild != null) {
-                if (! classWrapRegistry.containsKey(rightChild)) {
+                if (!classWrapRegistry.containsKey(rightChild)) {
                     alignmentSecondArg = classCounter++;
                     classWrapRegistry.put(rightChild, alignmentSecondArg);
-                } else {
+                }
+                else {
                     alignmentSecondArg = classWrapRegistry.get(rightChild);
                 }
             }
@@ -397,14 +417,15 @@
         }
     }
 
-    private void processSpan(ParseTree node) {
+
+    private void processSpan (ParseTree node) {
         List<ParseTree> negations = getChildrenWithCat(node, "!");
         boolean negated = false;
         if (negations.size() % 2 == 1)
             negated = true;
         LinkedHashMap<String, Object> span = KoralObjectGenerator.makeSpan();
-        LinkedHashMap<String, Object> wrappedTerm = 
-                KoralObjectGenerator.makeTerm();
+        LinkedHashMap<String, Object> wrappedTerm = KoralObjectGenerator
+                .makeTerm();
         span.put("wrap", wrappedTerm);
         ParseTree keyNode = getFirstChildWithCat(node, "key");
         ParseTree layerNode = getFirstChildWithCat(node, "layer");
@@ -436,13 +457,13 @@
                 wrappedTerm.put("match", "match:ne");
         }
         if (termNode != null) {
-            LinkedHashMap<String, Object> termOrTermGroup = 
-                    parseTermOrTermGroup(termNode, negated, "span");
+            LinkedHashMap<String, Object> termOrTermGroup = parseTermOrTermGroup(
+                    termNode, negated, "span");
             span.put("attr", termOrTermGroup);
         }
         if (termGroupNode != null) {
-            LinkedHashMap<String, Object> termOrTermGroup = 
-                    parseTermOrTermGroup(termGroupNode, negated, "span");
+            LinkedHashMap<String, Object> termOrTermGroup = parseTermOrTermGroup(
+                    termGroupNode, negated, "span");
             span.put("attr", termOrTermGroup);
         }
         putIntoSuperObject(span);
@@ -450,24 +471,27 @@
         stackedObjects++;
     }
 
-    private void processDisjunction(ParseTree node) {
-        LinkedHashMap<String, Object> disjunction = 
-                KoralObjectGenerator.makeGroup("disjunction");
+
+    private void processDisjunction (ParseTree node) {
+        LinkedHashMap<String, Object> disjunction = KoralObjectGenerator
+                .makeGroup("disjunction");
         putIntoSuperObject(disjunction);
         objectStack.push(disjunction);
         stackedObjects++;
     }
 
-    private void processPosition(ParseTree node) {
+
+    private void processPosition (ParseTree node) {
         LinkedHashMap<String, Object> position = parseFrame(node.getChild(0));
         putIntoSuperObject(position);
         objectStack.push(position);
         stackedObjects++;
     }
 
-    private void processRelation(ParseTree node) {
-        LinkedHashMap<String, Object> relationGroup = 
-                KoralObjectGenerator.makeGroup("relation");
+
+    private void processRelation (ParseTree node) {
+        LinkedHashMap<String, Object> relationGroup = KoralObjectGenerator
+                .makeGroup("relation");
         LinkedHashMap<String, Object> relation = KoralObjectGenerator
                 .makeRelation();
         LinkedHashMap<String, Object> term = KoralObjectGenerator.makeTerm();
@@ -502,7 +526,8 @@
         stackedObjects++;
     }
 
-    private void processSpanclass(ParseTree node) {
+
+    private void processSpanclass (ParseTree node) {
         // Step I: get info
         int classId = 1;
         if (getNodeCat(node.getChild(1)).equals("spanclass_id")) {
@@ -518,8 +543,8 @@
                 addError(StatusCodes.INVALID_CLASS_REFERENCE, msg);
             }
         }
-        LinkedHashMap<String, Object> classGroup =
-                KoralObjectGenerator.makeSpanClass(classId);
+        LinkedHashMap<String, Object> classGroup = KoralObjectGenerator
+                .makeSpanClass(classId);
         addHighlightClass(classId);
         putIntoSuperObject(classGroup);
         objectStack.push(classGroup);
@@ -527,7 +552,8 @@
 
     }
 
-    private void processMatching(ParseTree node) {
+
+    private void processMatching (ParseTree node) {
         // Step I: get info
         ArrayList<Integer> classRefs = new ArrayList<Integer>();
         String classRefOp = null;
@@ -554,8 +580,8 @@
         else {
             classRefs.add(1); // default
         }
-        LinkedHashMap<String, Object> referenceGroup = 
-                KoralObjectGenerator.makeReference(classRefs);
+        LinkedHashMap<String, Object> referenceGroup = KoralObjectGenerator
+                .makeReference(classRefs);
 
         String type = node.getChild(0).toStringTree(parser);
         // Default is focus(), if deviating catch here
@@ -573,9 +599,10 @@
         visited.add(node.getChild(0));
     }
 
-    private void processSubmatch(ParseTree node) {
-        LinkedHashMap<String, Object> submatch = 
-                KoralObjectGenerator.makeReference(null);
+
+    private void processSubmatch (ParseTree node) {
+        LinkedHashMap<String, Object> submatch = KoralObjectGenerator
+                .makeReference(null);
         submatch.put("operands", new ArrayList<Object>());
         ParseTree startpos = getFirstChildWithCat(node, "startpos");
         ParseTree length = getFirstChildWithCat(node, "length");
@@ -591,35 +618,37 @@
         visited.add(node.getChild(0));
     }
 
+
     /**
      * Creates meta field in requestMap, later filled by terms
      * 
      * @param node
      */
-    private void processMeta(ParseTree node) {
+    private void processMeta (ParseTree node) {
         addWarning("You used the 'meta' keyword in a PoliqarpPlus query. This"
                 + " feature is currently not supported. Please use virtual "
                 + "collections to restrict documents by metadata.");
-        CollectionQueryProcessor cq = 
-                new CollectionQueryProcessor(node.getChild(1).getText());
+        CollectionQueryProcessor cq = new CollectionQueryProcessor(node
+                .getChild(1).getText());
         requestMap.put("collection", cq.getRequestMap().get("collection"));
         for (ParseTree child : getChildren(node)) {
             visited.add(child);
         }
     }
 
+
     @SuppressWarnings("unchecked")
-    private void processWithin(ParseTree node) {
+    private void processWithin (ParseTree node) {
         ParseTree domainNode = node.getChild(1);
         String domain = getNodeCat(domainNode);
         LinkedHashMap<String, Object> span = KoralObjectGenerator
                 .makeSpan(domain);
-        LinkedHashMap<String, Object> queryObj = 
-                (LinkedHashMap<String, Object>) requestMap.get("query");
+        LinkedHashMap<String, Object> queryObj = (LinkedHashMap<String, Object>) requestMap
+                .get("query");
         LinkedHashMap<String, Object> contains = KoralObjectGenerator
                 .makePosition(new String[] { "frames:isAround" });
-        ArrayList<Object> operands = 
-                (ArrayList<Object>) contains.get("operands");
+        ArrayList<Object> operands = (ArrayList<Object>) contains
+                .get("operands");
         operands.add(span);
         operands.add(queryObj);
         requestMap.put("query", contains);
@@ -627,6 +656,7 @@
         visited.add(node.getChild(1));
     }
 
+
     /**
      * Parses a repetition node
      * 
@@ -636,7 +666,7 @@
      *         the quantified element, and the second element
      *         representing the maximal number of repetitions
      */
-    private Integer[] parseRepetition(ParseTree node) {
+    private Integer[] parseRepetition (ParseTree node) {
         Integer min = 0, max = 0;
         boolean maxInfinite = false;
         // (repetition) node can be of two types: 'kleene' or 'range'
@@ -685,7 +715,8 @@
         return new Integer[] { min, max };
     }
 
-    private LinkedHashMap<String, Object> parseFrame(ParseTree node) {
+
+    private LinkedHashMap<String, Object> parseFrame (ParseTree node) {
         String operator = node.toStringTree(parser).toLowerCase();
         String[] frames = new String[] { "" };
         switch (operator) {
@@ -696,10 +727,10 @@
                 frames = new String[] { "frames:matches" };
                 break;
             case "startswith":
-                frames = new String[] { "frames:startsWith","frames:matches" };
+                frames = new String[] { "frames:startsWith", "frames:matches" };
                 break;
             case "endswith":
-                frames = new String[] { "frames:endsWith","frames:matches" };
+                frames = new String[] { "frames:endsWith", "frames:matches" };
                 break;
             case "overlaps":
                 frames = new String[] { "frames:overlapsLeft",
@@ -709,11 +740,13 @@
         return KoralObjectGenerator.makePosition(frames);
     }
 
-    private LinkedHashMap<String, Object> parseTermOrTermGroup(ParseTree node,
+
+    private LinkedHashMap<String, Object> parseTermOrTermGroup (ParseTree node,
             boolean negated) {
         return parseTermOrTermGroup(node, negated, "token");
     }
 
+
     /**
      * Parses a (term) or (termGroup) node
      * 
@@ -729,7 +762,7 @@
      * @return A term or termGroup object, depending on input
      */
     @SuppressWarnings("unchecked")
-    private LinkedHashMap<String, Object> parseTermOrTermGroup(ParseTree node,
+    private LinkedHashMap<String, Object> parseTermOrTermGroup (ParseTree node,
             boolean negatedGlobal, String mode) {
         String nodeCat = getNodeCat(node);
         if (nodeCat.equals("term")) {
@@ -848,6 +881,7 @@
         return null;
     }
 
+
     /**
      * Puts an object into the operands list of its governing (or
      * "super") object which had been placed on the
@@ -858,10 +892,11 @@
      * @param object
      *            The object to be inserted
      */
-    private void putIntoSuperObject(LinkedHashMap<String, Object> object) {
+    private void putIntoSuperObject (LinkedHashMap<String, Object> object) {
         putIntoSuperObject(object, 0);
     }
 
+
     /**
      * Puts an object into the operands list of its governing (or
      * "super") object which had been placed on the
@@ -877,7 +912,7 @@
      *            the stack is the super object.
      */
     @SuppressWarnings({ "unchecked" })
-    private void putIntoSuperObject(LinkedHashMap<String, Object> object,
+    private void putIntoSuperObject (LinkedHashMap<String, Object> object,
             int objStackPosition) {
         if (objectStack.size() > objStackPosition) {
             ArrayList<Object> topObjectOperands = (ArrayList<Object>) objectStack
@@ -889,28 +924,33 @@
         }
     }
 
+
     /**
-     * Parses the min and max attributes for a boundary object as defined in 
-     * a distance node. 
+     * Parses the min and max attributes for a boundary object as
+     * defined in
+     * a distance node.
      * 
-     * @param distanceNode A node of category 'distance'
-     * @return An array of two fields, where the first is the min value and the
-     *      second is the max value and may be null.  
+     * @param distanceNode
+     *            A node of category 'distance'
+     * @return An array of two fields, where the first is the min
+     *         value and the
+     *         second is the max value and may be null.
      */
-    private Integer[] parseDistance(ParseTree distanceNode) {
-        int emptyTokenSeqIndex = 
-                getNodeCat(distanceNode).equals("distance") ? 0 : 2;
+    private Integer[] parseDistance (ParseTree distanceNode) {
+        int emptyTokenSeqIndex = getNodeCat(distanceNode).equals("distance") ? 0
+                : 2;
         Integer[] minmax = parseEmptySegments(distanceNode
                 .getChild(emptyTokenSeqIndex));
         Integer min = minmax[0];
         Integer max = minmax[1];
-//        min++;
-//        if (max != null)
-//            max++;
+        //        min++;
+        //        if (max != null)
+        //            max++;
         return new Integer[] { min, max };
     }
 
-    private Integer[] parseEmptySegments(ParseTree emptySegments) {
+
+    private Integer[] parseEmptySegments (ParseTree emptySegments) {
         Integer min = 0;
         Integer max = 0;
         ParseTree child;
@@ -940,11 +980,12 @@
         return new Integer[] { min, max };
     }
 
-    private ParserRuleContext parsePoliqarpQuery(String query) {
+
+    private ParserRuleContext parsePoliqarpQuery (String query) {
         Lexer lexer = new PoliqarpPlusLexer((CharStream) null);
         ParserRuleContext tree = null;
-        Antlr4DescriptiveErrorListener errorListener = 
-                new Antlr4DescriptiveErrorListener(query);
+        Antlr4DescriptiveErrorListener errorListener = new Antlr4DescriptiveErrorListener(
+                query);
         // Like p. 111
         try {
             // Tokenize input data
@@ -962,8 +1003,8 @@
 
             // Get starting rule from parser
             Method startRule = PoliqarpPlusParser.class.getMethod("request");
-            tree = (ParserRuleContext) 
-                    startRule.invoke(parser, (Object[]) null);
+            tree = (ParserRuleContext) startRule
+                    .invoke(parser, (Object[]) null);
         }
         // Some things went wrong ...
         catch (Exception e) {
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 eb6b61d..90d29ed 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
@@ -16,8 +16,10 @@
 import java.util.*;
 
 /**
- * Main class for Koral, serializes queries from concrete QLs to KoralQuery
- * @author Joachim Bingel (bingel@ids-mannheim.de), 
+ * Main class for Koral, serializes queries from concrete QLs to
+ * KoralQuery
+ * 
+ * @author Joachim Bingel (bingel@ids-mannheim.de),
  *         Michael Hanl (hanl@ids-mannheim.de)
  * @version 0.3.0
  * @since 0.1.0
@@ -28,8 +30,8 @@
 
     static {
         qlProcessorAssignment = new HashMap<String, Class<? extends AbstractQueryProcessor>>();
-        qlProcessorAssignment
-                .put("poliqarpplus", PoliqarpPlusQueryProcessor.class);
+        qlProcessorAssignment.put("poliqarpplus",
+                PoliqarpPlusQueryProcessor.class);
         qlProcessorAssignment.put("cosmas2", Cosmas2QueryProcessor.class);
         qlProcessorAssignment.put("annis", AnnisQueryProcessor.class);
         qlProcessorAssignment.put("cql", CqlQueryProcessor.class);
@@ -48,10 +50,11 @@
     private org.slf4j.Logger log = LoggerFactory
             .getLogger(QuerySerializer.class);
 
+
     /**
      * @param args
      */
-    public static void main(String[] args) {
+    public static void main (String[] args) {
         /*
          * just for testing...
          */
@@ -61,12 +64,13 @@
         String[] queries = null;
         String ql = "poliqarpplus";
         if (args.length < 2) {
-            System.err.println("Usage: QuerySerializer \"query\" queryLanguage");
+            System.err
+                    .println("Usage: QuerySerializer \"query\" queryLanguage");
             System.exit(1);
         }
         else {
             queries = new String[] { args[0] };
-            ql  = args[1];
+            ql = args[1];
         }
         for (String q : queries) {
             i++;
@@ -90,19 +94,23 @@
         }
     }
 
+
     /**
      * Runs the QuerySerializer by initializing the relevant
      * AbstractSyntaxTree implementation (depending on specified query
      * language) and transforms and writes the tree's requestMap to
      * the specified output file.
-     *
-     * @param outFile       The file to which the serialization is written
-     * @param query         The query string
-     * @param queryLanguage The query language. As of 17 Dec 2014, this must be
-     *                      one of 'poliqarpplus', 'cosmas2', 'annis' or 'cql'.
+     * 
+     * @param outFile
+     *            The file to which the serialization is written
+     * @param query
+     *            The query string
+     * @param queryLanguage
+     *            The query language. As of 17 Dec 2014, this must be
+     *            one of 'poliqarpplus', 'cosmas2', 'annis' or 'cql'.
      * @throws IOException
      */
-    public void run(String query, String queryLanguage) throws IOException {
+    public void run (String query, String queryLanguage) throws IOException {
         if (queryLanguage.equalsIgnoreCase("poliqarp")) {
             ast = new PoliqarpPlusQueryProcessor(query);
         }
@@ -119,13 +127,14 @@
             ast = new AnnisQueryProcessor(query);
         }
         else {
-            throw new IllegalArgumentException(
-                    queryLanguage + " is not a supported query language!");
+            throw new IllegalArgumentException(queryLanguage
+                    + " is not a supported query language!");
         }
         toJSON();
     }
 
-    public QuerySerializer setQuery(String query, String ql, String version) {
+
+    public QuerySerializer setQuery (String query, String ql, String version) {
         ast = new DummyQueryProcessor();
         if (query == null || query.isEmpty()) {
             ast.addError(StatusCodes.NO_QUERY, "You did not specify a query!");
@@ -153,21 +162,24 @@
             ast = new AnnisQueryProcessor(query);
         }
         else {
-            ast.addError(StatusCodes.UNKNOWN_QL,
-                    ql + " is not a supported query language!");
+            ast.addError(StatusCodes.UNKNOWN_QL, ql
+                    + " is not a supported query language!");
         }
         return this;
     }
 
-    public QuerySerializer setQuery(String query, String ql) {
+
+    public QuerySerializer setQuery (String query, String ql) {
         return setQuery(query, ql, "");
     }
 
-    public void setVerbose(boolean verbose) {
+
+    public void setVerbose (boolean verbose) {
         AbstractQueryProcessor.verbose = verbose;
     }
 
-    public final String toJSON() {
+
+    public final String toJSON () {
         String ser;
         try {
             ser = mapper.writeValueAsString(raw());
@@ -179,11 +191,13 @@
         return ser;
     }
 
-    public final Map build() {
+
+    public final Map build () {
         return raw();
     }
 
-    private Map raw() {
+
+    private Map raw () {
         if (ast != null) {
             Map<String, Object> requestMap = ast.getRequestMap();
             Map meta = (Map) requestMap.get("meta");
@@ -215,8 +229,9 @@
         return new HashMap<>();
     }
 
-    private Map<String, Object> mergeCollection(Map<String, Object> collection1,
-            Map<String, Object> collection2) {
+
+    private Map<String, Object> mergeCollection (
+            Map<String, Object> collection1, Map<String, Object> collection2) {
         LinkedHashMap<String, Object> docGroup = KoralObjectGenerator
                 .makeDocGroup("and");
         ArrayList<Object> operands = (ArrayList<Object>) docGroup
@@ -234,7 +249,8 @@
         }
     }
 
-    public QuerySerializer addMeta(String cli, String cri, int cls, int crs,
+
+    public QuerySerializer addMeta (String cli, String cri, int cls, int crs,
             int num, int pageIndex) {
         MetaQueryBuilder meta = new MetaQueryBuilder();
         meta.setSpanContext(cls, cli, crs, cri);
@@ -244,7 +260,8 @@
         return this;
     }
 
-    public QuerySerializer addMeta(String context, int num, int pageidx) {
+
+    public QuerySerializer addMeta (String context, int num, int pageidx) {
         MetaQueryBuilder meta = new MetaQueryBuilder();
         meta.addEntry("startIndex", pageidx);
         meta.addEntry("count", num);
@@ -253,19 +270,21 @@
         return this;
     }
 
-    public QuerySerializer addMeta(MetaQueryBuilder meta) {
+
+    public QuerySerializer addMeta (MetaQueryBuilder meta) {
         this.meta = meta.raw();
         return this;
     }
 
-//    @Deprecated public QuerySerializer setCollectionSimple(String collection) {
-//        CollectionQueryBuilder qobj = new CollectionQueryBuilder();
-//        qobj.addResource(collection);
-//        this.collection = (Map<String, Object>) qobj.raw();
-//        return this;
-//    }
 
-    public QuerySerializer setCollection(String collection) {
+    //    @Deprecated public QuerySerializer setCollectionSimple(String collection) {
+    //        CollectionQueryBuilder qobj = new CollectionQueryBuilder();
+    //        qobj.addResource(collection);
+    //        this.collection = (Map<String, Object>) qobj.raw();
+    //        return this;
+    //    }
+
+    public QuerySerializer setCollection (String collection) {
         CollectionQueryProcessor tree = new CollectionQueryProcessor();
         Map<String, Object> collectionRequest = tree.getRequestMap();
         tree.process(collection);
@@ -277,7 +296,7 @@
         return this;
     }
 
-//    public QuerySerializer setCollection(CollectionQueryBuilder2 collections) {
+    //    public QuerySerializer setCollection(CollectionQueryBuilder2 collections) {
     //        this.collection = (Map<String, Object>) collections.raw();
     //        return this;
     //    }
diff --git a/src/main/java/de/ids_mannheim/korap/query/serialize/QueryUtils.java b/src/main/java/de/ids_mannheim/korap/query/serialize/QueryUtils.java
index ef06c93..7c3128a 100644
--- a/src/main/java/de/ids_mannheim/korap/query/serialize/QueryUtils.java
+++ b/src/main/java/de/ids_mannheim/korap/query/serialize/QueryUtils.java
@@ -13,7 +13,7 @@
 import java.util.regex.Pattern;
 
 /**
- * @author Joachim Bingel (bingel@ids-mannheim.de), 
+ * @author Joachim Bingel (bingel@ids-mannheim.de),
  *         Michael Hanl (hanl@ids-mannheim.de)
  * @date 10/12/2013
  * @version 0.3.0
@@ -21,7 +21,7 @@
  */
 public class QueryUtils {
 
-    public static SimpleEntry<String, Integer> checkUnbalancedPars(String q) {
+    public static SimpleEntry<String, Integer> checkUnbalancedPars (String q) {
         Map<Character, Character> brackets = new HashMap<Character, Character>();
         brackets.put('[', ']');
         brackets.put('{', '}');
@@ -51,13 +51,15 @@
         return null;
     }
 
-    public static List<String> parseMorph(String stringTree) {
+
+    public static List<String> parseMorph (String stringTree) {
 
         ArrayList<String> morph = new ArrayList<String>();
         return morph;
     }
 
-    public static String buildCypherQuery(String cypher, String ctypel,
+
+    public static String buildCypherQuery (String cypher, String ctypel,
             String ctyper, int cl, int cr, int page, int limit) {
         // todo: implies that there is only one type allowed!
         String sctypel = "", sctyper = "";
@@ -108,7 +110,8 @@
         return buffer.toString();
     }
 
-    public static String buildDotQuery(long sid, String graphdb_id) {
+
+    public static String buildDotQuery (long sid, String graphdb_id) {
         StringBuffer b = new StringBuffer();
         b.append("<query>");
         b.append("<sentenceId>");
@@ -130,7 +133,8 @@
         return b.toString();
     }
 
-    public String buildaggreQuery(String query) {
+
+    public String buildaggreQuery (String query) {
         StringBuffer b = new StringBuffer();
         b.append("<query><cypher><![CDATA[");
         b.append(query);
@@ -159,9 +163,10 @@
         return b.toString();
     }
 
+
     @Deprecated
-    public static Map addParameters(Map request, int page, int num, String cli,
-            String cri, int cls, int crs, boolean cutoff) {
+    public static Map addParameters (Map request, int page, int num,
+            String cli, String cri, int cls, int crs, boolean cutoff) {
         Map ctx = new LinkedHashMap();
         List left = new ArrayList();
         left.add(cli);
@@ -180,7 +185,8 @@
         return request;
     }
 
-    public static String escapeRegexSpecialChars(String key) {
+
+    public static String escapeRegexSpecialChars (String key) {
         key.replace("\\", "\\\\");
         Pattern p = Pattern
                 .compile("\\.|\\^|\\$|\\||\\?|\\*|\\+|\\(|\\)|\\[|\\]|\\{|\\}");
diff --git a/src/main/java/de/ids_mannheim/korap/query/serialize/TreeTemplate.java b/src/main/java/de/ids_mannheim/korap/query/serialize/TreeTemplate.java
index 2e9d074..b6ce44b 100644
--- a/src/main/java/de/ids_mannheim/korap/query/serialize/TreeTemplate.java
+++ b/src/main/java/de/ids_mannheim/korap/query/serialize/TreeTemplate.java
@@ -31,6 +31,7 @@
 public class TreeTemplate extends Antlr4AbstractQueryProcessor {
     private static Logger log = LoggerFactory.getLogger(TreeTemplate.class);
 
+
     /**
      * 
      * @param tree
@@ -44,8 +45,9 @@
         process(query);
     }
 
+
     @Override
-    public void process(String query) {
+    public void process (String query) {
         ParseTree tree = parseQuery(query);
         super.parser = this.parser;
         if (tree != null) {
@@ -58,7 +60,8 @@
         }
     }
 
-    private void processNode(ParseTree node) {
+
+    private void processNode (ParseTree node) {
         // Top-down processing
         if (visited.contains(node))
             return;
@@ -74,7 +77,7 @@
             System.err.println(" " + objectStack);
             System.out.println(openNodeCats);
         }
-        
+
         /*
          ****************************************************************
          **************************************************************** 
@@ -111,13 +114,15 @@
 
     }
 
+
     @SuppressWarnings("unused")
-    private void putIntoSuperObject(LinkedHashMap<String, Object> object) {
+    private void putIntoSuperObject (LinkedHashMap<String, Object> object) {
         putIntoSuperObject(object, 0);
     }
 
+
     @SuppressWarnings({ "unchecked" })
-    private void putIntoSuperObject(LinkedHashMap<String, Object> object,
+    private void putIntoSuperObject (LinkedHashMap<String, Object> object,
             int objStackPosition) {
         if (objectStack.size() > objStackPosition) {
             ArrayList<Object> topObjectOperands = (ArrayList<Object>) objectStack
@@ -130,7 +135,8 @@
         }
     }
 
-    private ParserRuleContext parseQuery(String q) {
+
+    private ParserRuleContext parseQuery (String q) {
         // TODO replace AqlLexer with lexer for your Antlr4 grammar!
         Lexer qlLexer = new AqlLexer((CharStream) null);
         ParserRuleContext tree = null;
diff --git a/src/main/java/de/ids_mannheim/korap/query/serialize/util/Antlr3DescriptiveErrorListener.java b/src/main/java/de/ids_mannheim/korap/query/serialize/util/Antlr3DescriptiveErrorListener.java
index cf81273..6e574fd 100644
--- a/src/main/java/de/ids_mannheim/korap/query/serialize/util/Antlr3DescriptiveErrorListener.java
+++ b/src/main/java/de/ids_mannheim/korap/query/serialize/util/Antlr3DescriptiveErrorListener.java
@@ -14,7 +14,7 @@
  * (generated source directory).
  * 
  * @author Joachim Bingel (bingel@ids-mannheim.de)
- *
+ * 
  */
 public class Antlr3DescriptiveErrorListener implements IErrorReporter {
 
@@ -23,12 +23,14 @@
     private String expected;
     private int charPosition;
 
+
     public Antlr3DescriptiveErrorListener (String query) {
         this.query = query;
     };
 
+
     @Override
-    public void reportError(String error) {
+    public void reportError (String error) {
         String charPositionStr = null;
         String offendingSymbol = null;
         String expected = null;
@@ -48,7 +50,8 @@
             this.expected = expected;
     }
 
-    public ArrayList<Object> generateFullErrorMsg() {
+
+    public ArrayList<Object> generateFullErrorMsg () {
         ArrayList<Object> errorSpecs = new ArrayList<Object>();
         String msg = getDetailedErrorMessage();
         errorSpecs.add(StatusCodes.MALFORMED_QUERY);
@@ -57,7 +60,8 @@
         return errorSpecs;
     }
 
-    private String getDetailedErrorMessage() {
+
+    private String getDetailedErrorMessage () {
         // default message, in case no detailed info is available;
         String msg = "Malformed query. Could not parse.";
         char offendingSymbol = query.charAt(0);
@@ -87,7 +91,8 @@
         return msg;
     }
 
-    public int getCharPosition() {
+
+    public int getCharPosition () {
         return charPosition;
     }
 
diff --git a/src/main/java/de/ids_mannheim/korap/query/serialize/util/Antlr4DescriptiveErrorListener.java b/src/main/java/de/ids_mannheim/korap/query/serialize/util/Antlr4DescriptiveErrorListener.java
index 7fa82aa..37cd731 100644
--- a/src/main/java/de/ids_mannheim/korap/query/serialize/util/Antlr4DescriptiveErrorListener.java
+++ b/src/main/java/de/ids_mannheim/korap/query/serialize/util/Antlr4DescriptiveErrorListener.java
@@ -16,12 +16,14 @@
     int line;
     int charPosition;
 
+
     public Antlr4DescriptiveErrorListener (String query) {
         this.query = query;
     };
 
+
     @Override
-    public void syntaxError(Recognizer<?, ?> recognizer,
+    public void syntaxError (Recognizer<?, ?> recognizer,
             Object offendingSymbol, int line, int charPositionInLine,
             String msg, RecognitionException e) {
         this.message = msg;
@@ -29,19 +31,23 @@
         this.charPosition = charPositionInLine;
     }
 
-    public String getMessage() {
+
+    public String getMessage () {
         return message;
     }
 
-    public int getLine() {
+
+    public int getLine () {
         return line;
     }
 
-    public int getCharPosition() {
+
+    public int getCharPosition () {
         return charPosition;
     }
 
-    public ArrayList<Object> generateFullErrorMsg() {
+
+    public ArrayList<Object> generateFullErrorMsg () {
         ArrayList<Object> errorSpecs = new ArrayList<Object>();
         String msg = getDetailedErrorMessage();
         errorSpecs.add(StatusCodes.MALFORMED_QUERY);
@@ -50,7 +56,8 @@
         return errorSpecs;
     }
 
-    private String getDetailedErrorMessage() {
+
+    private String getDetailedErrorMessage () {
         // default message, in case no detailed info is available;
         String msg = "Malformed query. Could not parse.";
         char offendingSymbol = query.charAt(0);
diff --git a/src/main/java/de/ids_mannheim/korap/query/serialize/util/CosmasCondition.java b/src/main/java/de/ids_mannheim/korap/query/serialize/util/CosmasCondition.java
index 4c79500..7da31b4 100644
--- a/src/main/java/de/ids_mannheim/korap/query/serialize/util/CosmasCondition.java
+++ b/src/main/java/de/ids_mannheim/korap/query/serialize/util/CosmasCondition.java
@@ -4,23 +4,25 @@
 
 public class CosmasCondition {
 
-	public boolean negated = false;
-	public String elem = "";
-	public String position = "";
-	
-	public CosmasCondition(Tree cond) {
-		String nodeString = cond.toStringTree();
-		if (nodeString.startsWith("-")) {
-			negated = true;
-			nodeString = nodeString.substring(1);
-		} else if (nodeString.startsWith("+")) {
-			nodeString = nodeString.substring(1);
-		}
-		
-		elem = nodeString.substring(0, 1);
-		nodeString = nodeString.substring(1);
-		
-		position = nodeString.equals("a") ? 
-		        "frames:startswith" : "frames:endswith";
-	}
+    public boolean negated = false;
+    public String elem = "";
+    public String position = "";
+
+
+    public CosmasCondition (Tree cond) {
+        String nodeString = cond.toStringTree();
+        if (nodeString.startsWith("-")) {
+            negated = true;
+            nodeString = nodeString.substring(1);
+        }
+        else if (nodeString.startsWith("+")) {
+            nodeString = nodeString.substring(1);
+        }
+
+        elem = nodeString.substring(0, 1);
+        nodeString = nodeString.substring(1);
+
+        position = nodeString.equals("a") ? "frames:startswith"
+                : "frames:endswith";
+    }
 }
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 34a4266..20de50c 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
@@ -11,30 +11,35 @@
     protected static final Integer MAXIMUM_DISTANCE = 100;
     private static AbstractQueryProcessor qp;
 
-    public static void setQueryProcessor(AbstractQueryProcessor qp) {
+
+    public static void setQueryProcessor (AbstractQueryProcessor qp) {
         KoralObjectGenerator.qp = qp;
     }
 
-    public static LinkedHashMap<String, Object> makeSpan() {
+
+    public static LinkedHashMap<String, Object> makeSpan () {
         LinkedHashMap<String, Object> span = new LinkedHashMap<String, Object>();
         span.put("@type", "koral:span");
         return span;
     }
 
-    public static LinkedHashMap<String, Object> makeSpan(String key) {
+
+    public static LinkedHashMap<String, Object> makeSpan (String key) {
         LinkedHashMap<String, Object> span = new LinkedHashMap<String, Object>();
         span.put("@type", "koral:span");
         span.put("key", key);
         return span;
     }
 
-    public static LinkedHashMap<String, Object> makeTerm() {
+
+    public static LinkedHashMap<String, Object> makeTerm () {
         LinkedHashMap<String, Object> term = new LinkedHashMap<String, Object>();
         term.put("@type", "koral:term");
         return term;
     }
 
-    public static LinkedHashMap<String, Object> makeTermGroup(String relation) {
+
+    public static LinkedHashMap<String, Object> makeTermGroup (String relation) {
         LinkedHashMap<String, Object> term = new LinkedHashMap<String, Object>();
         term.put("@type", "koral:termGroup");
         term.put("relation", "relation:" + relation);
@@ -42,13 +47,15 @@
         return term;
     }
 
-    public static LinkedHashMap<String, Object> makeDoc() {
+
+    public static LinkedHashMap<String, Object> makeDoc () {
         LinkedHashMap<String, Object> term = new LinkedHashMap<String, Object>();
         term.put("@type", "koral:doc");
         return term;
     }
 
-    public static LinkedHashMap<String, Object> makeDocGroup(String relation) {
+
+    public static LinkedHashMap<String, Object> makeDocGroup (String relation) {
         LinkedHashMap<String, Object> term = new LinkedHashMap<String, Object>();
         term.put("@type", "koral:docGroup");
         term.put("operation", "operation:" + relation);
@@ -56,13 +63,15 @@
         return term;
     }
 
-    public static LinkedHashMap<String, Object> makeToken() {
+
+    public static LinkedHashMap<String, Object> makeToken () {
         LinkedHashMap<String, Object> token = new LinkedHashMap<String, Object>();
         token.put("@type", "koral:token");
         return token;
     }
 
-    public static LinkedHashMap<String, Object> makeGroup(String operation) {
+
+    public static LinkedHashMap<String, Object> makeGroup (String operation) {
         LinkedHashMap<String, Object> group = new LinkedHashMap<String, Object>();
         group.put("@type", "koral:group");
         group.put("operation", "operation:" + operation);
@@ -70,7 +79,8 @@
         return group;
     }
 
-    public static LinkedHashMap<String, Object> makeRepetition(Integer min,
+
+    public static LinkedHashMap<String, Object> makeRepetition (Integer min,
             Integer max) {
         LinkedHashMap<String, Object> group = makeGroup("repetition");
         group.put("boundary", makeBoundary(min, max));
@@ -78,8 +88,9 @@
         return group;
     }
 
+
     @Deprecated
-    public static LinkedHashMap<String, Object> makePosition(String frame) {
+    public static LinkedHashMap<String, Object> makePosition (String frame) {
         LinkedHashMap<String, Object> group = new LinkedHashMap<String, Object>();
         group.put("@type", "koral:group");
         group.put("operation", "operation:position");
@@ -88,7 +99,8 @@
         return group;
     }
 
-    public static LinkedHashMap<String, Object> makePosition(
+
+    public static LinkedHashMap<String, Object> makePosition (
             String[] allowedFrames) {
         LinkedHashMap<String, Object> group = new LinkedHashMap<String, Object>();
         group.put("@type", "koral:group");
@@ -98,12 +110,14 @@
         return group;
     }
 
-    public static LinkedHashMap<String, Object> makeSpanClass(int classId) {
+
+    public static LinkedHashMap<String, Object> makeSpanClass (int classId) {
         return makeSpanClass(classId, false);
     }
 
+
     @Deprecated
-    public static LinkedHashMap<String, Object> makeSpanClass(int classId,
+    public static LinkedHashMap<String, Object> makeSpanClass (int classId,
             boolean setBySystem) {
         LinkedHashMap<String, Object> group = new LinkedHashMap<String, Object>();
         group.put("@type", "koral:group");
@@ -119,7 +133,8 @@
         return group;
     }
 
-    public static LinkedHashMap<String, Object> makeClassRefCheck(
+
+    public static LinkedHashMap<String, Object> makeClassRefCheck (
             ArrayList<String> check, Integer[] classIn, int classOut) {
         LinkedHashMap<String, Object> group = new LinkedHashMap<String, Object>();
         group.put("@type", "koral:group");
@@ -131,7 +146,8 @@
         return group;
     }
 
-    public static LinkedHashMap<String, Object> makeClassRefOp(
+
+    public static LinkedHashMap<String, Object> makeClassRefOp (
             String operation, Integer[] classIn, int classOut) {
         LinkedHashMap<String, Object> group = new LinkedHashMap<String, Object>();
         group.put("@type", "koral:group");
@@ -143,8 +159,9 @@
         return group;
     }
 
+
     @Deprecated
-    public static LinkedHashMap<String, Object> makeTreeRelation(String reltype) {
+    public static LinkedHashMap<String, Object> makeTreeRelation (String reltype) {
         LinkedHashMap<String, Object> group = new LinkedHashMap<String, Object>();
         group.put("@type", "koral:treeRelation");
         if (reltype != null)
@@ -152,13 +169,15 @@
         return group;
     }
 
-    public static LinkedHashMap<String, Object> makeRelation() {
+
+    public static LinkedHashMap<String, Object> makeRelation () {
         LinkedHashMap<String, Object> group = new LinkedHashMap<String, Object>();
         group.put("@type", "koral:relation");
         return group;
     }
 
-    public static LinkedHashMap<String, Object> makeBoundary(Integer min,
+
+    public static LinkedHashMap<String, Object> makeBoundary (Integer min,
             Integer max) {
         LinkedHashMap<String, Object> group = new LinkedHashMap<String, Object>();
         group.put("@type", "koral:boundary");
@@ -169,7 +188,8 @@
         return group;
     }
 
-    public static LinkedHashMap<String, Object> makeDistance(String key,
+
+    public static LinkedHashMap<String, Object> makeDistance (String key,
             Integer min, Integer max) {
         LinkedHashMap<String, Object> group = new LinkedHashMap<String, Object>();
         if (key.equals("w")) {
@@ -190,7 +210,8 @@
         return group;
     }
 
-    public static LinkedHashMap<String, Object> makeReference(
+
+    public static LinkedHashMap<String, Object> makeReference (
             ArrayList<Integer> classRefs, String operation) {
         LinkedHashMap<String, Object> group = new LinkedHashMap<String, Object>();
         group.put("@type", "koral:reference");
@@ -201,13 +222,15 @@
         return group;
     }
 
-    public static LinkedHashMap<String, Object> makeReference(
+
+    public static LinkedHashMap<String, Object> makeReference (
             ArrayList<Integer> classRefs) {
         return makeReference(classRefs, "focus");
     }
 
+
     @Deprecated
-    public static LinkedHashMap<String, Object> makeReference(int classRef,
+    public static LinkedHashMap<String, Object> makeReference (int classRef,
             String operation, boolean setBySystem) {
         ArrayList<Integer> classRefs = new ArrayList<Integer>();
         if (setBySystem)
@@ -216,8 +239,9 @@
         return makeReference(classRefs, operation);
     }
 
+
     @Deprecated
-    public static LinkedHashMap<String, Object> makeReference(int classRef,
+    public static LinkedHashMap<String, Object> makeReference (int classRef,
             boolean setBySystem) {
         ArrayList<Integer> classRefs = new ArrayList<Integer>();
         if (setBySystem)
@@ -226,12 +250,14 @@
         return makeReference(classRefs, "focus");
     }
 
-    public static LinkedHashMap<String, Object> makeReference(int classRef) {
+
+    public static LinkedHashMap<String, Object> makeReference (int classRef) {
         return makeReference(classRef, false);
     }
 
+
     @Deprecated
-    public static LinkedHashMap<String, Object> makeResetReference() {
+    public static LinkedHashMap<String, Object> makeResetReference () {
         LinkedHashMap<String, Object> group = new LinkedHashMap<String, Object>();
         group.put("@type", "koral:reference");
         group.put("operation", "operation:focus");
@@ -240,7 +266,8 @@
         return group;
     }
 
-    public static LinkedHashMap<String, Object> makeSpanReference(
+
+    public static LinkedHashMap<String, Object> makeSpanReference (
             Integer[] spanRef, String operation) {
         LinkedHashMap<String, Object> group = new LinkedHashMap<String, Object>();
         group.put("@type", "koral:reference");
@@ -250,12 +277,14 @@
         return group;
     }
 
-    public static void addOperandsToGroup(LinkedHashMap<String, Object> group) {
+
+    public static void addOperandsToGroup (LinkedHashMap<String, Object> group) {
         ArrayList<Object> operands = new ArrayList<Object>();
         group.put("operands", operands);
     }
-  
-    public static LinkedHashMap<String, Object> wrapInReference(
+
+
+    public static LinkedHashMap<String, Object> wrapInReference (
             LinkedHashMap<String, Object> group, Integer classId) {
         LinkedHashMap<String, Object> refGroup = makeReference(classId);
         ArrayList<Object> operands = new ArrayList<Object>();
@@ -263,10 +292,11 @@
         refGroup.put("operands", operands);
         return refGroup;
     }
-    
+
+
     @Deprecated
-    public static LinkedHashMap<String, Object> wrapInReference(
-            LinkedHashMap<String, Object> group, Integer classId, 
+    public static LinkedHashMap<String, Object> wrapInReference (
+            LinkedHashMap<String, Object> group, Integer classId,
             boolean setBySystem) {
         LinkedHashMap<String, Object> refGroup = makeReference(classId);
         ArrayList<Object> operands = new ArrayList<Object>();
@@ -275,14 +305,16 @@
         return refGroup;
     }
 
+
     @SuppressWarnings("unchecked")
-    public static LinkedHashMap<String, Object> wrapInClass(
+    public static LinkedHashMap<String, Object> wrapInClass (
             LinkedHashMap<String, Object> group, Integer classId) {
         LinkedHashMap<String, Object> classGroup = makeSpanClass(classId);
         ((ArrayList<Object>) classGroup.get("operands")).add(group);
         return classGroup;
     }
 
+
     /**
      * Ensures that a distance or quantification value does not exceed
      * the allowed maximum value.
@@ -291,7 +323,7 @@
      * @return The input number if it is below the allowed maximum
      *         value, else the maximum value.
      */
-    public static int cropToMaxValue(int number) {
+    public static int cropToMaxValue (int number) {
         if (number > MAXIMUM_DISTANCE) {
             number = MAXIMUM_DISTANCE;
             String warning = String
diff --git a/src/main/java/de/ids_mannheim/korap/query/serialize/util/ResourceMapper.java b/src/main/java/de/ids_mannheim/korap/query/serialize/util/ResourceMapper.java
index 661976d..87f768a 100644
--- a/src/main/java/de/ids_mannheim/korap/query/serialize/util/ResourceMapper.java
+++ b/src/main/java/de/ids_mannheim/korap/query/serialize/util/ResourceMapper.java
@@ -21,7 +21,8 @@
         map.put("ANA", "p");
     }
 
-    public static String descriptor2policy(String descriptor) {
+
+    public static String descriptor2policy (String descriptor) {
         if (map.containsKey(descriptor))
             return map.get(descriptor);
         else
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 993ba38..10614ea 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
@@ -1,13 +1,13 @@
 package de.ids_mannheim.korap.query.serialize.util;
 
 public class StatusCodes {
-	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 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;
-	public final static int UNBOUND_ANNIS_RELATION = 308;
-	public final static int UNKNOWN_QUERY_ERROR = 399;
+    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 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;
+    public final static int UNBOUND_ANNIS_RELATION = 308;
+    public final static int UNKNOWN_QUERY_ERROR = 399;
 }
diff --git a/src/test/java/de/ids_mannheim/korap/query/serialize/AnnisQueryProcessorTest.java b/src/test/java/de/ids_mannheim/korap/query/serialize/AnnisQueryProcessorTest.java
index fc1b74d..114fc2c 100644
--- a/src/test/java/de/ids_mannheim/korap/query/serialize/AnnisQueryProcessorTest.java
+++ b/src/test/java/de/ids_mannheim/korap/query/serialize/AnnisQueryProcessorTest.java
@@ -1,4 +1,5 @@
 package de.ids_mannheim.korap.query.serialize;
+
 import static org.junit.Assert.*;
 
 import java.io.IOException;
@@ -14,7 +15,8 @@
 import de.ids_mannheim.korap.query.serialize.util.StatusCodes;
 
 /**
- * Tests for JSON-LD serialization of ANNIS QL queries. 
+ * Tests for JSON-LD serialization of ANNIS QL queries.
+ * 
  * @author Joachim Bingel (bingel@ids-mannheim.de)
  * @version 1.0
  */
@@ -27,8 +29,9 @@
     ObjectMapper mapper = new ObjectMapper();
     JsonNode res;
 
+
     @Test
-    public void testContext() throws JsonProcessingException, IOException {
+    public void testContext () throws JsonProcessingException, IOException {
         String contextUrl = "http://korap.ids-mannheim.de/ns/koral/0.3/context.jsonld";
         query = "foo";
         qs.setQuery(query, "annis");
@@ -36,302 +39,379 @@
         assertEquals(contextUrl, res.get("@context").asText());
     }
 
+
     @Test
-    public void testSingleTokens() throws JsonProcessingException, IOException {
+    public void testSingleTokens () throws JsonProcessingException, IOException {
         query = "\"Mann\"";
         qs.setQuery(query, "annis");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:token",			 res.at("/query/@type").asText());
-        assertEquals("koral:term",			 res.at("/query/wrap/@type").asText());
-        assertEquals("orth",				 res.at("/query/wrap/layer").asText());
-        assertEquals("Mann",				 res.at("/query/wrap/key").asText());
-        assertEquals("match:eq",			 res.at("/query/wrap/match").asText());
+        assertEquals("koral:token", res.at("/query/@type").asText());
+        assertEquals("koral:term", res.at("/query/wrap/@type").asText());
+        assertEquals("orth", res.at("/query/wrap/layer").asText());
+        assertEquals("Mann", res.at("/query/wrap/key").asText());
+        assertEquals("match:eq", res.at("/query/wrap/match").asText());
 
         query = "tok!=\"Frau\"";
         qs.setQuery(query, "annis");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:token",			 res.at("/query/@type").asText());
-        assertEquals("koral:term",			 res.at("/query/wrap/@type").asText());
-        assertEquals("orth",				 res.at("/query/wrap/layer").asText());
-        assertEquals("Frau",				 res.at("/query/wrap/key").asText());
-        assertEquals("match:ne",			 res.at("/query/wrap/match").asText());
+        assertEquals("koral:token", res.at("/query/@type").asText());
+        assertEquals("koral:term", res.at("/query/wrap/@type").asText());
+        assertEquals("orth", res.at("/query/wrap/layer").asText());
+        assertEquals("Frau", res.at("/query/wrap/key").asText());
+        assertEquals("match:ne", res.at("/query/wrap/match").asText());
 
         query = "tok";  // special keyword for token
         qs.setQuery(query, "annis");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:token",			 res.at("/query/@type").asText());
+        assertEquals("koral:token", res.at("/query/@type").asText());
 
         query = "Mann"; // no special keyword -> defaults to layer name
         qs.setQuery(query, "annis");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:span",			 res.at("/query/@type").asText());
-        assertEquals("Mann",				 res.at("/query/layer").asText());
+        assertEquals("koral:span", res.at("/query/@type").asText());
+        assertEquals("Mann", res.at("/query/layer").asText());
     }
 
-    @Test 
-    public void testSpans() throws JsonProcessingException, IOException {
+
+    @Test
+    public void testSpans () throws JsonProcessingException, IOException {
         query = "node"; // special keyword for general span
         qs.setQuery(query, "annis");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:span",			 res.at("/query/@type").asText());
+        assertEquals("koral:span", res.at("/query/@type").asText());
 
         query = "cat=\"np\"";  // cat is special keyword for spans
         qs.setQuery(query, "annis");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:span",			 res.at("/query/@type").asText());
-        assertEquals("np",					 res.at("/query/key").asText());
-        assertEquals("c",					 res.at("/query/layer").asText());
+        assertEquals("koral:span", res.at("/query/@type").asText());
+        assertEquals("np", res.at("/query/key").asText());
+        assertEquals("c", res.at("/query/layer").asText());
 
-        query = "cat=\"NP\"";  
+        query = "cat=\"NP\"";
         qs.setQuery(query, "annis");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:span",			 res.at("/query/@type").asText());
-        assertEquals("NP",					 res.at("/query/key").asText());
-        assertEquals("c",					 res.at("/query/layer").asText());
+        assertEquals("koral:span", res.at("/query/@type").asText());
+        assertEquals("NP", res.at("/query/key").asText());
+        assertEquals("c", res.at("/query/layer").asText());
     }
 
-    @Test
-    public void testRegex() throws JsonProcessingException, IOException {
-        query = "/Mann/";  
-        qs.setQuery(query, "annis");
-        res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:token",			 res.at("/query/@type").asText());
-        assertEquals("koral:term",			 res.at("/query/wrap/@type").asText());
-        assertEquals("type:regex",			 res.at("/query/wrap/type").asText());
-        assertEquals("orth",				 res.at("/query/wrap/layer").asText());
-        assertEquals("Mann",				 res.at("/query/wrap/key").asText());
-        assertEquals("match:eq",			 res.at("/query/wrap/match").asText());
 
-        query = "/.*?Mann.*?/";  
+    @Test
+    public void testRegex () throws JsonProcessingException, IOException {
+        query = "/Mann/";
         qs.setQuery(query, "annis");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("type:regex",			res.at("/query/wrap/type").asText());
-        assertEquals(".*?Mann.*?",			res.at("/query/wrap/key").asText());
+        assertEquals("koral:token", res.at("/query/@type").asText());
+        assertEquals("koral:term", res.at("/query/wrap/@type").asText());
+        assertEquals("type:regex", res.at("/query/wrap/type").asText());
+        assertEquals("orth", res.at("/query/wrap/layer").asText());
+        assertEquals("Mann", res.at("/query/wrap/key").asText());
+        assertEquals("match:eq", res.at("/query/wrap/match").asText());
+
+        query = "/.*?Mann.*?/";
+        qs.setQuery(query, "annis");
+        res = mapper.readTree(qs.toJSON());
+        assertEquals("type:regex", res.at("/query/wrap/type").asText());
+        assertEquals(".*?Mann.*?", res.at("/query/wrap/key").asText());
     }
 
+
     @Test
-    public void testFoundriesLayers() throws JsonProcessingException, IOException {
-        query = "c=\"np\"";  
+    public void testFoundriesLayers () throws JsonProcessingException,
+            IOException {
+        query = "c=\"np\"";
         qs.setQuery(query, "annis");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:span",			 res.at("/query/@type").asText());
-        assertEquals("np",					 res.at("/query/key").asText());
-        assertEquals("c",					 res.at("/query/layer").asText());
+        assertEquals("koral:span", res.at("/query/@type").asText());
+        assertEquals("np", res.at("/query/key").asText());
+        assertEquals("c", res.at("/query/layer").asText());
 
-        query = "cnx/c=\"np\"";  
+        query = "cnx/c=\"np\"";
         qs.setQuery(query, "annis");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:span",			 res.at("/query/@type").asText());
-        assertEquals("np",					 res.at("/query/key").asText());
-        assertEquals("c",					 res.at("/query/layer").asText());
-        assertEquals("cnx",					 res.at("/query/foundry").asText());
+        assertEquals("koral:span", res.at("/query/@type").asText());
+        assertEquals("np", res.at("/query/key").asText());
+        assertEquals("c", res.at("/query/layer").asText());
+        assertEquals("cnx", res.at("/query/foundry").asText());
 
-        query = "tt/pos=\"np\"";  
+        query = "tt/pos=\"np\"";
         qs.setQuery(query, "annis");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:token",			 res.at("/query/@type").asText());
-        assertEquals("koral:term",			 res.at("/query/wrap/@type").asText());
-        assertEquals("np",					 res.at("/query/wrap/key").asText());
-        assertEquals("p",					 res.at("/query/wrap/layer").asText());
-        assertEquals("tt",					 res.at("/query/wrap/foundry").asText());
+        assertEquals("koral:token", res.at("/query/@type").asText());
+        assertEquals("koral:term", res.at("/query/wrap/@type").asText());
+        assertEquals("np", res.at("/query/wrap/key").asText());
+        assertEquals("p", res.at("/query/wrap/layer").asText());
+        assertEquals("tt", res.at("/query/wrap/foundry").asText());
     }
 
+
     @Test
-    public void testDirectDeclarationRelations() throws JsonProcessingException, IOException {
-        query = "node > node";  
+    public void testDirectDeclarationRelations ()
+            throws JsonProcessingException, IOException {
+        query = "node > node";
         qs.setQuery(query, "annis");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:group",			res.at("/query/@type").asText());
-        assertEquals("operation:relation",	res.at("/query/operation").asText());
-        assertEquals("koral:span",			res.at("/query/operands/0/@type").asText());
-        assertEquals("koral:span",			res.at("/query/operands/1/@type").asText());
-        assertEquals("koral:relation",		res.at("/query/relation/@type").asText());
-        assertEquals("koral:term",			res.at("/query/relation/wrap/@type").asText());
-        assertEquals("c",					res.at("/query/relation/wrap/layer").asText());
+        assertEquals("koral:group", res.at("/query/@type").asText());
+        assertEquals("operation:relation", res.at("/query/operation").asText());
+        assertEquals("koral:span", res.at("/query/operands/0/@type").asText());
+        assertEquals("koral:span", res.at("/query/operands/1/@type").asText());
+        assertEquals("koral:relation", res.at("/query/relation/@type").asText());
+        assertEquals("koral:term", res.at("/query/relation/wrap/@type")
+                .asText());
+        assertEquals("c", res.at("/query/relation/wrap/layer").asText());
 
-        query = "node > cnx/c=\"np\"";  
+        query = "node > cnx/c=\"np\"";
         qs.setQuery(query, "annis");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:group",			res.at("/query/@type").asText());
-        assertEquals("operation:relation",	res.at("/query/operation").asText());
-        assertEquals("koral:span",			res.at("/query/operands/0/@type").asText());
-        assertEquals("koral:span",			res.at("/query/operands/1/@type").asText());
-        assertEquals("np",					res.at("/query/operands/1/key").asText());
-        assertEquals("c",					res.at("/query/operands/1/layer").asText());
-        assertEquals("cnx",					res.at("/query/operands/1/foundry").asText());
-        assertEquals("koral:relation",		res.at("/query/relation/@type").asText());
-        assertEquals("koral:term",			res.at("/query/relation/wrap/@type").asText());
-        assertEquals("c",					res.at("/query/relation/wrap/layer").asText());
+        assertEquals("koral:group", res.at("/query/@type").asText());
+        assertEquals("operation:relation", res.at("/query/operation").asText());
+        assertEquals("koral:span", res.at("/query/operands/0/@type").asText());
+        assertEquals("koral:span", res.at("/query/operands/1/@type").asText());
+        assertEquals("np", res.at("/query/operands/1/key").asText());
+        assertEquals("c", res.at("/query/operands/1/layer").asText());
+        assertEquals("cnx", res.at("/query/operands/1/foundry").asText());
+        assertEquals("koral:relation", res.at("/query/relation/@type").asText());
+        assertEquals("koral:term", res.at("/query/relation/wrap/@type")
+                .asText());
+        assertEquals("c", res.at("/query/relation/wrap/layer").asText());
 
-        query = "cnx/c=\"np\" > node";  
+        query = "cnx/c=\"np\" > node";
         qs.setQuery(query, "annis");
         res = mapper.readTree(qs.toJSON());
-        assertEquals(true,					res.at("/query/operands/1/key").isMissingNode());
-        assertEquals("np",					res.at("/query/operands/0/key").asText());
+        assertEquals(true, res.at("/query/operands/1/key").isMissingNode());
+        assertEquals("np", res.at("/query/operands/0/key").asText());
 
         query = "cat=/NP/ & cat=/PP/ > #1";
         qs.setQuery(query, "annis");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:group",			res.at("/query/@type").asText());
-        assertEquals("operation:relation",	res.at("/query/operation").asText());
-        assertEquals("koral:span",			res.at("/query/operands/0/@type").asText());
-        assertEquals("PP",					res.at("/query/operands/0/key").asText());
-        assertEquals("koral:span",			res.at("/query/operands/1/@type").asText());
-        assertEquals("NP",					res.at("/query/operands/1/key").asText());
-        assertEquals(true,					res.at("/query/operands/2").isMissingNode());
-        assertEquals("koral:relation",		res.at("/query/relation/@type").asText());
-        assertEquals("koral:term",			res.at("/query/relation/wrap/@type").asText());
-        assertEquals("c",					res.at("/query/relation/wrap/layer").asText());
+        assertEquals("koral:group", res.at("/query/@type").asText());
+        assertEquals("operation:relation", res.at("/query/operation").asText());
+        assertEquals("koral:span", res.at("/query/operands/0/@type").asText());
+        assertEquals("PP", res.at("/query/operands/0/key").asText());
+        assertEquals("koral:span", res.at("/query/operands/1/@type").asText());
+        assertEquals("NP", res.at("/query/operands/1/key").asText());
+        assertEquals(true, res.at("/query/operands/2").isMissingNode());
+        assertEquals("koral:relation", res.at("/query/relation/@type").asText());
+        assertEquals("koral:term", res.at("/query/relation/wrap/@type")
+                .asText());
+        assertEquals("c", res.at("/query/relation/wrap/layer").asText());
     }
 
+
     @Test
-    public void testDefPredicationInversion() throws JsonProcessingException, IOException {
-        query = "#1 > #2 & cnx/cat=\"vp\" & cnx/cat=\"np\"";  
+    public void testDefPredicationInversion () throws JsonProcessingException,
+            IOException {
+        query = "#1 > #2 & cnx/cat=\"vp\" & cnx/cat=\"np\"";
         qs.setQuery(query, "annis");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:group",			res.at("/query/@type").asText());
-        assertEquals("operation:relation",	res.at("/query/operation").asText());
-        assertEquals("koral:span",			res.at("/query/operands/0/@type").asText());
-        assertEquals("koral:span",			res.at("/query/operands/0/@type").asText());
-        assertEquals("vp",					res.at("/query/operands/0/key").asText());
-        assertEquals("c",					res.at("/query/operands/0/layer").asText());
-        assertEquals("cnx",					res.at("/query/operands/0/foundry").asText());
-        assertEquals("koral:span",			res.at("/query/operands/1/@type").asText());
-        assertEquals("np",					res.at("/query/operands/1/key").asText());
-        assertEquals("c",					res.at("/query/operands/1/layer").asText());
-        assertEquals("cnx",					res.at("/query/operands/1/foundry").asText());
-        assertEquals("koral:relation",		res.at("/query/relation/@type").asText());
-        assertEquals("koral:term",			res.at("/query/relation/wrap/@type").asText());
-        assertEquals("c",					res.at("/query/relation/wrap/layer").asText());
+        assertEquals("koral:group", res.at("/query/@type").asText());
+        assertEquals("operation:relation", res.at("/query/operation").asText());
+        assertEquals("koral:span", res.at("/query/operands/0/@type").asText());
+        assertEquals("koral:span", res.at("/query/operands/0/@type").asText());
+        assertEquals("vp", res.at("/query/operands/0/key").asText());
+        assertEquals("c", res.at("/query/operands/0/layer").asText());
+        assertEquals("cnx", res.at("/query/operands/0/foundry").asText());
+        assertEquals("koral:span", res.at("/query/operands/1/@type").asText());
+        assertEquals("np", res.at("/query/operands/1/key").asText());
+        assertEquals("c", res.at("/query/operands/1/layer").asText());
+        assertEquals("cnx", res.at("/query/operands/1/foundry").asText());
+        assertEquals("koral:relation", res.at("/query/relation/@type").asText());
+        assertEquals("koral:term", res.at("/query/relation/wrap/@type")
+                .asText());
+        assertEquals("c", res.at("/query/relation/wrap/layer").asText());
     }
 
-    @Test
-    public void testSimpleDominance() throws JsonProcessingException, IOException {
-        query = "node & node & #2 > #1";  
-        qs.setQuery(query, "annis");
-        res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:group",			res.at("/query/@type").asText());
-        assertEquals("operation:relation",	res.at("/query/operation").asText());
-        assertEquals("koral:span",			res.at("/query/operands/0/@type").asText());
-        assertEquals("koral:span",			res.at("/query/operands/1/@type").asText());
-        assertEquals("koral:relation",		res.at("/query/relation/@type").asText());
-        assertEquals("koral:term",			res.at("/query/relation/wrap/@type").asText());
-        assertEquals("c",					res.at("/query/relation/wrap/layer").asText());
 
-        query = "\"Mann\" & node & #2 > #1";  
+    @Test
+    public void testSimpleDominance () throws JsonProcessingException,
+            IOException {
+        query = "node & node & #2 > #1";
         qs.setQuery(query, "annis");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:group",			res.at("/query/@type").asText());
-        assertEquals("operation:relation",	res.at("/query/operation").asText());
-        assertEquals("koral:span",			res.at("/query/operands/0/@type").asText());
-        assertEquals("koral:token",			res.at("/query/operands/1/@type").asText());
-        assertEquals("Mann",				res.at("/query/operands/1/wrap/key").asText());
-        assertEquals("koral:relation",		res.at("/query/relation/@type").asText());
-        assertEquals("koral:term",			res.at("/query/relation/wrap/@type").asText());
-        assertEquals("c",					res.at("/query/relation/wrap/layer").asText());
+        assertEquals("koral:group", res.at("/query/@type").asText());
+        assertEquals("operation:relation", res.at("/query/operation").asText());
+        assertEquals("koral:span", res.at("/query/operands/0/@type").asText());
+        assertEquals("koral:span", res.at("/query/operands/1/@type").asText());
+        assertEquals("koral:relation", res.at("/query/relation/@type").asText());
+        assertEquals("koral:term", res.at("/query/relation/wrap/@type")
+                .asText());
+        assertEquals("c", res.at("/query/relation/wrap/layer").asText());
+
+        query = "\"Mann\" & node & #2 > #1";
+        qs.setQuery(query, "annis");
+        res = mapper.readTree(qs.toJSON());
+        assertEquals("koral:group", res.at("/query/@type").asText());
+        assertEquals("operation:relation", res.at("/query/operation").asText());
+        assertEquals("koral:span", res.at("/query/operands/0/@type").asText());
+        assertEquals("koral:token", res.at("/query/operands/1/@type").asText());
+        assertEquals("Mann", res.at("/query/operands/1/wrap/key").asText());
+        assertEquals("koral:relation", res.at("/query/relation/@type").asText());
+        assertEquals("koral:term", res.at("/query/relation/wrap/@type")
+                .asText());
+        assertEquals("c", res.at("/query/relation/wrap/layer").asText());
 
         query = "\"Mann\" & node & #2 >[func=\"SB\"] #1";  //coordinates the func=SB term and requires a "c"-layer term (consituency relation/dominance)
         qs.setQuery(query, "annis");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:relation",		res.at("/query/relation/@type").asText());
-        assertEquals("koral:termGroup",		res.at("/query/relation/wrap/@type").asText());
-        assertEquals("relation:and",		res.at("/query/relation/wrap/relation").asText());
-        assertEquals("c",					res.at("/query/relation/wrap/operands/1/layer").asText());
-        assertEquals("func",				res.at("/query/relation/wrap/operands/0/layer").asText());
-        assertEquals("SB",					res.at("/query/relation/wrap/operands/0/key").asText());
+        assertEquals("koral:relation", res.at("/query/relation/@type").asText());
+        assertEquals("koral:termGroup", res.at("/query/relation/wrap/@type")
+                .asText());
+        assertEquals("relation:and", res.at("/query/relation/wrap/relation")
+                .asText());
+        assertEquals("c", res.at("/query/relation/wrap/operands/1/layer")
+                .asText());
+        assertEquals("func", res.at("/query/relation/wrap/operands/0/layer")
+                .asText());
+        assertEquals("SB", res.at("/query/relation/wrap/operands/0/key")
+                .asText());
 
         query = "cat=\"S\" & node & #1 >[func=\"SB\" func=\"MO\"] #2";  // quite meaningless (function is subject and modifier), but this is allowed by Annis, however its backend only regards the 1st option
         qs.setQuery(query, "annis");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:relation",		res.at("/query/relation/@type").asText());
-        assertEquals("koral:termGroup",		res.at("/query/relation/wrap/@type").asText());
-        assertEquals("relation:and",		res.at("/query/relation/wrap/relation").asText());
-        assertEquals("func",				res.at("/query/relation/wrap/operands/0/layer").asText());
-        assertEquals("SB",					res.at("/query/relation/wrap/operands/0/key").asText());
-        assertEquals("func",				res.at("/query/relation/wrap/operands/1/layer").asText());
-        assertEquals("MO"	,				res.at("/query/relation/wrap/operands/1/key").asText());
-        assertEquals("c",					res.at("/query/relation/wrap/operands/2/layer").asText());
+        assertEquals("koral:relation", res.at("/query/relation/@type").asText());
+        assertEquals("koral:termGroup", res.at("/query/relation/wrap/@type")
+                .asText());
+        assertEquals("relation:and", res.at("/query/relation/wrap/relation")
+                .asText());
+        assertEquals("func", res.at("/query/relation/wrap/operands/0/layer")
+                .asText());
+        assertEquals("SB", res.at("/query/relation/wrap/operands/0/key")
+                .asText());
+        assertEquals("func", res.at("/query/relation/wrap/operands/1/layer")
+                .asText());
+        assertEquals("MO", res.at("/query/relation/wrap/operands/1/key")
+                .asText());
+        assertEquals("c", res.at("/query/relation/wrap/operands/2/layer")
+                .asText());
 
         query = "cat=\"S\" & cat=\"NP\" & #1 >@l #2";  // all sentences starting with NP  -> wrap relation in startswith and retrieve 2nd operand with focus
         qs.setQuery(query, "annis");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("operation:position",	res.at("/query/operation").asText());
-        assertEquals("operation:relation",	res.at("/query/operands/0/operation").asText());
-        assertEquals("frames:startsWith",	res.at("/query/frames/0").asText());
-        assertEquals("koral:span",			res.at("/query/operands/0/operands/0/@type").asText());
-        assertEquals("S",					res.at("/query/operands/0/operands/0/key").asText());
-        assertEquals("koral:group",			res.at("/query/operands/0/operands/1/@type").asText());
-        assertEquals("operation:class",		res.at("/query/operands/0/operands/1/operation").asText());
-        assertEquals(130,				    res.at("/query/operands/0/operands/1/classOut").asInt());
-        assertEquals("koral:span",			res.at("/query/operands/0/operands/1/operands/0/@type").asText());
-        assertEquals("NP",					res.at("/query/operands/0/operands/1/operands/0/key").asText());
-        assertEquals("koral:reference",		res.at("/query/operands/1/@type").asText());
-        assertEquals("operation:focus",		res.at("/query/operands/1/operation").asText());
-        assertEquals(130,				    res.at("/query/operands/1/classRef/0").asInt());
+        assertEquals("operation:position", res.at("/query/operation").asText());
+        assertEquals("operation:relation", res
+                .at("/query/operands/0/operation").asText());
+        assertEquals("frames:startsWith", res.at("/query/frames/0").asText());
+        assertEquals("koral:span", res.at("/query/operands/0/operands/0/@type")
+                .asText());
+        assertEquals("S", res.at("/query/operands/0/operands/0/key").asText());
+        assertEquals("koral:group", res
+                .at("/query/operands/0/operands/1/@type").asText());
+        assertEquals("operation:class",
+                res.at("/query/operands/0/operands/1/operation").asText());
+        assertEquals(130, res.at("/query/operands/0/operands/1/classOut")
+                .asInt());
+        assertEquals("koral:span",
+                res.at("/query/operands/0/operands/1/operands/0/@type")
+                        .asText());
+        assertEquals("NP", res
+                .at("/query/operands/0/operands/1/operands/0/key").asText());
+        assertEquals("koral:reference", res.at("/query/operands/1/@type")
+                .asText());
+        assertEquals("operation:focus", res.at("/query/operands/1/operation")
+                .asText());
+        assertEquals(130, res.at("/query/operands/1/classRef/0").asInt());
 
-        query = "cat=\"S\" & cat=\"NP\" & #1 >@r #2";  
+        query = "cat=\"S\" & cat=\"NP\" & #1 >@r #2";
         qs.setQuery(query, "annis");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("operation:position",	res.at("/query/operation").asText());
-        assertEquals("operation:relation",	res.at("/query/operands/0/operation").asText());
-        assertEquals("frames:endsWith",		res.at("/query/frames/0").asText());
-        assertEquals("koral:span",			res.at("/query/operands/0/operands/0/@type").asText());
-        assertEquals("S",					res.at("/query/operands/0/operands/0/key").asText());
-        assertEquals("koral:group",			res.at("/query/operands/0/operands/1/@type").asText());
-        assertEquals("operation:class",		res.at("/query/operands/0/operands/1/operation").asText());
-        assertEquals(130,					res.at("/query/operands/0/operands/1/classOut").asInt());
-        assertEquals("koral:span",			res.at("/query/operands/0/operands/1/operands/0/@type").asText());
-        assertEquals("NP",					res.at("/query/operands/0/operands/1/operands/0/key").asText());
-        assertEquals("koral:reference",		res.at("/query/operands/1/@type").asText());
-        assertEquals("operation:focus",		res.at("/query/operands/1/operation").asText());
-        assertEquals(130,					res.at("/query/operands/1/classRef/0").asInt());
-    }
-
-    @Test
-    public void testIndirectDominance() throws JsonProcessingException, IOException {
-        query = "node & node & #1 >2,4 #2";  
-        qs.setQuery(query, "annis");
-        res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:group",			res.at("/query/@type").asText());
-        assertEquals("operation:relation",	res.at("/query/operation").asText());
-        assertEquals("koral:span",			res.at("/query/operands/0/@type").asText());
-        assertEquals("koral:span",			res.at("/query/operands/1/@type").asText());
-        assertEquals("koral:relation",		res.at("/query/relation/@type").asText());
-        assertEquals(2,						res.at("/query/relation/boundary/min").asInt());
-        assertEquals(4,						res.at("/query/relation/boundary/max").asInt());
-        assertEquals("koral:term",			res.at("/query/relation/wrap/@type").asText());
-        assertEquals("c",					res.at("/query/relation/wrap/layer").asText());
-
-        query = "node & node & #1 >* #2";  
-        qs.setQuery(query, "annis");
-        res = mapper.readTree(qs.toJSON());
-        assertEquals(0,						res.at("/query/relation/boundary/min").asInt());
-        assertEquals(true,					res.at("/query/relation/boundary/max").isMissingNode());
+        assertEquals("operation:position", res.at("/query/operation").asText());
+        assertEquals("operation:relation", res
+                .at("/query/operands/0/operation").asText());
+        assertEquals("frames:endsWith", res.at("/query/frames/0").asText());
+        assertEquals("koral:span", res.at("/query/operands/0/operands/0/@type")
+                .asText());
+        assertEquals("S", res.at("/query/operands/0/operands/0/key").asText());
+        assertEquals("koral:group", res
+                .at("/query/operands/0/operands/1/@type").asText());
+        assertEquals("operation:class",
+                res.at("/query/operands/0/operands/1/operation").asText());
+        assertEquals(130, res.at("/query/operands/0/operands/1/classOut")
+                .asInt());
+        assertEquals("koral:span",
+                res.at("/query/operands/0/operands/1/operands/0/@type")
+                        .asText());
+        assertEquals("NP", res
+                .at("/query/operands/0/operands/1/operands/0/key").asText());
+        assertEquals("koral:reference", res.at("/query/operands/1/@type")
+                .asText());
+        assertEquals("operation:focus", res.at("/query/operands/1/operation")
+                .asText());
+        assertEquals(130, res.at("/query/operands/1/classRef/0").asInt());
     }
 
 
     @Test
-    public void testMultipleDominance() throws JsonProcessingException, IOException {
-        query = "cat=\"CP\" & cat=\"VP\" & cat=\"NP\" & #1 > #2 > #3";  
+    public void testIndirectDominance () throws JsonProcessingException,
+            IOException {
+        query = "node & node & #1 >2,4 #2";
         qs.setQuery(query, "annis");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:group",			res.at("/query/@type").asText());
-        assertEquals("operation:relation",	res.at("/query/operation").asText());
-        assertEquals("koral:reference",		res.at("/query/operands/0/@type").asText());
-        assertEquals("operation:focus",		res.at("/query/operands/0/operation").asText());
-        assertEquals(129,   			    res.at("/query/operands/0/classRef/0").asInt());
-        assertEquals("koral:group",			res.at("/query/operands/0/operands/0/@type").asText());
-        assertEquals("operation:relation",	res.at("/query/operands/0/operands/0/operation").asText());
-        assertEquals("koral:relation",		res.at("/query/operands/0/operands/0/relation/@type").asText());
-        assertEquals("c",					res.at("/query/operands/0/operands/0/relation/wrap/layer").asText());
-        assertEquals("koral:span",			res.at("/query/operands/0/operands/0/operands/0/@type").asText());
-        assertEquals("c",					res.at("/query/operands/0/operands/0/operands/0/layer").asText());
-        assertEquals("CP",					res.at("/query/operands/0/operands/0/operands/0/key").asText());
-        assertEquals("koral:group",			res.at("/query/operands/0/operands/0/operands/1/@type").asText());
-        assertEquals("operation:class",		res.at("/query/operands/0/operands/0/operands/1/operation").asText());
-        assertEquals(129,   			    res.at("/query/operands/0/operands/0/operands/1/classOut").asInt());
-        assertEquals("VP",					res.at("/query/operands/0/operands/0/operands/1/operands/0/key").asText());
+        assertEquals("koral:group", res.at("/query/@type").asText());
+        assertEquals("operation:relation", res.at("/query/operation").asText());
+        assertEquals("koral:span", res.at("/query/operands/0/@type").asText());
+        assertEquals("koral:span", res.at("/query/operands/1/@type").asText());
+        assertEquals("koral:relation", res.at("/query/relation/@type").asText());
+        assertEquals(2, res.at("/query/relation/boundary/min").asInt());
+        assertEquals(4, res.at("/query/relation/boundary/max").asInt());
+        assertEquals("koral:term", res.at("/query/relation/wrap/@type")
+                .asText());
+        assertEquals("c", res.at("/query/relation/wrap/layer").asText());
+
+        query = "node & node & #1 >* #2";
+        qs.setQuery(query, "annis");
+        res = mapper.readTree(qs.toJSON());
+        assertEquals(0, res.at("/query/relation/boundary/min").asInt());
+        assertEquals(true, res.at("/query/relation/boundary/max")
+                .isMissingNode());
     }
+
+
+    @Test
+    public void testMultipleDominance () throws JsonProcessingException,
+            IOException {
+        query = "cat=\"CP\" & cat=\"VP\" & cat=\"NP\" & #1 > #2 > #3";
+        qs.setQuery(query, "annis");
+        res = mapper.readTree(qs.toJSON());
+        assertEquals("koral:group", res.at("/query/@type").asText());
+        assertEquals("operation:relation", res.at("/query/operation").asText());
+        assertEquals("koral:reference", res.at("/query/operands/0/@type")
+                .asText());
+        assertEquals("operation:focus", res.at("/query/operands/0/operation")
+                .asText());
+        assertEquals(129, res.at("/query/operands/0/classRef/0").asInt());
+        assertEquals("koral:group", res
+                .at("/query/operands/0/operands/0/@type").asText());
+        assertEquals("operation:relation",
+                res.at("/query/operands/0/operands/0/operation").asText());
+        assertEquals("koral:relation",
+                res.at("/query/operands/0/operands/0/relation/@type").asText());
+        assertEquals("c",
+                res.at("/query/operands/0/operands/0/relation/wrap/layer")
+                        .asText());
+        assertEquals("koral:span",
+                res.at("/query/operands/0/operands/0/operands/0/@type")
+                        .asText());
+        assertEquals("c",
+                res.at("/query/operands/0/operands/0/operands/0/layer")
+                        .asText());
+        assertEquals("CP", res
+                .at("/query/operands/0/operands/0/operands/0/key").asText());
+        assertEquals("koral:group",
+                res.at("/query/operands/0/operands/0/operands/1/@type")
+                        .asText());
+        assertEquals("operation:class",
+                res.at("/query/operands/0/operands/0/operands/1/operation")
+                        .asText());
+        assertEquals(129,
+                res.at("/query/operands/0/operands/0/operands/1/classOut")
+                        .asInt());
+        assertEquals(
+                "VP",
+                res.at("/query/operands/0/operands/0/operands/1/operands/0/key")
+                        .asText());
+    }
+
+
     //		query = "cat=\"CP\" & cat=\"VP\" & cat=\"NP\" & #1 > #2 > #3";
     //		String dom1 = 
     //				"{@type=koral:group, operation=operation:relation, operands=[" +
@@ -402,100 +482,114 @@
     //	}
 
     @Test
-    public void testSequence() throws Exception {
+    public void testSequence () throws Exception {
         query = "tok=\"der\" & tok=\"die\" & #1 . #2";
         qs.setQuery(query, "annis");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:group",         res.at("/query/@type").asText());
-        assertEquals("operation:sequence",  res.at("/query/operation").asText());
-        assertEquals("der",                 res.at("/query/operands/0/wrap/key").asText());
-        assertEquals("die",                 res.at("/query/operands/1/wrap/key").asText());
-        assertEquals(true,                  res.at("/query/inOrder").asBoolean());
-        assertEquals(true,                  res.at("/query/operands/2").isMissingNode());
+        assertEquals("koral:group", res.at("/query/@type").asText());
+        assertEquals("operation:sequence", res.at("/query/operation").asText());
+        assertEquals("der", res.at("/query/operands/0/wrap/key").asText());
+        assertEquals("die", res.at("/query/operands/1/wrap/key").asText());
+        assertEquals(true, res.at("/query/inOrder").asBoolean());
+        assertEquals(true, res.at("/query/operands/2").isMissingNode());
 
         query = "tok=\"der\" & tok=\"die\" & #1 .2,3 #2";
         qs.setQuery(query, "annis");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:group",         res.at("/query/@type").asText());
-        assertEquals("operation:sequence",  res.at("/query/operation").asText());
-        assertEquals("der",                 res.at("/query/operands/0/wrap/key").asText());
-        assertEquals("die",                 res.at("/query/operands/1/wrap/key").asText());
-        assertEquals(true,                  res.at("/query/inOrder").asBoolean());
-        assertEquals(true,                  res.at("/query/operands/2").isMissingNode());
-        assertEquals("koral:distance",      res.at("/query/distances/0/@type").asText());
-        assertEquals("koral:boundary",      res.at("/query/distances/0/boundary/@type").asText());
-        assertEquals(1,                     res.at("/query/distances/0/boundary/min").asInt());
-        assertEquals(2,                     res.at("/query/distances/0/boundary/max").asInt());
-        
+        assertEquals("koral:group", res.at("/query/@type").asText());
+        assertEquals("operation:sequence", res.at("/query/operation").asText());
+        assertEquals("der", res.at("/query/operands/0/wrap/key").asText());
+        assertEquals("die", res.at("/query/operands/1/wrap/key").asText());
+        assertEquals(true, res.at("/query/inOrder").asBoolean());
+        assertEquals(true, res.at("/query/operands/2").isMissingNode());
+        assertEquals("koral:distance", res.at("/query/distances/0/@type")
+                .asText());
+        assertEquals("koral:boundary",
+                res.at("/query/distances/0/boundary/@type").asText());
+        assertEquals(1, res.at("/query/distances/0/boundary/min").asInt());
+        assertEquals(2, res.at("/query/distances/0/boundary/max").asInt());
+
         query = "tok=\"der\" & tok=\"die\" & #1 .2 #2";
         qs.setQuery(query, "annis");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:group",         res.at("/query/@type").asText());
-        assertEquals("operation:sequence",  res.at("/query/operation").asText());
-        assertEquals("der",                 res.at("/query/operands/0/wrap/key").asText());
-        assertEquals("die",                 res.at("/query/operands/1/wrap/key").asText());
-        assertEquals(true,                  res.at("/query/inOrder").asBoolean());
-        assertEquals(true,                  res.at("/query/operands/2").isMissingNode());
-        assertEquals("koral:distance",      res.at("/query/distances/0/@type").asText());
-        assertEquals("koral:boundary",      res.at("/query/distances/0/boundary/@type").asText());
-        assertEquals(1,                     res.at("/query/distances/0/boundary/min").asInt());
-        assertEquals(true,                  res.at("/query/distances/0/boundary/max").isMissingNode());
+        assertEquals("koral:group", res.at("/query/@type").asText());
+        assertEquals("operation:sequence", res.at("/query/operation").asText());
+        assertEquals("der", res.at("/query/operands/0/wrap/key").asText());
+        assertEquals("die", res.at("/query/operands/1/wrap/key").asText());
+        assertEquals(true, res.at("/query/inOrder").asBoolean());
+        assertEquals(true, res.at("/query/operands/2").isMissingNode());
+        assertEquals("koral:distance", res.at("/query/distances/0/@type")
+                .asText());
+        assertEquals("koral:boundary",
+                res.at("/query/distances/0/boundary/@type").asText());
+        assertEquals(1, res.at("/query/distances/0/boundary/min").asInt());
+        assertEquals(true, res.at("/query/distances/0/boundary/max")
+                .isMissingNode());
 
         query = "tok=\"der\" & tok=\"die\" & #1 .* #2";
         qs.setQuery(query, "annis");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:boundary",      res.at("/query/distances/0/boundary/@type").asText());
-        assertEquals(0,                     res.at("/query/distances/0/boundary/min").asInt());
-        assertEquals(true,                  res.at("/query/distances/0/boundary/max").isMissingNode());
+        assertEquals("koral:boundary",
+                res.at("/query/distances/0/boundary/@type").asText());
+        assertEquals(0, res.at("/query/distances/0/boundary/min").asInt());
+        assertEquals(true, res.at("/query/distances/0/boundary/max")
+                .isMissingNode());
     }
 
+
     @Test
-    public void testNear() throws Exception {
+    public void testNear () throws Exception {
         query = "tok=\"der\" & tok=\"die\" & #1 ^ #2";
         qs.setQuery(query, "annis");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:group",         res.at("/query/@type").asText());
-        assertEquals("operation:sequence",  res.at("/query/operation").asText());
-        assertEquals("der",                 res.at("/query/operands/0/wrap/key").asText());
-        assertEquals("die",                 res.at("/query/operands/1/wrap/key").asText());
-        assertEquals(false,                 res.at("/query/inOrder").asBoolean());
-        assertEquals(true,                  res.at("/query/operands/2").isMissingNode());
+        assertEquals("koral:group", res.at("/query/@type").asText());
+        assertEquals("operation:sequence", res.at("/query/operation").asText());
+        assertEquals("der", res.at("/query/operands/0/wrap/key").asText());
+        assertEquals("die", res.at("/query/operands/1/wrap/key").asText());
+        assertEquals(false, res.at("/query/inOrder").asBoolean());
+        assertEquals(true, res.at("/query/operands/2").isMissingNode());
 
         query = "tok=\"der\" & tok=\"die\" & #1 ^2,3 #2";
         qs.setQuery(query, "annis");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:group",         res.at("/query/@type").asText());
-        assertEquals("operation:sequence",  res.at("/query/operation").asText());
-        assertEquals("der",                 res.at("/query/operands/0/wrap/key").asText());
-        assertEquals("die",                 res.at("/query/operands/1/wrap/key").asText());
-        assertEquals(false,                 res.at("/query/inOrder").asBoolean());
-        assertEquals(true,                  res.at("/query/operands/2").isMissingNode());
-        assertEquals("koral:distance",      res.at("/query/distances/0/@type").asText());
-        assertEquals("koral:boundary",      res.at("/query/distances/0/boundary/@type").asText());
-        assertEquals(1,                     res.at("/query/distances/0/boundary/min").asInt());
-        assertEquals(2,                     res.at("/query/distances/0/boundary/max").asInt());
+        assertEquals("koral:group", res.at("/query/@type").asText());
+        assertEquals("operation:sequence", res.at("/query/operation").asText());
+        assertEquals("der", res.at("/query/operands/0/wrap/key").asText());
+        assertEquals("die", res.at("/query/operands/1/wrap/key").asText());
+        assertEquals(false, res.at("/query/inOrder").asBoolean());
+        assertEquals(true, res.at("/query/operands/2").isMissingNode());
+        assertEquals("koral:distance", res.at("/query/distances/0/@type")
+                .asText());
+        assertEquals("koral:boundary",
+                res.at("/query/distances/0/boundary/@type").asText());
+        assertEquals(1, res.at("/query/distances/0/boundary/min").asInt());
+        assertEquals(2, res.at("/query/distances/0/boundary/max").asInt());
 
         query = "tok=\"der\" & tok=\"die\" & #1 ^* #2";
         qs.setQuery(query, "annis");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:boundary",      res.at("/query/distances/0/boundary/@type").asText());
-        assertEquals(0,                     res.at("/query/distances/0/boundary/min").asInt());
-        assertEquals(true,                  res.at("/query/distances/0/boundary/max").isMissingNode());
-        assertEquals(false,                 res.at("/query/inOrder").asBoolean());
+        assertEquals("koral:boundary",
+                res.at("/query/distances/0/boundary/@type").asText());
+        assertEquals(0, res.at("/query/distances/0/boundary/min").asInt());
+        assertEquals(true, res.at("/query/distances/0/boundary/max")
+                .isMissingNode());
+        assertEquals(false, res.at("/query/inOrder").asBoolean());
     }
 
 
     @Test
-    public void testMultipleSequence() throws Exception {
+    public void testMultipleSequence () throws Exception {
         query = "tok=\"a\" & tok=\"b\" & tok=\"c\" & #1 . #2 & #2 . #3";
         qs.setQuery(query, "annis");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:group",         res.at("/query/@type").asText());
-        assertEquals("operation:sequence",  res.at("/query/operation").asText());
-        assertEquals("koral:reference",     res.at("/query/operands/0/@type").asText());
-        assertEquals(129,                   res.at("/query/operands/0/classRef/0").asInt());
-        assertEquals(res.at("/query/operands/0/classRef/0").asInt(), 
-                res.at("/query/operands/0/operands/0/operands/1/classOut").asInt());
+        assertEquals("koral:group", res.at("/query/@type").asText());
+        assertEquals("operation:sequence", res.at("/query/operation").asText());
+        assertEquals("koral:reference", res.at("/query/operands/0/@type")
+                .asText());
+        assertEquals(129, res.at("/query/operands/0/classRef/0").asInt());
+        assertEquals(res.at("/query/operands/0/classRef/0").asInt(),
+                res.at("/query/operands/0/operands/0/operands/1/classOut")
+                        .asInt());
     }
 
 
@@ -550,442 +644,731 @@
     //	}
     //	
     /**
-     * Tests the (rather difficult) serialization of queries where two subsequent relations
-     * do not share any common operand. Makes it impossible to wrap 2nd relation around 1st. 
-     * Must therefore re-order relations (or postpone processing of 2nd).
+     * Tests the (rather difficult) serialization of queries where two
+     * subsequent relations
+     * do not share any common operand. Makes it impossible to wrap
+     * 2nd relation around 1st.
+     * Must therefore re-order relations (or postpone processing of
+     * 2nd).
+     * 
      * @throws JsonProcessingException
      * @throws IOException
      */
     @Test
-    public void testNoSharedOperand() throws JsonProcessingException, IOException {
-        query = "cat=\"A\" & cat=\"B\" & cat=\"C\" & cat=\"D\" & #1 . #2 & #3 . #4 & #1 > #3";  
+    public void testNoSharedOperand () throws JsonProcessingException,
+            IOException {
+        query = "cat=\"A\" & cat=\"B\" & cat=\"C\" & cat=\"D\" & #1 . #2 & #3 . #4 & #1 > #3";
         // the resulting query should be equivalent to PQ+:  focus(2:dominates(focus(1:{1:<A>}<B>),{2:<C>}))<D> 
         qs.setQuery(query, "annis");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:group",         res.at("/query/@type").asText());
-        assertEquals("operation:sequence",  res.at("/query/operation").asText());
-        assertEquals("koral:reference",     res.at("/query/operands/0/@type").asText());
-        assertEquals("operation:focus",     res.at("/query/operands/0/operation").asText());
-        assertEquals("koral:group",         res.at("/query/operands/0/operands/0/@type").asText());
-        assertEquals("operation:relation",  res.at("/query/operands/0/operands/0/operation").asText());
-        assertEquals("koral:reference",     res.at("/query/operands/0/operands/0/operands/0/@type").asText());
-        assertEquals("operation:focus",     res.at("/query/operands/0/operands/0/operands/0/operation").asText());
-        assertEquals("koral:group",         res.at("/query/operands/0/operands/0/operands/0/operands/0/@type").asText());
-        assertEquals("operation:sequence",  res.at("/query/operands/0/operands/0/operands/0/operands/0/operation").asText());
-        assertEquals("operation:class",     res.at("/query/operands/0/operands/0/operands/0/operands/0/operands/0/operation").asText());
-        assertEquals("A",                   res.at("/query/operands/0/operands/0/operands/0/operands/0/operands/0/operands/0/key").asText());
-        assertEquals("B",                   res.at("/query/operands/0/operands/0/operands/0/operands/0/operands/1/key").asText());
-        assertEquals("C",                   res.at("/query/operands/0/operands/0/operands/1/operands/0/key").asText());
-        assertEquals("D",                   res.at("/query/operands/1/key").asText());
+        assertEquals("koral:group", res.at("/query/@type").asText());
+        assertEquals("operation:sequence", res.at("/query/operation").asText());
+        assertEquals("koral:reference", res.at("/query/operands/0/@type")
+                .asText());
+        assertEquals("operation:focus", res.at("/query/operands/0/operation")
+                .asText());
+        assertEquals("koral:group", res
+                .at("/query/operands/0/operands/0/@type").asText());
+        assertEquals("operation:relation",
+                res.at("/query/operands/0/operands/0/operation").asText());
+        assertEquals("koral:reference",
+                res.at("/query/operands/0/operands/0/operands/0/@type")
+                        .asText());
+        assertEquals("operation:focus",
+                res.at("/query/operands/0/operands/0/operands/0/operation")
+                        .asText());
+        assertEquals(
+                "koral:group",
+                res.at("/query/operands/0/operands/0/operands/0/operands/0/@type")
+                        .asText());
+        assertEquals(
+                "operation:sequence",
+                res.at("/query/operands/0/operands/0/operands/0/operands/0/operation")
+                        .asText());
+        assertEquals(
+                "operation:class",
+                res.at("/query/operands/0/operands/0/operands/0/operands/0/operands/0/operation")
+                        .asText());
+        assertEquals(
+                "A",
+                res.at("/query/operands/0/operands/0/operands/0/operands/0/operands/0/operands/0/key")
+                        .asText());
+        assertEquals(
+                "B",
+                res.at("/query/operands/0/operands/0/operands/0/operands/0/operands/1/key")
+                        .asText());
+        assertEquals(
+                "C",
+                res.at("/query/operands/0/operands/0/operands/1/operands/0/key")
+                        .asText());
+        assertEquals("D", res.at("/query/operands/1/key").asText());
 
-        query = "cat=\"A\" & cat=\"B\" & cat=\"C\" & cat=\"D\" & cat=\"E\" & cat=\"F\" & #1 . #2 & #3 . #4 & #5 . #6 & #1 > #3 & #3 > #5";  
+        query = "cat=\"A\" & cat=\"B\" & cat=\"C\" & cat=\"D\" & cat=\"E\" & cat=\"F\" & #1 . #2 & #3 . #4 & #5 . #6 & #1 > #3 & #3 > #5";
         // the resulting query should be equivalent to PQ+:   focus(3:dominates(focus(2:dominates(focus(1:{1:<A>}<B>),{2:<C>}))<D>,{3:<E>}))<F> 
         qs.setQuery(query, "annis");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:group",         res.at("/query/@type").asText());
-        assertEquals("operation:sequence",  res.at("/query/operation").asText());
-        assertEquals("koral:reference",     res.at("/query/operands/0/@type").asText());
-        assertEquals("operation:focus",     res.at("/query/operands/0/operation").asText());
-        assertEquals("koral:group",         res.at("/query/operands/0/operands/0/@type").asText());
-        assertEquals("operation:relation",  res.at("/query/operands/0/operands/0/operation").asText());
-        assertEquals("koral:reference",     res.at("/query/operands/0/operands/0/operands/0/@type").asText());
-        assertEquals("operation:focus",     res.at("/query/operands/0/operands/0/operands/0/operation").asText());
-        assertEquals("koral:group",         res.at("/query/operands/0/operands/0/operands/0/operands/0/@type").asText());
-        assertEquals("operation:sequence",  res.at("/query/operands/0/operands/0/operands/0/operands/0/operation").asText());
-        assertEquals("operation:class",     res.at("/query/operands/0/operands/0/operands/0/operands/0/operands/0/operands/0/operands/0/operands/0/operands/0/operation").asText());
-        assertEquals("A",                   res.at("/query/operands/0/operands/0/operands/0/operands/0/operands/0/operands/0/operands/0/operands/0/operands/0/operands/0/key").asText());
-        assertEquals("B",                   res.at("/query/operands/0/operands/0/operands/0/operands/0/operands/0/operands/0/operands/0/operands/0/operands/1/key").asText());
-        assertEquals("C",                   res.at("/query/operands/0/operands/0/operands/0/operands/0/operands/0/operands/0/operands/1/operands/0/key").asText());
-        assertEquals("D",                   res.at("/query/operands/0/operands/0/operands/0/operands/0/operands/1/key").asText());
-        assertEquals("E",                   res.at("/query/operands/0/operands/0/operands/1/operands/0/key").asText());
-        assertEquals("F",                   res.at("/query/operands/1/key").asText());
+        assertEquals("koral:group", res.at("/query/@type").asText());
+        assertEquals("operation:sequence", res.at("/query/operation").asText());
+        assertEquals("koral:reference", res.at("/query/operands/0/@type")
+                .asText());
+        assertEquals("operation:focus", res.at("/query/operands/0/operation")
+                .asText());
+        assertEquals("koral:group", res
+                .at("/query/operands/0/operands/0/@type").asText());
+        assertEquals("operation:relation",
+                res.at("/query/operands/0/operands/0/operation").asText());
+        assertEquals("koral:reference",
+                res.at("/query/operands/0/operands/0/operands/0/@type")
+                        .asText());
+        assertEquals("operation:focus",
+                res.at("/query/operands/0/operands/0/operands/0/operation")
+                        .asText());
+        assertEquals(
+                "koral:group",
+                res.at("/query/operands/0/operands/0/operands/0/operands/0/@type")
+                        .asText());
+        assertEquals(
+                "operation:sequence",
+                res.at("/query/operands/0/operands/0/operands/0/operands/0/operation")
+                        .asText());
+        assertEquals(
+                "operation:class",
+                res.at("/query/operands/0/operands/0/operands/0/operands/0/operands/0/operands/0/operands/0/operands/0/operands/0/operation")
+                        .asText());
+        assertEquals(
+                "A",
+                res.at("/query/operands/0/operands/0/operands/0/operands/0/operands/0/operands/0/operands/0/operands/0/operands/0/operands/0/key")
+                        .asText());
+        assertEquals(
+                "B",
+                res.at("/query/operands/0/operands/0/operands/0/operands/0/operands/0/operands/0/operands/0/operands/0/operands/1/key")
+                        .asText());
+        assertEquals(
+                "C",
+                res.at("/query/operands/0/operands/0/operands/0/operands/0/operands/0/operands/0/operands/1/operands/0/key")
+                        .asText());
+        assertEquals(
+                "D",
+                res.at("/query/operands/0/operands/0/operands/0/operands/0/operands/1/key")
+                        .asText());
+        assertEquals(
+                "E",
+                res.at("/query/operands/0/operands/0/operands/1/operands/0/key")
+                        .asText());
+        assertEquals("F", res.at("/query/operands/1/key").asText());
 
-        query = "cat=\"A\" & cat=\"B\" & cat=\"C\" & cat=\"D\" & #1 . #2 & #3 . #4";  
+        query = "cat=\"A\" & cat=\"B\" & cat=\"C\" & cat=\"D\" & #1 . #2 & #3 . #4";
         // the resulting query should be equivalent to PQ+:  focus(2:dominates(focus(1:{1:<A>}<B>),{2:<C>}))<D> 
         qs.setQuery(query, "annis");
         res = mapper.readTree(qs.toJSON());
-        assertEquals(true,         res.at("/query/@type").isMissingNode());
-        assertEquals(StatusCodes.UNBOUND_ANNIS_RELATION,   res.at("/errors/0/0").asInt());
+        assertEquals(true, res.at("/query/@type").isMissingNode());
+        assertEquals(StatusCodes.UNBOUND_ANNIS_RELATION, res.at("/errors/0/0")
+                .asInt());
     }
 
+
     @Test
-    public void testMultipleMixedOperators() throws Exception {
+    public void testMultipleMixedOperators () throws Exception {
         query = "tok=\"Sonne\" & tok=\"Mond\" & tok=\"Sterne\" & #1 > #2 .1,4 #3";
         qs.setQuery(query, "annis");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:group",         res.at("/query/@type").asText());
-        assertEquals("operation:sequence",  res.at("/query/operation").asText());
-        assertEquals("koral:reference",     res.at("/query/operands/0/@type").asText());
-        assertEquals("operation:focus",     res.at("/query/operands/0/operation").asText());
-        assertEquals(129,                   res.at("/query/operands/0/classRef/0").asInt());
-        assertEquals("koral:group",         res.at("/query/operands/0/operands/0/@type").asText());
-        assertEquals("operation:relation",  res.at("/query/operands/0/operands/0/operation").asText());
-        assertEquals("koral:token",         res.at("/query/operands/0/operands/0/operands/0/@type").asText());
-        assertEquals("Sonne",               res.at("/query/operands/0/operands/0/operands/0/wrap/key").asText());
-        assertEquals("koral:group",         res.at("/query/operands/0/operands/0/operands/1/@type").asText());
-        assertEquals("operation:class",     res.at("/query/operands/0/operands/0/operands/1/operation").asText());
-        assertEquals(129,                   res.at("/query/operands/0/operands/0/operands/1/classOut").asInt());
-        assertEquals("Mond",                res.at("/query/operands/0/operands/0/operands/1/operands/0/wrap/key").asText());
-        assertEquals("Sterne",              res.at("/query/operands/1/wrap/key").asText());
-        assertEquals("w",                   res.at("/query/distances/0/key").asText());
-        assertEquals(0,                     res.at("/query/distances/0/boundary/min").asInt());
-        assertEquals(3,                     res.at("/query/distances/0/boundary/max").asInt());
+        assertEquals("koral:group", res.at("/query/@type").asText());
+        assertEquals("operation:sequence", res.at("/query/operation").asText());
+        assertEquals("koral:reference", res.at("/query/operands/0/@type")
+                .asText());
+        assertEquals("operation:focus", res.at("/query/operands/0/operation")
+                .asText());
+        assertEquals(129, res.at("/query/operands/0/classRef/0").asInt());
+        assertEquals("koral:group", res
+                .at("/query/operands/0/operands/0/@type").asText());
+        assertEquals("operation:relation",
+                res.at("/query/operands/0/operands/0/operation").asText());
+        assertEquals("koral:token",
+                res.at("/query/operands/0/operands/0/operands/0/@type")
+                        .asText());
+        assertEquals("Sonne",
+                res.at("/query/operands/0/operands/0/operands/0/wrap/key")
+                        .asText());
+        assertEquals("koral:group",
+                res.at("/query/operands/0/operands/0/operands/1/@type")
+                        .asText());
+        assertEquals("operation:class",
+                res.at("/query/operands/0/operands/0/operands/1/operation")
+                        .asText());
+        assertEquals(129,
+                res.at("/query/operands/0/operands/0/operands/1/classOut")
+                        .asInt());
+        assertEquals(
+                "Mond",
+                res.at("/query/operands/0/operands/0/operands/1/operands/0/wrap/key")
+                        .asText());
+        assertEquals("Sterne", res.at("/query/operands/1/wrap/key").asText());
+        assertEquals("w", res.at("/query/distances/0/key").asText());
+        assertEquals(0, res.at("/query/distances/0/boundary/min").asInt());
+        assertEquals(3, res.at("/query/distances/0/boundary/max").asInt());
 
         query = "tok=\"Sonne\" & tok=\"Mond\" & #1 > #2 .1,4  tok=\"Sterne\"";
         qs.setQuery(query, "annis");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:group",         res.at("/query/@type").asText());
-        assertEquals("operation:sequence",  res.at("/query/operation").asText());
-        assertEquals("koral:reference",     res.at("/query/operands/0/@type").asText());
-        assertEquals("operation:focus",     res.at("/query/operands/0/operation").asText());
-        assertEquals(129,                   res.at("/query/operands/0/classRef/0").asInt());
-        assertEquals("koral:group",         res.at("/query/operands/0/operands/0/@type").asText());
-        assertEquals("operation:relation",  res.at("/query/operands/0/operands/0/operation").asText());
-        assertEquals("koral:token",         res.at("/query/operands/0/operands/0/operands/0/@type").asText());
-        assertEquals("Sonne",               res.at("/query/operands/0/operands/0/operands/0/wrap/key").asText());
-        assertEquals("koral:group",         res.at("/query/operands/0/operands/0/operands/1/@type").asText());
-        assertEquals("operation:class",     res.at("/query/operands/0/operands/0/operands/1/operation").asText());
-        assertEquals(129,                   res.at("/query/operands/0/operands/0/operands/1/classOut").asInt());
-        assertEquals("Mond",                res.at("/query/operands/0/operands/0/operands/1/operands/0/wrap/key").asText());
-        assertEquals("Sterne",              res.at("/query/operands/1/wrap/key").asText());
-        assertEquals("w",                   res.at("/query/distances/0/key").asText());
-        assertEquals(0,                     res.at("/query/distances/0/boundary/min").asInt());
-        assertEquals(3,                     res.at("/query/distances/0/boundary/max").asInt());
+        assertEquals("koral:group", res.at("/query/@type").asText());
+        assertEquals("operation:sequence", res.at("/query/operation").asText());
+        assertEquals("koral:reference", res.at("/query/operands/0/@type")
+                .asText());
+        assertEquals("operation:focus", res.at("/query/operands/0/operation")
+                .asText());
+        assertEquals(129, res.at("/query/operands/0/classRef/0").asInt());
+        assertEquals("koral:group", res
+                .at("/query/operands/0/operands/0/@type").asText());
+        assertEquals("operation:relation",
+                res.at("/query/operands/0/operands/0/operation").asText());
+        assertEquals("koral:token",
+                res.at("/query/operands/0/operands/0/operands/0/@type")
+                        .asText());
+        assertEquals("Sonne",
+                res.at("/query/operands/0/operands/0/operands/0/wrap/key")
+                        .asText());
+        assertEquals("koral:group",
+                res.at("/query/operands/0/operands/0/operands/1/@type")
+                        .asText());
+        assertEquals("operation:class",
+                res.at("/query/operands/0/operands/0/operands/1/operation")
+                        .asText());
+        assertEquals(129,
+                res.at("/query/operands/0/operands/0/operands/1/classOut")
+                        .asInt());
+        assertEquals(
+                "Mond",
+                res.at("/query/operands/0/operands/0/operands/1/operands/0/wrap/key")
+                        .asText());
+        assertEquals("Sterne", res.at("/query/operands/1/wrap/key").asText());
+        assertEquals("w", res.at("/query/distances/0/key").asText());
+        assertEquals(0, res.at("/query/distances/0/boundary/min").asInt());
+        assertEquals(3, res.at("/query/distances/0/boundary/max").asInt());
 
         query = "cat=\"NP\" & cat=\"VP\" & cat=\"PP\" & #1 $ #2 > #3";
         qs.setQuery(query, "annis");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:group",         res.at("/query/@type").asText());
-        assertEquals("operation:relation",  res.at("/query/operation").asText());
-        assertEquals("koral:reference",     res.at("/query/operands/0/@type").asText());
-        assertEquals("operation:focus",     res.at("/query/operands/0/operation").asText());
-        assertEquals(130,                   res.at("/query/operands/0/classRef/0").asInt());
-        assertEquals("koral:group",         res.at("/query/operands/0/operands/0/@type").asText());
-        assertEquals("operation:relation",  res.at("/query/operands/0/operands/0/operation").asText());
-        assertEquals("koral:reference",     res.at("/query/operands/0/operands/0/operands/0/@type").asText());
-        assertEquals("operation:focus",     res.at("/query/operands/0/operands/0/operands/0/operation").asText());
-        assertEquals(129,                   res.at("/query/operands/0/operands/0/operands/0/classRef/0").asInt());
-        assertEquals("koral:group",         res.at("/query/operands/0/operands/0/operands/0/operands/0/@type").asText());
-        assertEquals("operation:relation",  res.at("/query/operands/0/operands/0/operands/0/operands/0/operation").asText());
-        assertEquals("operation:class",     res.at("/query/operands/0/operands/0/operands/0/operands/0/operands/0/operation").asText());
-        assertEquals(129,                   res.at("/query/operands/0/operands/0/operands/0/operands/0/operands/0/classOut").asInt());
-        assertEquals("koral:span",          res.at("/query/operands/0/operands/0/operands/0/operands/0/operands/0/operands/0/@type").asText());
-        assertEquals("NP",                  res.at("/query/operands/0/operands/0/operands/0/operands/0/operands/1/key").asText());
-        assertEquals("koral:group",         res.at("/query/operands/0/operands/0/operands/1/@type").asText());
-        assertEquals("operation:class",     res.at("/query/operands/0/operands/0/operands/1/operation").asText());
-        assertEquals(130,                   res.at("/query/operands/0/operands/0/operands/1/classOut").asInt());
-        assertEquals("VP",                  res.at("/query/operands/0/operands/0/operands/1/operands/0/key").asText());
-        assertEquals("PP",                  res.at("/query/operands/1/key").asText());
+        assertEquals("koral:group", res.at("/query/@type").asText());
+        assertEquals("operation:relation", res.at("/query/operation").asText());
+        assertEquals("koral:reference", res.at("/query/operands/0/@type")
+                .asText());
+        assertEquals("operation:focus", res.at("/query/operands/0/operation")
+                .asText());
+        assertEquals(130, res.at("/query/operands/0/classRef/0").asInt());
+        assertEquals("koral:group", res
+                .at("/query/operands/0/operands/0/@type").asText());
+        assertEquals("operation:relation",
+                res.at("/query/operands/0/operands/0/operation").asText());
+        assertEquals("koral:reference",
+                res.at("/query/operands/0/operands/0/operands/0/@type")
+                        .asText());
+        assertEquals("operation:focus",
+                res.at("/query/operands/0/operands/0/operands/0/operation")
+                        .asText());
+        assertEquals(129,
+                res.at("/query/operands/0/operands/0/operands/0/classRef/0")
+                        .asInt());
+        assertEquals(
+                "koral:group",
+                res.at("/query/operands/0/operands/0/operands/0/operands/0/@type")
+                        .asText());
+        assertEquals(
+                "operation:relation",
+                res.at("/query/operands/0/operands/0/operands/0/operands/0/operation")
+                        .asText());
+        assertEquals(
+                "operation:class",
+                res.at("/query/operands/0/operands/0/operands/0/operands/0/operands/0/operation")
+                        .asText());
+        assertEquals(
+                129,
+                res.at("/query/operands/0/operands/0/operands/0/operands/0/operands/0/classOut")
+                        .asInt());
+        assertEquals(
+                "koral:span",
+                res.at("/query/operands/0/operands/0/operands/0/operands/0/operands/0/operands/0/@type")
+                        .asText());
+        assertEquals(
+                "NP",
+                res.at("/query/operands/0/operands/0/operands/0/operands/0/operands/1/key")
+                        .asText());
+        assertEquals("koral:group",
+                res.at("/query/operands/0/operands/0/operands/1/@type")
+                        .asText());
+        assertEquals("operation:class",
+                res.at("/query/operands/0/operands/0/operands/1/operation")
+                        .asText());
+        assertEquals(130,
+                res.at("/query/operands/0/operands/0/operands/1/classOut")
+                        .asInt());
+        assertEquals(
+                "VP",
+                res.at("/query/operands/0/operands/0/operands/1/operands/0/key")
+                        .asText());
+        assertEquals("PP", res.at("/query/operands/1/key").asText());
 
     }
+
+
     @Test
-    public void testMultipleOperatorsWithSameOperands() throws Exception {
+    public void testMultipleOperatorsWithSameOperands () throws Exception {
         query = "cat=\"NP\" > cat=\"VP\" & #1 _l_ #2";
         qs.setQuery(query, "annis");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:group",         res.at("/query/@type").asText());
-        assertEquals("operation:position",  res.at("/query/operation").asText());
-        assertEquals("frames:startsWith",   res.at("/query/frames/0").asText());
-        assertEquals("koral:reference",     res.at("/query/operands/0/@type").asText());
-        assertEquals("operation:focus",     res.at("/query/operands/0/operation").asText());
-        assertEquals(129,                   res.at("/query/operands/0/classRef/0").asInt());
-        assertEquals("koral:group",         res.at("/query/operands/0/operands/0/@type").asText());
-        assertEquals("operation:relation",  res.at("/query/operands/0/operands/0/operation").asText());
-        assertEquals("operation:class",     res.at("/query/operands/0/operands/0/operands/0/operation").asText());
-        assertEquals(129,                   res.at("/query/operands/0/operands/0/operands/0/classOut").asInt());
-        assertEquals("koral:span",          res.at("/query/operands/0/operands/0/operands/0/operands/0/@type").asText());
-        assertEquals("NP",                  res.at("/query/operands/0/operands/0/operands/0/operands/0/key").asText());
-        assertEquals("operation:class",     res.at("/query/operands/0/operands/0/operands/1/operation").asText());
-        assertEquals(130,                   res.at("/query/operands/0/operands/0/operands/1/classOut").asInt());
-        assertEquals("VP",                  res.at("/query/operands/0/operands/0/operands/1/operands/0/key").asText());
-        assertEquals("koral:reference",     res.at("/query/operands/1/@type").asText());
-        assertEquals("operation:focus",     res.at("/query/operands/1/operation").asText());
-        assertEquals(130,                   res.at("/query/operands/1/classRef/0").asInt());
+        assertEquals("koral:group", res.at("/query/@type").asText());
+        assertEquals("operation:position", res.at("/query/operation").asText());
+        assertEquals("frames:startsWith", res.at("/query/frames/0").asText());
+        assertEquals("koral:reference", res.at("/query/operands/0/@type")
+                .asText());
+        assertEquals("operation:focus", res.at("/query/operands/0/operation")
+                .asText());
+        assertEquals(129, res.at("/query/operands/0/classRef/0").asInt());
+        assertEquals("koral:group", res
+                .at("/query/operands/0/operands/0/@type").asText());
+        assertEquals("operation:relation",
+                res.at("/query/operands/0/operands/0/operation").asText());
+        assertEquals("operation:class",
+                res.at("/query/operands/0/operands/0/operands/0/operation")
+                        .asText());
+        assertEquals(129,
+                res.at("/query/operands/0/operands/0/operands/0/classOut")
+                        .asInt());
+        assertEquals(
+                "koral:span",
+                res.at("/query/operands/0/operands/0/operands/0/operands/0/@type")
+                        .asText());
+        assertEquals(
+                "NP",
+                res.at("/query/operands/0/operands/0/operands/0/operands/0/key")
+                        .asText());
+        assertEquals("operation:class",
+                res.at("/query/operands/0/operands/0/operands/1/operation")
+                        .asText());
+        assertEquals(130,
+                res.at("/query/operands/0/operands/0/operands/1/classOut")
+                        .asInt());
+        assertEquals(
+                "VP",
+                res.at("/query/operands/0/operands/0/operands/1/operands/0/key")
+                        .asText());
+        assertEquals("koral:reference", res.at("/query/operands/1/@type")
+                .asText());
+        assertEquals("operation:focus", res.at("/query/operands/1/operation")
+                .asText());
+        assertEquals(130, res.at("/query/operands/1/classRef/0").asInt());
 
     }
+
+
     @Test
-    public void testPositions() throws Exception {
+    public void testPositions () throws Exception {
         query = "node & node & #1 _=_ #2";
         qs.setQuery(query, "annis");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:group",         res.at("/query/@type").asText());
-        assertEquals("operation:position",  res.at("/query/operation").asText());
-        assertEquals("frames:matches",      res.at("/query/frames/0").asText());
-        assertEquals("koral:span",          res.at("/query/operands/0/@type").asText());
-        assertEquals("koral:span",          res.at("/query/operands/1/@type").asText());
+        assertEquals("koral:group", res.at("/query/@type").asText());
+        assertEquals("operation:position", res.at("/query/operation").asText());
+        assertEquals("frames:matches", res.at("/query/frames/0").asText());
+        assertEquals("koral:span", res.at("/query/operands/0/@type").asText());
+        assertEquals("koral:span", res.at("/query/operands/1/@type").asText());
 
         query = "node & node & #1 _i_ #2";
         qs.setQuery(query, "annis");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("frames:isAround",     res.at("/query/frames/0").asText());
-        assertEquals("koral:span",          res.at("/query/operands/0/@type").asText());
-        assertEquals("koral:span",          res.at("/query/operands/1/@type").asText());
+        assertEquals("frames:isAround", res.at("/query/frames/0").asText());
+        assertEquals("koral:span", res.at("/query/operands/0/@type").asText());
+        assertEquals("koral:span", res.at("/query/operands/1/@type").asText());
 
         query = "node & node & #1 _l_ #2";
         qs.setQuery(query, "annis");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("frames:startsWith",   res.at("/query/frames/0").asText());
-        assertEquals("frames:matches",      res.at("/query/frames/1").asText());
-        assertEquals("koral:span",          res.at("/query/operands/0/@type").asText());
-        assertEquals("koral:span",          res.at("/query/operands/1/@type").asText());
+        assertEquals("frames:startsWith", res.at("/query/frames/0").asText());
+        assertEquals("frames:matches", res.at("/query/frames/1").asText());
+        assertEquals("koral:span", res.at("/query/operands/0/@type").asText());
+        assertEquals("koral:span", res.at("/query/operands/1/@type").asText());
 
         query = "node & node & #1 _r_ #2";
         qs.setQuery(query, "annis");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("frames:endsWith",     res.at("/query/frames/0").asText());
-        assertEquals("frames:matches",      res.at("/query/frames/1").asText());
-        assertEquals("koral:span",          res.at("/query/operands/0/@type").asText());
-        assertEquals("koral:span",          res.at("/query/operands/1/@type").asText());
+        assertEquals("frames:endsWith", res.at("/query/frames/0").asText());
+        assertEquals("frames:matches", res.at("/query/frames/1").asText());
+        assertEquals("koral:span", res.at("/query/operands/0/@type").asText());
+        assertEquals("koral:span", res.at("/query/operands/1/@type").asText());
 
         query = "node & \"Mann\" & #1 _r_ #2";
         qs.setQuery(query, "annis");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("frames:endsWith",     res.at("/query/frames/0").asText());
-        assertEquals("koral:span",          res.at("/query/operands/0/@type").asText());
-        assertEquals("koral:token",         res.at("/query/operands/1/@type").asText());
-        assertEquals("Mann",                res.at("/query/operands/1/wrap/key").asText());
+        assertEquals("frames:endsWith", res.at("/query/frames/0").asText());
+        assertEquals("koral:span", res.at("/query/operands/0/@type").asText());
+        assertEquals("koral:token", res.at("/query/operands/1/@type").asText());
+        assertEquals("Mann", res.at("/query/operands/1/wrap/key").asText());
 
         query = "node & \"Mann\" & #2 _r_ #1";
         qs.setQuery(query, "annis");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("frames:endsWith",     res.at("/query/frames/0").asText());
-        assertEquals("koral:span",          res.at("/query/operands/1/@type").asText());
-        assertEquals("koral:token",         res.at("/query/operands/0/@type").asText());
-        assertEquals("Mann",                res.at("/query/operands/0/wrap/key").asText());
+        assertEquals("frames:endsWith", res.at("/query/frames/0").asText());
+        assertEquals("koral:span", res.at("/query/operands/1/@type").asText());
+        assertEquals("koral:token", res.at("/query/operands/0/@type").asText());
+        assertEquals("Mann", res.at("/query/operands/0/wrap/key").asText());
 
         query = "node & cat=\"VP\" & cat=\"NP\" & #1 _r_ #2 & #2 _l_ #3";
         qs.setQuery(query, "annis");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("frames:startsWith",   res.at("/query/frames/0").asText());
-        assertEquals("operation:focus",     res.at("/query/operands/0/operation").asText());
-        assertEquals(129,                   res.at("/query/operands/0/classRef/0").asInt());
-        assertEquals("frames:endsWith",     res.at("/query/operands/0/operands/0/frames/0").asText());
-        assertEquals("koral:span",          res.at("/query/operands/0/operands/0/operands/0/@type").asText());
-        assertEquals("koral:group",         res.at("/query/operands/0/operands/0/operands/1/@type").asText());
-        assertEquals("operation:class",     res.at("/query/operands/0/operands/0/operands/1/operation").asText());
-        assertEquals(129,                   res.at("/query/operands/0/operands/0/operands/1/classOut").asInt());
-        assertEquals("VP",                  res.at("/query/operands/0/operands/0/operands/1/operands/0/key").asText());
-        assertEquals("NP",                  res.at("/query/operands/1/key").asText());
+        assertEquals("frames:startsWith", res.at("/query/frames/0").asText());
+        assertEquals("operation:focus", res.at("/query/operands/0/operation")
+                .asText());
+        assertEquals(129, res.at("/query/operands/0/classRef/0").asInt());
+        assertEquals("frames:endsWith",
+                res.at("/query/operands/0/operands/0/frames/0").asText());
+        assertEquals("koral:span",
+                res.at("/query/operands/0/operands/0/operands/0/@type")
+                        .asText());
+        assertEquals("koral:group",
+                res.at("/query/operands/0/operands/0/operands/1/@type")
+                        .asText());
+        assertEquals("operation:class",
+                res.at("/query/operands/0/operands/0/operands/1/operation")
+                        .asText());
+        assertEquals(129,
+                res.at("/query/operands/0/operands/0/operands/1/classOut")
+                        .asInt());
+        assertEquals(
+                "VP",
+                res.at("/query/operands/0/operands/0/operands/1/operands/0/key")
+                        .asText());
+        assertEquals("NP", res.at("/query/operands/1/key").asText());
 
         query = "node & \"Mann\" & #2 _o_ #1";
         qs.setQuery(query, "annis");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("frames:overlapsLeft",     res.at("/query/frames/0").asText());
-        assertEquals("frames:overlapsRight",    res.at("/query/frames/1").asText());
-        assertEquals("koral:span",              res.at("/query/operands/1/@type").asText());
-        assertEquals("koral:token",             res.at("/query/operands/0/@type").asText());
-        assertEquals("Mann",                    res.at("/query/operands/0/wrap/key").asText());
+        assertEquals("frames:overlapsLeft", res.at("/query/frames/0").asText());
+        assertEquals("frames:overlapsRight", res.at("/query/frames/1").asText());
+        assertEquals("koral:span", res.at("/query/operands/1/@type").asText());
+        assertEquals("koral:token", res.at("/query/operands/0/@type").asText());
+        assertEquals("Mann", res.at("/query/operands/0/wrap/key").asText());
 
         query = "node & \"Mann\" & #2 _ol_ #1";
         qs.setQuery(query, "annis");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("frames:overlapsLeft",     res.at("/query/frames/0").asText());
-        assertEquals("koral:span",              res.at("/query/operands/1/@type").asText());
-        assertEquals("koral:token",             res.at("/query/operands/0/@type").asText());
-        assertEquals("Mann",                    res.at("/query/operands/0/wrap/key").asText());
+        assertEquals("frames:overlapsLeft", res.at("/query/frames/0").asText());
+        assertEquals("koral:span", res.at("/query/operands/1/@type").asText());
+        assertEquals("koral:token", res.at("/query/operands/0/@type").asText());
+        assertEquals("Mann", res.at("/query/operands/0/wrap/key").asText());
 
         query = "node & \"Mann\" & #2 _or_ #1";
         qs.setQuery(query, "annis");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("frames:overlapsRight",    res.at("/query/frames/0").asText());
-        assertEquals("koral:span",              res.at("/query/operands/1/@type").asText());
-        assertEquals("koral:token",             res.at("/query/operands/0/@type").asText());
-        assertEquals("Mann",                    res.at("/query/operands/0/wrap/key").asText());
+        assertEquals("frames:overlapsRight", res.at("/query/frames/0").asText());
+        assertEquals("koral:span", res.at("/query/operands/1/@type").asText());
+        assertEquals("koral:token", res.at("/query/operands/0/@type").asText());
+        assertEquals("Mann", res.at("/query/operands/0/wrap/key").asText());
     }
 
-    @Test
-    public void testMultiplePredications() throws Exception {
-        // a noun before a verb before a preposition
-        query = "pos=\"N\" & pos=\"V\" & pos=\"P\" & #1 . #2 & #2 . #3"; 
-        qs.setQuery(query, "annis");
-        res = mapper.readTree(qs.toJSON());
-        assertEquals("operation:sequence",  res.at("/query/operation").asText());
-        assertEquals("operation:focus",     res.at("/query/operands/0/operation").asText());
-        assertEquals(129,                   res.at("/query/operands/0/classRef/0").asInt());
-        assertEquals("operation:sequence",  res.at("/query/operands/0/operands/0/operation").asText());
-        assertEquals("koral:token",         res.at("/query/operands/0/operands/0/operands/0/@type").asText());
-        assertEquals("p",                   res.at("/query/operands/0/operands/0/operands/0/wrap/layer").asText());
-        assertEquals("N",                   res.at("/query/operands/0/operands/0/operands/0/wrap/key").asText());
-        assertEquals("koral:group",         res.at("/query/operands/0/operands/0/operands/1/@type").asText());
-        assertEquals("operation:class",     res.at("/query/operands/0/operands/0/operands/1/operation").asText());
-        assertEquals(129,                   res.at("/query/operands/0/operands/0/operands/1/classOut").asInt());
-        assertEquals("V",                   res.at("/query/operands/0/operands/0/operands/1/operands/0/wrap/key").asText());
-        assertEquals("P",                   res.at("/query/operands/1/wrap/key").asText());
 
-        query = "pos=\"N\" & pos=\"V\" & #1 . #2 & #2 . pos=\"P\""; 
+    @Test
+    public void testMultiplePredications () throws Exception {
+        // a noun before a verb before a preposition
+        query = "pos=\"N\" & pos=\"V\" & pos=\"P\" & #1 . #2 & #2 . #3";
         qs.setQuery(query, "annis");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("operation:sequence",  res.at("/query/operation").asText());
-        assertEquals("operation:focus",     res.at("/query/operands/0/operation").asText());
-        assertEquals(129,                     res.at("/query/operands/0/classRef/0").asInt());
-        assertEquals("operation:sequence",  res.at("/query/operands/0/operands/0/operation").asText());
-        assertEquals("koral:token",         res.at("/query/operands/0/operands/0/operands/0/@type").asText());
-        assertEquals("p",                   res.at("/query/operands/0/operands/0/operands/0/wrap/layer").asText());
-        assertEquals("N",                   res.at("/query/operands/0/operands/0/operands/0/wrap/key").asText());
-        assertEquals("koral:group",         res.at("/query/operands/0/operands/0/operands/1/@type").asText());
-        assertEquals("operation:class",     res.at("/query/operands/0/operands/0/operands/1/operation").asText());
-        assertEquals(129,                     res.at("/query/operands/0/operands/0/operands/1/classOut").asInt());
-        assertEquals("V",                   res.at("/query/operands/0/operands/0/operands/1/operands/0/wrap/key").asText());
-        assertEquals("P",                   res.at("/query/operands/1/wrap/key").asText());
+        assertEquals("operation:sequence", res.at("/query/operation").asText());
+        assertEquals("operation:focus", res.at("/query/operands/0/operation")
+                .asText());
+        assertEquals(129, res.at("/query/operands/0/classRef/0").asInt());
+        assertEquals("operation:sequence",
+                res.at("/query/operands/0/operands/0/operation").asText());
+        assertEquals("koral:token",
+                res.at("/query/operands/0/operands/0/operands/0/@type")
+                        .asText());
+        assertEquals("p",
+                res.at("/query/operands/0/operands/0/operands/0/wrap/layer")
+                        .asText());
+        assertEquals("N",
+                res.at("/query/operands/0/operands/0/operands/0/wrap/key")
+                        .asText());
+        assertEquals("koral:group",
+                res.at("/query/operands/0/operands/0/operands/1/@type")
+                        .asText());
+        assertEquals("operation:class",
+                res.at("/query/operands/0/operands/0/operands/1/operation")
+                        .asText());
+        assertEquals(129,
+                res.at("/query/operands/0/operands/0/operands/1/classOut")
+                        .asInt());
+        assertEquals(
+                "V",
+                res.at("/query/operands/0/operands/0/operands/1/operands/0/wrap/key")
+                        .asText());
+        assertEquals("P", res.at("/query/operands/1/wrap/key").asText());
+
+        query = "pos=\"N\" & pos=\"V\" & #1 . #2 & #2 . pos=\"P\"";
+        qs.setQuery(query, "annis");
+        res = mapper.readTree(qs.toJSON());
+        assertEquals("operation:sequence", res.at("/query/operation").asText());
+        assertEquals("operation:focus", res.at("/query/operands/0/operation")
+                .asText());
+        assertEquals(129, res.at("/query/operands/0/classRef/0").asInt());
+        assertEquals("operation:sequence",
+                res.at("/query/operands/0/operands/0/operation").asText());
+        assertEquals("koral:token",
+                res.at("/query/operands/0/operands/0/operands/0/@type")
+                        .asText());
+        assertEquals("p",
+                res.at("/query/operands/0/operands/0/operands/0/wrap/layer")
+                        .asText());
+        assertEquals("N",
+                res.at("/query/operands/0/operands/0/operands/0/wrap/key")
+                        .asText());
+        assertEquals("koral:group",
+                res.at("/query/operands/0/operands/0/operands/1/@type")
+                        .asText());
+        assertEquals("operation:class",
+                res.at("/query/operands/0/operands/0/operands/1/operation")
+                        .asText());
+        assertEquals(129,
+                res.at("/query/operands/0/operands/0/operands/1/classOut")
+                        .asInt());
+        assertEquals(
+                "V",
+                res.at("/query/operands/0/operands/0/operands/1/operands/0/wrap/key")
+                        .asText());
+        assertEquals("P", res.at("/query/operands/1/wrap/key").asText());
 
         query = "pos=\"N\" & pos=\"V\" & pos=\"P\" & #1 > #2 & #1 > #3";
         qs.setQuery(query, "annis");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("operation:relation",  res.at("/query/operation").asText());
-        assertEquals("operation:focus",     res.at("/query/operands/0/operation").asText());
-        assertEquals(129,                     res.at("/query/operands/0/classRef/0").asInt());
-        assertEquals("operation:relation",  res.at("/query/operands/0/operands/0/operation").asText());
-        assertEquals("operation:class",     res.at("/query/operands/0/operands/0/operands/0/operation").asText());
-        assertEquals(129,                     res.at("/query/operands/0/operands/0/operands/0/classOut").asInt());
-        assertEquals("N",                   res.at("/query/operands/0/operands/0/operands/0/operands/0/wrap/key").asText());
-        assertEquals("V",                   res.at("/query/operands/0/operands/0/operands/1/wrap/key").asText());
-        assertEquals("P",                   res.at("/query/operands/1/wrap/key").asText());
+        assertEquals("operation:relation", res.at("/query/operation").asText());
+        assertEquals("operation:focus", res.at("/query/operands/0/operation")
+                .asText());
+        assertEquals(129, res.at("/query/operands/0/classRef/0").asInt());
+        assertEquals("operation:relation",
+                res.at("/query/operands/0/operands/0/operation").asText());
+        assertEquals("operation:class",
+                res.at("/query/operands/0/operands/0/operands/0/operation")
+                        .asText());
+        assertEquals(129,
+                res.at("/query/operands/0/operands/0/operands/0/classOut")
+                        .asInt());
+        assertEquals(
+                "N",
+                res.at("/query/operands/0/operands/0/operands/0/operands/0/wrap/key")
+                        .asText());
+        assertEquals("V",
+                res.at("/query/operands/0/operands/0/operands/1/wrap/key")
+                        .asText());
+        assertEquals("P", res.at("/query/operands/1/wrap/key").asText());
 
         query = "cat=\"NP\" & pos=\"V\" & pos=\"P\" & #1 > #2 & #1 > #3 & #2 . #3";
         qs.setQuery(query, "annis");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("operation:sequence",  res.at("/query/operation").asText());
-        assertEquals("operation:focus",     res.at("/query/operands/0/operation").asText());
-        assertEquals(130,                     res.at("/query/operands/0/classRef/0").asInt());
-        assertEquals("operation:relation",  res.at("/query/operands/0/operands/0/operation").asText());
-        assertEquals("operation:focus",     res.at("/query/operands/0/operands/0/operands/0/operation").asText());
-        assertEquals(129,                     res.at("/query/operands/0/operands/0/operands/0/classRef/0").asInt());
-        assertEquals("operation:relation",  res.at("/query/operands/0/operands/0/operands/0/operands/0/operation").asText());
-        assertEquals("operation:class",     res.at("/query/operands/0/operands/0/operands/0/operands/0/operands/0/operation").asText());
-        assertEquals(129,                     res.at("/query/operands/0/operands/0/operands/0/operands/0/operands/0/classOut").asInt());
-        assertEquals("NP",                  res.at("/query/operands/0/operands/0/operands/0/operands/0/operands/0/operands/0/key").asText());
-        assertEquals(130,                     res.at("/query/operands/0/operands/0/operands/0/operands/0/operands/1/classOut").asInt());
-        assertEquals("V",                   res.at("/query/operands/0/operands/0/operands/0/operands/0/operands/1/operands/0/wrap/key").asText());
-        assertEquals(131,                     res.at("/query/operands/0/operands/0/operands/1/classOut").asInt());
-        assertEquals("P",                   res.at("/query/operands/0/operands/0/operands/1/operands/0/wrap/key").asText());
-        assertEquals("operation:focus",     res.at("/query/operands/1/operation").asText());
-        assertEquals(131,                     res.at("/query/operands/1/classRef/0").asInt());
-        assertEquals(true,                  res.at("/query/operands/1/operands").isMissingNode());
+        assertEquals("operation:sequence", res.at("/query/operation").asText());
+        assertEquals("operation:focus", res.at("/query/operands/0/operation")
+                .asText());
+        assertEquals(130, res.at("/query/operands/0/classRef/0").asInt());
+        assertEquals("operation:relation",
+                res.at("/query/operands/0/operands/0/operation").asText());
+        assertEquals("operation:focus",
+                res.at("/query/operands/0/operands/0/operands/0/operation")
+                        .asText());
+        assertEquals(129,
+                res.at("/query/operands/0/operands/0/operands/0/classRef/0")
+                        .asInt());
+        assertEquals(
+                "operation:relation",
+                res.at("/query/operands/0/operands/0/operands/0/operands/0/operation")
+                        .asText());
+        assertEquals(
+                "operation:class",
+                res.at("/query/operands/0/operands/0/operands/0/operands/0/operands/0/operation")
+                        .asText());
+        assertEquals(
+                129,
+                res.at("/query/operands/0/operands/0/operands/0/operands/0/operands/0/classOut")
+                        .asInt());
+        assertEquals(
+                "NP",
+                res.at("/query/operands/0/operands/0/operands/0/operands/0/operands/0/operands/0/key")
+                        .asText());
+        assertEquals(
+                130,
+                res.at("/query/operands/0/operands/0/operands/0/operands/0/operands/1/classOut")
+                        .asInt());
+        assertEquals(
+                "V",
+                res.at("/query/operands/0/operands/0/operands/0/operands/0/operands/1/operands/0/wrap/key")
+                        .asText());
+        assertEquals(131,
+                res.at("/query/operands/0/operands/0/operands/1/classOut")
+                        .asInt());
+        assertEquals(
+                "P",
+                res.at("/query/operands/0/operands/0/operands/1/operands/0/wrap/key")
+                        .asText());
+        assertEquals("operation:focus", res.at("/query/operands/1/operation")
+                .asText());
+        assertEquals(131, res.at("/query/operands/1/classRef/0").asInt());
+        assertEquals(true, res.at("/query/operands/1/operands").isMissingNode());
     }
 
+
     @Test
-    public void testUnaryRelations() throws JsonProcessingException, IOException {
+    public void testUnaryRelations () throws JsonProcessingException,
+            IOException {
         query = "node & #1:tokenarity=2";
         qs.setQuery(query, "annis");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:span",      res.at("/query/@type").asText());
-        assertEquals("koral:term",      res.at("/query/attr/@type").asText());
-        assertEquals("koral:boundary",  res.at("/query/attr/tokenarity/@type").asText());
-        assertEquals(2,                 res.at("/query/attr/tokenarity/min").asInt());
-        assertEquals(2,                 res.at("/query/attr/tokenarity/max").asInt());
+        assertEquals("koral:span", res.at("/query/@type").asText());
+        assertEquals("koral:term", res.at("/query/attr/@type").asText());
+        assertEquals("koral:boundary", res.at("/query/attr/tokenarity/@type")
+                .asText());
+        assertEquals(2, res.at("/query/attr/tokenarity/min").asInt());
+        assertEquals(2, res.at("/query/attr/tokenarity/max").asInt());
 
         query = "cnx/cat=\"NP\" & #1:tokenarity=2";
         qs.setQuery(query, "annis");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:span",      res.at("/query/@type").asText());
-        assertEquals("cnx",             res.at("/query/foundry").asText());
-        assertEquals("c",               res.at("/query/layer").asText());
-        assertEquals("NP",              res.at("/query/key").asText());
-        assertEquals("koral:term",      res.at("/query/attr/@type").asText());
-        assertEquals("koral:boundary",  res.at("/query/attr/tokenarity/@type").asText());
-        assertEquals(2,                 res.at("/query/attr/tokenarity/min").asInt());
-        assertEquals(2,                 res.at("/query/attr/tokenarity/max").asInt());
+        assertEquals("koral:span", res.at("/query/@type").asText());
+        assertEquals("cnx", res.at("/query/foundry").asText());
+        assertEquals("c", res.at("/query/layer").asText());
+        assertEquals("NP", res.at("/query/key").asText());
+        assertEquals("koral:term", res.at("/query/attr/@type").asText());
+        assertEquals("koral:boundary", res.at("/query/attr/tokenarity/@type")
+                .asText());
+        assertEquals(2, res.at("/query/attr/tokenarity/min").asInt());
+        assertEquals(2, res.at("/query/attr/tokenarity/max").asInt());
 
         query = "cnx/cat=\"NP\" & #1:tokenarity=2,5";
         qs.setQuery(query, "annis");
         res = mapper.readTree(qs.toJSON());
-        assertEquals(2,                 res.at("/query/attr/tokenarity/min").asInt());
-        assertEquals(5,                 res.at("/query/attr/tokenarity/max").asInt());
+        assertEquals(2, res.at("/query/attr/tokenarity/min").asInt());
+        assertEquals(5, res.at("/query/attr/tokenarity/max").asInt());
 
         query = "cnx/cat=\"NP\" & #1:root";
         qs.setQuery(query, "annis");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:span",      res.at("/query/@type").asText());
-        assertEquals("cnx",             res.at("/query/foundry").asText());
-        assertEquals("c",               res.at("/query/layer").asText());
-        assertEquals("NP",              res.at("/query/key").asText());
-        assertEquals("match:eq",        res.at("/query/match").asText());
-        assertEquals("koral:term",      res.at("/query/attr/@type").asText());
-        assertEquals(true,              res.at("/query/attr/root").asBoolean());
-        
+        assertEquals("koral:span", res.at("/query/@type").asText());
+        assertEquals("cnx", res.at("/query/foundry").asText());
+        assertEquals("c", res.at("/query/layer").asText());
+        assertEquals("NP", res.at("/query/key").asText());
+        assertEquals("match:eq", res.at("/query/match").asText());
+        assertEquals("koral:term", res.at("/query/attr/@type").asText());
+        assertEquals(true, res.at("/query/attr/root").asBoolean());
+
         query = "cnx/cat=\"NP\" & #1:root & #1:arity=2";
         qs.setQuery(query, "annis");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:span",      res.at("/query/@type").asText());
-        assertEquals("cnx",             res.at("/query/foundry").asText());
-        assertEquals("c",               res.at("/query/layer").asText());
-        assertEquals("NP",              res.at("/query/key").asText());
+        assertEquals("koral:span", res.at("/query/@type").asText());
+        assertEquals("cnx", res.at("/query/foundry").asText());
+        assertEquals("c", res.at("/query/layer").asText());
+        assertEquals("NP", res.at("/query/key").asText());
         assertEquals("koral:termGroup", res.at("/query/attr/@type").asText());
-        assertEquals("koral:term",      res.at("/query/attr/operands/0/@type").asText());
-        assertEquals(true,              res.at("/query/attr/operands/0/root").asBoolean());
-        assertEquals("koral:term",      res.at("/query/attr/operands/1/@type").asText());
-        assertEquals("koral:boundary",  res.at("/query/attr/operands/1/arity/@type").asText());
-        assertEquals(2,                 res.at("/query/attr/operands/1/arity/min").asInt());
-        assertEquals(2,                 res.at("/query/attr/operands/1/arity/max").asInt());
-        
+        assertEquals("koral:term", res.at("/query/attr/operands/0/@type")
+                .asText());
+        assertEquals(true, res.at("/query/attr/operands/0/root").asBoolean());
+        assertEquals("koral:term", res.at("/query/attr/operands/1/@type")
+                .asText());
+        assertEquals("koral:boundary",
+                res.at("/query/attr/operands/1/arity/@type").asText());
+        assertEquals(2, res.at("/query/attr/operands/1/arity/min").asInt());
+        assertEquals(2, res.at("/query/attr/operands/1/arity/max").asInt());
+
         query = "cnx/cat=\"NP\" & node & #1>#2 & #1:tokenarity=2";
         qs.setQuery(query, "annis");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:group",     res.at("/query/@type").asText());
-        assertEquals("operation:relation",     res.at("/query/operation").asText());
-        assertEquals("koral:span",      res.at("/query/operands/0/@type").asText());
-        assertEquals("cnx",             res.at("/query/operands/0/foundry").asText());
-        assertEquals("c",               res.at("/query/operands/0/layer").asText());
-        assertEquals("NP",              res.at("/query/operands/0/key").asText());
-        assertEquals("koral:term",      res.at("/query/operands/0/attr/@type").asText());
-        assertEquals("koral:boundary",  res.at("/query/operands/0/attr/tokenarity/@type").asText());
-        assertEquals(2,                 res.at("/query/operands/0/attr/tokenarity/min").asInt());
-        assertEquals(2,                 res.at("/query/operands/0/attr/tokenarity/max").asInt());
-        assertEquals("koral:span",      res.at("/query/operands/1/@type").asText());
+        assertEquals("koral:group", res.at("/query/@type").asText());
+        assertEquals("operation:relation", res.at("/query/operation").asText());
+        assertEquals("koral:span", res.at("/query/operands/0/@type").asText());
+        assertEquals("cnx", res.at("/query/operands/0/foundry").asText());
+        assertEquals("c", res.at("/query/operands/0/layer").asText());
+        assertEquals("NP", res.at("/query/operands/0/key").asText());
+        assertEquals("koral:term", res.at("/query/operands/0/attr/@type")
+                .asText());
+        assertEquals("koral:boundary",
+                res.at("/query/operands/0/attr/tokenarity/@type").asText());
+        assertEquals(2, res.at("/query/operands/0/attr/tokenarity/min").asInt());
+        assertEquals(2, res.at("/query/operands/0/attr/tokenarity/max").asInt());
+        assertEquals("koral:span", res.at("/query/operands/1/@type").asText());
 
     }
 
+
     @Test
-    public void testCommonParent() throws Exception {
+    public void testCommonParent () throws Exception {
         query = "cat=\"NP\" & cat=\"VP\" & #1 $ #2";
         qs.setQuery(query, "annis");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:group",         res.at("/query/@type").asText());
-        assertEquals("operation:relation",  res.at("/query/operation").asText());
-        assertEquals("koral:reference",     res.at("/query/operands/0/@type").asText());
-        assertEquals("operation:focus",     res.at("/query/operands/0/operation").asText());
-        assertEquals(129,                     res.at("/query/operands/0/classRef/0").asInt());
-        assertEquals("koral:group",         res.at("/query/operands/0/operands/0/@type").asText());
-        assertEquals("operation:relation",  res.at("/query/operands/0/operands/0/operation").asText());
-        assertEquals("koral:group",         res.at("/query/operands/0/operands/0/operands/0/@type").asText());
-        assertEquals("operation:class",     res.at("/query/operands/0/operands/0/operands/0/operation").asText());
-        assertEquals(129,                     res.at("/query/operands/0/operands/0/operands/0/classOut").asInt());
-        assertEquals("koral:span",          res.at("/query/operands/0/operands/0/operands/0/operands/0/@type").asText());
-        assertEquals(true,                  res.at("/query/operands/0/operands/0/operands/0/operands/0/key").isMissingNode());
-        assertEquals("koral:span",          res.at("/query/operands/0/operands/0/operands/1/@type").asText());
-        assertEquals("NP",                  res.at("/query/operands/0/operands/0/operands/1/key").asText());
-        assertEquals("c",                   res.at("/query/operands/0/operands/0/operands/1/layer").asText());
-        assertEquals("koral:span",          res.at("/query/operands/1/@type").asText());
-        assertEquals("VP",                  res.at("/query/operands/1/key").asText());
-        assertEquals("c",                   res.at("/query/operands/1/layer").asText());
-        
+        assertEquals("koral:group", res.at("/query/@type").asText());
+        assertEquals("operation:relation", res.at("/query/operation").asText());
+        assertEquals("koral:reference", res.at("/query/operands/0/@type")
+                .asText());
+        assertEquals("operation:focus", res.at("/query/operands/0/operation")
+                .asText());
+        assertEquals(129, res.at("/query/operands/0/classRef/0").asInt());
+        assertEquals("koral:group", res
+                .at("/query/operands/0/operands/0/@type").asText());
+        assertEquals("operation:relation",
+                res.at("/query/operands/0/operands/0/operation").asText());
+        assertEquals("koral:group",
+                res.at("/query/operands/0/operands/0/operands/0/@type")
+                        .asText());
+        assertEquals("operation:class",
+                res.at("/query/operands/0/operands/0/operands/0/operation")
+                        .asText());
+        assertEquals(129,
+                res.at("/query/operands/0/operands/0/operands/0/classOut")
+                        .asInt());
+        assertEquals(
+                "koral:span",
+                res.at("/query/operands/0/operands/0/operands/0/operands/0/@type")
+                        .asText());
+        assertEquals(
+                true,
+                res.at("/query/operands/0/operands/0/operands/0/operands/0/key")
+                        .isMissingNode());
+        assertEquals("koral:span",
+                res.at("/query/operands/0/operands/0/operands/1/@type")
+                        .asText());
+        assertEquals("NP", res
+                .at("/query/operands/0/operands/0/operands/1/key").asText());
+        assertEquals("c",
+                res.at("/query/operands/0/operands/0/operands/1/layer")
+                        .asText());
+        assertEquals("koral:span", res.at("/query/operands/1/@type").asText());
+        assertEquals("VP", res.at("/query/operands/1/key").asText());
+        assertEquals("c", res.at("/query/operands/1/layer").asText());
+
         query = "cat=\"NP\" & cat=\"VP\" & cat=\"PP\" & #1 $ #2 $ #3";
         qs.setQuery(query, "annis");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:group",         res.at("/query/@type").asText());
-        assertEquals("operation:relation",  res.at("/query/operation").asText());
-        assertEquals("koral:reference",     res.at("/query/operands/0/@type").asText());
-        assertEquals("operation:focus",     res.at("/query/operands/0/operation").asText());
-        assertEquals(129,                     res.at("/query/operands/0/classRef/0").asInt());
-        assertEquals("koral:group",         res.at("/query/operands/0/operands/0/@type").asText());
-        assertEquals("operation:relation",  res.at("/query/operands/0/operands/0/operation").asText());
+        assertEquals("koral:group", res.at("/query/@type").asText());
+        assertEquals("operation:relation", res.at("/query/operation").asText());
+        assertEquals("koral:reference", res.at("/query/operands/0/@type")
+                .asText());
+        assertEquals("operation:focus", res.at("/query/operands/0/operation")
+                .asText());
+        assertEquals(129, res.at("/query/operands/0/classRef/0").asInt());
+        assertEquals("koral:group", res
+                .at("/query/operands/0/operands/0/@type").asText());
+        assertEquals("operation:relation",
+                res.at("/query/operands/0/operands/0/operation").asText());
     }
-    
+
+
     @Test
-    public void testDisjunction() throws Exception {
+    public void testDisjunction () throws Exception {
         query = "cat=\"NP\" | cat=\"VP\"";
         qs.setQuery(query, "annis");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:group",         res.at("/query/@type").asText());
-        assertEquals("operation:disjunction",  res.at("/query/operation").asText());
-        assertEquals("koral:span",          res.at("/query/operands/0/@type").asText());
-        assertEquals("NP",                  res.at("/query/operands/0/key").asText());
-        assertEquals("c",                   res.at("/query/operands/0/layer").asText());
-        assertEquals("koral:span",          res.at("/query/operands/1/@type").asText());
-        assertEquals("VP",                  res.at("/query/operands/1/key").asText());
-        assertEquals("c",                   res.at("/query/operands/1/layer").asText());
+        assertEquals("koral:group", res.at("/query/@type").asText());
+        assertEquals("operation:disjunction", res.at("/query/operation")
+                .asText());
+        assertEquals("koral:span", res.at("/query/operands/0/@type").asText());
+        assertEquals("NP", res.at("/query/operands/0/key").asText());
+        assertEquals("c", res.at("/query/operands/0/layer").asText());
+        assertEquals("koral:span", res.at("/query/operands/1/@type").asText());
+        assertEquals("VP", res.at("/query/operands/1/key").asText());
+        assertEquals("c", res.at("/query/operands/1/layer").asText());
     }
-    
+
     //		
     //		query = "cat=\"NP\" & cat=\"VP\" & cat=\"PP\" & #1 $ #2 $ #3";
     //		String cp2 =
@@ -1060,16 +1443,15 @@
     //	}
 
     /*		
-	@Test
-	public void testEqualNotequalValue() throws Exception {
-		query = "cat=\"NP\" & cat=\"VP\" & #1 == #2";
-		String eq1 =
-				"{}"; // ???
-		aqlt = new AqlTree(query);
-		map = aqlt.getRequestMap().get("query").toString();
-		assertEquals(eq1.replaceAll(" ", ""), map.replaceAll(" ", ""));		
-	}
+    @Test
+    public void testEqualNotequalValue() throws Exception {
+    	query = "cat=\"NP\" & cat=\"VP\" & #1 == #2";
+    	String eq1 =
+    			"{}"; // ???
+    	aqlt = new AqlTree(query);
+    	map = aqlt.getRequestMap().get("query").toString();
+    	assertEquals(eq1.replaceAll(" ", ""), map.replaceAll(" ", ""));		
+    }
      */
 
 }
-
diff --git a/src/test/java/de/ids_mannheim/korap/query/serialize/CollectionQueryProcessorTest.java b/src/test/java/de/ids_mannheim/korap/query/serialize/CollectionQueryProcessorTest.java
index a8b9b6e..62e6d1f 100644
--- a/src/test/java/de/ids_mannheim/korap/query/serialize/CollectionQueryProcessorTest.java
+++ b/src/test/java/de/ids_mannheim/korap/query/serialize/CollectionQueryProcessorTest.java
@@ -1,4 +1,5 @@
 package de.ids_mannheim.korap.query.serialize;
+
 import static org.junit.Assert.*;
 
 import java.io.IOException;
@@ -14,366 +15,487 @@
 
 public class CollectionQueryProcessorTest {
 
-	String query = "foo";
-	String ql = "poliqarpplus";
-	String collection;
-	ArrayList<JsonNode> operands;
+    String query = "foo";
+    String ql = "poliqarpplus";
+    String collection;
+    ArrayList<JsonNode> operands;
 
-	QuerySerializer qs = new QuerySerializer();
-	ObjectMapper mapper = new ObjectMapper();
-	JsonNode res;
-	
-	@Test
-	public void testContext() throws JsonProcessingException, IOException {
-		collection = "textClass=politik";
-		String contextString = "http://korap.ids-mannheim.de/ns/koral/0.3/context.jsonld";
-		qs.setQuery(query,ql);
-		qs.setCollection(collection);
-		res = mapper.readTree(qs.toJSON());
-		assertEquals(contextString, res.get("@context").asText());
-	}
-	
-	@Test
-	public void testSimple() throws JsonProcessingException, IOException {
-		collection = "textClass=politik";
-		qs.setQuery(query,ql);
-		qs.setCollection(collection);
-		res = mapper.readTree(qs.toJSON());
-		assertEquals("koral:doc", 		res.at("/collection/@type").asText());
-		assertEquals("textClass", 		res.at("/collection/key").asText());
-		assertEquals("politik", 		res.at("/collection/value").asText());
-		assertEquals("match:eq", 		res.at("/collection/match").asText());
-		
-		collection = "textClass!=politik";
-		qs.setQuery(query,ql);
-		qs.setCollection(collection);
-		res = mapper.readTree(qs.toJSON());
-		assertEquals("koral:doc", 		res.at("/collection/@type").asText());
-		assertEquals("textClass", 		res.at("/collection/key").asText());
-		assertEquals("politik", 		res.at("/collection/value").asText());
-		assertEquals("match:ne", 		res.at("/collection/match").asText());
-	}
-	
-	@Test
-	public void testContains() throws JsonProcessingException, IOException {
-		collection = "title~Mannheim";
-		qs.setQuery(query,ql);
-		qs.setCollection(collection);
-		res = mapper.readTree(qs.toJSON());
-		assertEquals("koral:doc", 		res.at("/collection/@type").asText());
-		assertEquals("title", 			res.at("/collection/key").asText());
-		assertEquals("Mannheim", 		res.at("/collection/value").asText());
-		assertEquals("match:contains",  res.at("/collection/match").asText());
-		
-		collection = "title~\"IDS Mannheim\"";
-		qs.setQuery(query,ql);
-		qs.setCollection(collection);
-		res = mapper.readTree(qs.toJSON());
-		assertEquals("koral:doc", 		res.at("/collection/@type").asText());
-		assertEquals("title",	 		res.at("/collection/key").asText());
-		assertEquals("IDS Mannheim",	res.at("/collection/value").asText());
-		assertEquals("match:contains",	res.at("/collection/match").asText());
-	}
-	
-	@Test
-	public void testTwoConjuncts() throws JsonProcessingException, IOException {
-		collection = "textClass=Sport & pubDate in 2014";
-		qs.setQuery(query,ql);
-		qs.setCollection(collection);
-		res = mapper.readTree(qs.toJSON());
-		assertEquals("koral:docGroup", 	res.at("/collection/@type").asText());
-		assertEquals("operation:and",	res.at("/collection/operation").asText());
-		assertEquals("koral:doc", 		res.at("/collection/operands/0/@type").asText());
-		assertEquals("textClass", 		res.at("/collection/operands/0/key").asText());
-		assertEquals("Sport",			res.at("/collection/operands/0/value").asText());
-		assertEquals("match:eq",		res.at("/collection/operands/0/match").asText());
-		assertEquals("koral:doc", 		res.at("/collection/operands/1/@type").asText());
-		assertEquals("pubDate",	 		res.at("/collection/operands/1/key").asText());
-		assertEquals("2014",			res.at("/collection/operands/1/value").asText());
-		assertEquals("type:date",		res.at("/collection/operands/1/type").asText());
-		assertEquals("match:eq",		res.at("/collection/operands/1/match").asText());
-		
-		collection = "textClass=Sport & pubDate=2014";
-		qs.setQuery(query,ql);
-		qs.setCollection(collection);
-		res = mapper.readTree(qs.toJSON());
-		assertEquals("koral:docGroup", 	res.at("/collection/@type").asText());
-		assertEquals("operation:and",	res.at("/collection/operation").asText());
-		assertEquals("koral:doc", 		res.at("/collection/operands/0/@type").asText());
-		assertEquals("textClass", 		res.at("/collection/operands/0/key").asText());
-		assertEquals("Sport",			res.at("/collection/operands/0/value").asText());
-		assertEquals("match:eq",		res.at("/collection/operands/0/match").asText());
-		assertEquals("koral:doc", 		res.at("/collection/operands/1/@type").asText());
-		assertEquals("pubDate",	 		res.at("/collection/operands/1/key").asText());
-		assertEquals("2014",			res.at("/collection/operands/1/value").asText());
-		assertEquals(true,				res.at("/collection/operands/1/type").isMissingNode());
-		assertEquals("match:eq",		res.at("/collection/operands/1/match").asText());
-		assertTrue(res.at("/warnings/0/0").asText().startsWith("The collection query contains a value that looks like a date"));
-	}
+    QuerySerializer qs = new QuerySerializer();
+    ObjectMapper mapper = new ObjectMapper();
+    JsonNode res;
 
-	@Test
-	public void testThreeConjuncts() throws JsonProcessingException, IOException {
-		collection = "textClass=Sport & pubDate in 2014 & corpusId=WPD";
-		qs.setQuery(query,ql);
-		qs.setCollection(collection);
-		res = mapper.readTree(qs.toJSON());
-		assertEquals("koral:docGroup", 	res.at("/collection/@type").asText());
-		assertEquals("operation:and",	res.at("/collection/operation").asText());
-		assertEquals("koral:doc", 		res.at("/collection/operands/0/@type").asText());
-		assertEquals("textClass", 		res.at("/collection/operands/0/key").asText());
-		assertEquals("Sport",			res.at("/collection/operands/0/value").asText());
-		assertEquals("match:eq",		res.at("/collection/operands/0/match").asText());
-		assertEquals("koral:docGroup", 	res.at("/collection/operands/1/@type").asText());
-		assertEquals("operation:and",	res.at("/collection/operands/1/operation").asText());
-		assertEquals("koral:doc", 		res.at("/collection/operands/1/operands/0/@type").asText());
-		assertEquals("pubDate",	 		res.at("/collection/operands/1/operands/0/key").asText());
-		assertEquals("2014",			res.at("/collection/operands/1/operands/0/value").asText());
-		assertEquals("type:date",		res.at("/collection/operands/1/operands/0/type").asText());
-		assertEquals("match:eq",		res.at("/collection/operands/1/operands/0/match").asText());
-		assertEquals("koral:doc", 		res.at("/collection/operands/1/operands/1/@type").asText());
-		assertEquals("corpusId", 		res.at("/collection/operands/1/operands/1/key").asText());
-		assertEquals("WPD",				res.at("/collection/operands/1/operands/1/value").asText());
-		assertEquals("match:eq",		res.at("/collection/operands/1/operands/1/match").asText());
-	}
-	@Test
-	public void testTwoDisjuncts() throws JsonProcessingException, IOException {
-		collection = "textClass=Sport | pubDate in 2014";
-		qs.setQuery(query,ql);
-		qs.setCollection(collection);
-		res = mapper.readTree(qs.toJSON());
-		assertEquals("koral:docGroup", 	res.at("/collection/@type").asText());
-		assertEquals("operation:or",	res.at("/collection/operation").asText());
-		assertEquals("koral:doc", 		res.at("/collection/operands/0/@type").asText());
-		assertEquals("textClass", 		res.at("/collection/operands/0/key").asText());
-		assertEquals("Sport",			res.at("/collection/operands/0/value").asText());
-		assertEquals("match:eq",		res.at("/collection/operands/0/match").asText());
-		assertEquals("koral:doc", 		res.at("/collection/operands/1/@type").asText());
-		assertEquals("pubDate",	 		res.at("/collection/operands/1/key").asText());
-		assertEquals("2014",			res.at("/collection/operands/1/value").asText());
-		assertEquals("type:date",		res.at("/collection/operands/1/type").asText());
-		assertEquals("match:eq",		res.at("/collection/operands/1/match").asText());
-	}
-	
-	@Test
-	public void testThreeDisjuncts() throws JsonProcessingException, IOException {
-		collection = "textClass=Sport | pubDate in 2014 | corpusId=WPD";
-		qs.setQuery(query,ql);
-		qs.setCollection(collection);
-		res = mapper.readTree(qs.toJSON());
-		assertEquals("koral:docGroup", 	res.at("/collection/@type").asText());
-		assertEquals("operation:or",	res.at("/collection/operation").asText());
-		assertEquals("koral:doc", 		res.at("/collection/operands/0/@type").asText());
-		assertEquals("textClass", 		res.at("/collection/operands/0/key").asText());
-		assertEquals("Sport",			res.at("/collection/operands/0/value").asText());
-		assertEquals("match:eq",		res.at("/collection/operands/0/match").asText());
-		assertEquals("koral:docGroup", 	res.at("/collection/operands/1/@type").asText());
-		assertEquals("operation:or",	res.at("/collection/operands/1/operation").asText());
-		assertEquals("koral:doc", 		res.at("/collection/operands/1/operands/0/@type").asText());
-		assertEquals("pubDate",	 		res.at("/collection/operands/1/operands/0/key").asText());
-		assertEquals("2014",			res.at("/collection/operands/1/operands/0/value").asText());
-		assertEquals("type:date",		res.at("/collection/operands/1/operands/0/type").asText());
-		assertEquals("match:eq",		res.at("/collection/operands/1/operands/0/match").asText());
-		assertEquals("koral:doc", 		res.at("/collection/operands/1/operands/1/@type").asText());
-		assertEquals("corpusId", 		res.at("/collection/operands/1/operands/1/key").asText());
-		assertEquals("WPD",				res.at("/collection/operands/1/operands/1/value").asText());
-		assertEquals("match:eq",		res.at("/collection/operands/1/operands/1/match").asText());
-	}
-	
-	@Test
-	public void testMixed() throws JsonProcessingException, IOException {
-		collection = "textClass=Sport | (pubDate in 2014 & corpusId=WPD)";
-		qs.setQuery(query,ql);
-		qs.setCollection(collection);
-		res = mapper.readTree(qs.toJSON());
-		assertEquals("koral:docGroup", 	res.at("/collection/@type").asText());
-		assertEquals("operation:or",	res.at("/collection/operation").asText());
-		assertEquals("koral:doc", 		res.at("/collection/operands/0/@type").asText());
-		assertEquals("textClass", 		res.at("/collection/operands/0/key").asText());
-		assertEquals("Sport",			res.at("/collection/operands/0/value").asText());
-		assertEquals("match:eq",		res.at("/collection/operands/0/match").asText());
-		assertEquals("koral:docGroup", 	res.at("/collection/operands/1/@type").asText());
-		assertEquals("operation:and",	res.at("/collection/operands/1/operation").asText());
-		assertEquals("koral:doc", 		res.at("/collection/operands/1/operands/0/@type").asText());
-		assertEquals("pubDate",	 		res.at("/collection/operands/1/operands/0/key").asText());
-		assertEquals("2014",			res.at("/collection/operands/1/operands/0/value").asText());
-		assertEquals("type:date",		res.at("/collection/operands/1/operands/0/type").asText());
-		assertEquals("match:eq",		res.at("/collection/operands/1/operands/0/match").asText());
-		assertEquals("koral:doc", 		res.at("/collection/operands/1/operands/1/@type").asText());
-		assertEquals("corpusId", 		res.at("/collection/operands/1/operands/1/key").asText());
-		assertEquals("WPD",				res.at("/collection/operands/1/operands/1/value").asText());
-		assertEquals("match:eq",		res.at("/collection/operands/1/operands/1/match").asText());
-		
-		collection = "textClass=Sport | pubDate in 2014 & corpusId=WPD";
-		qs.setQuery(query,ql);
-		qs.setCollection(collection);
-		res = mapper.readTree(qs.toJSON());
-		assertEquals("koral:docGroup", 	res.at("/collection/@type").asText());
-		assertEquals("operation:or",	res.at("/collection/operation").asText());
-		assertEquals("koral:doc", 		res.at("/collection/operands/0/@type").asText());
-		assertEquals("textClass", 		res.at("/collection/operands/0/key").asText());
-		assertEquals("Sport",			res.at("/collection/operands/0/value").asText());
-		assertEquals("match:eq",		res.at("/collection/operands/0/match").asText());
-		assertEquals("koral:docGroup", 	res.at("/collection/operands/1/@type").asText());
-		assertEquals("operation:and",	res.at("/collection/operands/1/operation").asText());
-		assertEquals("koral:doc", 		res.at("/collection/operands/1/operands/0/@type").asText());
-		assertEquals("pubDate",	 		res.at("/collection/operands/1/operands/0/key").asText());
-		assertEquals("2014",			res.at("/collection/operands/1/operands/0/value").asText());
-		assertEquals("type:date",		res.at("/collection/operands/1/operands/0/type").asText());
-		assertEquals("match:eq",		res.at("/collection/operands/1/operands/0/match").asText());
-		assertEquals("koral:doc", 		res.at("/collection/operands/1/operands/1/@type").asText());
-		assertEquals("corpusId", 		res.at("/collection/operands/1/operands/1/key").asText());
-		assertEquals("WPD",				res.at("/collection/operands/1/operands/1/value").asText());
-		assertEquals("match:eq",		res.at("/collection/operands/1/operands/1/match").asText());
-		
-		collection = "(textClass=Sport | pubDate in 2014) & corpusId=WPD";
-		qs.setQuery(query,ql);
-		qs.setCollection(collection);
-		res = mapper.readTree(qs.toJSON());
-		assertEquals("koral:docGroup", 	res.at("/collection/@type").asText());
-		assertEquals("operation:and",	res.at("/collection/operation").asText());
-		assertEquals("koral:docGroup",	res.at("/collection/operands/0/@type").asText());
-		assertEquals("operation:or",	res.at("/collection/operands/0/operation").asText());
-		assertEquals("koral:doc", 		res.at("/collection/operands/0/operands/0/@type").asText());
-		assertEquals("koral:doc", 		res.at("/collection/operands/0/operands/1/@type").asText());
-		assertEquals("koral:doc",	 	res.at("/collection/operands/1/@type").asText());
-		
-		collection = "(textClass=Sport & pubDate in 2014) & corpusId=WPD";
-		qs.setQuery(query,ql);
-		qs.setCollection(collection);
-		res = mapper.readTree(qs.toJSON());
-		assertEquals("koral:docGroup", 	res.at("/collection/@type").asText());
-		assertEquals("operation:and",	res.at("/collection/operation").asText());
-		assertEquals("koral:docGroup",	res.at("/collection/operands/0/@type").asText());
-		assertEquals("operation:and",	res.at("/collection/operands/0/operation").asText());
-		assertEquals("koral:doc", 		res.at("/collection/operands/0/operands/0/@type").asText());
-		assertEquals("koral:doc", 		res.at("/collection/operands/0/operands/1/@type").asText());
-		assertEquals("koral:doc",	 	res.at("/collection/operands/1/@type").asText());
-		
-		collection = "(textClass=Sport & textClass=ausland) | (corpusID=WPD & author=White)";
-		qs.setQuery(query,ql);
-		qs.setCollection(collection);
-		res = mapper.readTree(qs.toJSON());
-		assertEquals("koral:docGroup", 	res.at("/collection/@type").asText());
-		assertEquals("operation:or",	res.at("/collection/operation").asText());
-		assertEquals("koral:docGroup",	res.at("/collection/operands/0/@type").asText());
-		assertEquals("operation:and",	res.at("/collection/operands/0/operation").asText());
-		assertEquals("koral:docGroup",	res.at("/collection/operands/1/@type").asText());
-		assertEquals("operation:and",	res.at("/collection/operands/1/operation").asText());
-		assertEquals("koral:doc", 		res.at("/collection/operands/0/operands/0/@type").asText());
-		assertEquals("Sport",	 		res.at("/collection/operands/0/operands/0/value").asText());
-		assertEquals("koral:doc", 		res.at("/collection/operands/0/operands/1/@type").asText());
-		assertEquals("ausland",	 		res.at("/collection/operands/0/operands/1/value").asText());
-		assertEquals("koral:doc", 		res.at("/collection/operands/1/operands/0/@type").asText());
-		assertEquals("WPD",		 		res.at("/collection/operands/1/operands/0/value").asText());
-		assertEquals("koral:doc", 		res.at("/collection/operands/1/operands/1/@type").asText());
-		assertEquals("White",	 		res.at("/collection/operands/1/operands/1/value").asText());
-		
-		collection = "(textClass=Sport & textClass=ausland) | (corpusID=WPD & author=White & pubDate in 2000)";
-		qs.setQuery(query,ql);
-		qs.setCollection(collection);
-		res = mapper.readTree(qs.toJSON());
-		assertEquals("koral:docGroup", 	res.at("/collection/@type").asText());
-		assertEquals("operation:or",	res.at("/collection/operation").asText());
-		assertEquals("koral:docGroup",	res.at("/collection/operands/0/@type").asText());
-		assertEquals("operation:and",	res.at("/collection/operands/0/operation").asText());
-		assertEquals("koral:docGroup",	res.at("/collection/operands/1/@type").asText());
-		assertEquals("operation:and",	res.at("/collection/operands/1/operation").asText());
-		assertEquals("koral:doc", 		res.at("/collection/operands/0/operands/0/@type").asText());
-		assertEquals("Sport",	 		res.at("/collection/operands/0/operands/0/value").asText());
-		assertEquals("koral:doc", 		res.at("/collection/operands/0/operands/1/@type").asText());
-		assertEquals("ausland",	 		res.at("/collection/operands/0/operands/1/value").asText());
-		assertEquals("koral:doc", 		res.at("/collection/operands/1/operands/0/@type").asText());
-		assertEquals("WPD",		 		res.at("/collection/operands/1/operands/0/value").asText());
-		assertEquals("koral:docGroup",	res.at("/collection/operands/1/operands/1/@type").asText());
-		assertEquals("operation:and",	res.at("/collection/operands/1/operands/1/operation").asText());
-		assertEquals("White",	 		res.at("/collection/operands/1/operands/1/operands/0/value").asText());
-		assertEquals("2000",	 		res.at("/collection/operands/1/operands/1/operands/1/value").asText());
-	}
 
-	@Test
-	public void testDateYear() throws JsonProcessingException, IOException {
-		collection = "pubDate in 2000";
-		qs.setQuery(query,ql);
-		qs.setCollection(collection);
-		res = mapper.readTree(qs.toJSON());
-		assertEquals("koral:doc", 		res.at("/collection/@type").asText());
-		assertEquals("pubDate", 		res.at("/collection/key").asText());
-		assertEquals("2000",	 		res.at("/collection/value").asText());
-		assertEquals("type:date", 		res.at("/collection/type").asText());
-		assertEquals("match:eq", 		res.at("/collection/match").asText());
-		
-		collection = "pubDate = 2000";
-		qs.setQuery(query,ql);
-		qs.setCollection(collection);
-		res = mapper.readTree(qs.toJSON());
-		assertEquals("koral:doc", 		res.at("/collection/@type").asText());
-		assertEquals("pubDate", 		res.at("/collection/key").asText());
-		assertEquals("2000",	 		res.at("/collection/value").asText());
-		assertEquals(true, 				res.at("/collection/type").isMissingNode());
-		assertEquals("match:eq", 		res.at("/collection/match").asText());
-		
-		collection = "pubDate since 2000";
-		qs.setQuery(query,ql);
-		qs.setCollection(collection);
-		res = mapper.readTree(qs.toJSON());
-		assertEquals("koral:doc", 		res.at("/collection/@type").asText());
-		assertEquals("pubDate", 		res.at("/collection/key").asText());
-		assertEquals("2000",	 		res.at("/collection/value").asText());
-		assertEquals("type:date", 		res.at("/collection/type").asText());
-		assertEquals("match:geq", 		res.at("/collection/match").asText());
-		
-		collection = "pubDate until 2000";
-		qs.setQuery(query,ql);
-		qs.setCollection(collection);
-		res = mapper.readTree(qs.toJSON());
-		assertEquals("koral:doc", 		res.at("/collection/@type").asText());
-		assertEquals("pubDate", 		res.at("/collection/key").asText());
-		assertEquals("2000",	 		res.at("/collection/value").asText());
-		assertEquals("type:date", 		res.at("/collection/type").asText());
-		assertEquals("match:leq", 		res.at("/collection/match").asText());
-	}
-	
-	@Test
-	public void testDateMonthDay() throws JsonProcessingException, IOException {
-		collection = "pubDate in 2000-02";
-		qs.setQuery(query,ql);
-		qs.setCollection(collection);
-		res = mapper.readTree(qs.toJSON());
-		assertEquals("koral:doc", 		res.at("/collection/@type").asText());
-		assertEquals("pubDate", 		res.at("/collection/key").asText());
-		assertEquals("2000-02",	 		res.at("/collection/value").asText());
-		assertEquals("type:date", 		res.at("/collection/type").asText());
-		assertEquals("match:eq", 		res.at("/collection/match").asText());
-		
-		collection = "pubDate = 2000-12";
-		qs.setQuery(query,ql);
-		qs.setCollection(collection);
-		res = mapper.readTree(qs.toJSON());
-		assertEquals("koral:doc", 		res.at("/collection/@type").asText());
-		assertEquals("pubDate", 		res.at("/collection/key").asText());
-		assertEquals("2000-12",	 		res.at("/collection/value").asText());
-		assertEquals(true, 				res.at("/collection/type").isMissingNode());
-		assertEquals("match:eq", 		res.at("/collection/match").asText());
-		
-		collection = "pubDate since 2000-02-01";
-		qs.setQuery(query,ql);
-		qs.setCollection(collection);
-		res = mapper.readTree(qs.toJSON());
-		assertEquals("koral:doc", 		res.at("/collection/@type").asText());
-		assertEquals("pubDate", 		res.at("/collection/key").asText());
-		assertEquals("2000-02-01", 		res.at("/collection/value").asText());
-		assertEquals("type:date", 		res.at("/collection/type").asText());
-		assertEquals("match:geq", 		res.at("/collection/match").asText());
-		
-		collection = "pubDate until 2000-01-01";
-		qs.setQuery(query,ql);
-		qs.setCollection(collection);
-		res = mapper.readTree(qs.toJSON());
-		assertEquals("koral:doc", 		res.at("/collection/@type").asText());
-		assertEquals("pubDate", 		res.at("/collection/key").asText());
-		assertEquals("2000-01-01", 		res.at("/collection/value").asText());
-		assertEquals("type:date", 		res.at("/collection/type").asText());
-		assertEquals("match:leq", 		res.at("/collection/match").asText());
-	}
+    @Test
+    public void testContext () throws JsonProcessingException, IOException {
+        collection = "textClass=politik";
+        String contextString = "http://korap.ids-mannheim.de/ns/koral/0.3/context.jsonld";
+        qs.setQuery(query, ql);
+        qs.setCollection(collection);
+        res = mapper.readTree(qs.toJSON());
+        assertEquals(contextString, res.get("@context").asText());
+    }
+
+
+    @Test
+    public void testSimple () throws JsonProcessingException, IOException {
+        collection = "textClass=politik";
+        qs.setQuery(query, ql);
+        qs.setCollection(collection);
+        res = mapper.readTree(qs.toJSON());
+        assertEquals("koral:doc", res.at("/collection/@type").asText());
+        assertEquals("textClass", res.at("/collection/key").asText());
+        assertEquals("politik", res.at("/collection/value").asText());
+        assertEquals("match:eq", res.at("/collection/match").asText());
+
+        collection = "textClass!=politik";
+        qs.setQuery(query, ql);
+        qs.setCollection(collection);
+        res = mapper.readTree(qs.toJSON());
+        assertEquals("koral:doc", res.at("/collection/@type").asText());
+        assertEquals("textClass", res.at("/collection/key").asText());
+        assertEquals("politik", res.at("/collection/value").asText());
+        assertEquals("match:ne", res.at("/collection/match").asText());
+    }
+
+
+    @Test
+    public void testContains () throws JsonProcessingException, IOException {
+        collection = "title~Mannheim";
+        qs.setQuery(query, ql);
+        qs.setCollection(collection);
+        res = mapper.readTree(qs.toJSON());
+        assertEquals("koral:doc", res.at("/collection/@type").asText());
+        assertEquals("title", res.at("/collection/key").asText());
+        assertEquals("Mannheim", res.at("/collection/value").asText());
+        assertEquals("match:contains", res.at("/collection/match").asText());
+
+        collection = "title~\"IDS Mannheim\"";
+        qs.setQuery(query, ql);
+        qs.setCollection(collection);
+        res = mapper.readTree(qs.toJSON());
+        assertEquals("koral:doc", res.at("/collection/@type").asText());
+        assertEquals("title", res.at("/collection/key").asText());
+        assertEquals("IDS Mannheim", res.at("/collection/value").asText());
+        assertEquals("match:contains", res.at("/collection/match").asText());
+    }
+
+
+    @Test
+    public void testTwoConjuncts () throws JsonProcessingException, IOException {
+        collection = "textClass=Sport & pubDate in 2014";
+        qs.setQuery(query, ql);
+        qs.setCollection(collection);
+        res = mapper.readTree(qs.toJSON());
+        assertEquals("koral:docGroup", res.at("/collection/@type").asText());
+        assertEquals("operation:and", res.at("/collection/operation").asText());
+        assertEquals("koral:doc", res.at("/collection/operands/0/@type")
+                .asText());
+        assertEquals("textClass", res.at("/collection/operands/0/key").asText());
+        assertEquals("Sport", res.at("/collection/operands/0/value").asText());
+        assertEquals("match:eq", res.at("/collection/operands/0/match")
+                .asText());
+        assertEquals("koral:doc", res.at("/collection/operands/1/@type")
+                .asText());
+        assertEquals("pubDate", res.at("/collection/operands/1/key").asText());
+        assertEquals("2014", res.at("/collection/operands/1/value").asText());
+        assertEquals("type:date", res.at("/collection/operands/1/type")
+                .asText());
+        assertEquals("match:eq", res.at("/collection/operands/1/match")
+                .asText());
+
+        collection = "textClass=Sport & pubDate=2014";
+        qs.setQuery(query, ql);
+        qs.setCollection(collection);
+        res = mapper.readTree(qs.toJSON());
+        assertEquals("koral:docGroup", res.at("/collection/@type").asText());
+        assertEquals("operation:and", res.at("/collection/operation").asText());
+        assertEquals("koral:doc", res.at("/collection/operands/0/@type")
+                .asText());
+        assertEquals("textClass", res.at("/collection/operands/0/key").asText());
+        assertEquals("Sport", res.at("/collection/operands/0/value").asText());
+        assertEquals("match:eq", res.at("/collection/operands/0/match")
+                .asText());
+        assertEquals("koral:doc", res.at("/collection/operands/1/@type")
+                .asText());
+        assertEquals("pubDate", res.at("/collection/operands/1/key").asText());
+        assertEquals("2014", res.at("/collection/operands/1/value").asText());
+        assertEquals(true, res.at("/collection/operands/1/type")
+                .isMissingNode());
+        assertEquals("match:eq", res.at("/collection/operands/1/match")
+                .asText());
+        assertTrue(res
+                .at("/warnings/0/0")
+                .asText()
+                .startsWith(
+                        "The collection query contains a value that looks like a date"));
+    }
+
+
+    @Test
+    public void testThreeConjuncts () throws JsonProcessingException,
+            IOException {
+        collection = "textClass=Sport & pubDate in 2014 & corpusId=WPD";
+        qs.setQuery(query, ql);
+        qs.setCollection(collection);
+        res = mapper.readTree(qs.toJSON());
+        assertEquals("koral:docGroup", res.at("/collection/@type").asText());
+        assertEquals("operation:and", res.at("/collection/operation").asText());
+        assertEquals("koral:doc", res.at("/collection/operands/0/@type")
+                .asText());
+        assertEquals("textClass", res.at("/collection/operands/0/key").asText());
+        assertEquals("Sport", res.at("/collection/operands/0/value").asText());
+        assertEquals("match:eq", res.at("/collection/operands/0/match")
+                .asText());
+        assertEquals("koral:docGroup", res.at("/collection/operands/1/@type")
+                .asText());
+        assertEquals("operation:and", res
+                .at("/collection/operands/1/operation").asText());
+        assertEquals("koral:doc",
+                res.at("/collection/operands/1/operands/0/@type").asText());
+        assertEquals("pubDate", res.at("/collection/operands/1/operands/0/key")
+                .asText());
+        assertEquals("2014", res.at("/collection/operands/1/operands/0/value")
+                .asText());
+        assertEquals("type:date",
+                res.at("/collection/operands/1/operands/0/type").asText());
+        assertEquals("match:eq",
+                res.at("/collection/operands/1/operands/0/match").asText());
+        assertEquals("koral:doc",
+                res.at("/collection/operands/1/operands/1/@type").asText());
+        assertEquals("corpusId", res
+                .at("/collection/operands/1/operands/1/key").asText());
+        assertEquals("WPD", res.at("/collection/operands/1/operands/1/value")
+                .asText());
+        assertEquals("match:eq",
+                res.at("/collection/operands/1/operands/1/match").asText());
+    }
+
+
+    @Test
+    public void testTwoDisjuncts () throws JsonProcessingException, IOException {
+        collection = "textClass=Sport | pubDate in 2014";
+        qs.setQuery(query, ql);
+        qs.setCollection(collection);
+        res = mapper.readTree(qs.toJSON());
+        assertEquals("koral:docGroup", res.at("/collection/@type").asText());
+        assertEquals("operation:or", res.at("/collection/operation").asText());
+        assertEquals("koral:doc", res.at("/collection/operands/0/@type")
+                .asText());
+        assertEquals("textClass", res.at("/collection/operands/0/key").asText());
+        assertEquals("Sport", res.at("/collection/operands/0/value").asText());
+        assertEquals("match:eq", res.at("/collection/operands/0/match")
+                .asText());
+        assertEquals("koral:doc", res.at("/collection/operands/1/@type")
+                .asText());
+        assertEquals("pubDate", res.at("/collection/operands/1/key").asText());
+        assertEquals("2014", res.at("/collection/operands/1/value").asText());
+        assertEquals("type:date", res.at("/collection/operands/1/type")
+                .asText());
+        assertEquals("match:eq", res.at("/collection/operands/1/match")
+                .asText());
+    }
+
+
+    @Test
+    public void testThreeDisjuncts () throws JsonProcessingException,
+            IOException {
+        collection = "textClass=Sport | pubDate in 2014 | corpusId=WPD";
+        qs.setQuery(query, ql);
+        qs.setCollection(collection);
+        res = mapper.readTree(qs.toJSON());
+        assertEquals("koral:docGroup", res.at("/collection/@type").asText());
+        assertEquals("operation:or", res.at("/collection/operation").asText());
+        assertEquals("koral:doc", res.at("/collection/operands/0/@type")
+                .asText());
+        assertEquals("textClass", res.at("/collection/operands/0/key").asText());
+        assertEquals("Sport", res.at("/collection/operands/0/value").asText());
+        assertEquals("match:eq", res.at("/collection/operands/0/match")
+                .asText());
+        assertEquals("koral:docGroup", res.at("/collection/operands/1/@type")
+                .asText());
+        assertEquals("operation:or", res.at("/collection/operands/1/operation")
+                .asText());
+        assertEquals("koral:doc",
+                res.at("/collection/operands/1/operands/0/@type").asText());
+        assertEquals("pubDate", res.at("/collection/operands/1/operands/0/key")
+                .asText());
+        assertEquals("2014", res.at("/collection/operands/1/operands/0/value")
+                .asText());
+        assertEquals("type:date",
+                res.at("/collection/operands/1/operands/0/type").asText());
+        assertEquals("match:eq",
+                res.at("/collection/operands/1/operands/0/match").asText());
+        assertEquals("koral:doc",
+                res.at("/collection/operands/1/operands/1/@type").asText());
+        assertEquals("corpusId", res
+                .at("/collection/operands/1/operands/1/key").asText());
+        assertEquals("WPD", res.at("/collection/operands/1/operands/1/value")
+                .asText());
+        assertEquals("match:eq",
+                res.at("/collection/operands/1/operands/1/match").asText());
+    }
+
+
+    @Test
+    public void testMixed () throws JsonProcessingException, IOException {
+        collection = "textClass=Sport | (pubDate in 2014 & corpusId=WPD)";
+        qs.setQuery(query, ql);
+        qs.setCollection(collection);
+        res = mapper.readTree(qs.toJSON());
+        assertEquals("koral:docGroup", res.at("/collection/@type").asText());
+        assertEquals("operation:or", res.at("/collection/operation").asText());
+        assertEquals("koral:doc", res.at("/collection/operands/0/@type")
+                .asText());
+        assertEquals("textClass", res.at("/collection/operands/0/key").asText());
+        assertEquals("Sport", res.at("/collection/operands/0/value").asText());
+        assertEquals("match:eq", res.at("/collection/operands/0/match")
+                .asText());
+        assertEquals("koral:docGroup", res.at("/collection/operands/1/@type")
+                .asText());
+        assertEquals("operation:and", res
+                .at("/collection/operands/1/operation").asText());
+        assertEquals("koral:doc",
+                res.at("/collection/operands/1/operands/0/@type").asText());
+        assertEquals("pubDate", res.at("/collection/operands/1/operands/0/key")
+                .asText());
+        assertEquals("2014", res.at("/collection/operands/1/operands/0/value")
+                .asText());
+        assertEquals("type:date",
+                res.at("/collection/operands/1/operands/0/type").asText());
+        assertEquals("match:eq",
+                res.at("/collection/operands/1/operands/0/match").asText());
+        assertEquals("koral:doc",
+                res.at("/collection/operands/1/operands/1/@type").asText());
+        assertEquals("corpusId", res
+                .at("/collection/operands/1/operands/1/key").asText());
+        assertEquals("WPD", res.at("/collection/operands/1/operands/1/value")
+                .asText());
+        assertEquals("match:eq",
+                res.at("/collection/operands/1/operands/1/match").asText());
+
+        collection = "textClass=Sport | pubDate in 2014 & corpusId=WPD";
+        qs.setQuery(query, ql);
+        qs.setCollection(collection);
+        res = mapper.readTree(qs.toJSON());
+        assertEquals("koral:docGroup", res.at("/collection/@type").asText());
+        assertEquals("operation:or", res.at("/collection/operation").asText());
+        assertEquals("koral:doc", res.at("/collection/operands/0/@type")
+                .asText());
+        assertEquals("textClass", res.at("/collection/operands/0/key").asText());
+        assertEquals("Sport", res.at("/collection/operands/0/value").asText());
+        assertEquals("match:eq", res.at("/collection/operands/0/match")
+                .asText());
+        assertEquals("koral:docGroup", res.at("/collection/operands/1/@type")
+                .asText());
+        assertEquals("operation:and", res
+                .at("/collection/operands/1/operation").asText());
+        assertEquals("koral:doc",
+                res.at("/collection/operands/1/operands/0/@type").asText());
+        assertEquals("pubDate", res.at("/collection/operands/1/operands/0/key")
+                .asText());
+        assertEquals("2014", res.at("/collection/operands/1/operands/0/value")
+                .asText());
+        assertEquals("type:date",
+                res.at("/collection/operands/1/operands/0/type").asText());
+        assertEquals("match:eq",
+                res.at("/collection/operands/1/operands/0/match").asText());
+        assertEquals("koral:doc",
+                res.at("/collection/operands/1/operands/1/@type").asText());
+        assertEquals("corpusId", res
+                .at("/collection/operands/1/operands/1/key").asText());
+        assertEquals("WPD", res.at("/collection/operands/1/operands/1/value")
+                .asText());
+        assertEquals("match:eq",
+                res.at("/collection/operands/1/operands/1/match").asText());
+
+        collection = "(textClass=Sport | pubDate in 2014) & corpusId=WPD";
+        qs.setQuery(query, ql);
+        qs.setCollection(collection);
+        res = mapper.readTree(qs.toJSON());
+        assertEquals("koral:docGroup", res.at("/collection/@type").asText());
+        assertEquals("operation:and", res.at("/collection/operation").asText());
+        assertEquals("koral:docGroup", res.at("/collection/operands/0/@type")
+                .asText());
+        assertEquals("operation:or", res.at("/collection/operands/0/operation")
+                .asText());
+        assertEquals("koral:doc",
+                res.at("/collection/operands/0/operands/0/@type").asText());
+        assertEquals("koral:doc",
+                res.at("/collection/operands/0/operands/1/@type").asText());
+        assertEquals("koral:doc", res.at("/collection/operands/1/@type")
+                .asText());
+
+        collection = "(textClass=Sport & pubDate in 2014) & corpusId=WPD";
+        qs.setQuery(query, ql);
+        qs.setCollection(collection);
+        res = mapper.readTree(qs.toJSON());
+        assertEquals("koral:docGroup", res.at("/collection/@type").asText());
+        assertEquals("operation:and", res.at("/collection/operation").asText());
+        assertEquals("koral:docGroup", res.at("/collection/operands/0/@type")
+                .asText());
+        assertEquals("operation:and", res
+                .at("/collection/operands/0/operation").asText());
+        assertEquals("koral:doc",
+                res.at("/collection/operands/0/operands/0/@type").asText());
+        assertEquals("koral:doc",
+                res.at("/collection/operands/0/operands/1/@type").asText());
+        assertEquals("koral:doc", res.at("/collection/operands/1/@type")
+                .asText());
+
+        collection = "(textClass=Sport & textClass=ausland) | (corpusID=WPD & author=White)";
+        qs.setQuery(query, ql);
+        qs.setCollection(collection);
+        res = mapper.readTree(qs.toJSON());
+        assertEquals("koral:docGroup", res.at("/collection/@type").asText());
+        assertEquals("operation:or", res.at("/collection/operation").asText());
+        assertEquals("koral:docGroup", res.at("/collection/operands/0/@type")
+                .asText());
+        assertEquals("operation:and", res
+                .at("/collection/operands/0/operation").asText());
+        assertEquals("koral:docGroup", res.at("/collection/operands/1/@type")
+                .asText());
+        assertEquals("operation:and", res
+                .at("/collection/operands/1/operation").asText());
+        assertEquals("koral:doc",
+                res.at("/collection/operands/0/operands/0/@type").asText());
+        assertEquals("Sport", res.at("/collection/operands/0/operands/0/value")
+                .asText());
+        assertEquals("koral:doc",
+                res.at("/collection/operands/0/operands/1/@type").asText());
+        assertEquals("ausland",
+                res.at("/collection/operands/0/operands/1/value").asText());
+        assertEquals("koral:doc",
+                res.at("/collection/operands/1/operands/0/@type").asText());
+        assertEquals("WPD", res.at("/collection/operands/1/operands/0/value")
+                .asText());
+        assertEquals("koral:doc",
+                res.at("/collection/operands/1/operands/1/@type").asText());
+        assertEquals("White", res.at("/collection/operands/1/operands/1/value")
+                .asText());
+
+        collection = "(textClass=Sport & textClass=ausland) | (corpusID=WPD & author=White & pubDate in 2000)";
+        qs.setQuery(query, ql);
+        qs.setCollection(collection);
+        res = mapper.readTree(qs.toJSON());
+        assertEquals("koral:docGroup", res.at("/collection/@type").asText());
+        assertEquals("operation:or", res.at("/collection/operation").asText());
+        assertEquals("koral:docGroup", res.at("/collection/operands/0/@type")
+                .asText());
+        assertEquals("operation:and", res
+                .at("/collection/operands/0/operation").asText());
+        assertEquals("koral:docGroup", res.at("/collection/operands/1/@type")
+                .asText());
+        assertEquals("operation:and", res
+                .at("/collection/operands/1/operation").asText());
+        assertEquals("koral:doc",
+                res.at("/collection/operands/0/operands/0/@type").asText());
+        assertEquals("Sport", res.at("/collection/operands/0/operands/0/value")
+                .asText());
+        assertEquals("koral:doc",
+                res.at("/collection/operands/0/operands/1/@type").asText());
+        assertEquals("ausland",
+                res.at("/collection/operands/0/operands/1/value").asText());
+        assertEquals("koral:doc",
+                res.at("/collection/operands/1/operands/0/@type").asText());
+        assertEquals("WPD", res.at("/collection/operands/1/operands/0/value")
+                .asText());
+        assertEquals("koral:docGroup",
+                res.at("/collection/operands/1/operands/1/@type").asText());
+        assertEquals("operation:and",
+                res.at("/collection/operands/1/operands/1/operation").asText());
+        assertEquals("White",
+                res.at("/collection/operands/1/operands/1/operands/0/value")
+                        .asText());
+        assertEquals("2000",
+                res.at("/collection/operands/1/operands/1/operands/1/value")
+                        .asText());
+    }
+
+
+    @Test
+    public void testDateYear () throws JsonProcessingException, IOException {
+        collection = "pubDate in 2000";
+        qs.setQuery(query, ql);
+        qs.setCollection(collection);
+        res = mapper.readTree(qs.toJSON());
+        assertEquals("koral:doc", res.at("/collection/@type").asText());
+        assertEquals("pubDate", res.at("/collection/key").asText());
+        assertEquals("2000", res.at("/collection/value").asText());
+        assertEquals("type:date", res.at("/collection/type").asText());
+        assertEquals("match:eq", res.at("/collection/match").asText());
+
+        collection = "pubDate = 2000";
+        qs.setQuery(query, ql);
+        qs.setCollection(collection);
+        res = mapper.readTree(qs.toJSON());
+        assertEquals("koral:doc", res.at("/collection/@type").asText());
+        assertEquals("pubDate", res.at("/collection/key").asText());
+        assertEquals("2000", res.at("/collection/value").asText());
+        assertEquals(true, res.at("/collection/type").isMissingNode());
+        assertEquals("match:eq", res.at("/collection/match").asText());
+
+        collection = "pubDate since 2000";
+        qs.setQuery(query, ql);
+        qs.setCollection(collection);
+        res = mapper.readTree(qs.toJSON());
+        assertEquals("koral:doc", res.at("/collection/@type").asText());
+        assertEquals("pubDate", res.at("/collection/key").asText());
+        assertEquals("2000", res.at("/collection/value").asText());
+        assertEquals("type:date", res.at("/collection/type").asText());
+        assertEquals("match:geq", res.at("/collection/match").asText());
+
+        collection = "pubDate until 2000";
+        qs.setQuery(query, ql);
+        qs.setCollection(collection);
+        res = mapper.readTree(qs.toJSON());
+        assertEquals("koral:doc", res.at("/collection/@type").asText());
+        assertEquals("pubDate", res.at("/collection/key").asText());
+        assertEquals("2000", res.at("/collection/value").asText());
+        assertEquals("type:date", res.at("/collection/type").asText());
+        assertEquals("match:leq", res.at("/collection/match").asText());
+    }
+
+
+    @Test
+    public void testDateMonthDay () throws JsonProcessingException, IOException {
+        collection = "pubDate in 2000-02";
+        qs.setQuery(query, ql);
+        qs.setCollection(collection);
+        res = mapper.readTree(qs.toJSON());
+        assertEquals("koral:doc", res.at("/collection/@type").asText());
+        assertEquals("pubDate", res.at("/collection/key").asText());
+        assertEquals("2000-02", res.at("/collection/value").asText());
+        assertEquals("type:date", res.at("/collection/type").asText());
+        assertEquals("match:eq", res.at("/collection/match").asText());
+
+        collection = "pubDate = 2000-12";
+        qs.setQuery(query, ql);
+        qs.setCollection(collection);
+        res = mapper.readTree(qs.toJSON());
+        assertEquals("koral:doc", res.at("/collection/@type").asText());
+        assertEquals("pubDate", res.at("/collection/key").asText());
+        assertEquals("2000-12", res.at("/collection/value").asText());
+        assertEquals(true, res.at("/collection/type").isMissingNode());
+        assertEquals("match:eq", res.at("/collection/match").asText());
+
+        collection = "pubDate since 2000-02-01";
+        qs.setQuery(query, ql);
+        qs.setCollection(collection);
+        res = mapper.readTree(qs.toJSON());
+        assertEquals("koral:doc", res.at("/collection/@type").asText());
+        assertEquals("pubDate", res.at("/collection/key").asText());
+        assertEquals("2000-02-01", res.at("/collection/value").asText());
+        assertEquals("type:date", res.at("/collection/type").asText());
+        assertEquals("match:geq", res.at("/collection/match").asText());
+
+        collection = "pubDate until 2000-01-01";
+        qs.setQuery(query, ql);
+        qs.setCollection(collection);
+        res = mapper.readTree(qs.toJSON());
+        assertEquals("koral:doc", res.at("/collection/@type").asText());
+        assertEquals("pubDate", res.at("/collection/key").asText());
+        assertEquals("2000-01-01", res.at("/collection/value").asText());
+        assertEquals("type:date", res.at("/collection/type").asText());
+        assertEquals("match:leq", res.at("/collection/match").asText());
+    }
 }
-
diff --git a/src/test/java/de/ids_mannheim/korap/query/serialize/Cosmas2QueryProcessorTest.java b/src/test/java/de/ids_mannheim/korap/query/serialize/Cosmas2QueryProcessorTest.java
index a21ff8c..fa3adc8 100644
--- a/src/test/java/de/ids_mannheim/korap/query/serialize/Cosmas2QueryProcessorTest.java
+++ b/src/test/java/de/ids_mannheim/korap/query/serialize/Cosmas2QueryProcessorTest.java
@@ -1,4 +1,5 @@
 package de.ids_mannheim.korap.query.serialize;
+
 import static org.junit.Assert.*;
 
 import java.io.IOException;
@@ -14,7 +15,8 @@
 import com.fasterxml.jackson.databind.ObjectMapper;
 
 /**
- * Tests for JSON-LD serialization of Cosmas II queries. 
+ * Tests for JSON-LD serialization of Cosmas II queries.
+ * 
  * @author Joachim Bingel (bingel@ids-mannheim.de)
  * @version 1.0
  */
@@ -28,8 +30,9 @@
     ObjectMapper mapper = new ObjectMapper();
     JsonNode res;
 
+
     @Test
-    public void testContext() throws JsonProcessingException, IOException {
+    public void testContext () throws JsonProcessingException, IOException {
         String contextString = "http://korap.ids-mannheim.de/ns/koral/0.3/context.jsonld";
         query = "foo";
         qs.setQuery(query, "cosmas2");
@@ -39,1129 +42,1783 @@
 
 
     @Test
-    public void testSingleToken() throws JsonProcessingException, IOException {
+    public void testSingleToken () throws JsonProcessingException, IOException {
         query = "der";
         qs.setQuery(query, "cosmas2");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:token", 		res.at("/query/@type").asText());
-        assertEquals("koral:term", 			res.at("/query/wrap/@type").asText());
-        assertEquals("der", 				res.at("/query/wrap/key").asText());
-        assertEquals("orth", 				res.at("/query/wrap/layer").asText());
-        assertEquals("match:eq",			res.at("/query/wrap/match").asText());
+        assertEquals("koral:token", res.at("/query/@type").asText());
+        assertEquals("koral:term", res.at("/query/wrap/@type").asText());
+        assertEquals("der", res.at("/query/wrap/key").asText());
+        assertEquals("orth", res.at("/query/wrap/layer").asText());
+        assertEquals("match:eq", res.at("/query/wrap/match").asText());
 
         query = "&Mann";
         qs.setQuery(query, "cosmas2");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:token", 		res.at("/query/@type").asText());
-        assertEquals("koral:term", 			res.at("/query/wrap/@type").asText());
-        assertEquals("Mann", 				res.at("/query/wrap/key").asText());
-        assertEquals("lemma", 				res.at("/query/wrap/layer").asText());
-        assertEquals("match:eq",			res.at("/query/wrap/match").asText());
+        assertEquals("koral:token", res.at("/query/@type").asText());
+        assertEquals("koral:term", res.at("/query/wrap/@type").asText());
+        assertEquals("Mann", res.at("/query/wrap/key").asText());
+        assertEquals("lemma", res.at("/query/wrap/layer").asText());
+        assertEquals("match:eq", res.at("/query/wrap/match").asText());
     }
 
 
 
     @Test
-    public void testWildcardToken() throws JsonProcessingException, IOException {
+    public void testWildcardToken () throws JsonProcessingException,
+            IOException {
         query = "*der";
         qs.setQuery(query, "cosmas2");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:term", 			res.at("/query/wrap/@type").asText());
-        assertEquals("type:wildcard",		res.at("/query/wrap/type").asText());
-        assertEquals("*der", 				res.at("/query/wrap/key").asText());
-        assertEquals("orth", 				res.at("/query/wrap/layer").asText());
-        assertEquals("match:eq",			res.at("/query/wrap/match").asText());
+        assertEquals("koral:term", res.at("/query/wrap/@type").asText());
+        assertEquals("type:wildcard", res.at("/query/wrap/type").asText());
+        assertEquals("*der", res.at("/query/wrap/key").asText());
+        assertEquals("orth", res.at("/query/wrap/layer").asText());
+        assertEquals("match:eq", res.at("/query/wrap/match").asText());
 
         query = "*de*?r";
         qs.setQuery(query, "cosmas2");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("*de*?r", 				res.at("/query/wrap/key").asText());
+        assertEquals("*de*?r", res.at("/query/wrap/key").asText());
     }
+
+
     //	
     @Test
-    public void testCaseSensitivityFlag() throws JsonProcessingException, IOException {
+    public void testCaseSensitivityFlag () throws JsonProcessingException,
+            IOException {
         query = "$deutscher";
         qs.setQuery(query, "cosmas2");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:term", 			res.at("/query/wrap/@type").asText());
-        assertEquals("deutscher",			res.at("/query/wrap/key").asText());
-        assertEquals("flags:caseInsensitive",     res.at("/query/wrap/flags/0").asText());
-        assertEquals("orth", 				res.at("/query/wrap/layer").asText());
-        assertEquals("match:eq",			res.at("/query/wrap/match").asText());
+        assertEquals("koral:term", res.at("/query/wrap/@type").asText());
+        assertEquals("deutscher", res.at("/query/wrap/key").asText());
+        assertEquals("flags:caseInsensitive", res.at("/query/wrap/flags/0")
+                .asText());
+        assertEquals("orth", res.at("/query/wrap/layer").asText());
+        assertEquals("match:eq", res.at("/query/wrap/match").asText());
 
         query = "$deutscher Bundestag";
         qs.setQuery(query, "cosmas2");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:group",			res.at("/query/@type").asText());
-        assertEquals("operation:sequence",	res.at("/query/operation").asText());
-        assertEquals("koral:term", 			res.at("/query/operands/0/wrap/@type").asText());
-        assertEquals("deutscher",			res.at("/query/operands/0/wrap/key").asText());
-        assertEquals("flags:caseInsensitive",     res.at("/query/operands/0/wrap/flags/0").asText());
-        assertEquals("orth", 				res.at("/query/operands/0/wrap/layer").asText());
-        assertEquals("match:eq",			res.at("/query/operands/0/wrap/match").asText());
-        assertEquals("Bundestag",			res.at("/query/operands/1/wrap/key").asText());
+        assertEquals("koral:group", res.at("/query/@type").asText());
+        assertEquals("operation:sequence", res.at("/query/operation").asText());
+        assertEquals("koral:term", res.at("/query/operands/0/wrap/@type")
+                .asText());
+        assertEquals("deutscher", res.at("/query/operands/0/wrap/key").asText());
+        assertEquals("flags:caseInsensitive",
+                res.at("/query/operands/0/wrap/flags/0").asText());
+        assertEquals("orth", res.at("/query/operands/0/wrap/layer").asText());
+        assertEquals("match:eq", res.at("/query/operands/0/wrap/match")
+                .asText());
+        assertEquals("Bundestag", res.at("/query/operands/1/wrap/key").asText());
     }
 
+
     @Test
-    public void testMORPH() throws JsonProcessingException, IOException {
+    public void testMORPH () throws JsonProcessingException, IOException {
         query = "MORPH(p=V)";
         qs.setQuery(query, "cosmas2");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:token",			res.at("/query/@type").asText());
-        assertEquals("koral:term", 			res.at("/query/wrap/@type").asText());
-        assertEquals("V",					res.at("/query/wrap/key").asText());
-        assertEquals("p",					res.at("/query/wrap/layer").asText());
-        assertEquals("match:eq",			res.at("/query/wrap/match").asText());
+        assertEquals("koral:token", res.at("/query/@type").asText());
+        assertEquals("koral:term", res.at("/query/wrap/@type").asText());
+        assertEquals("V", res.at("/query/wrap/key").asText());
+        assertEquals("p", res.at("/query/wrap/layer").asText());
+        assertEquals("match:eq", res.at("/query/wrap/match").asText());
 
         query = "MORPH(V)";
         qs.setQuery(query, "cosmas2");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:token",			res.at("/query/@type").asText());
-        assertEquals("koral:term", 			res.at("/query/wrap/@type").asText());
-        assertEquals("V",					res.at("/query/wrap/key").asText());
-        assertEquals("match:eq",			res.at("/query/wrap/match").asText());
+        assertEquals("koral:token", res.at("/query/@type").asText());
+        assertEquals("koral:term", res.at("/query/wrap/@type").asText());
+        assertEquals("V", res.at("/query/wrap/key").asText());
+        assertEquals("match:eq", res.at("/query/wrap/match").asText());
 
         query = "MORPH(tt/p=V)";
         qs.setQuery(query, "cosmas2");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:token",			res.at("/query/@type").asText());
-        assertEquals("koral:term", 			res.at("/query/wrap/@type").asText());
-        assertEquals("V",					res.at("/query/wrap/key").asText());
-        assertEquals("p",					res.at("/query/wrap/layer").asText());
-        assertEquals("tt",					res.at("/query/wrap/foundry").asText());
-        assertEquals("match:eq",			res.at("/query/wrap/match").asText());
+        assertEquals("koral:token", res.at("/query/@type").asText());
+        assertEquals("koral:term", res.at("/query/wrap/@type").asText());
+        assertEquals("V", res.at("/query/wrap/key").asText());
+        assertEquals("p", res.at("/query/wrap/layer").asText());
+        assertEquals("tt", res.at("/query/wrap/foundry").asText());
+        assertEquals("match:eq", res.at("/query/wrap/match").asText());
 
         query = "MORPH(tt/p=\"V.*\")";
         qs.setQuery(query, "cosmas2");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:token",         res.at("/query/@type").asText());
-        assertEquals("koral:term",          res.at("/query/wrap/@type").asText());
-        assertEquals("type:regex",          res.at("/query/wrap/type").asText());
-        assertEquals("V.*",                 res.at("/query/wrap/key").asText());
-        assertEquals("p",                   res.at("/query/wrap/layer").asText());
-        assertEquals("tt",                  res.at("/query/wrap/foundry").asText());
-        assertEquals("match:eq",            res.at("/query/wrap/match").asText());
+        assertEquals("koral:token", res.at("/query/@type").asText());
+        assertEquals("koral:term", res.at("/query/wrap/@type").asText());
+        assertEquals("type:regex", res.at("/query/wrap/type").asText());
+        assertEquals("V.*", res.at("/query/wrap/key").asText());
+        assertEquals("p", res.at("/query/wrap/layer").asText());
+        assertEquals("tt", res.at("/query/wrap/foundry").asText());
+        assertEquals("match:eq", res.at("/query/wrap/match").asText());
 
         query = "MORPH(mate/m=temp:pres)";
         qs.setQuery(query, "cosmas2");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:token",			res.at("/query/@type").asText());
-        assertEquals("koral:term", 			res.at("/query/wrap/@type").asText());
-        assertEquals("temp",				res.at("/query/wrap/key").asText());
-        assertEquals("pres",				res.at("/query/wrap/value").asText());
-        assertEquals("m",					res.at("/query/wrap/layer").asText());
-        assertEquals("mate",				res.at("/query/wrap/foundry").asText());
-        assertEquals("match:eq",			res.at("/query/wrap/match").asText());
+        assertEquals("koral:token", res.at("/query/@type").asText());
+        assertEquals("koral:term", res.at("/query/wrap/@type").asText());
+        assertEquals("temp", res.at("/query/wrap/key").asText());
+        assertEquals("pres", res.at("/query/wrap/value").asText());
+        assertEquals("m", res.at("/query/wrap/layer").asText());
+        assertEquals("mate", res.at("/query/wrap/foundry").asText());
+        assertEquals("match:eq", res.at("/query/wrap/match").asText());
 
         query = "MORPH(tt/p=V & mate/m!=temp:pres)";
         qs.setQuery(query, "cosmas2");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:token",			res.at("/query/@type").asText());
-        assertEquals("koral:termGroup",		res.at("/query/wrap/@type").asText());
-        assertEquals("V",					res.at("/query/wrap/operands/0/key").asText());
-        assertEquals("p",					res.at("/query/wrap/operands/0/layer").asText());
-        assertEquals("tt",					res.at("/query/wrap/operands/0/foundry").asText());
-        assertEquals("match:eq",			res.at("/query/wrap/operands/0/match").asText());
-        assertEquals("temp",				res.at("/query/wrap/operands/1/key").asText());
-        assertEquals("pres",				res.at("/query/wrap/operands/1/value").asText());
-        assertEquals("m",					res.at("/query/wrap/operands/1/layer").asText());
-        assertEquals("mate",				res.at("/query/wrap/operands/1/foundry").asText());
-        assertEquals("match:ne",			res.at("/query/wrap/operands/1/match").asText());
+        assertEquals("koral:token", res.at("/query/@type").asText());
+        assertEquals("koral:termGroup", res.at("/query/wrap/@type").asText());
+        assertEquals("V", res.at("/query/wrap/operands/0/key").asText());
+        assertEquals("p", res.at("/query/wrap/operands/0/layer").asText());
+        assertEquals("tt", res.at("/query/wrap/operands/0/foundry").asText());
+        assertEquals("match:eq", res.at("/query/wrap/operands/0/match")
+                .asText());
+        assertEquals("temp", res.at("/query/wrap/operands/1/key").asText());
+        assertEquals("pres", res.at("/query/wrap/operands/1/value").asText());
+        assertEquals("m", res.at("/query/wrap/operands/1/layer").asText());
+        assertEquals("mate", res.at("/query/wrap/operands/1/foundry").asText());
+        assertEquals("match:ne", res.at("/query/wrap/operands/1/match")
+                .asText());
     }
 
+
     @Test
-    public void testSequence() throws JsonProcessingException, IOException {
+    public void testSequence () throws JsonProcessingException, IOException {
         query = "der Mann";
         qs.setQuery(query, "cosmas2");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:group",			res.at("/query/@type").asText());
-        assertEquals("operation:sequence",	res.at("/query/operation").asText());
-        assertEquals("der",					res.at("/query/operands/0/wrap/key").asText());
-        assertEquals("Mann",				res.at("/query/operands/1/wrap/key").asText());
-        assertEquals(true,					res.at("/query/operands/2").isMissingNode());
+        assertEquals("koral:group", res.at("/query/@type").asText());
+        assertEquals("operation:sequence", res.at("/query/operation").asText());
+        assertEquals("der", res.at("/query/operands/0/wrap/key").asText());
+        assertEquals("Mann", res.at("/query/operands/1/wrap/key").asText());
+        assertEquals(true, res.at("/query/operands/2").isMissingNode());
 
         query = "der Mann schläft";
         qs.setQuery(query, "cosmas2");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:group",			res.at("/query/@type").asText());
-        assertEquals("operation:sequence",	res.at("/query/operation").asText());
-        assertEquals("der",					res.at("/query/operands/0/wrap/key").asText());
-        assertEquals("Mann",				res.at("/query/operands/1/wrap/key").asText());
-        assertEquals("schläft",				res.at("/query/operands/2/wrap/key").asText());
-        assertEquals(true,					res.at("/query/operands/3").isMissingNode());
+        assertEquals("koral:group", res.at("/query/@type").asText());
+        assertEquals("operation:sequence", res.at("/query/operation").asText());
+        assertEquals("der", res.at("/query/operands/0/wrap/key").asText());
+        assertEquals("Mann", res.at("/query/operands/1/wrap/key").asText());
+        assertEquals("schläft", res.at("/query/operands/2/wrap/key").asText());
+        assertEquals(true, res.at("/query/operands/3").isMissingNode());
 
         query = "der Mann schläft lang";
         qs.setQuery(query, "cosmas2");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:group",			res.at("/query/@type").asText());
-        assertEquals("operation:sequence",	res.at("/query/operation").asText());
-        assertEquals("der",					res.at("/query/operands/0/wrap/key").asText());
-        assertEquals("Mann",				res.at("/query/operands/1/wrap/key").asText());
-        assertEquals("schläft",				res.at("/query/operands/2/wrap/key").asText());
-        assertEquals("lang",				res.at("/query/operands/3/wrap/key").asText());
-        assertEquals(true,					res.at("/query/operands/4").isMissingNode());
+        assertEquals("koral:group", res.at("/query/@type").asText());
+        assertEquals("operation:sequence", res.at("/query/operation").asText());
+        assertEquals("der", res.at("/query/operands/0/wrap/key").asText());
+        assertEquals("Mann", res.at("/query/operands/1/wrap/key").asText());
+        assertEquals("schläft", res.at("/query/operands/2/wrap/key").asText());
+        assertEquals("lang", res.at("/query/operands/3/wrap/key").asText());
+        assertEquals(true, res.at("/query/operands/4").isMissingNode());
 
         query = "der #ELEM(W)";
         qs.setQuery(query, "cosmas2");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:group",			res.at("/query/@type").asText());
-        assertEquals("operation:sequence",	res.at("/query/operation").asText());
-        assertEquals("der",					res.at("/query/operands/0/wrap/key").asText());
-        assertEquals("w",					res.at("/query/operands/1/key").asText());
-        assertEquals("koral:span",			res.at("/query/operands/1/@type").asText());
-        assertEquals(true,					res.at("/query/operands/2").isMissingNode());
+        assertEquals("koral:group", res.at("/query/@type").asText());
+        assertEquals("operation:sequence", res.at("/query/operation").asText());
+        assertEquals("der", res.at("/query/operands/0/wrap/key").asText());
+        assertEquals("w", res.at("/query/operands/1/key").asText());
+        assertEquals("koral:span", res.at("/query/operands/1/@type").asText());
+        assertEquals(true, res.at("/query/operands/2").isMissingNode());
 
         query = "der #ELEM(W) Mann";
         qs.setQuery(query, "cosmas2");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:group",			res.at("/query/@type").asText());
-        assertEquals("operation:sequence",	res.at("/query/operation").asText());
-        assertEquals("der",					res.at("/query/operands/0/wrap/key").asText());
-        assertEquals("w",					res.at("/query/operands/1/key").asText());
-        assertEquals("koral:span",			res.at("/query/operands/1/@type").asText());
-        assertEquals("Mann",				res.at("/query/operands/2/wrap/key").asText());
-        assertEquals(true,					res.at("/query/operands/3").isMissingNode());
+        assertEquals("koral:group", res.at("/query/@type").asText());
+        assertEquals("operation:sequence", res.at("/query/operation").asText());
+        assertEquals("der", res.at("/query/operands/0/wrap/key").asText());
+        assertEquals("w", res.at("/query/operands/1/key").asText());
+        assertEquals("koral:span", res.at("/query/operands/1/@type").asText());
+        assertEquals("Mann", res.at("/query/operands/2/wrap/key").asText());
+        assertEquals(true, res.at("/query/operands/3").isMissingNode());
 
         query = "der MORPH(p=ADJA) Mann";
         qs.setQuery(query, "cosmas2");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:group",			res.at("/query/@type").asText());
-        assertEquals("operation:sequence",	res.at("/query/operation").asText());
-        assertEquals("der",					res.at("/query/operands/0/wrap/key").asText());
-        assertEquals("ADJA",				res.at("/query/operands/1/wrap/key").asText());
-        assertEquals("p",					res.at("/query/operands/1/wrap/layer").asText());
-        assertEquals("Mann",				res.at("/query/operands/2/wrap/key").asText());
-        assertEquals(true,					res.at("/query/operands/3").isMissingNode());
+        assertEquals("koral:group", res.at("/query/@type").asText());
+        assertEquals("operation:sequence", res.at("/query/operation").asText());
+        assertEquals("der", res.at("/query/operands/0/wrap/key").asText());
+        assertEquals("ADJA", res.at("/query/operands/1/wrap/key").asText());
+        assertEquals("p", res.at("/query/operands/1/wrap/layer").asText());
+        assertEquals("Mann", res.at("/query/operands/2/wrap/key").asText());
+        assertEquals(true, res.at("/query/operands/3").isMissingNode());
     }
 
+
     @Test
-    public void testOPOR() throws JsonProcessingException, IOException {
+    public void testOPOR () throws JsonProcessingException, IOException {
         query = "Sonne oder Mond";
         qs.setQuery(query, "cosmas2");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:group",			res.at("/query/@type").asText());
-        assertEquals("operation:disjunction",		res.at("/query/operation").asText());
-        assertEquals("Sonne",				res.at("/query/operands/0/wrap/key").asText());
-        assertEquals("Mond",				res.at("/query/operands/1/wrap/key").asText());
-        assertEquals(true,					res.at("/query/operands/2").isMissingNode());
+        assertEquals("koral:group", res.at("/query/@type").asText());
+        assertEquals("operation:disjunction", res.at("/query/operation")
+                .asText());
+        assertEquals("Sonne", res.at("/query/operands/0/wrap/key").asText());
+        assertEquals("Mond", res.at("/query/operands/1/wrap/key").asText());
+        assertEquals(true, res.at("/query/operands/2").isMissingNode());
 
         query = "(Sonne scheint) oder Mond";
         qs.setQuery(query, "cosmas2");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:group",			res.at("/query/@type").asText());
-        assertEquals("operation:disjunction",		res.at("/query/operation").asText());
-        assertEquals("koral:group",			res.at("/query/operands/0/@type").asText());
-        assertEquals("operation:sequence",	res.at("/query/operands/0/operation").asText());
-        assertEquals("Sonne",				res.at("/query/operands/0/operands/0/wrap/key").asText());
-        assertEquals("scheint",				res.at("/query/operands/0/operands/1/wrap/key").asText());
-        assertEquals("Mond",				res.at("/query/operands/1/wrap/key").asText());
-        assertEquals(true,					res.at("/query/operands/2").isMissingNode());
+        assertEquals("koral:group", res.at("/query/@type").asText());
+        assertEquals("operation:disjunction", res.at("/query/operation")
+                .asText());
+        assertEquals("koral:group", res.at("/query/operands/0/@type").asText());
+        assertEquals("operation:sequence", res
+                .at("/query/operands/0/operation").asText());
+        assertEquals("Sonne", res.at("/query/operands/0/operands/0/wrap/key")
+                .asText());
+        assertEquals("scheint", res.at("/query/operands/0/operands/1/wrap/key")
+                .asText());
+        assertEquals("Mond", res.at("/query/operands/1/wrap/key").asText());
+        assertEquals(true, res.at("/query/operands/2").isMissingNode());
 
         query = "(Sonne scheint) oder (Mond scheint)";
         qs.setQuery(query, "cosmas2");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:group",			res.at("/query/@type").asText());
-        assertEquals("operation:disjunction",		res.at("/query/operation").asText());
-        assertEquals("koral:group",			res.at("/query/operands/0/@type").asText());
-        assertEquals("operation:sequence",	res.at("/query/operands/0/operation").asText());
-        assertEquals("koral:group",			res.at("/query/operands/1/@type").asText());
-        assertEquals("operation:sequence",	res.at("/query/operands/1/operation").asText());
-        assertEquals("Sonne",				res.at("/query/operands/0/operands/0/wrap/key").asText());
-        assertEquals("scheint",				res.at("/query/operands/0/operands/1/wrap/key").asText());
-        assertEquals("Mond",				res.at("/query/operands/1/operands/0/wrap/key").asText());
-        assertEquals("scheint",				res.at("/query/operands/1/operands/1/wrap/key").asText());
-        assertEquals(true,					res.at("/query/operands/2").isMissingNode());
+        assertEquals("koral:group", res.at("/query/@type").asText());
+        assertEquals("operation:disjunction", res.at("/query/operation")
+                .asText());
+        assertEquals("koral:group", res.at("/query/operands/0/@type").asText());
+        assertEquals("operation:sequence", res
+                .at("/query/operands/0/operation").asText());
+        assertEquals("koral:group", res.at("/query/operands/1/@type").asText());
+        assertEquals("operation:sequence", res
+                .at("/query/operands/1/operation").asText());
+        assertEquals("Sonne", res.at("/query/operands/0/operands/0/wrap/key")
+                .asText());
+        assertEquals("scheint", res.at("/query/operands/0/operands/1/wrap/key")
+                .asText());
+        assertEquals("Mond", res.at("/query/operands/1/operands/0/wrap/key")
+                .asText());
+        assertEquals("scheint", res.at("/query/operands/1/operands/1/wrap/key")
+                .asText());
+        assertEquals(true, res.at("/query/operands/2").isMissingNode());
     }
 
+
     @Test
-    public void testOPORAND() throws JsonProcessingException, IOException {
+    public void testOPORAND () throws JsonProcessingException, IOException {
         query = "(Sonne oder Mond) und scheint";
         qs.setQuery(query, "cosmas2");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:group",			res.at("/query/@type").asText());
-        assertEquals("operation:sequence",	res.at("/query/operation").asText());
-        assertEquals("cosmas:distance",		res.at("/query/distances/0/@type").asText());
-        assertEquals("t",					res.at("/query/distances/0/key").asText());
-        assertEquals(0,						res.at("/query/distances/0/min").asInt());
-        assertEquals(0,						res.at("/query/distances/0/max").asInt());
-        assertEquals("koral:group",			res.at("/query/operands/0/@type").asText());
-        assertEquals("operation:disjunction",		res.at("/query/operands/0/operation").asText());
-        assertEquals("Sonne",				res.at("/query/operands/0/operands/0/wrap/key").asText());
-        assertEquals("Mond",				res.at("/query/operands/0/operands/1/wrap/key").asText());
-        assertEquals("koral:token",			res.at("/query/operands/1/@type").asText());
-        assertEquals("scheint",				res.at("/query/operands/1/wrap/key").asText());
+        assertEquals("koral:group", res.at("/query/@type").asText());
+        assertEquals("operation:sequence", res.at("/query/operation").asText());
+        assertEquals("cosmas:distance", res.at("/query/distances/0/@type")
+                .asText());
+        assertEquals("t", res.at("/query/distances/0/key").asText());
+        assertEquals(0, res.at("/query/distances/0/min").asInt());
+        assertEquals(0, res.at("/query/distances/0/max").asInt());
+        assertEquals("koral:group", res.at("/query/operands/0/@type").asText());
+        assertEquals("operation:disjunction",
+                res.at("/query/operands/0/operation").asText());
+        assertEquals("Sonne", res.at("/query/operands/0/operands/0/wrap/key")
+                .asText());
+        assertEquals("Mond", res.at("/query/operands/0/operands/1/wrap/key")
+                .asText());
+        assertEquals("koral:token", res.at("/query/operands/1/@type").asText());
+        assertEquals("scheint", res.at("/query/operands/1/wrap/key").asText());
 
         query = "scheint und (Sonne oder Mond)";
         qs.setQuery(query, "cosmas2");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:group",			res.at("/query/@type").asText());
-        assertEquals("operation:sequence",	res.at("/query/operation").asText());
-        assertEquals("cosmas:distance",		res.at("/query/distances/0/@type").asText());
-        assertEquals("t",					res.at("/query/distances/0/key").asText());
-        assertEquals(0,						res.at("/query/distances/0/min").asInt());
-        assertEquals(0,						res.at("/query/distances/0/max").asInt());
-        assertEquals("koral:token",			res.at("/query/operands/0/@type").asText());
-        assertEquals("scheint",				res.at("/query/operands/0/wrap/key").asText());
-        assertEquals("koral:group",			res.at("/query/operands/1/@type").asText());
-        assertEquals("operation:disjunction",		res.at("/query/operands/1/operation").asText());
-        assertEquals("Sonne",				res.at("/query/operands/1/operands/0/wrap/key").asText());
-        assertEquals("Mond",				res.at("/query/operands/1/operands/1/wrap/key").asText());
+        assertEquals("koral:group", res.at("/query/@type").asText());
+        assertEquals("operation:sequence", res.at("/query/operation").asText());
+        assertEquals("cosmas:distance", res.at("/query/distances/0/@type")
+                .asText());
+        assertEquals("t", res.at("/query/distances/0/key").asText());
+        assertEquals(0, res.at("/query/distances/0/min").asInt());
+        assertEquals(0, res.at("/query/distances/0/max").asInt());
+        assertEquals("koral:token", res.at("/query/operands/0/@type").asText());
+        assertEquals("scheint", res.at("/query/operands/0/wrap/key").asText());
+        assertEquals("koral:group", res.at("/query/operands/1/@type").asText());
+        assertEquals("operation:disjunction",
+                res.at("/query/operands/1/operation").asText());
+        assertEquals("Sonne", res.at("/query/operands/1/operands/0/wrap/key")
+                .asText());
+        assertEquals("Mond", res.at("/query/operands/1/operands/1/wrap/key")
+                .asText());
 
         query = "Regen und scheint und (Sonne oder Mond)";
         qs.setQuery(query, "cosmas2");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:group",			res.at("/query/@type").asText());
-        assertEquals("operation:sequence",	res.at("/query/operation").asText());
-        assertEquals("cosmas:distance",		res.at("/query/distances/0/@type").asText());
-        assertEquals("t",					res.at("/query/distances/0/key").asText());
-        assertEquals(0,						res.at("/query/distances/0/min").asInt());
-        assertEquals(0,						res.at("/query/distances/0/max").asInt());
-        assertEquals("koral:token",			res.at("/query/operands/0/@type").asText());
-        assertEquals("Regen",				res.at("/query/operands/0/wrap/key").asText());
-        assertEquals("koral:group",			res.at("/query/@type").asText());
-        assertEquals("operation:sequence",	res.at("/query/operation").asText());
-        assertEquals("cosmas:distance",		res.at("/query/operands/1/distances/0/@type").asText());
-        assertEquals("t",					res.at("/query/operands/1/distances/0/key").asText());
-        assertEquals(0,						res.at("/query/operands/1/distances/0/min").asInt());
-        assertEquals(0,						res.at("/query/operands/1/distances/0/max").asInt());
-        assertEquals("scheint",				res.at("/query/operands/1/operands/0/wrap/key").asText());
-        assertEquals("koral:group",			res.at("/query/operands/1/operands/1/@type").asText());
-        assertEquals("operation:disjunction",		res.at("/query/operands/1/operands/1/operation").asText());
-        assertEquals("Sonne",				res.at("/query/operands/1/operands/1/operands/0/wrap/key").asText());
-        assertEquals("Mond",				res.at("/query/operands/1/operands/1/operands/1/wrap/key").asText());
+        assertEquals("koral:group", res.at("/query/@type").asText());
+        assertEquals("operation:sequence", res.at("/query/operation").asText());
+        assertEquals("cosmas:distance", res.at("/query/distances/0/@type")
+                .asText());
+        assertEquals("t", res.at("/query/distances/0/key").asText());
+        assertEquals(0, res.at("/query/distances/0/min").asInt());
+        assertEquals(0, res.at("/query/distances/0/max").asInt());
+        assertEquals("koral:token", res.at("/query/operands/0/@type").asText());
+        assertEquals("Regen", res.at("/query/operands/0/wrap/key").asText());
+        assertEquals("koral:group", res.at("/query/@type").asText());
+        assertEquals("operation:sequence", res.at("/query/operation").asText());
+        assertEquals("cosmas:distance",
+                res.at("/query/operands/1/distances/0/@type").asText());
+        assertEquals("t", res.at("/query/operands/1/distances/0/key").asText());
+        assertEquals(0, res.at("/query/operands/1/distances/0/min").asInt());
+        assertEquals(0, res.at("/query/operands/1/distances/0/max").asInt());
+        assertEquals("scheint", res.at("/query/operands/1/operands/0/wrap/key")
+                .asText());
+        assertEquals("koral:group", res
+                .at("/query/operands/1/operands/1/@type").asText());
+        assertEquals("operation:disjunction",
+                res.at("/query/operands/1/operands/1/operation").asText());
+        assertEquals("Sonne",
+                res.at("/query/operands/1/operands/1/operands/0/wrap/key")
+                        .asText());
+        assertEquals("Mond",
+                res.at("/query/operands/1/operands/1/operands/1/wrap/key")
+                        .asText());
     }
 
+
     @Test
-    public void testOPNOT() throws JsonProcessingException, IOException {
+    public void testOPNOT () throws JsonProcessingException, IOException {
         query = "Sonne nicht Mond";
         qs.setQuery(query, "cosmas2");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:group",			res.at("/query/@type").asText());
-        assertEquals("operation:sequence",	res.at("/query/operation").asText());
-        assertEquals("cosmas:distance",		res.at("/query/distances/0/@type").asText());
-        assertEquals("t",					res.at("/query/distances/0/key").asText());
-        assertEquals(0,						res.at("/query/distances/0/min").asInt());
-        assertEquals(0,						res.at("/query/distances/0/max").asInt());
-        assertEquals(true,					res.at("/query/distances/0/exclude").asBoolean());
-        assertEquals("koral:token",			res.at("/query/operands/0/@type").asText());
-        assertEquals("Sonne",				res.at("/query/operands/0/wrap/key").asText());
-        assertEquals("Mond",				res.at("/query/operands/1/wrap/key").asText());
+        assertEquals("koral:group", res.at("/query/@type").asText());
+        assertEquals("operation:sequence", res.at("/query/operation").asText());
+        assertEquals("cosmas:distance", res.at("/query/distances/0/@type")
+                .asText());
+        assertEquals("t", res.at("/query/distances/0/key").asText());
+        assertEquals(0, res.at("/query/distances/0/min").asInt());
+        assertEquals(0, res.at("/query/distances/0/max").asInt());
+        assertEquals(true, res.at("/query/distances/0/exclude").asBoolean());
+        assertEquals("koral:token", res.at("/query/operands/0/@type").asText());
+        assertEquals("Sonne", res.at("/query/operands/0/wrap/key").asText());
+        assertEquals("Mond", res.at("/query/operands/1/wrap/key").asText());
 
         query = "Sonne nicht Mond nicht Sterne";
         qs.setQuery(query, "cosmas2");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:group",			res.at("/query/@type").asText());
-        assertEquals("operation:sequence",	res.at("/query/operation").asText());
-        assertEquals("cosmas:distance",		res.at("/query/distances/0/@type").asText());
-        assertEquals("t",					res.at("/query/distances/0/key").asText());
-        assertEquals(0,						res.at("/query/distances/0/min").asInt());
-        assertEquals(0,						res.at("/query/distances/0/max").asInt());
-        assertEquals(true,					res.at("/query/distances/0/exclude").asBoolean());
-        assertEquals("koral:token",			res.at("/query/operands/0/@type").asText());
-        assertEquals("Sonne",				res.at("/query/operands/0/wrap/key").asText());
-        assertEquals("koral:group",			res.at("/query/operands/1/@type").asText());
-        assertEquals("operation:sequence",	res.at("/query/operands/1/operation").asText());
-        assertEquals("cosmas:distance",		res.at("/query/operands/1/distances/0/@type").asText());
-        assertEquals("t",					res.at("/query/operands/1/distances/0/key").asText());
-        assertEquals(0,						res.at("/query/operands/1/distances/0/min").asInt());
-        assertEquals(0,						res.at("/query/operands/1/distances/0/max").asInt());
-        assertEquals(true,					res.at("/query/operands/1/distances/0/exclude").asBoolean());
-        assertEquals("Mond",				res.at("/query/operands/1/operands/0/wrap/key").asText());
-        assertEquals("Sterne",				res.at("/query/operands/1/operands/1/wrap/key").asText());
+        assertEquals("koral:group", res.at("/query/@type").asText());
+        assertEquals("operation:sequence", res.at("/query/operation").asText());
+        assertEquals("cosmas:distance", res.at("/query/distances/0/@type")
+                .asText());
+        assertEquals("t", res.at("/query/distances/0/key").asText());
+        assertEquals(0, res.at("/query/distances/0/min").asInt());
+        assertEquals(0, res.at("/query/distances/0/max").asInt());
+        assertEquals(true, res.at("/query/distances/0/exclude").asBoolean());
+        assertEquals("koral:token", res.at("/query/operands/0/@type").asText());
+        assertEquals("Sonne", res.at("/query/operands/0/wrap/key").asText());
+        assertEquals("koral:group", res.at("/query/operands/1/@type").asText());
+        assertEquals("operation:sequence", res
+                .at("/query/operands/1/operation").asText());
+        assertEquals("cosmas:distance",
+                res.at("/query/operands/1/distances/0/@type").asText());
+        assertEquals("t", res.at("/query/operands/1/distances/0/key").asText());
+        assertEquals(0, res.at("/query/operands/1/distances/0/min").asInt());
+        assertEquals(0, res.at("/query/operands/1/distances/0/max").asInt());
+        assertEquals(true, res.at("/query/operands/1/distances/0/exclude")
+                .asBoolean());
+        assertEquals("Mond", res.at("/query/operands/1/operands/0/wrap/key")
+                .asText());
+        assertEquals("Sterne", res.at("/query/operands/1/operands/1/wrap/key")
+                .asText());
 
         query = "(Sonne nicht Mond) nicht Sterne";
         qs.setQuery(query, "cosmas2");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:group",			res.at("/query/@type").asText());
-        assertEquals("operation:sequence",	res.at("/query/operation").asText());
-        assertEquals("cosmas:distance",		res.at("/query/distances/0/@type").asText());
-        assertEquals("t",					res.at("/query/distances/0/key").asText());
-        assertEquals(0,						res.at("/query/distances/0/min").asInt());
-        assertEquals(0,						res.at("/query/distances/0/max").asInt());
-        assertEquals(true,					res.at("/query/distances/0/exclude").asBoolean());
-        assertEquals("koral:group",			res.at("/query/operands/0/@type").asText());
-        assertEquals("operation:sequence",	res.at("/query/operands/0/operation").asText());
-        assertEquals("cosmas:distance",		res.at("/query/operands/0/distances/0/@type").asText());
-        assertEquals("t",					res.at("/query/operands/0/distances/0/key").asText());
-        assertEquals(0,						res.at("/query/operands/0/distances/0/min").asInt());
-        assertEquals(0,						res.at("/query/operands/0/distances/0/max").asInt());
-        assertEquals(true,					res.at("/query/operands/0/distances/0/exclude").asBoolean());
-        assertEquals("Sonne",				res.at("/query/operands/0/operands/0/wrap/key").asText());
-        assertEquals("Mond",				res.at("/query/operands/0/operands/1/wrap/key").asText());
-        assertEquals("koral:token",			res.at("/query/operands/1/@type").asText());
-        assertEquals("Sterne",				res.at("/query/operands/1/wrap/key").asText());
+        assertEquals("koral:group", res.at("/query/@type").asText());
+        assertEquals("operation:sequence", res.at("/query/operation").asText());
+        assertEquals("cosmas:distance", res.at("/query/distances/0/@type")
+                .asText());
+        assertEquals("t", res.at("/query/distances/0/key").asText());
+        assertEquals(0, res.at("/query/distances/0/min").asInt());
+        assertEquals(0, res.at("/query/distances/0/max").asInt());
+        assertEquals(true, res.at("/query/distances/0/exclude").asBoolean());
+        assertEquals("koral:group", res.at("/query/operands/0/@type").asText());
+        assertEquals("operation:sequence", res
+                .at("/query/operands/0/operation").asText());
+        assertEquals("cosmas:distance",
+                res.at("/query/operands/0/distances/0/@type").asText());
+        assertEquals("t", res.at("/query/operands/0/distances/0/key").asText());
+        assertEquals(0, res.at("/query/operands/0/distances/0/min").asInt());
+        assertEquals(0, res.at("/query/operands/0/distances/0/max").asInt());
+        assertEquals(true, res.at("/query/operands/0/distances/0/exclude")
+                .asBoolean());
+        assertEquals("Sonne", res.at("/query/operands/0/operands/0/wrap/key")
+                .asText());
+        assertEquals("Mond", res.at("/query/operands/0/operands/1/wrap/key")
+                .asText());
+        assertEquals("koral:token", res.at("/query/operands/1/@type").asText());
+        assertEquals("Sterne", res.at("/query/operands/1/wrap/key").asText());
     }
 
+
     @Test
-    public void testOPPROX() throws JsonProcessingException, IOException {
+    public void testOPPROX () throws JsonProcessingException, IOException {
         query = "Sonne /+w1:4 Mond";
         qs.setQuery(query, "cosmas2");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:group",			res.at("/query/@type").asText());
-        assertEquals("operation:sequence",	res.at("/query/operation").asText());
-        assertEquals("koral:distance",		res.at("/query/distances/0/@type").asText());
-        assertEquals("w",					res.at("/query/distances/0/key").asText());
-        assertEquals(1,						res.at("/query/distances/0/boundary/min").asInt());
-        assertEquals(4,						res.at("/query/distances/0/boundary/max").asInt());
-        assertEquals(true,					res.at("/query/inOrder").asBoolean());
-        assertEquals("koral:group",			res.at("/query/operands/0/@type").asText());
-        assertEquals("operation:class",		res.at("/query/operands/0/operation").asText());
-        assertEquals(129,  					res.at("/query/operands/0/classOut").asInt());
-        assertEquals(129,  					res.at("/query/operands/1/classOut").asInt());
-        assertEquals("koral:token",			res.at("/query/operands/0/operands/0/@type").asText());
-        assertEquals("Sonne",				res.at("/query/operands/0/operands/0/wrap/key").asText());
-        assertEquals("Mond",				res.at("/query/operands/1/operands/0/wrap/key").asText());
+        assertEquals("koral:group", res.at("/query/@type").asText());
+        assertEquals("operation:sequence", res.at("/query/operation").asText());
+        assertEquals("cosmas:distance", res.at("/query/distances/0/@type")
+                .asText());
+        assertEquals("w", res.at("/query/distances/0/key").asText());
+        assertEquals(1, res.at("/query/distances/0/boundary/min").asInt());
+        assertEquals(4, res.at("/query/distances/0/boundary/max").asInt());
+        assertEquals(true, res.at("/query/inOrder").asBoolean());
+        assertEquals("koral:group", res.at("/query/operands/0/@type").asText());
+        assertEquals("operation:class", res.at("/query/operands/0/operation")
+                .asText());
+        assertEquals(129, res.at("/query/operands/0/classOut").asInt());
+        assertEquals(129, res.at("/query/operands/1/classOut").asInt());
+        assertEquals("koral:token", res
+                .at("/query/operands/0/operands/0/@type").asText());
+        assertEquals("Sonne", res.at("/query/operands/0/operands/0/wrap/key")
+                .asText());
+        assertEquals("Mond", res.at("/query/operands/1/operands/0/wrap/key")
+                .asText());
 
         query = "Sonne /+w1:4,s0,p1:3 Mond";
         qs.setQuery(query, "cosmas2");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:group",			res.at("/query/@type").asText());
-        assertEquals("operation:sequence",	res.at("/query/operation").asText());
-        assertEquals("koral:distance",		res.at("/query/distances/0/@type").asText());
-        assertEquals("w",					res.at("/query/distances/0/key").asText());
-        assertEquals(1,						res.at("/query/distances/0/boundary/min").asInt());
-        assertEquals(4,						res.at("/query/distances/0/boundary/max").asInt());
-        assertEquals("s",					res.at("/query/distances/1/key").asText());
-        assertEquals(0,						res.at("/query/distances/1/boundary/min").asInt());
-        assertEquals("p",					res.at("/query/distances/2/key").asText());
-        assertEquals(1,						res.at("/query/distances/2/boundary/min").asInt());
-        assertEquals(3,						res.at("/query/distances/2/boundary/max").asInt());
-        assertEquals(true,					res.at("/query/inOrder").asBoolean());
-        assertEquals("koral:group",			res.at("/query/operands/0/@type").asText());
-        assertEquals("operation:class",		res.at("/query/operands/0/operation").asText());
-        assertEquals(129,  					res.at("/query/operands/0/classOut").asInt());
-        assertEquals(129,  					res.at("/query/operands/1/classOut").asInt());
-        assertEquals("koral:token",			res.at("/query/operands/0/operands/0/@type").asText());
-        assertEquals("Sonne",				res.at("/query/operands/0/operands/0/wrap/key").asText());
-        assertEquals("Mond",				res.at("/query/operands/1/operands/0/wrap/key").asText());
+        assertEquals("koral:group", res.at("/query/@type").asText());
+        assertEquals("operation:sequence", res.at("/query/operation").asText());
+        assertEquals("cosmas:distance", res.at("/query/distances/0/@type")
+                .asText());
+        assertEquals("w", res.at("/query/distances/0/key").asText());
+        assertEquals(1, res.at("/query/distances/0/boundary/min").asInt());
+        assertEquals(4, res.at("/query/distances/0/boundary/max").asInt());
+        assertEquals("s", res.at("/query/distances/1/key").asText());
+        assertEquals(0, res.at("/query/distances/1/boundary/min").asInt());
+        assertEquals("p", res.at("/query/distances/2/key").asText());
+        assertEquals(1, res.at("/query/distances/2/boundary/min").asInt());
+        assertEquals(3, res.at("/query/distances/2/boundary/max").asInt());
+        assertEquals(true, res.at("/query/inOrder").asBoolean());
+        assertEquals("koral:group", res.at("/query/operands/0/@type").asText());
+        assertEquals("operation:class", res.at("/query/operands/0/operation")
+                .asText());
+        assertEquals(129, res.at("/query/operands/0/classOut").asInt());
+        assertEquals(129, res.at("/query/operands/1/classOut").asInt());
+        assertEquals("koral:token", res
+                .at("/query/operands/0/operands/0/@type").asText());
+        assertEquals("Sonne", res.at("/query/operands/0/operands/0/wrap/key")
+                .asText());
+        assertEquals("Mond", res.at("/query/operands/1/operands/0/wrap/key")
+                .asText());
 
         query = "Sonne /+w4 Mond";
         qs.setQuery(query, "cosmas2");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:distance",		res.at("/query/distances/0/@type").asText());
-        assertEquals("w",					res.at("/query/distances/0/key").asText());
-        assertEquals(0,						res.at("/query/distances/0/boundary/min").asInt());
-        assertEquals(4,						res.at("/query/distances/0/boundary/max").asInt());
+        assertEquals("cosmas:distance", res.at("/query/distances/0/@type")
+                .asText());
+        assertEquals("w", res.at("/query/distances/0/key").asText());
+        assertEquals(0, res.at("/query/distances/0/boundary/min").asInt());
+        assertEquals(4, res.at("/query/distances/0/boundary/max").asInt());
 
         query = "Sonne /-w4 Mond";
         qs.setQuery(query, "cosmas2");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:distance",		res.at("/query/distances/0/@type").asText());
-        assertEquals("w",					res.at("/query/distances/0/key").asText());
-        assertEquals(0,						res.at("/query/distances/0/boundary/min").asInt());
-        assertEquals(4,						res.at("/query/distances/0/boundary/max").asInt());
-        assertEquals("Mond",				res.at("/query/operands/0/operands/0/wrap/key").asText());
-        assertEquals("Sonne",				res.at("/query/operands/1/operands/0/wrap/key").asText());
+        assertEquals("cosmas:distance", res.at("/query/distances/0/@type")
+                .asText());
+        assertEquals("w", res.at("/query/distances/0/key").asText());
+        assertEquals(0, res.at("/query/distances/0/boundary/min").asInt());
+        assertEquals(4, res.at("/query/distances/0/boundary/max").asInt());
+        assertEquals("Mond", res.at("/query/operands/0/operands/0/wrap/key")
+                .asText());
+        assertEquals("Sonne", res.at("/query/operands/1/operands/0/wrap/key")
+                .asText());
 
         query = "Sonne /w4 Mond";
         qs.setQuery(query, "cosmas2");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:distance",		res.at("/query/distances/0/@type").asText());
-        assertEquals("w",					res.at("/query/distances/0/key").asText());
-        assertEquals(0,						res.at("/query/distances/0/boundary/min").asInt());
-        assertEquals(4,						res.at("/query/distances/0/boundary/max").asInt());
-        assertEquals("Sonne",				res.at("/query/operands/0/operands/0/wrap/key").asText());
-        assertEquals("Mond",				res.at("/query/operands/1/operands/0/wrap/key").asText());
-        assertEquals(false,					res.at("/query/inOrder").asBoolean());
+        assertEquals("cosmas:distance", res.at("/query/distances/0/@type")
+                .asText());
+        assertEquals("w", res.at("/query/distances/0/key").asText());
+        assertEquals(0, res.at("/query/distances/0/boundary/min").asInt());
+        assertEquals(4, res.at("/query/distances/0/boundary/max").asInt());
+        assertEquals("Sonne", res.at("/query/operands/0/operands/0/wrap/key")
+                .asText());
+        assertEquals("Mond", res.at("/query/operands/1/operands/0/wrap/key")
+                .asText());
+        assertEquals(false, res.at("/query/inOrder").asBoolean());
     }
 
+
     @Test
-    public void testOPPROXNested() throws JsonProcessingException, IOException {	
+    public void testOPPROXNested () throws JsonProcessingException, IOException {
         query = "Sonne /+w1:4 Mond /+w1:7 Sterne";
         qs.setQuery(query, "cosmas2");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:group",			res.at("/query/@type").asText());
-        assertEquals("operation:sequence",	res.at("/query/operation").asText());
-        assertEquals("koral:distance",		res.at("/query/distances/0/@type").asText());
-        assertEquals("w",					res.at("/query/distances/0/key").asText());
-        assertEquals(1,						res.at("/query/distances/0/boundary/min").asInt());
-        assertEquals(4,						res.at("/query/distances/0/boundary/max").asInt());
-        assertEquals(true,					res.at("/query/inOrder").asBoolean());
-        assertEquals("koral:group",			res.at("/query/operands/0/@type").asText());
-        assertEquals("operation:class",		res.at("/query/operands/0/operation").asText());
-        assertEquals(129,  					res.at("/query/operands/0/classOut").asInt());
-        assertEquals("Sonne",				res.at("/query/operands/0/operands/0/wrap/key").asText());
-        assertEquals(129,  					res.at("/query/operands/1/classOut").asInt());
-        assertEquals("operation:sequence",	res.at("/query/operands/1/operands/0/operation").asText());
-        assertEquals("w",					res.at("/query/operands/1/operands/0/distances/0/key").asText());
-        assertEquals(1,						res.at("/query/operands/1/operands/0/distances/0/boundary/min").asInt());
-        assertEquals(7,						res.at("/query/operands/1/operands/0/distances/0/boundary/max").asInt());
-        assertEquals(130,  					res.at("/query/operands/1/operands/0/operands/0/classOut").asInt());
-        assertEquals("Mond",				res.at("/query/operands/1/operands/0/operands/0/operands/0/wrap/key").asText());
-        assertEquals(130,  					res.at("/query/operands/1/operands/0/operands/1/classOut").asInt());
-        assertEquals("Sterne",				res.at("/query/operands/1/operands/0/operands/1/operands/0/wrap/key").asText());
+        assertEquals("koral:group", res.at("/query/@type").asText());
+        assertEquals("operation:sequence", res.at("/query/operation").asText());
+        assertEquals("cosmas:distance", res.at("/query/distances/0/@type")
+                .asText());
+        assertEquals("w", res.at("/query/distances/0/key").asText());
+        assertEquals(1, res.at("/query/distances/0/boundary/min").asInt());
+        assertEquals(4, res.at("/query/distances/0/boundary/max").asInt());
+        assertEquals(true, res.at("/query/inOrder").asBoolean());
+        assertEquals("koral:group", res.at("/query/operands/0/@type").asText());
+        assertEquals("operation:class", res.at("/query/operands/0/operation")
+                .asText());
+        assertEquals(129, res.at("/query/operands/0/classOut").asInt());
+        assertEquals("Sonne", res.at("/query/operands/0/operands/0/wrap/key")
+                .asText());
+        assertEquals(129, res.at("/query/operands/1/classOut").asInt());
+        assertEquals("operation:sequence",
+                res.at("/query/operands/1/operands/0/operation").asText());
+        assertEquals("w", res
+                .at("/query/operands/1/operands/0/distances/0/key").asText());
+        assertEquals(1,
+                res.at("/query/operands/1/operands/0/distances/0/boundary/min")
+                        .asInt());
+        assertEquals(7,
+                res.at("/query/operands/1/operands/0/distances/0/boundary/max")
+                        .asInt());
+        assertEquals(130,
+                res.at("/query/operands/1/operands/0/operands/0/classOut")
+                        .asInt());
+        assertEquals(
+                "Mond",
+                res.at("/query/operands/1/operands/0/operands/0/operands/0/wrap/key")
+                        .asText());
+        assertEquals(130,
+                res.at("/query/operands/1/operands/0/operands/1/classOut")
+                        .asInt());
+        assertEquals(
+                "Sterne",
+                res.at("/query/operands/1/operands/0/operands/1/operands/0/wrap/key")
+                        .asText());
 
         query = "Sonne /+w1:4 Mond /-w1:7 Sterne";
         qs.setQuery(query, "cosmas2");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("Sonne",				res.at("/query/operands/0/operands/0/wrap/key").asText());
-        assertEquals("Sterne",				res.at("/query/operands/1/operands/0/operands/0/operands/0/wrap/key").asText());
-        assertEquals("Mond",				res.at("/query/operands/1/operands/0/operands/1/operands/0/wrap/key").asText());
+        assertEquals("Sonne", res.at("/query/operands/0/operands/0/wrap/key")
+                .asText());
+        assertEquals(
+                "Sterne",
+                res.at("/query/operands/1/operands/0/operands/0/operands/0/wrap/key")
+                        .asText());
+        assertEquals(
+                "Mond",
+                res.at("/query/operands/1/operands/0/operands/1/operands/0/wrap/key")
+                        .asText());
 
         query = "Sonne /-w4 Mond /+w2 Sterne";
         qs.setQuery(query, "cosmas2");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:group",			res.at("/query/@type").asText());
-        assertEquals("operation:sequence",	res.at("/query/operation").asText());
-        assertEquals("koral:distance",		res.at("/query/distances/0/@type").asText());
-        assertEquals("w",					res.at("/query/distances/0/key").asText());
-        assertEquals(0,						res.at("/query/distances/0/boundary/min").asInt());
-        assertEquals(4,						res.at("/query/distances/0/boundary/max").asInt());
-        assertEquals(true,					res.at("/query/inOrder").asBoolean());
-        assertEquals("koral:group",			res.at("/query/operands/1/@type").asText());
-        assertEquals("operation:class",		res.at("/query/operands/1/operation").asText());
-        assertEquals(129,  					res.at("/query/operands/1/classOut").asInt());
-        assertEquals("Sonne",				res.at("/query/operands/1/operands/0/wrap/key").asText());
-        assertEquals(129,  					res.at("/query/operands/0/classOut").asInt());
-        assertEquals("operation:sequence",	res.at("/query/operands/0/operands/0/operation").asText());
-        assertEquals("w",					res.at("/query/operands/0/operands/0/distances/0/key").asText());
-        assertEquals(0,						res.at("/query/operands/0/operands/0/distances/0/boundary/min").asInt());
-        assertEquals(2,						res.at("/query/operands/0/operands/0/distances/0/boundary/max").asInt());
-        assertEquals(130,  					res.at("/query/operands/0/operands/0/operands/0/classOut").asInt());
-        assertEquals("Mond",				res.at("/query/operands/0/operands/0/operands/0/operands/0/wrap/key").asText());
-        assertEquals(130,  					res.at("/query/operands/0/operands/0/operands/1/classOut").asInt());
-        assertEquals("Sterne",				res.at("/query/operands/0/operands/0/operands/1/operands/0/wrap/key").asText());
+        assertEquals("koral:group", res.at("/query/@type").asText());
+        assertEquals("operation:sequence", res.at("/query/operation").asText());
+        assertEquals("cosmas:distance", res.at("/query/distances/0/@type")
+                .asText());
+        assertEquals("w", res.at("/query/distances/0/key").asText());
+        assertEquals(0, res.at("/query/distances/0/boundary/min").asInt());
+        assertEquals(4, res.at("/query/distances/0/boundary/max").asInt());
+        assertEquals(true, res.at("/query/inOrder").asBoolean());
+        assertEquals("koral:group", res.at("/query/operands/1/@type").asText());
+        assertEquals("operation:class", res.at("/query/operands/1/operation")
+                .asText());
+        assertEquals(129, res.at("/query/operands/1/classOut").asInt());
+        assertEquals("Sonne", res.at("/query/operands/1/operands/0/wrap/key")
+                .asText());
+        assertEquals(129, res.at("/query/operands/0/classOut").asInt());
+        assertEquals("operation:sequence",
+                res.at("/query/operands/0/operands/0/operation").asText());
+        assertEquals("w", res
+                .at("/query/operands/0/operands/0/distances/0/key").asText());
+        assertEquals(0,
+                res.at("/query/operands/0/operands/0/distances/0/boundary/min")
+                        .asInt());
+        assertEquals(2,
+                res.at("/query/operands/0/operands/0/distances/0/boundary/max")
+                        .asInt());
+        assertEquals(130,
+                res.at("/query/operands/0/operands/0/operands/0/classOut")
+                        .asInt());
+        assertEquals(
+                "Mond",
+                res.at("/query/operands/0/operands/0/operands/0/operands/0/wrap/key")
+                        .asText());
+        assertEquals(130,
+                res.at("/query/operands/0/operands/0/operands/1/classOut")
+                        .asInt());
+        assertEquals(
+                "Sterne",
+                res.at("/query/operands/0/operands/0/operands/1/operands/0/wrap/key")
+                        .asText());
 
     }
 
+
     @Test
-    public void testOPIN() throws JsonProcessingException, IOException {
+    public void testOPIN () throws JsonProcessingException, IOException {
         query = "wegen #IN <s>";
         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").asInt());
-        assertEquals("koral:group",					res.at("/query/operands/0/@type").asText());
-        assertEquals("operation:class",				res.at("/query/operands/0/operation").asText());
-        assertEquals("classRefCheck:includes",		res.at("/query/operands/0/classRefCheck/0").asText());
-        assertEquals("koral:group",					res.at("/query/operands/0/operands/0/@type").asText());
-        assertEquals("operation:position",			res.at("/query/operands/0/operands/0/operation").asText());
-        assertEquals(true,							res.at("/query/operands/0/operands/0/frames/0").isMissingNode());
-        assertEquals(129,  							res.at("/query/operands/0/classIn/0").asInt());
-        assertEquals(130,  							res.at("/query/operands/0/classIn/1").asInt());
-        assertEquals(131,                           res.at("/query/operands/0/classOut").asInt());
-        assertEquals("koral:group",					res.at("/query/operands/0/operands/0/@type").asText());
-        assertEquals("operation:class",				res.at("/query/operands/0/operands/0/operands/0/operation").asText());
-        assertEquals(129,  							res.at("/query/operands/0/operands/0/operands/0/classOut").asInt());
-        assertEquals("koral:span",					res.at("/query/operands/0/operands/0/operands/0/operands/0/@type").asText());
-        assertEquals("s",							res.at("/query/operands/0/operands/0/operands/0/operands/0/key").asText());
-        assertEquals("koral:group",					res.at("/query/operands/0/operands/0/operands/1/@type").asText());
-        assertEquals("operation:class",				res.at("/query/operands/0/operands/0/operands/1/operation").asText());
-        assertEquals(130,  							res.at("/query/operands/0/operands/0/operands/1/classOut").asInt());
-        assertEquals("koral:token",					res.at("/query/operands/0/operands/0/operands/1/operands/0/@type").asText());
-        assertEquals("wegen",						res.at("/query/operands/0/operands/0/operands/1/operands/0/wrap/key").asText());
+        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:class", res.at("/query/operands/0/operation")
+                .asText());
+        assertEquals("classRefCheck:includes",
+                res.at("/query/operands/0/classRefCheck/0").asText());
+        assertEquals("koral:group", res
+                .at("/query/operands/0/operands/0/@type").asText());
+        assertEquals("operation:position",
+                res.at("/query/operands/0/operands/0/operation").asText());
+        assertEquals(true, res.at("/query/operands/0/operands/0/frames/0")
+                .isMissingNode());
+        assertEquals(129, res.at("/query/operands/0/classIn/0").asInt());
+        assertEquals(130, res.at("/query/operands/0/classIn/1").asInt());
+        assertEquals(131, res.at("/query/operands/0/classOut").asInt());
+        assertEquals("koral:group", res
+                .at("/query/operands/0/operands/0/@type").asText());
+        assertEquals("operation:class",
+                res.at("/query/operands/0/operands/0/operands/0/operation")
+                        .asText());
+        assertEquals(129,
+                res.at("/query/operands/0/operands/0/operands/0/classOut")
+                        .asInt());
+        assertEquals(
+                "koral:span",
+                res.at("/query/operands/0/operands/0/operands/0/operands/0/@type")
+                        .asText());
+        assertEquals(
+                "s",
+                res.at("/query/operands/0/operands/0/operands/0/operands/0/key")
+                        .asText());
+        assertEquals("koral:group",
+                res.at("/query/operands/0/operands/0/operands/1/@type")
+                        .asText());
+        assertEquals("operation:class",
+                res.at("/query/operands/0/operands/0/operands/1/operation")
+                        .asText());
+        assertEquals(130,
+                res.at("/query/operands/0/operands/0/operands/1/classOut")
+                        .asInt());
+        assertEquals(
+                "koral:token",
+                res.at("/query/operands/0/operands/0/operands/1/operands/0/@type")
+                        .asText());
+        assertEquals(
+                "wegen",
+                res.at("/query/operands/0/operands/0/operands/1/operands/0/wrap/key")
+                        .asText());
 
         query = "wegen #IN(L) <s>";
         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").asInt());
-        assertEquals("koral:group",                 res.at("/query/operands/0/@type").asText());
-        assertEquals("operation:position",          res.at("/query/operands/0/operation").asText());
-        assertEquals("frames:startsWith",           res.at("/query/operands/0/frames/0").asText());
-        assertEquals("frames:matches",              res.at("/query/operands/0/frames/1").asText());
-        assertEquals(true,                          res.at("/query/operands/0/frames/2").isMissingNode());
-        assertEquals("koral:group",                 res.at("/query/operands/0/@type").asText());
-        assertEquals("operation:class",             res.at("/query/operands/0/operands/0/operation").asText());
-        assertEquals(129,                           res.at("/query/operands/0/operands/0/classOut").asInt());
-        assertEquals("koral:span",                  res.at("/query/operands/0/operands/0/operands/0/@type").asText());
-        assertEquals("s",                           res.at("/query/operands/0/operands/0/operands/0/key").asText());
-        assertEquals("koral:group",                 res.at("/query/operands/0/operands/1/@type").asText());
-        assertEquals("operation:class",             res.at("/query/operands/0/operands/1/operation").asText());
-        assertEquals(130,                           res.at("/query/operands/0/operands/1/classOut").asInt());
-        assertEquals("koral:token",                 res.at("/query/operands/0/operands/1/operands/0/@type").asText());
-        assertEquals("wegen",                       res.at("/query/operands/0/operands/1/operands/0/wrap/key").asText());
+        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:startsWith", res.at("/query/operands/0/frames/0")
+                .asText());
+        assertEquals("frames:matches", res.at("/query/operands/0/frames/1")
+                .asText());
+        assertEquals(true, res.at("/query/operands/0/frames/2").isMissingNode());
+        assertEquals("koral:group", res.at("/query/operands/0/@type").asText());
+        assertEquals("operation:class",
+                res.at("/query/operands/0/operands/0/operation").asText());
+        assertEquals(129, res.at("/query/operands/0/operands/0/classOut")
+                .asInt());
+        assertEquals("koral:span",
+                res.at("/query/operands/0/operands/0/operands/0/@type")
+                        .asText());
+        assertEquals("s", res.at("/query/operands/0/operands/0/operands/0/key")
+                .asText());
+        assertEquals("koral:group", res
+                .at("/query/operands/0/operands/1/@type").asText());
+        assertEquals("operation:class",
+                res.at("/query/operands/0/operands/1/operation").asText());
+        assertEquals(130, res.at("/query/operands/0/operands/1/classOut")
+                .asInt());
+        assertEquals("koral:token",
+                res.at("/query/operands/0/operands/1/operands/0/@type")
+                        .asText());
+        assertEquals("wegen",
+                res.at("/query/operands/0/operands/1/operands/0/wrap/key")
+                        .asText());
 
         query = "wegen #IN(F) <s>";
         qs.setQuery(query, "cosmas2");
         res = mapper.readTree(qs.toJSON());
-        assertEquals(true,                  		res.at("/query/operands/0/classRefCheck").isMissingNode());
-        assertEquals("frames:matches",				res.at("/query/operands/0/frames/0").asText());
-        assertEquals(true,							res.at("/query/operands/0/frames/1").isMissingNode());
+        assertEquals(true, res.at("/query/operands/0/classRefCheck")
+                .isMissingNode());
+        assertEquals("frames:matches", res.at("/query/operands/0/frames/0")
+                .asText());
+        assertEquals(true, res.at("/query/operands/0/frames/1").isMissingNode());
 
         query = "wegen #IN(FI) <s>";
         qs.setQuery(query, "cosmas2");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("classRefCheck:unequals",		res.at("/query/operands/0/classRefCheck/0").asText());
-        assertEquals("frames:matches",				res.at("/query/operands/0/operands/0/frames/0").asText());
-        assertEquals(true,							res.at("/query/operands/0/operands/0/frames/1").isMissingNode());
+        assertEquals("classRefCheck:unequals",
+                res.at("/query/operands/0/classRefCheck/0").asText());
+        assertEquals("frames:matches",
+                res.at("/query/operands/0/operands/0/frames/0").asText());
+        assertEquals(true, res.at("/query/operands/0/operands/0/frames/1")
+                .isMissingNode());
 
         query = "wegen #IN(FE) <s>";
         qs.setQuery(query, "cosmas2");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("classRefCheck:equals",		res.at("/query/operands/0/classRefCheck/0").asText());
-        assertEquals("frames:matches",				res.at("/query/operands/0/operands/0/frames/0").asText());
-        assertEquals(true,							res.at("/query/operands/0/operands/0/frames/1").isMissingNode());
+        assertEquals("classRefCheck:equals",
+                res.at("/query/operands/0/classRefCheck/0").asText());
+        assertEquals("frames:matches",
+                res.at("/query/operands/0/operands/0/frames/0").asText());
+        assertEquals(true, res.at("/query/operands/0/operands/0/frames/1")
+                .isMissingNode());
 
         query = "wegen #IN(%, L) <s>";
         qs.setQuery(query, "cosmas2");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("frames:startsWith",			res.at("/query/operands/0/frames/0").asText());
-        assertEquals("frames:matches",				res.at("/query/operands/0/frames/1").asText());
+        assertEquals("frames:startsWith", res.at("/query/operands/0/frames/0")
+                .asText());
+        assertEquals("frames:matches", res.at("/query/operands/0/frames/1")
+                .asText());
         //        assertEquals(true,                          res.at("/query/operands/0/operands/0/exclude").isMissingNode());
 
         query = "wegen #IN(FE,%,MIN) <s>";
         qs.setQuery(query, "cosmas2");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("classRefCheck:equals",		res.at("/query/operands/0/classRefCheck/0").asText());
-        assertEquals("frames:matches",				res.at("/query/operands/0/operands/0/frames/0").asText());
+        assertEquals("classRefCheck:equals",
+                res.at("/query/operands/0/classRefCheck/0").asText());
+        assertEquals("frames:matches",
+                res.at("/query/operands/0/operands/0/frames/0").asText());
         //        assertEquals(true,							res.at("/query/operands/0/operands/0/exclude").isMissingNode());
 
         query = "wegen #IN(FE,ALL,%,MIN) <s>";
         qs.setQuery(query, "cosmas2");
         res = mapper.readTree(qs.toJSON());
-        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:equals",		res.at("/query/operands/0/classRefCheck/0").asText());
-        assertEquals("frames:matches",				res.at("/query/operands/0/operands/0/frames/0").asText());
-        assertEquals(true,							res.at("/query/operands/0/operands/0/exclude").asBoolean());
+        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:equals",
+                res.at("/query/operands/0/classRefCheck/0").asText());
+        assertEquals("frames:matches",
+                res.at("/query/operands/0/operands/0/frames/0").asText());
+        assertEquals(true, res.at("/query/operands/0/operands/0/exclude")
+                .asBoolean());
 
         query = "wegen #IN(FE,ALL,%,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("classRefOp:delete",           res.at("/query/operands/0/classRefOp").asText());
-        assertEquals(131,                           res.at("/query/operands/0/classIn/0").asInt());
-        assertEquals("classRefCheck:equals",        res.at("/query/operands/0/operands/0/classRefCheck/0").asText());
-        assertEquals("frames:matches",              res.at("/query/operands/0/operands/0/operands/0/frames/0").asText());
-        assertEquals(true,                          res.at("/query/operands/0/operands/0/operands/0/exclude").asBoolean());
+        assertEquals("operation:merge", res.at("/query/operation").asText());
+        assertEquals("operation:class", res.at("/query/operands/0/operation")
+                .asText());
+        assertEquals("classRefOp:delete", res
+                .at("/query/operands/0/classRefOp").asText());
+        assertEquals(131, res.at("/query/operands/0/classIn/0").asInt());
+        assertEquals("classRefCheck:equals",
+                res.at("/query/operands/0/operands/0/classRefCheck/0").asText());
+        assertEquals("frames:matches",
+                res.at("/query/operands/0/operands/0/operands/0/frames/0")
+                        .asText());
+        assertEquals(true,
+                res.at("/query/operands/0/operands/0/operands/0/exclude")
+                        .asBoolean());
     }
 
+
     @Test
-    public void testOPOV() throws JsonProcessingException, IOException {
+    public void testOPOV () throws JsonProcessingException, IOException {
         query = "wegen #OV <s>";
         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").asInt());
-        assertEquals("koral:group",					res.at("/query/operands/0/@type").asText());
-        assertEquals("operation:class",				res.at("/query/operands/0/operation").asText());
-        assertEquals("classRefCheck:intersects",	res.at("/query/operands/0/classRefCheck/0").asText());
+        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:class", res.at("/query/operands/0/operation")
+                .asText());
+        assertEquals("classRefCheck:intersects",
+                res.at("/query/operands/0/classRefCheck/0").asText());
         //		assertEquals("classRefOp:merge",            res.at("/query/operands/0/classRefOp").asText());
-        assertEquals(131,                           res.at("/query/operands/0/classOut").asInt());
-        assertEquals(129,                           res.at("/query/operands/0/classIn/0").asInt());
-        assertEquals(130,                           res.at("/query/operands/0/classIn/1").asInt());
-        assertEquals("koral:group",					res.at("/query/operands/0/operands/0/@type").asText());
-        assertEquals("operation:position",			res.at("/query/operands/0/operands/0/operation").asText());
-        assertEquals(true,							res.at("/query/operands/0/operands/0/frames/0").isMissingNode());
-        assertEquals("koral:group",					res.at("/query/operands/0/operands/0/@type").asText());
-        assertEquals("operation:class",				res.at("/query/operands/0/operands/0/operands/0/operation").asText());
-        assertEquals(129,  							res.at("/query/operands/0/operands/0/operands/0/classOut").asInt());
-        assertEquals("koral:span",					res.at("/query/operands/0/operands/0/operands/0/operands/0/@type").asText());
-        assertEquals("s",							res.at("/query/operands/0/operands/0/operands/0/operands/0/key").asText());
-        assertEquals("koral:group",					res.at("/query/operands/0/operands/0/operands/1/@type").asText());
-        assertEquals("operation:class",				res.at("/query/operands/0/operands/0/operands/1/operation").asText());
-        assertEquals(130,  							res.at("/query/operands/0/operands/0/operands/1/classOut").asInt());
-        assertEquals("koral:token",					res.at("/query/operands/0/operands/0/operands/1/operands/0/@type").asText());
-        assertEquals("wegen",						res.at("/query/operands/0/operands/0/operands/1/operands/0/wrap/key").asText());
+        assertEquals(131, res.at("/query/operands/0/classOut").asInt());
+        assertEquals(129, res.at("/query/operands/0/classIn/0").asInt());
+        assertEquals(130, res.at("/query/operands/0/classIn/1").asInt());
+        assertEquals("koral:group", res
+                .at("/query/operands/0/operands/0/@type").asText());
+        assertEquals("operation:position",
+                res.at("/query/operands/0/operands/0/operation").asText());
+        assertEquals(true, res.at("/query/operands/0/operands/0/frames/0")
+                .isMissingNode());
+        assertEquals("koral:group", res
+                .at("/query/operands/0/operands/0/@type").asText());
+        assertEquals("operation:class",
+                res.at("/query/operands/0/operands/0/operands/0/operation")
+                        .asText());
+        assertEquals(129,
+                res.at("/query/operands/0/operands/0/operands/0/classOut")
+                        .asInt());
+        assertEquals(
+                "koral:span",
+                res.at("/query/operands/0/operands/0/operands/0/operands/0/@type")
+                        .asText());
+        assertEquals(
+                "s",
+                res.at("/query/operands/0/operands/0/operands/0/operands/0/key")
+                        .asText());
+        assertEquals("koral:group",
+                res.at("/query/operands/0/operands/0/operands/1/@type")
+                        .asText());
+        assertEquals("operation:class",
+                res.at("/query/operands/0/operands/0/operands/1/operation")
+                        .asText());
+        assertEquals(130,
+                res.at("/query/operands/0/operands/0/operands/1/classOut")
+                        .asInt());
+        assertEquals(
+                "koral:token",
+                res.at("/query/operands/0/operands/0/operands/1/operands/0/@type")
+                        .asText());
+        assertEquals(
+                "wegen",
+                res.at("/query/operands/0/operands/0/operands/1/operands/0/wrap/key")
+                        .asText());
 
         query = "wegen #OV(L) <s>";
         qs.setQuery(query, "cosmas2");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("classRefCheck:intersects",	res.at("/query/operands/0/classRefCheck/0").asText());
-        assertEquals("frames:startsWith",			res.at("/query/operands/0/operands/0/frames/0").asText());
-        assertEquals("frames:overlapsLeft",			res.at("/query/operands/0/operands/0/frames/1").asText());
-        assertEquals("frames:matches",              res.at("/query/operands/0/operands/0/frames/2").asText());
+        assertEquals("classRefCheck:intersects",
+                res.at("/query/operands/0/classRefCheck/0").asText());
+        assertEquals("frames:startsWith",
+                res.at("/query/operands/0/operands/0/frames/0").asText());
+        assertEquals("frames:overlapsLeft",
+                res.at("/query/operands/0/operands/0/frames/1").asText());
+        assertEquals("frames:matches",
+                res.at("/query/operands/0/operands/0/frames/2").asText());
 
         query = "wegen #OV(F) <s>";
         qs.setQuery(query, "cosmas2");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("classRefCheck:intersects",	res.at("/query/operands/0/classRefCheck/0").asText());
-        assertEquals("frames:matches",				res.at("/query/operands/0/operands/0/frames/0").asText());
-        assertEquals(true,							res.at("/query/operands/0/operands/0/frames/1").isMissingNode());
+        assertEquals("classRefCheck:intersects",
+                res.at("/query/operands/0/classRefCheck/0").asText());
+        assertEquals("frames:matches",
+                res.at("/query/operands/0/operands/0/frames/0").asText());
+        assertEquals(true, res.at("/query/operands/0/operands/0/frames/1")
+                .isMissingNode());
 
         query = "wegen #OV(FI) <s>";
         qs.setQuery(query, "cosmas2");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("classRefCheck:unequals",		res.at("/query/operands/0/classRefCheck/0").asText());
-        assertEquals("frames:matches",				res.at("/query/operands/0/operands/0/frames/0").asText());
+        assertEquals("classRefCheck:unequals",
+                res.at("/query/operands/0/classRefCheck/0").asText());
+        assertEquals("frames:matches",
+                res.at("/query/operands/0/operands/0/frames/0").asText());
 
         query = "wegen #OV(FE) <s>";
         qs.setQuery(query, "cosmas2");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("classRefCheck:equals",		res.at("/query/operands/0/classRefCheck/0").asText());
-        assertEquals("frames:matches",				res.at("/query/operands/0/operands/0/frames/0").asText());
+        assertEquals("classRefCheck:equals",
+                res.at("/query/operands/0/classRefCheck/0").asText());
+        assertEquals("frames:matches",
+                res.at("/query/operands/0/operands/0/frames/0").asText());
     }
 
 
     @Test
-    public void testBEG_END() throws JsonProcessingException, IOException {
+    public void testBEG_END () throws JsonProcessingException, IOException {
         query = "#BEG(der /w3:5 Mann)";
         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(0,						res.at("/query/spanRef/0").asInt());
-        assertEquals(1,						res.at("/query/spanRef/1").asInt());
-        assertEquals("koral:group",			res.at("/query/operands/0/@type").asText());
-        assertEquals("operation:sequence",	res.at("/query/operands/0/operation").asText());
-        assertEquals("koral:distance",		res.at("/query/operands/0/distances/0/@type").asText());
-        assertEquals("w",					res.at("/query/operands/0/distances/0/key").asText());
-        assertEquals(3,						res.at("/query/operands/0/distances/0/boundary/min").asInt());
-        assertEquals(5,						res.at("/query/operands/0/distances/0/boundary/max").asInt());
-        assertEquals(false,					res.at("/query/operands/0/inOrder").asBoolean());
-        assertEquals("koral:token",			res.at("/query/operands/0/operands/0/@type").asText());
-        assertEquals("der",					res.at("/query/operands/0/operands/0/wrap/key").asText());
-        assertEquals("Mann",				res.at("/query/operands/0/operands/1/wrap/key").asText());
+        assertEquals("koral:reference", res.at("/query/@type").asText());
+        assertEquals("operation:focus", res.at("/query/operation").asText());
+        assertEquals(0, res.at("/query/spanRef/0").asInt());
+        assertEquals(1, res.at("/query/spanRef/1").asInt());
+        assertEquals("koral:group", res.at("/query/operands/0/@type").asText());
+        assertEquals("operation:sequence", res
+                .at("/query/operands/0/operation").asText());
+        assertEquals("cosmas:distance",
+                res.at("/query/operands/0/distances/0/@type").asText());
+        assertEquals("w", res.at("/query/operands/0/distances/0/key").asText());
+        assertEquals(3, res.at("/query/operands/0/distances/0/boundary/min")
+                .asInt());
+        assertEquals(5, res.at("/query/operands/0/distances/0/boundary/max")
+                .asInt());
+        assertEquals(false, res.at("/query/operands/0/inOrder").asBoolean());
+        assertEquals("koral:token", res
+                .at("/query/operands/0/operands/0/@type").asText());
+        assertEquals("der", res.at("/query/operands/0/operands/0/wrap/key")
+                .asText());
+        assertEquals("Mann", res.at("/query/operands/0/operands/1/wrap/key")
+                .asText());
 
         query = "#BEG(der /w3:5 Mann) /+w10 kommt";
         qs.setQuery(query, "cosmas2");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:group",			res.at("/query/@type").asText());
-        assertEquals("operation:sequence",	res.at("/query/operation").asText());
-        assertEquals("koral:distance",		res.at("/query/distances/0/@type").asText());
-        assertEquals("w",					res.at("/query/distances/0/key").asText());
-        assertEquals(0,						res.at("/query/distances/0/boundary/min").asInt());
-        assertEquals(10,					res.at("/query/distances/0/boundary/max").asInt());
-        assertEquals(true,					res.at("/query/inOrder").asBoolean());
-        assertEquals("koral:group",			res.at("/query/operands/0/@type").asText());
-        assertEquals("operation:class",		res.at("/query/operands/0/operation").asText());
-        assertEquals(129,  					res.at("/query/operands/0/classOut").asInt());
-        assertEquals("koral:reference",		res.at("/query/operands/0/operands/0/@type").asText());
-        assertEquals("operation:focus",		res.at("/query/operands/0/operands/0/operation").asText());
-        assertEquals(0,						res.at("/query/operands/0/operands/0/spanRef/0").asInt());
-        assertEquals(1,						res.at("/query/operands/0/operands/0/spanRef/1").asInt());
-        assertEquals("koral:group",			res.at("/query/operands/0/operands/0/operands/0/@type").asText());
-        assertEquals("operation:sequence",	res.at("/query/operands/0/operands/0/operands/0/operation").asText());
-        assertEquals("koral:distance",		res.at("/query/operands/0/operands/0/operands/0/distances/0/@type").asText());
-        assertEquals("w",					res.at("/query/operands/0/operands/0/operands/0/distances/0/key").asText());
-        assertEquals(3,						res.at("/query/operands/0/operands/0/operands/0/distances/0/boundary/min").asInt());
-        assertEquals(5,						res.at("/query/operands/0/operands/0/operands/0/distances/0/boundary/max").asInt());
-        assertEquals(false,					res.at("/query/operands/0/operands/0/operands/0/inOrder").asBoolean());
-        assertEquals("koral:token",			res.at("/query/operands/0/operands/0/operands/0/operands/0/@type").asText());
-        assertEquals("der",					res.at("/query/operands/0/operands/0/operands/0/operands/0/wrap/key").asText());
-        assertEquals("Mann",				res.at("/query/operands/0/operands/0/operands/0/operands/1/wrap/key").asText());
-        assertEquals("operation:class",		res.at("/query/operands/1/operation").asText());
-        assertEquals(129,  					res.at("/query/operands/1/classOut").asInt());
-        assertEquals("koral:token",			res.at("/query/operands/1/operands/0/@type").asText());
-        assertEquals("kommt",				res.at("/query/operands/1/operands/0/wrap/key").asText());
+        assertEquals("koral:group", res.at("/query/@type").asText());
+        assertEquals("operation:sequence", res.at("/query/operation").asText());
+        assertEquals("cosmas:distance", res.at("/query/distances/0/@type")
+                .asText());
+        assertEquals("w", res.at("/query/distances/0/key").asText());
+        assertEquals(0, res.at("/query/distances/0/boundary/min").asInt());
+        assertEquals(10, res.at("/query/distances/0/boundary/max").asInt());
+        assertEquals(true, res.at("/query/inOrder").asBoolean());
+        assertEquals("koral:group", res.at("/query/operands/0/@type").asText());
+        assertEquals("operation:class", res.at("/query/operands/0/operation")
+                .asText());
+        assertEquals(129, res.at("/query/operands/0/classOut").asInt());
+        assertEquals("koral:reference",
+                res.at("/query/operands/0/operands/0/@type").asText());
+        assertEquals("operation:focus",
+                res.at("/query/operands/0/operands/0/operation").asText());
+        assertEquals(0, res.at("/query/operands/0/operands/0/spanRef/0")
+                .asInt());
+        assertEquals(1, res.at("/query/operands/0/operands/0/spanRef/1")
+                .asInt());
+        assertEquals("koral:group",
+                res.at("/query/operands/0/operands/0/operands/0/@type")
+                        .asText());
+        assertEquals("operation:sequence",
+                res.at("/query/operands/0/operands/0/operands/0/operation")
+                        .asText());
+        assertEquals(
+                "cosmas:distance",
+                res.at("/query/operands/0/operands/0/operands/0/distances/0/@type")
+                        .asText());
+        assertEquals(
+                "w",
+                res.at("/query/operands/0/operands/0/operands/0/distances/0/key")
+                        .asText());
+        assertEquals(
+                3,
+                res.at("/query/operands/0/operands/0/operands/0/distances/0/boundary/min")
+                        .asInt());
+        assertEquals(
+                5,
+                res.at("/query/operands/0/operands/0/operands/0/distances/0/boundary/max")
+                        .asInt());
+        assertEquals(false,
+                res.at("/query/operands/0/operands/0/operands/0/inOrder")
+                        .asBoolean());
+        assertEquals(
+                "koral:token",
+                res.at("/query/operands/0/operands/0/operands/0/operands/0/@type")
+                        .asText());
+        assertEquals(
+                "der",
+                res.at("/query/operands/0/operands/0/operands/0/operands/0/wrap/key")
+                        .asText());
+        assertEquals(
+                "Mann",
+                res.at("/query/operands/0/operands/0/operands/0/operands/1/wrap/key")
+                        .asText());
+        assertEquals("operation:class", res.at("/query/operands/1/operation")
+                .asText());
+        assertEquals(129, res.at("/query/operands/1/classOut").asInt());
+        assertEquals("koral:token", res
+                .at("/query/operands/1/operands/0/@type").asText());
+        assertEquals("kommt", res.at("/query/operands/1/operands/0/wrap/key")
+                .asText());
 
         query = "kommt /+w10 #BEG(der /w3:5 Mann)";
         qs.setQuery(query, "cosmas2");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:group",			res.at("/query/@type").asText());
-        assertEquals("operation:sequence",	res.at("/query/operation").asText());
-        assertEquals("koral:distance",		res.at("/query/distances/0/@type").asText());
-        assertEquals("w",					res.at("/query/distances/0/key").asText());
-        assertEquals(0,						res.at("/query/distances/0/boundary/min").asInt());
-        assertEquals(10,					res.at("/query/distances/0/boundary/max").asInt());
-        assertEquals(true,					res.at("/query/inOrder").asBoolean());
-        assertEquals("koral:group",			res.at("/query/operands/1/@type").asText());
-        assertEquals("operation:class",		res.at("/query/operands/1/operation").asText());
-        assertEquals(129,  					res.at("/query/operands/1/classOut").asInt());
-        assertEquals("koral:reference",		res.at("/query/operands/1/operands/0/@type").asText());
-        assertEquals("operation:focus",		res.at("/query/operands/1/operands/0/operation").asText());
-        assertEquals(0,						res.at("/query/operands/1/operands/0/spanRef/0").asInt());
-        assertEquals(1,						res.at("/query/operands/1/operands/0/spanRef/1").asInt());
-        assertEquals("koral:group",			res.at("/query/operands/1/operands/0/operands/0/@type").asText());
-        assertEquals("operation:sequence",	res.at("/query/operands/1/operands/0/operands/0/operation").asText());
-        assertEquals("koral:distance",		res.at("/query/operands/1/operands/0/operands/0/distances/0/@type").asText());
-        assertEquals("w",					res.at("/query/operands/1/operands/0/operands/0/distances/0/key").asText());
-        assertEquals(3,						res.at("/query/operands/1/operands/0/operands/0/distances/0/boundary/min").asInt());
-        assertEquals(5,						res.at("/query/operands/1/operands/0/operands/0/distances/0/boundary/max").asInt());
-        assertEquals(false,					res.at("/query/operands/1/operands/0/operands/0/inOrder").asBoolean());
-        assertEquals("koral:token",			res.at("/query/operands/1/operands/0/operands/0/operands/0/@type").asText());
-        assertEquals("der",					res.at("/query/operands/1/operands/0/operands/0/operands/0/wrap/key").asText());
-        assertEquals("Mann",				res.at("/query/operands/1/operands/0/operands/0/operands/1/wrap/key").asText());
-        assertEquals("operation:class",		res.at("/query/operands/0/operation").asText());
-        assertEquals(129,  					res.at("/query/operands/0/classOut").asInt());
-        assertEquals("koral:token",			res.at("/query/operands/0/operands/0/@type").asText());
-        assertEquals("kommt",				res.at("/query/operands/0/operands/0/wrap/key").asText());
+        assertEquals("koral:group", res.at("/query/@type").asText());
+        assertEquals("operation:sequence", res.at("/query/operation").asText());
+        assertEquals("cosmas:distance", res.at("/query/distances/0/@type")
+                .asText());
+        assertEquals("w", res.at("/query/distances/0/key").asText());
+        assertEquals(0, res.at("/query/distances/0/boundary/min").asInt());
+        assertEquals(10, res.at("/query/distances/0/boundary/max").asInt());
+        assertEquals(true, res.at("/query/inOrder").asBoolean());
+        assertEquals("koral:group", res.at("/query/operands/1/@type").asText());
+        assertEquals("operation:class", res.at("/query/operands/1/operation")
+                .asText());
+        assertEquals(129, res.at("/query/operands/1/classOut").asInt());
+        assertEquals("koral:reference",
+                res.at("/query/operands/1/operands/0/@type").asText());
+        assertEquals("operation:focus",
+                res.at("/query/operands/1/operands/0/operation").asText());
+        assertEquals(0, res.at("/query/operands/1/operands/0/spanRef/0")
+                .asInt());
+        assertEquals(1, res.at("/query/operands/1/operands/0/spanRef/1")
+                .asInt());
+        assertEquals("koral:group",
+                res.at("/query/operands/1/operands/0/operands/0/@type")
+                        .asText());
+        assertEquals("operation:sequence",
+                res.at("/query/operands/1/operands/0/operands/0/operation")
+                        .asText());
+        assertEquals(
+                "cosmas:distance",
+                res.at("/query/operands/1/operands/0/operands/0/distances/0/@type")
+                        .asText());
+        assertEquals(
+                "w",
+                res.at("/query/operands/1/operands/0/operands/0/distances/0/key")
+                        .asText());
+        assertEquals(
+                3,
+                res.at("/query/operands/1/operands/0/operands/0/distances/0/boundary/min")
+                        .asInt());
+        assertEquals(
+                5,
+                res.at("/query/operands/1/operands/0/operands/0/distances/0/boundary/max")
+                        .asInt());
+        assertEquals(false,
+                res.at("/query/operands/1/operands/0/operands/0/inOrder")
+                        .asBoolean());
+        assertEquals(
+                "koral:token",
+                res.at("/query/operands/1/operands/0/operands/0/operands/0/@type")
+                        .asText());
+        assertEquals(
+                "der",
+                res.at("/query/operands/1/operands/0/operands/0/operands/0/wrap/key")
+                        .asText());
+        assertEquals(
+                "Mann",
+                res.at("/query/operands/1/operands/0/operands/0/operands/1/wrap/key")
+                        .asText());
+        assertEquals("operation:class", res.at("/query/operands/0/operation")
+                .asText());
+        assertEquals(129, res.at("/query/operands/0/classOut").asInt());
+        assertEquals("koral:token", res
+                .at("/query/operands/0/operands/0/@type").asText());
+        assertEquals("kommt", res.at("/query/operands/0/operands/0/wrap/key")
+                .asText());
 
         query = "#END(der /w3:5 Mann)";
         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(-1,					res.at("/query/spanRef/0").asInt());
-        assertEquals(1,						res.at("/query/spanRef/1").asInt());
-        assertEquals("koral:group",			res.at("/query/operands/0/@type").asText());
-        assertEquals("operation:sequence",	res.at("/query/operands/0/operation").asText());
-        assertEquals("koral:distance",		res.at("/query/operands/0/distances/0/@type").asText());
-        assertEquals("w",					res.at("/query/operands/0/distances/0/key").asText());
-        assertEquals(3,						res.at("/query/operands/0/distances/0/boundary/min").asInt());
-        assertEquals(5,						res.at("/query/operands/0/distances/0/boundary/max").asInt());
-        assertEquals(false,					res.at("/query/operands/0/inOrder").asBoolean());
-        assertEquals("koral:token",			res.at("/query/operands/0/operands/0/@type").asText());
-        assertEquals("der",					res.at("/query/operands/0/operands/0/wrap/key").asText());
-        assertEquals("Mann",				res.at("/query/operands/0/operands/1/wrap/key").asText());
+        assertEquals("koral:reference", res.at("/query/@type").asText());
+        assertEquals("operation:focus", res.at("/query/operation").asText());
+        assertEquals(-1, res.at("/query/spanRef/0").asInt());
+        assertEquals(1, res.at("/query/spanRef/1").asInt());
+        assertEquals("koral:group", res.at("/query/operands/0/@type").asText());
+        assertEquals("operation:sequence", res
+                .at("/query/operands/0/operation").asText());
+        assertEquals("cosmas:distance",
+                res.at("/query/operands/0/distances/0/@type").asText());
+        assertEquals("w", res.at("/query/operands/0/distances/0/key").asText());
+        assertEquals(3, res.at("/query/operands/0/distances/0/boundary/min")
+                .asInt());
+        assertEquals(5, res.at("/query/operands/0/distances/0/boundary/max")
+                .asInt());
+        assertEquals(false, res.at("/query/operands/0/inOrder").asBoolean());
+        assertEquals("koral:token", res
+                .at("/query/operands/0/operands/0/@type").asText());
+        assertEquals("der", res.at("/query/operands/0/operands/0/wrap/key")
+                .asText());
+        assertEquals("Mann", res.at("/query/operands/0/operands/1/wrap/key")
+                .asText());
     }
 
+
     @Test
-    public void testELEM() throws JsonProcessingException, IOException {
+    public void testELEM () throws JsonProcessingException, IOException {
         query = "#ELEM(S)";
         qs.setQuery(query, "cosmas2");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:span",		res.at("/query/@type").asText());
-        assertEquals("s",				res.at("/query/key").asText());
+        assertEquals("koral:span", res.at("/query/@type").asText());
+        assertEquals("s", res.at("/query/key").asText());
 
         query = "#ELEM(W ANA=N)";
         qs.setQuery(query, "cosmas2");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:span",		res.at("/query/@type").asText());
-        assertEquals("w",				res.at("/query/key").asText());
-        assertEquals("koral:term",		res.at("/query/attr/@type").asText());
-        assertEquals("N",				res.at("/query/attr/key").asText());
-        assertEquals("p",				res.at("/query/attr/layer").asText());
-        assertEquals("match:eq",		res.at("/query/attr/match").asText());
+        assertEquals("koral:span", res.at("/query/@type").asText());
+        assertEquals("w", res.at("/query/key").asText());
+        assertEquals("koral:term", res.at("/query/attr/@type").asText());
+        assertEquals("N", res.at("/query/attr/key").asText());
+        assertEquals("p", res.at("/query/attr/layer").asText());
+        assertEquals("match:eq", res.at("/query/attr/match").asText());
 
         query = "#ELEM(W ANA != 'N V')";
         qs.setQuery(query, "cosmas2");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:span",		res.at("/query/@type").asText());
-        assertEquals("w",				res.at("/query/key").asText());
-        assertEquals("koral:termGroup",	res.at("/query/attr/@type").asText());
-        assertEquals("relation:and",	res.at("/query/attr/relation").asText());
-        assertEquals("koral:term",		res.at("/query/attr/operands/0/@type").asText());
-        assertEquals("N",				res.at("/query/attr/operands/0/key").asText());
-        assertEquals("p",				res.at("/query/attr/operands/0/layer").asText());
-        assertEquals("match:ne",		res.at("/query/attr/operands/0/match").asText());
-        assertEquals("koral:term",		res.at("/query/attr/operands/1/@type").asText());
-        assertEquals("V",				res.at("/query/attr/operands/1/key").asText());
-        assertEquals("p",				res.at("/query/attr/operands/1/layer").asText());
-        assertEquals("match:ne",		res.at("/query/attr/operands/1/match").asText());
+        assertEquals("koral:span", res.at("/query/@type").asText());
+        assertEquals("w", res.at("/query/key").asText());
+        assertEquals("koral:termGroup", res.at("/query/attr/@type").asText());
+        assertEquals("relation:and", res.at("/query/attr/relation").asText());
+        assertEquals("koral:term", res.at("/query/attr/operands/0/@type")
+                .asText());
+        assertEquals("N", res.at("/query/attr/operands/0/key").asText());
+        assertEquals("p", res.at("/query/attr/operands/0/layer").asText());
+        assertEquals("match:ne", res.at("/query/attr/operands/0/match")
+                .asText());
+        assertEquals("koral:term", res.at("/query/attr/operands/1/@type")
+                .asText());
+        assertEquals("V", res.at("/query/attr/operands/1/key").asText());
+        assertEquals("p", res.at("/query/attr/operands/1/layer").asText());
+        assertEquals("match:ne", res.at("/query/attr/operands/1/match")
+                .asText());
 
         query = "#ELEM(W ANA != 'N A V' Genre = Sport)";
         qs.setQuery(query, "cosmas2");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:span",		res.at("/query/@type").asText());
-        assertEquals("w",				res.at("/query/key").asText());
-        assertEquals("koral:termGroup",	res.at("/query/attr/@type").asText());
-        assertEquals("relation:and",	res.at("/query/attr/relation").asText());
-        assertEquals("koral:termGroup",	res.at("/query/attr/operands/0/@type").asText());
-        assertEquals("relation:and",	res.at("/query/attr/operands/0/relation").asText());
-        assertEquals("N",				res.at("/query/attr/operands/0/operands/0/key").asText());
-        assertEquals("A",				res.at("/query/attr/operands/0/operands/1/key").asText());
-        assertEquals("V",				res.at("/query/attr/operands/0/operands/2/key").asText());
-        assertEquals("Genre",			res.at("/query/attr/operands/1/layer").asText());
-        assertEquals("Sport",			res.at("/query/attr/operands/1/key").asText());
+        assertEquals("koral:span", res.at("/query/@type").asText());
+        assertEquals("w", res.at("/query/key").asText());
+        assertEquals("koral:termGroup", res.at("/query/attr/@type").asText());
+        assertEquals("relation:and", res.at("/query/attr/relation").asText());
+        assertEquals("koral:termGroup", res.at("/query/attr/operands/0/@type")
+                .asText());
+        assertEquals("relation:and", res.at("/query/attr/operands/0/relation")
+                .asText());
+        assertEquals("N", res.at("/query/attr/operands/0/operands/0/key")
+                .asText());
+        assertEquals("A", res.at("/query/attr/operands/0/operands/1/key")
+                .asText());
+        assertEquals("V", res.at("/query/attr/operands/0/operands/2/key")
+                .asText());
+        assertEquals("Genre", res.at("/query/attr/operands/1/layer").asText());
+        assertEquals("Sport", res.at("/query/attr/operands/1/key").asText());
 
         query = "#ELEM(W ANA != 'N A V' Genre != 'Sport Politik')";
         qs.setQuery(query, "cosmas2");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:span",		res.at("/query/@type").asText());
-        assertEquals("w",				res.at("/query/key").asText());
-        assertEquals("koral:termGroup",	res.at("/query/attr/@type").asText());
-        assertEquals("relation:and",	res.at("/query/attr/relation").asText());
-        assertEquals("koral:termGroup",	res.at("/query/attr/operands/0/@type").asText());
-        assertEquals("relation:and",	res.at("/query/attr/operands/0/relation").asText());
-        assertEquals("koral:termGroup",	res.at("/query/attr/operands/1/@type").asText());
-        assertEquals("relation:and",	res.at("/query/attr/operands/1/relation").asText());
-        assertEquals("N",				res.at("/query/attr/operands/0/operands/0/key").asText());
-        assertEquals("A",				res.at("/query/attr/operands/0/operands/1/key").asText());
-        assertEquals("V",				res.at("/query/attr/operands/0/operands/2/key").asText());
-        assertEquals("match:ne",		res.at("/query/attr/operands/0/operands/2/match").asText());
-        assertEquals("Genre",			res.at("/query/attr/operands/1/operands/0/layer").asText());
-        assertEquals("Sport",			res.at("/query/attr/operands/1/operands/0/key").asText());
-        assertEquals("Genre",			res.at("/query/attr/operands/1/operands/1/layer").asText());
-        assertEquals("Politik",			res.at("/query/attr/operands/1/operands/1/key").asText());
-        assertEquals("match:ne",		res.at("/query/attr/operands/1/operands/1/match").asText());
+        assertEquals("koral:span", res.at("/query/@type").asText());
+        assertEquals("w", res.at("/query/key").asText());
+        assertEquals("koral:termGroup", res.at("/query/attr/@type").asText());
+        assertEquals("relation:and", res.at("/query/attr/relation").asText());
+        assertEquals("koral:termGroup", res.at("/query/attr/operands/0/@type")
+                .asText());
+        assertEquals("relation:and", res.at("/query/attr/operands/0/relation")
+                .asText());
+        assertEquals("koral:termGroup", res.at("/query/attr/operands/1/@type")
+                .asText());
+        assertEquals("relation:and", res.at("/query/attr/operands/1/relation")
+                .asText());
+        assertEquals("N", res.at("/query/attr/operands/0/operands/0/key")
+                .asText());
+        assertEquals("A", res.at("/query/attr/operands/0/operands/1/key")
+                .asText());
+        assertEquals("V", res.at("/query/attr/operands/0/operands/2/key")
+                .asText());
+        assertEquals("match:ne",
+                res.at("/query/attr/operands/0/operands/2/match").asText());
+        assertEquals("Genre", res.at("/query/attr/operands/1/operands/0/layer")
+                .asText());
+        assertEquals("Sport", res.at("/query/attr/operands/1/operands/0/key")
+                .asText());
+        assertEquals("Genre", res.at("/query/attr/operands/1/operands/1/layer")
+                .asText());
+        assertEquals("Politik", res.at("/query/attr/operands/1/operands/1/key")
+                .asText());
+        assertEquals("match:ne",
+                res.at("/query/attr/operands/1/operands/1/match").asText());
     }
+
+
     @Test
-    public void testOPALL() throws JsonProcessingException, IOException {
+    public void testOPALL () throws JsonProcessingException, IOException {
         query = "#ALL(gehen /w1:10 voran)";
         qs.setQuery(query, "cosmas2");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:group",			res.at("/query/@type").asText());
-        assertEquals("operation:sequence",	res.at("/query/operation").asText());
-        assertEquals("gehen",				res.at("/query/operands/0/wrap/key").asText());
-        assertEquals("voran",				res.at("/query/operands/1/wrap/key").asText());
-        assertEquals("koral:distance",		res.at("/query/distances/0/@type").asText());
-        assertEquals("w",					res.at("/query/distances/0/key").asText());
-        assertEquals(1,						res.at("/query/distances/0/boundary/min").asInt());
-        assertEquals(10,					res.at("/query/distances/0/boundary/max").asInt());
+        assertEquals("koral:group", res.at("/query/@type").asText());
+        assertEquals("operation:sequence", res.at("/query/operation").asText());
+        assertEquals("gehen", res.at("/query/operands/0/wrap/key").asText());
+        assertEquals("voran", res.at("/query/operands/1/wrap/key").asText());
+        assertEquals("cosmas:distance", res.at("/query/distances/0/@type")
+                .asText());
+        assertEquals("w", res.at("/query/distances/0/key").asText());
+        assertEquals(1, res.at("/query/distances/0/boundary/min").asInt());
+        assertEquals(10, res.at("/query/distances/0/boundary/max").asInt());
 
         query = "#ALL(gehen /w1:10 (voran /w1:4 schnell))";
         qs.setQuery(query, "cosmas2");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:group",			res.at("/query/@type").asText());
-        assertEquals("operation:sequence",	res.at("/query/operation").asText());
-        assertEquals("koral:distance",		res.at("/query/distances/0/@type").asText());
-        assertEquals("w",					res.at("/query/distances/0/key").asText());
-        assertEquals(1,						res.at("/query/distances/0/boundary/min").asInt());
-        assertEquals(10,					res.at("/query/distances/0/boundary/max").asInt());
-        assertEquals("gehen",				res.at("/query/operands/0/wrap/key").asText());
-        assertEquals("koral:group",			res.at("/query/operands/1/@type").asText());
-        assertEquals("operation:sequence",	res.at("/query/operands/1/operation").asText());
-        assertEquals("koral:distance",		res.at("/query/operands/1/distances/0/@type").asText());
-        assertEquals("w",					res.at("/query/operands/1/distances/0/key").asText());
-        assertEquals(1,						res.at("/query/operands/1/distances/0/boundary/min").asInt());
-        assertEquals(4,						res.at("/query/operands/1/distances/0/boundary/max").asInt());
-        assertEquals("voran",				res.at("/query/operands/1/operands/0/wrap/key").asText());
-        assertEquals("schnell",				res.at("/query/operands/1/operands/1/wrap/key").asText());
+        assertEquals("koral:group", res.at("/query/@type").asText());
+        assertEquals("operation:sequence", res.at("/query/operation").asText());
+        assertEquals("cosmas:distance", res.at("/query/distances/0/@type")
+                .asText());
+        assertEquals("w", res.at("/query/distances/0/key").asText());
+        assertEquals(1, res.at("/query/distances/0/boundary/min").asInt());
+        assertEquals(10, res.at("/query/distances/0/boundary/max").asInt());
+        assertEquals("gehen", res.at("/query/operands/0/wrap/key").asText());
+        assertEquals("koral:group", res.at("/query/operands/1/@type").asText());
+        assertEquals("operation:sequence", res
+                .at("/query/operands/1/operation").asText());
+        assertEquals("cosmas:distance",
+                res.at("/query/operands/1/distances/0/@type").asText());
+        assertEquals("w", res.at("/query/operands/1/distances/0/key").asText());
+        assertEquals(1, res.at("/query/operands/1/distances/0/boundary/min")
+                .asInt());
+        assertEquals(4, res.at("/query/operands/1/distances/0/boundary/max")
+                .asInt());
+        assertEquals("voran", res.at("/query/operands/1/operands/0/wrap/key")
+                .asText());
+        assertEquals("schnell", res.at("/query/operands/1/operands/1/wrap/key")
+                .asText());
 
 
     }
 
+
     @Test
-    public void testOPNHIT() throws JsonProcessingException, IOException {
+    public void testOPNHIT () throws JsonProcessingException, IOException {
         query = "#NHIT(gehen /w1:10 voran)";
         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(129,  					res.at("/query/classRef/0").asInt());
-        assertEquals("koral:group",			res.at("/query/operands/0/@type").asText());
-        assertEquals("operation:class",		res.at("/query/operands/0/operation").asText());
-        assertEquals("classRefOp:inversion",res.at("/query/operands/0/classRefOp").asText());
-        assertEquals(130,  					res.at("/query/operands/0/classIn/0").asInt());
-        assertEquals(131,  					res.at("/query/operands/0/classIn/1").asInt());
-        assertEquals(129,  					res.at("/query/operands/0/classOut").asInt());
-        assertEquals("koral:group",			res.at("/query/operands/0/operands/0/@type").asText());
-        assertEquals("operation:sequence",	res.at("/query/operands/0/operands/0/operation").asText());
-        assertEquals("koral:distance",		res.at("/query/operands/0/operands/0/distances/0/@type").asText());
-        assertEquals("w",					res.at("/query/operands/0/operands/0/distances/0/key").asText());
-        assertEquals(1,						res.at("/query/operands/0/operands/0/distances/0/boundary/min").asInt());
-        assertEquals(10,					res.at("/query/operands/0/operands/0/distances/0/boundary/max").asInt());
-        assertEquals("koral:group",			res.at("/query/operands/0/operands/0/operands/0/@type").asText());
-        assertEquals("operation:class",		res.at("/query/operands/0/operands/0/operands/0/operation").asText());
-        assertEquals(130,  					res.at("/query/operands/0/operands/0/operands/0/classOut").asInt());
-        assertEquals(131,  					res.at("/query/operands/0/operands/0/operands/1/classOut").asInt());
-        assertEquals("koral:token",			res.at("/query/operands/0/operands/0/operands/0/operands/0/@type").asText());
-        assertEquals("gehen",				res.at("/query/operands/0/operands/0/operands/0/operands/0/wrap/key").asText());
-        assertEquals("voran",				res.at("/query/operands/0/operands/0/operands/1/operands/0/wrap/key").asText());
+        assertEquals("koral:reference", res.at("/query/@type").asText());
+        assertEquals("operation:focus", res.at("/query/operation").asText());
+        assertEquals(129, res.at("/query/classRef/0").asInt());
+        assertEquals("koral:group", res.at("/query/operands/0/@type").asText());
+        assertEquals("operation:class", res.at("/query/operands/0/operation")
+                .asText());
+        assertEquals("classRefOp:inversion",
+                res.at("/query/operands/0/classRefOp").asText());
+        assertEquals(130, res.at("/query/operands/0/classIn/0").asInt());
+        assertEquals(131, res.at("/query/operands/0/classIn/1").asInt());
+        assertEquals(129, res.at("/query/operands/0/classOut").asInt());
+        assertEquals("koral:group", res
+                .at("/query/operands/0/operands/0/@type").asText());
+        assertEquals("operation:sequence",
+                res.at("/query/operands/0/operands/0/operation").asText());
+        assertEquals("cosmas:distance",
+                res.at("/query/operands/0/operands/0/distances/0/@type")
+                        .asText());
+        assertEquals("w", res
+                .at("/query/operands/0/operands/0/distances/0/key").asText());
+        assertEquals(1,
+                res.at("/query/operands/0/operands/0/distances/0/boundary/min")
+                        .asInt());
+        assertEquals(10,
+                res.at("/query/operands/0/operands/0/distances/0/boundary/max")
+                        .asInt());
+        assertEquals("koral:group",
+                res.at("/query/operands/0/operands/0/operands/0/@type")
+                        .asText());
+        assertEquals("operation:class",
+                res.at("/query/operands/0/operands/0/operands/0/operation")
+                        .asText());
+        assertEquals(130,
+                res.at("/query/operands/0/operands/0/operands/0/classOut")
+                        .asInt());
+        assertEquals(131,
+                res.at("/query/operands/0/operands/0/operands/1/classOut")
+                        .asInt());
+        assertEquals(
+                "koral:token",
+                res.at("/query/operands/0/operands/0/operands/0/operands/0/@type")
+                        .asText());
+        assertEquals(
+                "gehen",
+                res.at("/query/operands/0/operands/0/operands/0/operands/0/wrap/key")
+                        .asText());
+        assertEquals(
+                "voran",
+                res.at("/query/operands/0/operands/0/operands/1/operands/0/wrap/key")
+                        .asText());
 
         query = "#NHIT(gehen /w1:10 voran /w1:10 Beispiel)";
         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(129,  					res.at("/query/classRef/0").asInt());
-        assertEquals("koral:group",			res.at("/query/operands/0/@type").asText());
-        assertEquals("operation:class",		res.at("/query/operands/0/operation").asText());
-        assertEquals("classRefOp:inversion",res.at("/query/operands/0/classRefOp").asText());
-        assertEquals(130,  					res.at("/query/operands/0/classIn/0").asInt());
-        assertEquals(131,  					res.at("/query/operands/0/classIn/1").asInt());
-        assertEquals(129,  					res.at("/query/operands/0/classOut").asInt());
-        assertEquals("koral:group",			res.at("/query/operands/0/operands/0/@type").asText());
-        assertEquals("operation:sequence",	res.at("/query/operands/0/operands/0/operation").asText());
-        assertEquals("koral:distance",		res.at("/query/operands/0/operands/0/distances/0/@type").asText());
-        assertEquals("w",					res.at("/query/operands/0/operands/0/distances/0/key").asText());
-        assertEquals(1,						res.at("/query/operands/0/operands/0/distances/0/boundary/min").asInt());
-        assertEquals(10,					res.at("/query/operands/0/operands/0/distances/0/boundary/max").asInt());
-        assertEquals("koral:group",			res.at("/query/operands/0/operands/0/operands/0/@type").asText());
-        assertEquals("operation:class",		res.at("/query/operands/0/operands/0/operands/0/operation").asText());
-        assertEquals(130,  					res.at("/query/operands/0/operands/0/operands/0/classOut").asInt());
-        assertEquals("gehen",				res.at("/query/operands/0/operands/0/operands/0/operands/0/wrap/key").asText());
-        assertEquals(131,                     res.at("/query/operands/0/operands/0/operands/1/classOut").asInt());
+        assertEquals("koral:reference", res.at("/query/@type").asText());
+        assertEquals("operation:focus", res.at("/query/operation").asText());
+        assertEquals(129, res.at("/query/classRef/0").asInt());
+        assertEquals("koral:group", res.at("/query/operands/0/@type").asText());
+        assertEquals("operation:class", res.at("/query/operands/0/operation")
+                .asText());
+        assertEquals("classRefOp:inversion",
+                res.at("/query/operands/0/classRefOp").asText());
+        assertEquals(130, res.at("/query/operands/0/classIn/0").asInt());
+        assertEquals(131, res.at("/query/operands/0/classIn/1").asInt());
+        assertEquals(129, res.at("/query/operands/0/classOut").asInt());
+        assertEquals("koral:group", res
+                .at("/query/operands/0/operands/0/@type").asText());
+        assertEquals("operation:sequence",
+                res.at("/query/operands/0/operands/0/operation").asText());
+        assertEquals("cosmas:distance",
+                res.at("/query/operands/0/operands/0/distances/0/@type")
+                        .asText());
+        assertEquals("w", res
+                .at("/query/operands/0/operands/0/distances/0/key").asText());
+        assertEquals(1,
+                res.at("/query/operands/0/operands/0/distances/0/boundary/min")
+                        .asInt());
+        assertEquals(10,
+                res.at("/query/operands/0/operands/0/distances/0/boundary/max")
+                        .asInt());
+        assertEquals("koral:group",
+                res.at("/query/operands/0/operands/0/operands/0/@type")
+                        .asText());
+        assertEquals("operation:class",
+                res.at("/query/operands/0/operands/0/operands/0/operation")
+                        .asText());
+        assertEquals(130,
+                res.at("/query/operands/0/operands/0/operands/0/classOut")
+                        .asInt());
+        assertEquals(
+                "gehen",
+                res.at("/query/operands/0/operands/0/operands/0/operands/0/wrap/key")
+                        .asText());
+        assertEquals(131,
+                res.at("/query/operands/0/operands/0/operands/1/classOut")
+                        .asInt());
         //        assertEquals("classRefOp:merge",    res.at("/query/operands/0/operands/0/operands/1/classRefOp").asText());
-        assertEquals("operation:sequence",	res.at("/query/operands/0/operands/0/operands/1/operands/0/operation").asText());
-        assertEquals(132,  					res.at("/query/operands/0/operands/0/operands/1/operands/0/operands/0/classOut").asInt());
-        assertEquals("voran",				res.at("/query/operands/0/operands/0/operands/1/operands/0/operands/0/operands/0/wrap/key").asText());
-        assertEquals(132, 					res.at("/query/operands/0/operands/0/operands/1/operands/0/operands/1/classOut").asInt());
-        assertEquals("Beispiel",			res.at("/query/operands/0/operands/0/operands/1/operands/0/operands/1/operands/0/wrap/key").asText());
+        assertEquals(
+                "operation:sequence",
+                res.at("/query/operands/0/operands/0/operands/1/operands/0/operation")
+                        .asText());
+        assertEquals(
+                132,
+                res.at("/query/operands/0/operands/0/operands/1/operands/0/operands/0/classOut")
+                        .asInt());
+        assertEquals(
+                "voran",
+                res.at("/query/operands/0/operands/0/operands/1/operands/0/operands/0/operands/0/wrap/key")
+                        .asText());
+        assertEquals(
+                132,
+                res.at("/query/operands/0/operands/0/operands/1/operands/0/operands/1/classOut")
+                        .asInt());
+        assertEquals(
+                "Beispiel",
+                res.at("/query/operands/0/operands/0/operands/1/operands/0/operands/1/operands/0/wrap/key")
+                        .asText());
 
     }
 
+
     @Test
-    public void testOPBED() throws JsonProcessingException, IOException {
+    public void testOPBED () throws JsonProcessingException, IOException {
         query = "#BED(der , sa)";
         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(129,  							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:startsWith",			res.at("/query/operands/0/frames/0").asText());
-        assertEquals("koral:group",					res.at("/query/operands/0/@type").asText());
-        assertEquals("operation:class",				res.at("/query/operands/0/operands/1/operation").asText());
-        assertEquals(129,  							res.at("/query/operands/0/operands/1/classOut").asInt());
-        assertEquals("koral:token",					res.at("/query/operands/0/operands/1/operands/0/@type").asText());
-        assertEquals("der",							res.at("/query/operands/0/operands/1/operands/0/wrap/key").asText());
-        assertEquals("koral:span",					res.at("/query/operands/0/operands/0/@type").asText());
-        assertEquals("s",							res.at("/query/operands/0/operands/0/key").asText());
+        assertEquals("koral:reference", res.at("/query/@type").asText());
+        assertEquals("operation:focus", res.at("/query/operation").asText());
+        assertEquals(129, 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:startsWith", res.at("/query/operands/0/frames/0")
+                .asText());
+        assertEquals("koral:group", res.at("/query/operands/0/@type").asText());
+        assertEquals("operation:class",
+                res.at("/query/operands/0/operands/1/operation").asText());
+        assertEquals(129, res.at("/query/operands/0/operands/1/classOut")
+                .asInt());
+        assertEquals("koral:token",
+                res.at("/query/operands/0/operands/1/operands/0/@type")
+                        .asText());
+        assertEquals("der",
+                res.at("/query/operands/0/operands/1/operands/0/wrap/key")
+                        .asText());
+        assertEquals("koral:span", res.at("/query/operands/0/operands/0/@type")
+                .asText());
+        assertEquals("s", res.at("/query/operands/0/operands/0/key").asText());
 
         query = "#BED(der Mann , +pe)";
         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(129,  							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:matches",				res.at("/query/operands/0/frames/0").asText());
-        assertEquals("koral:reference",				res.at("/query/operands/0/operands/0/@type").asText());
-        assertEquals("operation:focus",				res.at("/query/operands/0/operands/0/operation").asText());
-        assertEquals(-1,							res.at("/query/operands/0/operands/0/spanRef/0").asInt());
-        assertEquals(1,								res.at("/query/operands/0/operands/0/spanRef/1").asInt());
-        assertEquals("koral:span",					res.at("/query/operands/0/operands/0/operands/0/@type").asText());
-        assertEquals("p",							res.at("/query/operands/0/operands/0/operands/0/key").asText());
-        assertEquals("koral:reference",				res.at("/query/operands/0/operands/1/@type").asText());
-        assertEquals("operation:focus",				res.at("/query/operands/0/operands/1/operation").asText());
-        assertEquals(0,								res.at("/query/operands/0/operands/1/spanRef/0").asInt());
-        assertEquals(1,								res.at("/query/operands/0/operands/1/spanRef/1").asInt());
-        assertEquals("koral:group",					res.at("/query/operands/0/operands/1/operands/0/@type").asText());
-        assertEquals("operation:class",				res.at("/query/operands/0/operands/1/operands/0/operation").asText());
-        assertEquals(129,  							res.at("/query/operands/0/operands/1/operands/0/classOut").asInt());
-        assertEquals("operation:sequence",			res.at("/query/operands/0/operands/1/operands/0/operands/0/operation").asText());
-        assertEquals("der",							res.at("/query/operands/0/operands/1/operands/0/operands/0/operands/0/wrap/key").asText());
-        assertEquals("Mann",						res.at("/query/operands/0/operands/1/operands/0/operands/0/operands/1/wrap/key").asText());
+        assertEquals("koral:reference", res.at("/query/@type").asText());
+        assertEquals("operation:focus", res.at("/query/operation").asText());
+        assertEquals(129, 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:matches", res.at("/query/operands/0/frames/0")
+                .asText());
+        assertEquals("koral:reference",
+                res.at("/query/operands/0/operands/0/@type").asText());
+        assertEquals("operation:focus",
+                res.at("/query/operands/0/operands/0/operation").asText());
+        assertEquals(-1, res.at("/query/operands/0/operands/0/spanRef/0")
+                .asInt());
+        assertEquals(1, res.at("/query/operands/0/operands/0/spanRef/1")
+                .asInt());
+        assertEquals("koral:span",
+                res.at("/query/operands/0/operands/0/operands/0/@type")
+                        .asText());
+        assertEquals("p", res.at("/query/operands/0/operands/0/operands/0/key")
+                .asText());
+        assertEquals("koral:reference",
+                res.at("/query/operands/0/operands/1/@type").asText());
+        assertEquals("operation:focus",
+                res.at("/query/operands/0/operands/1/operation").asText());
+        assertEquals(0, res.at("/query/operands/0/operands/1/spanRef/0")
+                .asInt());
+        assertEquals(1, res.at("/query/operands/0/operands/1/spanRef/1")
+                .asInt());
+        assertEquals("koral:group",
+                res.at("/query/operands/0/operands/1/operands/0/@type")
+                        .asText());
+        assertEquals("operation:class",
+                res.at("/query/operands/0/operands/1/operands/0/operation")
+                        .asText());
+        assertEquals(129,
+                res.at("/query/operands/0/operands/1/operands/0/classOut")
+                        .asInt());
+        assertEquals(
+                "operation:sequence",
+                res.at("/query/operands/0/operands/1/operands/0/operands/0/operation")
+                        .asText());
+        assertEquals(
+                "der",
+                res.at("/query/operands/0/operands/1/operands/0/operands/0/operands/0/wrap/key")
+                        .asText());
+        assertEquals(
+                "Mann",
+                res.at("/query/operands/0/operands/1/operands/0/operands/0/operands/1/wrap/key")
+                        .asText());
 
         query = "#BED(der Mann , sa,-pa)";
         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(129,  							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:matches",				res.at("/query/operands/0/frames/0").asText());
+        assertEquals("koral:reference", res.at("/query/@type").asText());
+        assertEquals("operation:focus", res.at("/query/operation").asText());
+        assertEquals(129, 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:matches", res.at("/query/operands/0/frames/0")
+                .asText());
 
-        assertEquals("koral:group",					res.at("/query/operands/0/operands/0/@type").asText());
-        assertEquals("operation:position",			res.at("/query/operands/0/operands/0/operation").asText());
-        assertEquals("frames:startsWith",			res.at("/query/operands/0/operands/0/frames/0").asText());
-        assertEquals("koral:span",					res.at("/query/operands/0/operands/0/operands/0/@type").asText());
-        assertEquals("s",							res.at("/query/operands/0/operands/0/operands/0/key").asText());
-        assertEquals("koral:group",					res.at("/query/operands/0/operands/0/operands/1/@type").asText());
-        assertEquals("operation:class",				res.at("/query/operands/0/operands/0/operands/1/operation").asText());
-        assertEquals(129,  							res.at("/query/operands/0/operands/0/operands/1/classOut").asInt());
-        assertEquals("operation:sequence",			res.at("/query/operands/0/operands/0/operands/1/operands/0/operation").asText());
-        assertEquals("der",							res.at("/query/operands/0/operands/0/operands/1/operands/0/operands/0/wrap/key").asText());
-        assertEquals("Mann",						res.at("/query/operands/0/operands/0/operands/1/operands/0/operands/1/wrap/key").asText());
+        assertEquals("koral:group", res
+                .at("/query/operands/0/operands/0/@type").asText());
+        assertEquals("operation:position",
+                res.at("/query/operands/0/operands/0/operation").asText());
+        assertEquals("frames:startsWith",
+                res.at("/query/operands/0/operands/0/frames/0").asText());
+        assertEquals("koral:span",
+                res.at("/query/operands/0/operands/0/operands/0/@type")
+                        .asText());
+        assertEquals("s", res.at("/query/operands/0/operands/0/operands/0/key")
+                .asText());
+        assertEquals("koral:group",
+                res.at("/query/operands/0/operands/0/operands/1/@type")
+                        .asText());
+        assertEquals("operation:class",
+                res.at("/query/operands/0/operands/0/operands/1/operation")
+                        .asText());
+        assertEquals(129,
+                res.at("/query/operands/0/operands/0/operands/1/classOut")
+                        .asInt());
+        assertEquals(
+                "operation:sequence",
+                res.at("/query/operands/0/operands/0/operands/1/operands/0/operation")
+                        .asText());
+        assertEquals(
+                "der",
+                res.at("/query/operands/0/operands/0/operands/1/operands/0/operands/0/wrap/key")
+                        .asText());
+        assertEquals(
+                "Mann",
+                res.at("/query/operands/0/operands/0/operands/1/operands/0/operands/1/wrap/key")
+                        .asText());
 
-        assertEquals("koral:group",					res.at("/query/operands/0/operands/1/@type").asText());
-        assertEquals("operation:position",			res.at("/query/operands/0/operands/1/operation").asText());
-        assertEquals("frames:startsWith",			res.at("/query/operands/0/operands/1/frames/0").asText());
-        assertEquals(true,							res.at("/query/operands/0/operands/1/exclude").asBoolean());
-        assertEquals("koral:span",					res.at("/query/operands/0/operands/1/operands/0/@type").asText());
-        assertEquals("p",							res.at("/query/operands/0/operands/1/operands/0/key").asText());
-        assertEquals("koral:group",					res.at("/query/operands/0/operands/1/operands/1/@type").asText());
-        assertEquals("operation:class",				res.at("/query/operands/0/operands/1/operands/1/operation").asText());
-        assertEquals(130,  							res.at("/query/operands/0/operands/1/operands/1/classOut").asInt());
-        assertEquals("operation:sequence",			res.at("/query/operands/0/operands/1/operands/1/operands/0/operation").asText());
-        assertEquals("der",							res.at("/query/operands/0/operands/1/operands/1/operands/0/operands/0/wrap/key").asText());
-        assertEquals("Mann",						res.at("/query/operands/0/operands/1/operands/1/operands/0/operands/1/wrap/key").asText());
+        assertEquals("koral:group", res
+                .at("/query/operands/0/operands/1/@type").asText());
+        assertEquals("operation:position",
+                res.at("/query/operands/0/operands/1/operation").asText());
+        assertEquals("frames:startsWith",
+                res.at("/query/operands/0/operands/1/frames/0").asText());
+        assertEquals(true, res.at("/query/operands/0/operands/1/exclude")
+                .asBoolean());
+        assertEquals("koral:span",
+                res.at("/query/operands/0/operands/1/operands/0/@type")
+                        .asText());
+        assertEquals("p", res.at("/query/operands/0/operands/1/operands/0/key")
+                .asText());
+        assertEquals("koral:group",
+                res.at("/query/operands/0/operands/1/operands/1/@type")
+                        .asText());
+        assertEquals("operation:class",
+                res.at("/query/operands/0/operands/1/operands/1/operation")
+                        .asText());
+        assertEquals(130,
+                res.at("/query/operands/0/operands/1/operands/1/classOut")
+                        .asInt());
+        assertEquals(
+                "operation:sequence",
+                res.at("/query/operands/0/operands/1/operands/1/operands/0/operation")
+                        .asText());
+        assertEquals(
+                "der",
+                res.at("/query/operands/0/operands/1/operands/1/operands/0/operands/0/wrap/key")
+                        .asText());
+        assertEquals(
+                "Mann",
+                res.at("/query/operands/0/operands/1/operands/1/operands/0/operands/1/wrap/key")
+                        .asText());
 
     }
 
+
     @Test
-    public void testColonSeparatedConditions() throws JsonProcessingException, IOException {
+    public void testColonSeparatedConditions () throws JsonProcessingException,
+            IOException {
         query = "der:sa";
         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(129,  							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:startsWith",			res.at("/query/operands/0/frames/0").asText());
-        assertEquals("koral:group",					res.at("/query/operands/0/@type").asText());
-        assertEquals("operation:class",				res.at("/query/operands/0/operands/1/operation").asText());
-        assertEquals(129,  							res.at("/query/operands/0/operands/1/classOut").asInt());
-        assertEquals("koral:token",					res.at("/query/operands/0/operands/1/operands/0/@type").asText());
-        assertEquals("der",							res.at("/query/operands/0/operands/1/operands/0/wrap/key").asText());
-        assertEquals("koral:span",					res.at("/query/operands/0/operands/0/@type").asText());
-        assertEquals("s",							res.at("/query/operands/0/operands/0/key").asText());
+        assertEquals("koral:reference", res.at("/query/@type").asText());
+        assertEquals("operation:focus", res.at("/query/operation").asText());
+        assertEquals(129, 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:startsWith", res.at("/query/operands/0/frames/0")
+                .asText());
+        assertEquals("koral:group", res.at("/query/operands/0/@type").asText());
+        assertEquals("operation:class",
+                res.at("/query/operands/0/operands/1/operation").asText());
+        assertEquals(129, res.at("/query/operands/0/operands/1/classOut")
+                .asInt());
+        assertEquals("koral:token",
+                res.at("/query/operands/0/operands/1/operands/0/@type")
+                        .asText());
+        assertEquals("der",
+                res.at("/query/operands/0/operands/1/operands/0/wrap/key")
+                        .asText());
+        assertEquals("koral:span", res.at("/query/operands/0/operands/0/@type")
+                .asText());
+        assertEquals("s", res.at("/query/operands/0/operands/0/key").asText());
 
         query = "der:sa,-pa";
         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(129,  							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:matches",				res.at("/query/operands/0/frames/0").asText());
-        assertEquals("koral:group",					res.at("/query/operands/0/operands/0/@type").asText());
-        assertEquals("operation:position",			res.at("/query/operands/0/operands/0/operation").asText());
-        assertEquals("frames:startsWith",			res.at("/query/operands/0/operands/0/frames/0").asText());
-        assertEquals("koral:span",					res.at("/query/operands/0/operands/0/operands/0/@type").asText());
-        assertEquals("s",							res.at("/query/operands/0/operands/0/operands/0/key").asText());
-        assertEquals("koral:group",					res.at("/query/operands/0/operands/0/operands/1/@type").asText());
-        assertEquals("operation:class",				res.at("/query/operands/0/operands/0/operands/1/operation").asText());
-        assertEquals(129,  							res.at("/query/operands/0/operands/0/operands/1/classOut").asInt());
-        assertEquals("der",							res.at("/query/operands/0/operands/0/operands/1/operands/0/wrap/key").asText());
-        assertEquals("koral:group",					res.at("/query/operands/0/operands/1/@type").asText());
-        assertEquals("operation:position",			res.at("/query/operands/0/operands/1/operation").asText());
-        assertEquals("frames:startsWith",			res.at("/query/operands/0/operands/1/frames/0").asText());
-        assertEquals(true,							res.at("/query/operands/0/operands/1/exclude").asBoolean());
-        assertEquals("koral:span",					res.at("/query/operands/0/operands/1/operands/0/@type").asText());
-        assertEquals("p",							res.at("/query/operands/0/operands/1/operands/0/key").asText());
-        assertEquals("koral:group",					res.at("/query/operands/0/operands/1/operands/1/@type").asText());
-        assertEquals("operation:class",				res.at("/query/operands/0/operands/1/operands/1/operation").asText());
-        assertEquals(130,  							res.at("/query/operands/0/operands/1/operands/1/classOut").asInt());
-        assertEquals("der",							res.at("/query/operands/0/operands/1/operands/1/operands/0/wrap/key").asText());
+        assertEquals("koral:reference", res.at("/query/@type").asText());
+        assertEquals("operation:focus", res.at("/query/operation").asText());
+        assertEquals(129, 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:matches", res.at("/query/operands/0/frames/0")
+                .asText());
+        assertEquals("koral:group", res
+                .at("/query/operands/0/operands/0/@type").asText());
+        assertEquals("operation:position",
+                res.at("/query/operands/0/operands/0/operation").asText());
+        assertEquals("frames:startsWith",
+                res.at("/query/operands/0/operands/0/frames/0").asText());
+        assertEquals("koral:span",
+                res.at("/query/operands/0/operands/0/operands/0/@type")
+                        .asText());
+        assertEquals("s", res.at("/query/operands/0/operands/0/operands/0/key")
+                .asText());
+        assertEquals("koral:group",
+                res.at("/query/operands/0/operands/0/operands/1/@type")
+                        .asText());
+        assertEquals("operation:class",
+                res.at("/query/operands/0/operands/0/operands/1/operation")
+                        .asText());
+        assertEquals(129,
+                res.at("/query/operands/0/operands/0/operands/1/classOut")
+                        .asInt());
+        assertEquals(
+                "der",
+                res.at("/query/operands/0/operands/0/operands/1/operands/0/wrap/key")
+                        .asText());
+        assertEquals("koral:group", res
+                .at("/query/operands/0/operands/1/@type").asText());
+        assertEquals("operation:position",
+                res.at("/query/operands/0/operands/1/operation").asText());
+        assertEquals("frames:startsWith",
+                res.at("/query/operands/0/operands/1/frames/0").asText());
+        assertEquals(true, res.at("/query/operands/0/operands/1/exclude")
+                .asBoolean());
+        assertEquals("koral:span",
+                res.at("/query/operands/0/operands/1/operands/0/@type")
+                        .asText());
+        assertEquals("p", res.at("/query/operands/0/operands/1/operands/0/key")
+                .asText());
+        assertEquals("koral:group",
+                res.at("/query/operands/0/operands/1/operands/1/@type")
+                        .asText());
+        assertEquals("operation:class",
+                res.at("/query/operands/0/operands/1/operands/1/operation")
+                        .asText());
+        assertEquals(130,
+                res.at("/query/operands/0/operands/1/operands/1/classOut")
+                        .asInt());
+        assertEquals(
+                "der",
+                res.at("/query/operands/0/operands/1/operands/1/operands/0/wrap/key")
+                        .asText());
 
         query = "der:sa,-pa,+te";
         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(129,  							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:matches",				res.at("/query/operands/0/frames/0").asText());
-        assertEquals("koral:group",					res.at("/query/operands/0/operands/0/@type").asText());
-        assertEquals("operation:position",			res.at("/query/operands/0/operands/0/operation").asText());
-        assertEquals("frames:startsWith",			res.at("/query/operands/0/operands/0/frames/0").asText());
-        assertEquals("koral:span",					res.at("/query/operands/0/operands/0/operands/0/@type").asText());
-        assertEquals("s",							res.at("/query/operands/0/operands/0/operands/0/key").asText());
-        assertEquals("koral:group",					res.at("/query/operands/0/operands/0/operands/1/@type").asText());
-        assertEquals("operation:class",				res.at("/query/operands/0/operands/0/operands/1/operation").asText());
-        assertEquals(129,  							res.at("/query/operands/0/operands/0/operands/1/classOut").asInt());
-        assertEquals("der",							res.at("/query/operands/0/operands/0/operands/1/operands/0/wrap/key").asText());
-        assertEquals("koral:reference",				res.at("/query/operands/0/operands/1/@type").asText());
-        assertEquals("operation:focus",				res.at("/query/operands/0/operands/1/operation").asText());
-        assertEquals(130,  							res.at("/query/operands/0/operands/1/classRef/0").asInt());
-        assertEquals("koral:group",					res.at("/query/operands/0/operands/1/operands/0/@type").asText());
-        assertEquals("operation:position",			res.at("/query/operands/0/operands/1/operands/0/operation").asText());
-        assertEquals("frames:matches",				res.at("/query/operands/0/operands/1/operands/0/frames/0").asText());
-        assertEquals("koral:group",					res.at("/query/operands/0/operands/1/operands/0/operands/0/@type").asText());
-        assertEquals("operation:position",			res.at("/query/operands/0/operands/1/operands/0/operands/0/operation").asText());
-        assertEquals("frames:startsWith",			res.at("/query/operands/0/operands/1/operands/0/operands/0/frames/0").asText());
-        assertEquals(true,							res.at("/query/operands/0/operands/1/operands/0/operands/0/exclude").asBoolean());
-        assertEquals("koral:span",					res.at("/query/operands/0/operands/1/operands/0/operands/0/operands/0/@type").asText());
-        assertEquals("p",							res.at("/query/operands/0/operands/1/operands/0/operands/0/operands/0/key").asText());
-        assertEquals("koral:group",					res.at("/query/operands/0/operands/1/operands/0/operands/0/operands/1/@type").asText());
-        assertEquals("operation:class",				res.at("/query/operands/0/operands/1/operands/0/operands/0/operands/1/operation").asText());
-        assertEquals(130,  							res.at("/query/operands/0/operands/1/operands/0/operands/0/operands/1/classOut").asInt());
-        assertEquals("der",							res.at("/query/operands/0/operands/1/operands/0/operands/0/operands/1/operands/0/wrap/key").asText());
-        assertEquals("koral:group",					res.at("/query/operands/0/operands/1/operands/0/operands/1/@type").asText());
-        assertEquals("operation:position",			res.at("/query/operands/0/operands/1/operands/0/operands/1/operation").asText());
-        assertEquals("frames:matches",				res.at("/query/operands/0/operands/1/operands/0/operands/1/frames/0").asText());
-        assertEquals("koral:reference",				res.at("/query/operands/0/operands/1/operands/0/operands/1/operands/0/@type").asText());
-        assertEquals("operation:focus",				res.at("/query/operands/0/operands/1/operands/0/operands/1/operands/0/operation").asText());
-        assertEquals(-1,							res.at("/query/operands/0/operands/1/operands/0/operands/1/operands/0/spanRef/0").asInt());
-        assertEquals(1,								res.at("/query/operands/0/operands/1/operands/0/operands/1/operands/0/spanRef/1").asInt());
-        assertEquals("koral:span",					res.at("/query/operands/0/operands/1/operands/0/operands/1/operands/0/operands/0/@type").asText());
-        assertEquals("t",							res.at("/query/operands/0/operands/1/operands/0/operands/1/operands/0/operands/0/key").asText());
-        assertEquals("koral:reference",				res.at("/query/operands/0/operands/1/operands/0/operands/1/operands/1/@type").asText());
-        assertEquals("operation:focus",				res.at("/query/operands/0/operands/1/operands/0/operands/1/operands/1/operation").asText());
-        assertEquals(0,								res.at("/query/operands/0/operands/1/operands/0/operands/1/operands/1/spanRef/0").asInt());
-        assertEquals(1,								res.at("/query/operands/0/operands/1/operands/0/operands/1/operands/1/spanRef/1").asInt());
-        assertEquals("koral:group",					res.at("/query/operands/0/operands/1/operands/0/operands/1/operands/1/operands/0/@type").asText());
-        assertEquals("operation:class",				res.at("/query/operands/0/operands/1/operands/0/operands/1/operands/1/operands/0/operation").asText());
-        assertEquals(131,  							res.at("/query/operands/0/operands/1/operands/0/operands/1/operands/1/operands/0/classOut").asInt());
-        assertEquals("der",							res.at("/query/operands/0/operands/1/operands/0/operands/1/operands/1/operands/0/operands/0/wrap/key").asText());
+        assertEquals("koral:reference", res.at("/query/@type").asText());
+        assertEquals("operation:focus", res.at("/query/operation").asText());
+        assertEquals(129, 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:matches", res.at("/query/operands/0/frames/0")
+                .asText());
+        assertEquals("koral:group", res
+                .at("/query/operands/0/operands/0/@type").asText());
+        assertEquals("operation:position",
+                res.at("/query/operands/0/operands/0/operation").asText());
+        assertEquals("frames:startsWith",
+                res.at("/query/operands/0/operands/0/frames/0").asText());
+        assertEquals("koral:span",
+                res.at("/query/operands/0/operands/0/operands/0/@type")
+                        .asText());
+        assertEquals("s", res.at("/query/operands/0/operands/0/operands/0/key")
+                .asText());
+        assertEquals("koral:group",
+                res.at("/query/operands/0/operands/0/operands/1/@type")
+                        .asText());
+        assertEquals("operation:class",
+                res.at("/query/operands/0/operands/0/operands/1/operation")
+                        .asText());
+        assertEquals(129,
+                res.at("/query/operands/0/operands/0/operands/1/classOut")
+                        .asInt());
+        assertEquals(
+                "der",
+                res.at("/query/operands/0/operands/0/operands/1/operands/0/wrap/key")
+                        .asText());
+        assertEquals("koral:reference",
+                res.at("/query/operands/0/operands/1/@type").asText());
+        assertEquals("operation:focus",
+                res.at("/query/operands/0/operands/1/operation").asText());
+        assertEquals(130, res.at("/query/operands/0/operands/1/classRef/0")
+                .asInt());
+        assertEquals("koral:group",
+                res.at("/query/operands/0/operands/1/operands/0/@type")
+                        .asText());
+        assertEquals("operation:position",
+                res.at("/query/operands/0/operands/1/operands/0/operation")
+                        .asText());
+        assertEquals("frames:matches",
+                res.at("/query/operands/0/operands/1/operands/0/frames/0")
+                        .asText());
+        assertEquals(
+                "koral:group",
+                res.at("/query/operands/0/operands/1/operands/0/operands/0/@type")
+                        .asText());
+        assertEquals(
+                "operation:position",
+                res.at("/query/operands/0/operands/1/operands/0/operands/0/operation")
+                        .asText());
+        assertEquals(
+                "frames:startsWith",
+                res.at("/query/operands/0/operands/1/operands/0/operands/0/frames/0")
+                        .asText());
+        assertEquals(
+                true,
+                res.at("/query/operands/0/operands/1/operands/0/operands/0/exclude")
+                        .asBoolean());
+        assertEquals(
+                "koral:span",
+                res.at("/query/operands/0/operands/1/operands/0/operands/0/operands/0/@type")
+                        .asText());
+        assertEquals(
+                "p",
+                res.at("/query/operands/0/operands/1/operands/0/operands/0/operands/0/key")
+                        .asText());
+        assertEquals(
+                "koral:group",
+                res.at("/query/operands/0/operands/1/operands/0/operands/0/operands/1/@type")
+                        .asText());
+        assertEquals(
+                "operation:class",
+                res.at("/query/operands/0/operands/1/operands/0/operands/0/operands/1/operation")
+                        .asText());
+        assertEquals(
+                130,
+                res.at("/query/operands/0/operands/1/operands/0/operands/0/operands/1/classOut")
+                        .asInt());
+        assertEquals(
+                "der",
+                res.at("/query/operands/0/operands/1/operands/0/operands/0/operands/1/operands/0/wrap/key")
+                        .asText());
+        assertEquals(
+                "koral:group",
+                res.at("/query/operands/0/operands/1/operands/0/operands/1/@type")
+                        .asText());
+        assertEquals(
+                "operation:position",
+                res.at("/query/operands/0/operands/1/operands/0/operands/1/operation")
+                        .asText());
+        assertEquals(
+                "frames:matches",
+                res.at("/query/operands/0/operands/1/operands/0/operands/1/frames/0")
+                        .asText());
+        assertEquals(
+                "koral:reference",
+                res.at("/query/operands/0/operands/1/operands/0/operands/1/operands/0/@type")
+                        .asText());
+        assertEquals(
+                "operation:focus",
+                res.at("/query/operands/0/operands/1/operands/0/operands/1/operands/0/operation")
+                        .asText());
+        assertEquals(
+                -1,
+                res.at("/query/operands/0/operands/1/operands/0/operands/1/operands/0/spanRef/0")
+                        .asInt());
+        assertEquals(
+                1,
+                res.at("/query/operands/0/operands/1/operands/0/operands/1/operands/0/spanRef/1")
+                        .asInt());
+        assertEquals(
+                "koral:span",
+                res.at("/query/operands/0/operands/1/operands/0/operands/1/operands/0/operands/0/@type")
+                        .asText());
+        assertEquals(
+                "t",
+                res.at("/query/operands/0/operands/1/operands/0/operands/1/operands/0/operands/0/key")
+                        .asText());
+        assertEquals(
+                "koral:reference",
+                res.at("/query/operands/0/operands/1/operands/0/operands/1/operands/1/@type")
+                        .asText());
+        assertEquals(
+                "operation:focus",
+                res.at("/query/operands/0/operands/1/operands/0/operands/1/operands/1/operation")
+                        .asText());
+        assertEquals(
+                0,
+                res.at("/query/operands/0/operands/1/operands/0/operands/1/operands/1/spanRef/0")
+                        .asInt());
+        assertEquals(
+                1,
+                res.at("/query/operands/0/operands/1/operands/0/operands/1/operands/1/spanRef/1")
+                        .asInt());
+        assertEquals(
+                "koral:group",
+                res.at("/query/operands/0/operands/1/operands/0/operands/1/operands/1/operands/0/@type")
+                        .asText());
+        assertEquals(
+                "operation:class",
+                res.at("/query/operands/0/operands/1/operands/0/operands/1/operands/1/operands/0/operation")
+                        .asText());
+        assertEquals(
+                131,
+                res.at("/query/operands/0/operands/1/operands/0/operands/1/operands/1/operands/0/classOut")
+                        .asInt());
+        assertEquals(
+                "der",
+                res.at("/query/operands/0/operands/1/operands/0/operands/1/operands/1/operands/0/operands/0/wrap/key")
+                        .asText());
     }
 
+
     @Test
-    public void testErrors() throws JsonProcessingException, IOException {
+    public void testErrors () throws JsonProcessingException, IOException {
         query = "MORPH(tt/p=\"\")";
         qs.setQuery(query, "cosmas2");
         res = mapper.readTree(qs.toJSON());
-        assertEquals(true,         res.at("/query/@type").isMissingNode());
-        assertEquals(StatusCodes.INCOMPATIBLE_OPERATOR_AND_OPERAND,          res.at("/errors/0/0").asInt());
-        assertTrue(res.at("/errors/0/1").asText().startsWith("Something went wrong parsing the argument in MORPH()"));
+        assertEquals(true, res.at("/query/@type").isMissingNode());
+        assertEquals(StatusCodes.INCOMPATIBLE_OPERATOR_AND_OPERAND,
+                res.at("/errors/0/0").asInt());
+        assertTrue(res
+                .at("/errors/0/1")
+                .asText()
+                .startsWith(
+                        "Something went wrong parsing the argument in MORPH()"));
 
         query = "MORPH(tt/p=\"foo)";
         qs.setQuery(query, "cosmas2");
         res = mapper.readTree(qs.toJSON());
-        assertEquals(true,         res.at("/query/@type").isMissingNode());
-        assertEquals(StatusCodes.MALFORMED_QUERY,          res.at("/errors/0/0").asInt());
-        assertTrue(res.at("/errors/0/1").asText().startsWith("Early closing parenthesis"));
+        assertEquals(true, res.at("/query/@type").isMissingNode());
+        assertEquals(StatusCodes.MALFORMED_QUERY, res.at("/errors/0/0").asInt());
+        assertTrue(res.at("/errors/0/1").asText()
+                .startsWith("Early closing parenthesis"));
 
         query = "MORPH(tt/p=)";
         qs.setQuery(query, "cosmas2");
         res = mapper.readTree(qs.toJSON());
-        assertEquals(true,         res.at("/query/@type").isMissingNode());
-        assertEquals(StatusCodes.MALFORMED_QUERY,          res.at("/errors/0/0").asInt());
-        assertTrue(res.at("/errors/0/1").asText().startsWith("Early closing parenthesis"));
+        assertEquals(true, res.at("/query/@type").isMissingNode());
+        assertEquals(StatusCodes.MALFORMED_QUERY, res.at("/errors/0/0").asInt());
+        assertTrue(res.at("/errors/0/1").asText()
+                .startsWith("Early closing parenthesis"));
     }
 }
diff --git a/src/test/java/de/ids_mannheim/korap/query/serialize/CqlQueryProcessorTest.java b/src/test/java/de/ids_mannheim/korap/query/serialize/CqlQueryProcessorTest.java
index 92cf788..6f2bdd9 100644
--- a/src/test/java/de/ids_mannheim/korap/query/serialize/CqlQueryProcessorTest.java
+++ b/src/test/java/de/ids_mannheim/korap/query/serialize/CqlQueryProcessorTest.java
@@ -1,4 +1,5 @@
 package de.ids_mannheim.korap.query.serialize;
+
 import static org.junit.Assert.assertEquals;
 
 import java.io.IOException;
@@ -14,187 +15,206 @@
 
 
 public class CqlQueryProcessorTest {
-	
-	String query;
-	String version ="1.2";
-	ObjectMapper mapper = new ObjectMapper();
-	
-	@Test
-	public void testExceptions() throws CQLParseException, IOException {
-		query = "(Kuh) prox (Germ) ";
-		try {
-			CqlQueryProcessor cqlTree = new CqlQueryProcessor(query, version);
-		} catch (Exception e) {
-			int errorCode = Integer.parseInt(e.getMessage().split(":")[0].replace("SRU diagnostic ", ""));
-			assertEquals(48,errorCode);
-		}
-		
-		query = "(Kuh) or/rel.combine=sum (Germ) ";		
-		try {
-			CqlQueryProcessor cqlTree = new CqlQueryProcessor(query, version);
-		}catch (Exception e) {			
-			int errorCode = Integer.parseInt(e.getMessage().split(":")[0].replace("SRU diagnostic ", ""));
-			assertEquals(20,errorCode);
-		}
-		
-		query = "dc.title any Germ ";
-		try {
-			CqlQueryProcessor cqlTree = new CqlQueryProcessor(query, version);
-		} catch (Exception e) {
-			int errorCode = Integer.parseInt(e.getMessage().split(":")[0].replace("SRU diagnostic ", ""));
-			assertEquals(16,errorCode);
-		}
-		
-		query = "cql.serverChoice any Germ ";
-		try {
-			CqlQueryProcessor cqlTree = new CqlQueryProcessor(query, version);
-		} catch (Exception e) {
-			int errorCode = Integer.parseInt(e.getMessage().split(":")[0].replace("SRU diagnostic ", ""));
-			assertEquals(19,errorCode);
-		}
-		
-		query = "";
-		try {
-			CqlQueryProcessor cqlTree = new CqlQueryProcessor(query, version);
-		} catch (Exception e) {
-			int errorCode = Integer.parseInt(e.getMessage().split(":")[0].replace("SRU diagnostic ", ""));
-			assertEquals(27,errorCode);
-		}
-	}
-	
-	@Test
-	public void testAndQuery() throws CQLParseException, IOException, Exception{
-		query="(Sonne) and (scheint)";	
-		String jsonLd = 
-			"{@type : koral:group, operation : operation:sequence, inOrder : false," +		
-			"distances:[ "+
-				"{@type : koral:distance, key : s, min : 0, max : 0 } ],"+
-					"operands : ["+
-						"{@type : koral:token, wrap : {@type : koral:term,key : Sonne, layer : orth, match : match:eq}}," + 
-						"{@type : koral:token,wrap : {@type : koral:term,key : scheint,layer : orth,match : match:eq}" +
-					"}]}";
-			
-			CqlQueryProcessor cqlTree = new CqlQueryProcessor(query, version);		
-			String serializedQuery = mapper.writeValueAsString(cqlTree.getRequestMap().get("query"));
-			assertEquals(jsonLd.replace(" ", ""), serializedQuery.replace("\"", ""));
-//			/System.out.println(serializedQuery);
-		//CosmasTree ct = new CosmasTree("Sonne und scheint");
-		//serializedQuery = mapper.writeValueAsString(ct.getRequestMap().get("query"));
-		//assertEquals(jsonLd.replace(" ", ""), serializedQuery.replace("\"", ""));
-	}
-	
-	@Test
-	public void testBooleanQuery() throws CQLParseException, IOException, Exception{		
-		query="((Sonne) or (Mond)) and (scheint)";		
-		String jsonLd = 
-			"{@type:koral:group, operation:operation:sequence, inOrder : false, distances:[" +
-				"{@type:koral:distance, key:s, min:0, max:0}" +
-				"], operands:[" +
-					"{@type:koral:group, operation:operation:or, operands:[" +
-						"{@type:koral:token, wrap:{@type:koral:term, key:Sonne, layer:orth, match:match:eq}}," +
-						"{@type:koral:token, wrap:{@type:koral:term, key:Mond, layer:orth, match:match:eq}}" +
-					"]}," +
-					"{@type:koral:token, wrap:{@type:koral:term, key:scheint, layer:orth, match:match:eq}}" +
-			"]}";
-		CqlQueryProcessor cqlTree = new CqlQueryProcessor(query, version);		
-		String serializedQuery = mapper.writeValueAsString(cqlTree.getRequestMap().get("query"));
-		assertEquals(jsonLd.replace(" ", ""), serializedQuery.replace("\"", ""));
-		
-		
-		query="(scheint) and ((Sonne) or (Mond))";
-		jsonLd = 
-				"{@type:koral:group, operation:operation:sequence, inOrder : false, distances:[" +
-						"{@type:koral:distance, key:s, min:0, max:0}" +
-					"], operands:[" +
-						"{@type:koral:token, wrap:{@type:koral:term, key:scheint, layer:orth, match:match:eq}}," +
-						"{@type:koral:group, operation:operation:or, operands:[" +
-							"{@type:koral:token, wrap:{@type:koral:term, key:Sonne, layer:orth, match:match:eq}}," +
-							"{@type:koral:token, wrap:{@type:koral:term, key:Mond, layer:orth, match:match:eq}}" +
-					"]}" +
-				"]}";
-		cqlTree = new CqlQueryProcessor(query, version);		
-		serializedQuery = mapper.writeValueAsString(cqlTree.getRequestMap().get("query"));
-		assertEquals(jsonLd.replace(" ", ""), serializedQuery.replace("\"", ""));
-		
-	}
-	
-	@Test
-	public void testOrQuery() throws CQLParseException, IOException, Exception{
-		query = "(Sonne) or (Mond)";		
-		String jsonLd = 
-			"{@type:koral:group, operation:operation:or, operands:[" +
-				"{@type:koral:token, wrap:{@type:koral:term, key:Sonne, layer:orth, match:match:eq}}," +
-				"{@type:koral:token, wrap:{@type:koral:term, key:Mond, layer:orth, match:match:eq}}" +
-			"]}";		
-		
-		CqlQueryProcessor cqlTree = new CqlQueryProcessor(query, version);		
-		String serializedQuery = mapper.writeValueAsString(cqlTree.getRequestMap().get("query"));
-		assertEquals(jsonLd.replace(" ", ""), serializedQuery.replace("\"", ""));
-		
-		query="(\"Sonne scheint\") or (Mond)";		
-		jsonLd = 
-			"{@type:koral:group, operation:operation:or, operands:[" +
-				"{@type:koral:group, operation:operation:sequence, operands:[" +
-					"{@type:koral:token, wrap:{@type:koral:term, key:Sonne, layer:orth, match:match:eq}}," +
-					"{@type:koral:token, wrap:{@type:koral:term, key:scheint, layer:orth, match:match:eq}}" +
-				"]}," +
-				"{@type:koral:token, wrap:{@type:koral:term, key:Mond, layer:orth, match:match:eq}}" +
-			"]}";
-		
-		cqlTree = new CqlQueryProcessor(query, version);		
-		serializedQuery = mapper.writeValueAsString(cqlTree.getRequestMap().get("query"));
-		assertEquals(jsonLd.replace(" ", ""), serializedQuery.replace("\"", ""));
-				
-		query="(\"Sonne scheint\") or (\"Mond scheint\")";		
-		jsonLd = 
-			"{@type:koral:group, operation:operation:or, operands:[" +
-					"{@type:koral:group, operation:operation:sequence, operands:[" +
-						"{@type:koral:token, wrap:{@type:koral:term, key:Sonne, layer:orth, match:match:eq}}," +
-						"{@type:koral:token, wrap:{@type:koral:term, key:scheint, layer:orth, match:match:eq}}" +
-					"]}," +
-					"{@type:koral:group, operation:operation:sequence, operands:[" +
-						"{@type:koral:token, wrap:{@type:koral:term, key:Mond, layer:orth, match:match:eq}}," +
-						"{@type:koral:token, wrap:{@type:koral:term, key:scheint, layer:orth, match:match:eq}}" +
-					"]}" +
-				"]}";
-		cqlTree = new CqlQueryProcessor(query, version);		
-		serializedQuery = mapper.writeValueAsString(cqlTree.getRequestMap().get("query"));
-		assertEquals(jsonLd.replace(" ", ""), serializedQuery.replace("\"", ""));
-	}
-	
-	@Test
-	public void testTermQuery() throws CQLParseException, IOException, Exception{
-		query = "Sonne";		
-		String jsonLd = "{@type:koral:token, wrap:{@type:koral:term, key:Sonne, layer:orth, match:match:eq}}";		
-		CqlQueryProcessor cqlTree = new CqlQueryProcessor(query, version);		
-		String serializedQuery = mapper.writeValueAsString(cqlTree.getRequestMap().get("query"));		
-		assertEquals(jsonLd.replace(" ", ""), serializedQuery.replace("\"", ""));
-	}
-	
-	@Test
-	public void testPhraseQuery() throws CQLParseException, IOException, Exception{
-		query="\"der Mann\"";				
-		String jsonLd = 
-			"{@type:koral:group, operation:operation:sequence, operands:[" +
-				"{@type:koral:token, wrap:{@type:koral:term, key:der, layer:orth, match:match:eq}}," +
-				"{@type:koral:token, wrap:{@type:koral:term, key:Mann, layer:orth, match:match:eq}}" +
-			"]}";
-		
-		CqlQueryProcessor cqlTree = new CqlQueryProcessor(query, version);		
-		String serializedQuery = mapper.writeValueAsString(cqlTree.getRequestMap().get("query"));
-		assertEquals(jsonLd.replace(" ", ""), serializedQuery.replace("\"", ""));
-		
-		
-		query="der Mann schläft";
-		jsonLd = 
-			"{@type:koral:group, operation:operation:sequence, operands:[" +
-				"{@type:koral:token, wrap:{@type:koral:term, key:der, layer:orth, match:match:eq}}," +
-				"{@type:koral:token, wrap:{@type:koral:term, key:Mann, layer:orth, match:match:eq}}," +
-				"{@type:koral:token, wrap:{@type:koral:term, key:schläft, layer:orth, match:match:eq}}" +
-			"]}";
-		
-		cqlTree = new CqlQueryProcessor(query, version);		
-		serializedQuery = mapper.writeValueAsString(cqlTree.getRequestMap().get("query"));
-		assertEquals(jsonLd.replace(" ", ""), serializedQuery.replace("\"", ""));
-	}	
+
+    String query;
+    String version = "1.2";
+    ObjectMapper mapper = new ObjectMapper();
+
+
+    @Test
+    public void testExceptions () throws CQLParseException, IOException {
+        query = "(Kuh) prox (Germ) ";
+        try {
+            CqlQueryProcessor cqlTree = new CqlQueryProcessor(query, version);
+        }
+        catch (Exception e) {
+            int errorCode = Integer.parseInt(e.getMessage().split(":")[0]
+                    .replace("SRU diagnostic ", ""));
+            assertEquals(48, errorCode);
+        }
+
+        query = "(Kuh) or/rel.combine=sum (Germ) ";
+        try {
+            CqlQueryProcessor cqlTree = new CqlQueryProcessor(query, version);
+        }
+        catch (Exception e) {
+            int errorCode = Integer.parseInt(e.getMessage().split(":")[0]
+                    .replace("SRU diagnostic ", ""));
+            assertEquals(20, errorCode);
+        }
+
+        query = "dc.title any Germ ";
+        try {
+            CqlQueryProcessor cqlTree = new CqlQueryProcessor(query, version);
+        }
+        catch (Exception e) {
+            int errorCode = Integer.parseInt(e.getMessage().split(":")[0]
+                    .replace("SRU diagnostic ", ""));
+            assertEquals(16, errorCode);
+        }
+
+        query = "cql.serverChoice any Germ ";
+        try {
+            CqlQueryProcessor cqlTree = new CqlQueryProcessor(query, version);
+        }
+        catch (Exception e) {
+            int errorCode = Integer.parseInt(e.getMessage().split(":")[0]
+                    .replace("SRU diagnostic ", ""));
+            assertEquals(19, errorCode);
+        }
+
+        query = "";
+        try {
+            CqlQueryProcessor cqlTree = new CqlQueryProcessor(query, version);
+        }
+        catch (Exception e) {
+            int errorCode = Integer.parseInt(e.getMessage().split(":")[0]
+                    .replace("SRU diagnostic ", ""));
+            assertEquals(27, errorCode);
+        }
+    }
+
+
+    @Test
+    public void testAndQuery () throws CQLParseException, IOException,
+            Exception {
+        query = "(Sonne) and (scheint)";
+        String jsonLd = "{@type : koral:group, operation : operation:sequence, inOrder : false,"
+                + "distances:[ "
+                + "{@type : koral:distance, key : s, min : 0, max : 0 } ],"
+                + "operands : ["
+                + "{@type : koral:token, wrap : {@type : koral:term,key : Sonne, layer : orth, match : match:eq}},"
+                + "{@type : koral:token,wrap : {@type : koral:term,key : scheint,layer : orth,match : match:eq}"
+                + "}]}";
+
+        CqlQueryProcessor cqlTree = new CqlQueryProcessor(query, version);
+        String serializedQuery = mapper.writeValueAsString(cqlTree
+                .getRequestMap().get("query"));
+        assertEquals(jsonLd.replace(" ", ""), serializedQuery.replace("\"", ""));
+        //			/System.out.println(serializedQuery);
+        //CosmasTree ct = new CosmasTree("Sonne und scheint");
+        //serializedQuery = mapper.writeValueAsString(ct.getRequestMap().get("query"));
+        //assertEquals(jsonLd.replace(" ", ""), serializedQuery.replace("\"", ""));
+    }
+
+
+    @Test
+    public void testBooleanQuery () throws CQLParseException, IOException,
+            Exception {
+        query = "((Sonne) or (Mond)) and (scheint)";
+        String jsonLd = "{@type:koral:group, operation:operation:sequence, inOrder : false, distances:["
+                + "{@type:koral:distance, key:s, min:0, max:0}"
+                + "], operands:["
+                + "{@type:koral:group, operation:operation:or, operands:["
+                + "{@type:koral:token, wrap:{@type:koral:term, key:Sonne, layer:orth, match:match:eq}},"
+                + "{@type:koral:token, wrap:{@type:koral:term, key:Mond, layer:orth, match:match:eq}}"
+                + "]},"
+                + "{@type:koral:token, wrap:{@type:koral:term, key:scheint, layer:orth, match:match:eq}}"
+                + "]}";
+        CqlQueryProcessor cqlTree = new CqlQueryProcessor(query, version);
+        String serializedQuery = mapper.writeValueAsString(cqlTree
+                .getRequestMap().get("query"));
+        assertEquals(jsonLd.replace(" ", ""), serializedQuery.replace("\"", ""));
+
+
+        query = "(scheint) and ((Sonne) or (Mond))";
+        jsonLd = "{@type:koral:group, operation:operation:sequence, inOrder : false, distances:["
+                + "{@type:koral:distance, key:s, min:0, max:0}"
+                + "], operands:["
+                + "{@type:koral:token, wrap:{@type:koral:term, key:scheint, layer:orth, match:match:eq}},"
+                + "{@type:koral:group, operation:operation:or, operands:["
+                + "{@type:koral:token, wrap:{@type:koral:term, key:Sonne, layer:orth, match:match:eq}},"
+                + "{@type:koral:token, wrap:{@type:koral:term, key:Mond, layer:orth, match:match:eq}}"
+                + "]}" + "]}";
+        cqlTree = new CqlQueryProcessor(query, version);
+        serializedQuery = mapper.writeValueAsString(cqlTree.getRequestMap()
+                .get("query"));
+        assertEquals(jsonLd.replace(" ", ""), serializedQuery.replace("\"", ""));
+
+    }
+
+
+    @Test
+    public void testOrQuery () throws CQLParseException, IOException, Exception {
+        query = "(Sonne) or (Mond)";
+        String jsonLd = "{@type:koral:group, operation:operation:or, operands:["
+                + "{@type:koral:token, wrap:{@type:koral:term, key:Sonne, layer:orth, match:match:eq}},"
+                + "{@type:koral:token, wrap:{@type:koral:term, key:Mond, layer:orth, match:match:eq}}"
+                + "]}";
+
+        CqlQueryProcessor cqlTree = new CqlQueryProcessor(query, version);
+        String serializedQuery = mapper.writeValueAsString(cqlTree
+                .getRequestMap().get("query"));
+        assertEquals(jsonLd.replace(" ", ""), serializedQuery.replace("\"", ""));
+
+        query = "(\"Sonne scheint\") or (Mond)";
+        jsonLd = "{@type:koral:group, operation:operation:or, operands:["
+                + "{@type:koral:group, operation:operation:sequence, operands:["
+                + "{@type:koral:token, wrap:{@type:koral:term, key:Sonne, layer:orth, match:match:eq}},"
+                + "{@type:koral:token, wrap:{@type:koral:term, key:scheint, layer:orth, match:match:eq}}"
+                + "]},"
+                + "{@type:koral:token, wrap:{@type:koral:term, key:Mond, layer:orth, match:match:eq}}"
+                + "]}";
+
+        cqlTree = new CqlQueryProcessor(query, version);
+        serializedQuery = mapper.writeValueAsString(cqlTree.getRequestMap()
+                .get("query"));
+        assertEquals(jsonLd.replace(" ", ""), serializedQuery.replace("\"", ""));
+
+        query = "(\"Sonne scheint\") or (\"Mond scheint\")";
+        jsonLd = "{@type:koral:group, operation:operation:or, operands:["
+                + "{@type:koral:group, operation:operation:sequence, operands:["
+                + "{@type:koral:token, wrap:{@type:koral:term, key:Sonne, layer:orth, match:match:eq}},"
+                + "{@type:koral:token, wrap:{@type:koral:term, key:scheint, layer:orth, match:match:eq}}"
+                + "]},"
+                + "{@type:koral:group, operation:operation:sequence, operands:["
+                + "{@type:koral:token, wrap:{@type:koral:term, key:Mond, layer:orth, match:match:eq}},"
+                + "{@type:koral:token, wrap:{@type:koral:term, key:scheint, layer:orth, match:match:eq}}"
+                + "]}" + "]}";
+        cqlTree = new CqlQueryProcessor(query, version);
+        serializedQuery = mapper.writeValueAsString(cqlTree.getRequestMap()
+                .get("query"));
+        assertEquals(jsonLd.replace(" ", ""), serializedQuery.replace("\"", ""));
+    }
+
+
+    @Test
+    public void testTermQuery () throws CQLParseException, IOException,
+            Exception {
+        query = "Sonne";
+        String jsonLd = "{@type:koral:token, wrap:{@type:koral:term, key:Sonne, layer:orth, match:match:eq}}";
+        CqlQueryProcessor cqlTree = new CqlQueryProcessor(query, version);
+        String serializedQuery = mapper.writeValueAsString(cqlTree
+                .getRequestMap().get("query"));
+        assertEquals(jsonLd.replace(" ", ""), serializedQuery.replace("\"", ""));
+    }
+
+
+    @Test
+    public void testPhraseQuery () throws CQLParseException, IOException,
+            Exception {
+        query = "\"der Mann\"";
+        String jsonLd = "{@type:koral:group, operation:operation:sequence, operands:["
+                + "{@type:koral:token, wrap:{@type:koral:term, key:der, layer:orth, match:match:eq}},"
+                + "{@type:koral:token, wrap:{@type:koral:term, key:Mann, layer:orth, match:match:eq}}"
+                + "]}";
+
+        CqlQueryProcessor cqlTree = new CqlQueryProcessor(query, version);
+        String serializedQuery = mapper.writeValueAsString(cqlTree
+                .getRequestMap().get("query"));
+        assertEquals(jsonLd.replace(" ", ""), serializedQuery.replace("\"", ""));
+
+
+        query = "der Mann schläft";
+        jsonLd = "{@type:koral:group, operation:operation:sequence, operands:["
+                + "{@type:koral:token, wrap:{@type:koral:term, key:der, layer:orth, match:match:eq}},"
+                + "{@type:koral:token, wrap:{@type:koral:term, key:Mann, layer:orth, match:match:eq}},"
+                + "{@type:koral:token, wrap:{@type:koral:term, key:schläft, layer:orth, match:match:eq}}"
+                + "]}";
+
+        cqlTree = new CqlQueryProcessor(query, version);
+        serializedQuery = mapper.writeValueAsString(cqlTree.getRequestMap()
+                .get("query"));
+        assertEquals(jsonLd.replace(" ", ""), serializedQuery.replace("\"", ""));
+    }
 }
diff --git a/src/test/java/de/ids_mannheim/korap/query/serialize/PoliqarpPlusQueryProcessorTest.java b/src/test/java/de/ids_mannheim/korap/query/serialize/PoliqarpPlusQueryProcessorTest.java
index b7858af..344e78c 100644
--- a/src/test/java/de/ids_mannheim/korap/query/serialize/PoliqarpPlusQueryProcessorTest.java
+++ b/src/test/java/de/ids_mannheim/korap/query/serialize/PoliqarpPlusQueryProcessorTest.java
@@ -1,4 +1,5 @@
 package de.ids_mannheim.korap.query.serialize;
+
 import static org.junit.Assert.*;
 
 import java.io.IOException;
@@ -11,11 +12,11 @@
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.google.common.collect.Lists;
 
-
 import de.ids_mannheim.korap.query.serialize.QuerySerializer;
 
 /**
- * Tests for JSON-LD serialization of PoliqarpPlus queries. 
+ * Tests for JSON-LD serialization of PoliqarpPlus queries.
+ * 
  * @author Joachim Bingel (bingel@ids-mannheim.de)
  * @version 1.0
  */
@@ -28,8 +29,9 @@
     ObjectMapper mapper = new ObjectMapper();
     JsonNode res;
 
+
     @Test
-    public void testContext() throws JsonProcessingException, IOException {
+    public void testContext () throws JsonProcessingException, IOException {
         query = "foo";
         String contextString = "http://korap.ids-mannheim.de/ns/koral/0.3/context.jsonld";
         qs.setQuery(query, "poliqarpplus");
@@ -37,1383 +39,1679 @@
         assertEquals(contextString, res.get("@context").asText());
     }
 
+
     @Test
-    public void testSingleTokens() throws JsonProcessingException, IOException {
+    public void testSingleTokens () throws JsonProcessingException, IOException {
         query = "[base=Mann]";
         qs.setQuery(query, "poliqarpplus");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:token", 		res.at("/query/@type").asText());
-        assertEquals("Mann", 				res.at("/query/wrap/key").asText());
-        assertEquals("lemma", 				res.at("/query/wrap/layer").asText());
-        assertEquals("match:eq",			res.at("/query/wrap/match").asText());
+        assertEquals("koral:token", res.at("/query/@type").asText());
+        assertEquals("Mann", res.at("/query/wrap/key").asText());
+        assertEquals("lemma", res.at("/query/wrap/layer").asText());
+        assertEquals("match:eq", res.at("/query/wrap/match").asText());
 
         query = "[orth!=Frau]";
         qs.setQuery(query, "poliqarpplus");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:token", 		res.at("/query/@type").asText());
-        assertEquals("Frau", 				res.at("/query/wrap/key").asText());
-        assertEquals("orth", 				res.at("/query/wrap/layer").asText());
-        assertEquals("match:ne",			res.at("/query/wrap/match").asText());
+        assertEquals("koral:token", res.at("/query/@type").asText());
+        assertEquals("Frau", res.at("/query/wrap/key").asText());
+        assertEquals("orth", res.at("/query/wrap/layer").asText());
+        assertEquals("match:ne", res.at("/query/wrap/match").asText());
 
         query = "[p!=NN]";
         qs.setQuery(query, "poliqarpplus");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:token", 		res.at("/query/@type").asText());
-        assertEquals("NN", 					res.at("/query/wrap/key").asText());
-        assertEquals("p", 					res.at("/query/wrap/layer").asText());
-        assertEquals("match:ne",			res.at("/query/wrap/match").asText());
+        assertEquals("koral:token", res.at("/query/@type").asText());
+        assertEquals("NN", res.at("/query/wrap/key").asText());
+        assertEquals("p", res.at("/query/wrap/layer").asText());
+        assertEquals("match:ne", res.at("/query/wrap/match").asText());
 
         query = "[!p!=NN]";
         qs.setQuery(query, "poliqarpplus");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:token", 		res.at("/query/@type").asText());
-        assertEquals("NN", 					res.at("/query/wrap/key").asText());
-        assertEquals("p", 					res.at("/query/wrap/layer").asText());
-        assertEquals("match:eq",			res.at("/query/wrap/match").asText());
+        assertEquals("koral:token", res.at("/query/@type").asText());
+        assertEquals("NN", res.at("/query/wrap/key").asText());
+        assertEquals("p", res.at("/query/wrap/layer").asText());
+        assertEquals("match:eq", res.at("/query/wrap/match").asText());
 
         query = "[base=schland/x]";
         qs.setQuery(query, "poliqarpplus");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:token", 		res.at("/query/@type").asText());
-        assertEquals(".*?schland.*?",		res.at("/query/wrap/key").asText());
-        assertEquals("lemma", 				res.at("/query/wrap/layer").asText());
-        assertEquals("type:regex",			res.at("/query/wrap/type").asText());
-        assertEquals("match:eq",			res.at("/query/wrap/match").asText());
+        assertEquals("koral:token", res.at("/query/@type").asText());
+        assertEquals(".*?schland.*?", res.at("/query/wrap/key").asText());
+        assertEquals("lemma", res.at("/query/wrap/layer").asText());
+        assertEquals("type:regex", res.at("/query/wrap/type").asText());
+        assertEquals("match:eq", res.at("/query/wrap/match").asText());
     }
 
+
     @Test
-    public void testNegatedTokens() throws JsonProcessingException, IOException {
+    public void testNegatedTokens () throws JsonProcessingException,
+            IOException {
         query = "![p!=NN]";
         qs.setQuery(query, "poliqarpplus");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:token",         res.at("/query/@type").asText());
-        assertEquals("NN",                  res.at("/query/wrap/key").asText());
-        assertEquals("p",                   res.at("/query/wrap/layer").asText());
-        assertEquals("match:eq",            res.at("/query/wrap/match").asText());
+        assertEquals("koral:token", res.at("/query/@type").asText());
+        assertEquals("NN", res.at("/query/wrap/key").asText());
+        assertEquals("p", res.at("/query/wrap/layer").asText());
+        assertEquals("match:eq", res.at("/query/wrap/match").asText());
     }
-    
+
+
     @Test
-    public void testValue() throws JsonProcessingException, IOException {
+    public void testValue () throws JsonProcessingException, IOException {
         query = "[mate/m=temp:pres]";
         qs.setQuery(query, "poliqarpplus");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:token", 		res.at("/query/@type").asText());
-        assertEquals("koral:term",			res.at("/query/wrap/@type").asText());
-        assertEquals("temp",				res.at("/query/wrap/key").asText());
-        assertEquals("pres",				res.at("/query/wrap/value").asText());
-        assertEquals("m",	 				res.at("/query/wrap/layer").asText());
-        assertEquals("mate", 				res.at("/query/wrap/foundry").asText());
-        assertEquals("match:eq",			res.at("/query/wrap/match").asText());
+        assertEquals("koral:token", res.at("/query/@type").asText());
+        assertEquals("koral:term", res.at("/query/wrap/@type").asText());
+        assertEquals("temp", res.at("/query/wrap/key").asText());
+        assertEquals("pres", res.at("/query/wrap/value").asText());
+        assertEquals("m", res.at("/query/wrap/layer").asText());
+        assertEquals("mate", res.at("/query/wrap/foundry").asText());
+        assertEquals("match:eq", res.at("/query/wrap/match").asText());
     }
 
+
     @Test
-    public void testRegex() throws JsonProcessingException, IOException {
+    public void testRegex () throws JsonProcessingException, IOException {
         query = "[orth=\"M(a|ä)nn(er)?\"]";
         qs.setQuery(query, "poliqarpplus");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:token", 		res.at("/query/@type").asText());
-        assertEquals("koral:term",			res.at("/query/wrap/@type").asText());
-        assertEquals("M(a|ä)nn(er)?",		res.at("/query/wrap/key").asText());
-        assertEquals("type:regex",			res.at("/query/wrap/type").asText());
-        assertEquals("orth", 				res.at("/query/wrap/layer").asText());
-        assertEquals("match:eq",			res.at("/query/wrap/match").asText());
+        assertEquals("koral:token", res.at("/query/@type").asText());
+        assertEquals("koral:term", res.at("/query/wrap/@type").asText());
+        assertEquals("M(a|ä)nn(er)?", res.at("/query/wrap/key").asText());
+        assertEquals("type:regex", res.at("/query/wrap/type").asText());
+        assertEquals("orth", res.at("/query/wrap/layer").asText());
+        assertEquals("match:eq", res.at("/query/wrap/match").asText());
 
         query = "[orth=\"M(a|ä)nn(er)?\"/x]";
         qs.setQuery(query, "poliqarpplus");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:token", 		res.at("/query/@type").asText());
-        assertEquals("koral:term",			res.at("/query/wrap/@type").asText());
-        assertEquals(".*?M(a|ä)nn(er)?.*?",	res.at("/query/wrap/key").asText());
-        assertEquals("type:regex",			res.at("/query/wrap/type").asText());
-        assertEquals("orth", 				res.at("/query/wrap/layer").asText());
-        assertEquals("match:eq",			res.at("/query/wrap/match").asText());
+        assertEquals("koral:token", res.at("/query/@type").asText());
+        assertEquals("koral:term", res.at("/query/wrap/@type").asText());
+        assertEquals(".*?M(a|ä)nn(er)?.*?", res.at("/query/wrap/key").asText());
+        assertEquals("type:regex", res.at("/query/wrap/type").asText());
+        assertEquals("orth", res.at("/query/wrap/layer").asText());
+        assertEquals("match:eq", res.at("/query/wrap/match").asText());
 
         query = "\".*?Mann.*?\"";
         qs.setQuery(query, "poliqarpplus");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:token", 		res.at("/query/@type").asText());
-        assertEquals("koral:term",			res.at("/query/wrap/@type").asText());
-        assertEquals(".*?Mann.*?",			res.at("/query/wrap/key").asText());
-        assertEquals("type:regex",			res.at("/query/wrap/type").asText());
-        assertEquals("orth", 				res.at("/query/wrap/layer").asText());
-        assertEquals("match:eq",			res.at("/query/wrap/match").asText());
+        assertEquals("koral:token", res.at("/query/@type").asText());
+        assertEquals("koral:term", res.at("/query/wrap/@type").asText());
+        assertEquals(".*?Mann.*?", res.at("/query/wrap/key").asText());
+        assertEquals("type:regex", res.at("/query/wrap/type").asText());
+        assertEquals("orth", res.at("/query/wrap/layer").asText());
+        assertEquals("match:eq", res.at("/query/wrap/match").asText());
 
         query = "z.B./x";
         qs.setQuery(query, "poliqarpplus");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:token", 		res.at("/query/@type").asText());
-        assertEquals("koral:term",			res.at("/query/wrap/@type").asText());
-        assertEquals(".*?z\\.B\\..*?",		res.at("/query/wrap/key").asText());
-        assertEquals("type:regex",			res.at("/query/wrap/type").asText());
-        assertEquals("orth", 				res.at("/query/wrap/layer").asText());
-        assertEquals("match:eq",			res.at("/query/wrap/match").asText());
+        assertEquals("koral:token", res.at("/query/@type").asText());
+        assertEquals("koral:term", res.at("/query/wrap/@type").asText());
+        assertEquals(".*?z\\.B\\..*?", res.at("/query/wrap/key").asText());
+        assertEquals("type:regex", res.at("/query/wrap/type").asText());
+        assertEquals("orth", res.at("/query/wrap/layer").asText());
+        assertEquals("match:eq", res.at("/query/wrap/match").asText());
     }
 
+
     @Test
-    public void testPunct() throws JsonProcessingException, IOException {
+    public void testPunct () throws JsonProcessingException, IOException {
         query = "[punct=.]";
         qs.setQuery(query, "poliqarpplus");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:token",         res.at("/query/@type").asText());
-        assertEquals("koral:term",          res.at("/query/wrap/@type").asText());
-        assertEquals(".",                   res.at("/query/wrap/key").asText());
-        assertEquals("type:punct",          res.at("/query/wrap/type").asText());
-        assertEquals("orth",                res.at("/query/wrap/layer").asText());
-        assertEquals("match:eq",            res.at("/query/wrap/match").asText());
-        
+        assertEquals("koral:token", res.at("/query/@type").asText());
+        assertEquals("koral:term", res.at("/query/wrap/@type").asText());
+        assertEquals(".", res.at("/query/wrap/key").asText());
+        assertEquals("type:punct", res.at("/query/wrap/type").asText());
+        assertEquals("orth", res.at("/query/wrap/layer").asText());
+        assertEquals("match:eq", res.at("/query/wrap/match").asText());
+
         query = "[punct=\".\"]";
         qs.setQuery(query, "poliqarpplus");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:token",         res.at("/query/@type").asText());
-        assertEquals("koral:term",          res.at("/query/wrap/@type").asText());
-        assertEquals(".",                   res.at("/query/wrap/key").asText());
-        assertEquals("type:punct",          res.at("/query/wrap/type").asText());
-        assertEquals("orth",                res.at("/query/wrap/layer").asText());
-        assertEquals("match:eq",            res.at("/query/wrap/match").asText());
+        assertEquals("koral:token", res.at("/query/@type").asText());
+        assertEquals("koral:term", res.at("/query/wrap/@type").asText());
+        assertEquals(".", res.at("/query/wrap/key").asText());
+        assertEquals("type:punct", res.at("/query/wrap/type").asText());
+        assertEquals("orth", res.at("/query/wrap/layer").asText());
+        assertEquals("match:eq", res.at("/query/wrap/match").asText());
     }
 
+
     @Test
-    public void testCaseSensitivityFlag() throws JsonProcessingException, IOException {
+    public void testCaseSensitivityFlag () throws JsonProcessingException,
+            IOException {
         query = "[orth=deutscher/i]";
         qs.setQuery(query, "poliqarpplus");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:token", 		res.at("/query/@type").asText());
-        assertEquals("koral:term",			res.at("/query/wrap/@type").asText());
-        assertEquals("deutscher",			res.at("/query/wrap/key").asText());
-        assertEquals(true,  				res.at("/query/wrap/flags:caseInsensitive").isMissingNode());
-        assertEquals("flags:caseInsensitive",     res.at("/query/wrap/flags/0").asText());
-        assertEquals("orth", 				res.at("/query/wrap/layer").asText());
-        assertEquals("match:eq",			res.at("/query/wrap/match").asText());
+        assertEquals("koral:token", res.at("/query/@type").asText());
+        assertEquals("koral:term", res.at("/query/wrap/@type").asText());
+        assertEquals("deutscher", res.at("/query/wrap/key").asText());
+        assertEquals(true, res.at("/query/wrap/flags:caseInsensitive")
+                .isMissingNode());
+        assertEquals("flags:caseInsensitive", res.at("/query/wrap/flags/0")
+                .asText());
+        assertEquals("orth", res.at("/query/wrap/layer").asText());
+        assertEquals("match:eq", res.at("/query/wrap/match").asText());
 
         query = "deutscher/i";
         qs.setQuery(query, "poliqarpplus");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:token", 		res.at("/query/@type").asText());
-        assertEquals("koral:term",			res.at("/query/wrap/@type").asText());
-        assertEquals("deutscher",			res.at("/query/wrap/key").asText());
-        assertEquals("flags:caseInsensitive",     res.at("/query/wrap/flags/0").asText());
-        assertEquals("orth", 				res.at("/query/wrap/layer").asText());
-        assertEquals("match:eq",			res.at("/query/wrap/match").asText());
+        assertEquals("koral:token", res.at("/query/@type").asText());
+        assertEquals("koral:term", res.at("/query/wrap/@type").asText());
+        assertEquals("deutscher", res.at("/query/wrap/key").asText());
+        assertEquals("flags:caseInsensitive", res.at("/query/wrap/flags/0")
+                .asText());
+        assertEquals("orth", res.at("/query/wrap/layer").asText());
+        assertEquals("match:eq", res.at("/query/wrap/match").asText());
 
         query = "deutscher/I";
         qs.setQuery(query, "poliqarpplus");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:token", 		res.at("/query/@type").asText());
-        assertEquals("koral:term",			res.at("/query/wrap/@type").asText());
-        assertEquals("deutscher",			res.at("/query/wrap/key").asText());
-        assertEquals(true,                  res.at("/query/wrap/flags/0").isMissingNode());
-        assertEquals("orth", 				res.at("/query/wrap/layer").asText());
-        assertEquals("match:eq",			res.at("/query/wrap/match").asText());
+        assertEquals("koral:token", res.at("/query/@type").asText());
+        assertEquals("koral:term", res.at("/query/wrap/@type").asText());
+        assertEquals("deutscher", res.at("/query/wrap/key").asText());
+        assertEquals(true, res.at("/query/wrap/flags/0").isMissingNode());
+        assertEquals("orth", res.at("/query/wrap/layer").asText());
+        assertEquals("match:eq", res.at("/query/wrap/match").asText());
 
         query = "[orth=deutscher/i][orth=Bundestag]";
         qs.setQuery(query, "poliqarpplus");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:group", 		res.at("/query/@type").asText());
-        assertEquals("operation:sequence",	res.at("/query/operation").asText());
+        assertEquals("koral:group", res.at("/query/@type").asText());
+        assertEquals("operation:sequence", res.at("/query/operation").asText());
         operands = Lists.newArrayList(res.at("/query/operands").elements());
-        assertEquals("koral:token",			operands.get(0).at("/@type").asText());
-        assertEquals("deutscher",			operands.get(0).at("/wrap/key").asText());
-        assertEquals("orth",				operands.get(0).at("/wrap/layer").asText());
-        assertEquals("match:eq",			operands.get(0).at("/wrap/match").asText());
-        assertEquals("flags:caseInsensitive",     operands.get(0).at("/wrap/flags/0").asText());
-        assertEquals("koral:token",			operands.get(1).at("/@type").asText());
-        assertEquals("Bundestag",			operands.get(1).at("/wrap/key").asText());
-        assertEquals("orth",				operands.get(1).at("/wrap/layer").asText());
-        assertEquals("match:eq",			operands.get(1).at("/wrap/match").asText());
-        assertEquals(true,					operands.get(1).at("/wrap/flags/0").isMissingNode());
+        assertEquals("koral:token", operands.get(0).at("/@type").asText());
+        assertEquals("deutscher", operands.get(0).at("/wrap/key").asText());
+        assertEquals("orth", operands.get(0).at("/wrap/layer").asText());
+        assertEquals("match:eq", operands.get(0).at("/wrap/match").asText());
+        assertEquals("flags:caseInsensitive",
+                operands.get(0).at("/wrap/flags/0").asText());
+        assertEquals("koral:token", operands.get(1).at("/@type").asText());
+        assertEquals("Bundestag", operands.get(1).at("/wrap/key").asText());
+        assertEquals("orth", operands.get(1).at("/wrap/layer").asText());
+        assertEquals("match:eq", operands.get(1).at("/wrap/match").asText());
+        assertEquals(true, operands.get(1).at("/wrap/flags/0").isMissingNode());
 
         query = "deutscher/i Bundestag";
         qs.setQuery(query, "poliqarpplus");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:group", 		res.at("/query/@type").asText());
-        assertEquals("operation:sequence",	res.at("/query/operation").asText());
+        assertEquals("koral:group", res.at("/query/@type").asText());
+        assertEquals("operation:sequence", res.at("/query/operation").asText());
         operands = Lists.newArrayList(res.at("/query/operands").elements());
-        assertEquals("koral:token",			operands.get(0).at("/@type").asText());
-        assertEquals("deutscher",			operands.get(0).at("/wrap/key").asText());
-        assertEquals("orth",				operands.get(0).at("/wrap/layer").asText());
-        assertEquals("match:eq",			operands.get(0).at("/wrap/match").asText());
-        assertEquals("flags:caseInsensitive",     operands.get(0).at("/wrap/flags/0").asText());
-        assertEquals("koral:token",			operands.get(1).at("/@type").asText());
-        assertEquals("Bundestag",			operands.get(1).at("/wrap/key").asText());
-        assertEquals("orth",				operands.get(1).at("/wrap/layer").asText());
-        assertEquals("match:eq",			operands.get(1).at("/wrap/match").asText());
-        assertEquals(true,					operands.get(1).at("/wrap/flags:caseInsensitive").isMissingNode());
+        assertEquals("koral:token", operands.get(0).at("/@type").asText());
+        assertEquals("deutscher", operands.get(0).at("/wrap/key").asText());
+        assertEquals("orth", operands.get(0).at("/wrap/layer").asText());
+        assertEquals("match:eq", operands.get(0).at("/wrap/match").asText());
+        assertEquals("flags:caseInsensitive",
+                operands.get(0).at("/wrap/flags/0").asText());
+        assertEquals("koral:token", operands.get(1).at("/@type").asText());
+        assertEquals("Bundestag", operands.get(1).at("/wrap/key").asText());
+        assertEquals("orth", operands.get(1).at("/wrap/layer").asText());
+        assertEquals("match:eq", operands.get(1).at("/wrap/match").asText());
+        assertEquals(true, operands.get(1).at("/wrap/flags:caseInsensitive")
+                .isMissingNode());
     }
 
+
     @Test
-    public void testSpans() throws JsonProcessingException, IOException {
+    public void testSpans () throws JsonProcessingException, IOException {
         query = "<s>";
         qs.setQuery(query, "poliqarpplus");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:span", 			res.at("/query/@type").asText());
-        assertEquals("s",					res.at("/query/wrap/key").asText());
-        
+        assertEquals("koral:span", res.at("/query/@type").asText());
+        assertEquals("s", res.at("/query/wrap/key").asText());
+
         query = "<\".*\">";
         qs.setQuery(query, "poliqarpplus");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:span",          res.at("/query/@type").asText());
-        assertEquals(".*",                  res.at("/query/wrap/key").asText());
-        assertEquals("type:regex",          res.at("/query/wrap/type").asText());
+        assertEquals("koral:span", res.at("/query/@type").asText());
+        assertEquals(".*", res.at("/query/wrap/key").asText());
+        assertEquals("type:regex", res.at("/query/wrap/type").asText());
 
         query = "<vp>";
         qs.setQuery(query, "poliqarpplus");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:span", 			res.at("/query/@type").asText());
-        assertEquals("vp",					res.at("/query/wrap/key").asText());
+        assertEquals("koral:span", res.at("/query/@type").asText());
+        assertEquals("vp", res.at("/query/wrap/key").asText());
 
         query = "<cnx/c=vp>";
         qs.setQuery(query, "poliqarpplus");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:span", 			res.at("/query/@type").asText());
-        assertEquals("vp",					res.at("/query/wrap/key").asText());
-        assertEquals("cnx",					res.at("/query/wrap/foundry").asText());
-        assertEquals("c",					res.at("/query/wrap/layer").asText());
+        assertEquals("koral:span", res.at("/query/@type").asText());
+        assertEquals("vp", res.at("/query/wrap/key").asText());
+        assertEquals("cnx", res.at("/query/wrap/foundry").asText());
+        assertEquals("c", res.at("/query/wrap/layer").asText());
 
         query = "<cnx/c!=vp>";
         qs.setQuery(query, "poliqarpplus");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:span", 			res.at("/query/@type").asText());
-        assertEquals("vp",					res.at("/query/wrap/key").asText());
-        assertEquals("cnx",					res.at("/query/wrap/foundry").asText());
-        assertEquals("c",					res.at("/query/wrap/layer").asText());
-        assertEquals("match:ne",			res.at("/query/wrap/match").asText());
+        assertEquals("koral:span", res.at("/query/@type").asText());
+        assertEquals("vp", res.at("/query/wrap/key").asText());
+        assertEquals("cnx", res.at("/query/wrap/foundry").asText());
+        assertEquals("c", res.at("/query/wrap/layer").asText());
+        assertEquals("match:ne", res.at("/query/wrap/match").asText());
 
         query = "<cnx/c!=vp class!=header>";
         qs.setQuery(query, "poliqarpplus");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:span", 			res.at("/query/@type").asText());
-        assertEquals("vp",					res.at("/query/wrap/key").asText());
-        assertEquals("cnx",					res.at("/query/wrap/foundry").asText());
-        assertEquals("c",					res.at("/query/wrap/layer").asText());
-        assertEquals("match:ne",			res.at("/query/wrap/match").asText());
-        assertEquals("class",				res.at("/query/attr/key").asText());
-        assertEquals("header",				res.at("/query/attr/value").asText());
-        assertEquals("match:ne",			res.at("/query/attr/match").asText());
+        assertEquals("koral:span", res.at("/query/@type").asText());
+        assertEquals("vp", res.at("/query/wrap/key").asText());
+        assertEquals("cnx", res.at("/query/wrap/foundry").asText());
+        assertEquals("c", res.at("/query/wrap/layer").asText());
+        assertEquals("match:ne", res.at("/query/wrap/match").asText());
+        assertEquals("class", res.at("/query/attr/key").asText());
+        assertEquals("header", res.at("/query/attr/value").asText());
+        assertEquals("match:ne", res.at("/query/attr/match").asText());
 
         query = "<cnx/c!=vp !(class!=header)>";
         qs.setQuery(query, "poliqarpplus");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:span", 			res.at("/query/@type").asText());
-        assertEquals("vp",					res.at("/query/wrap/key").asText());
-        assertEquals("cnx",					res.at("/query/wrap/foundry").asText());
-        assertEquals("c",					res.at("/query/wrap/layer").asText());
-        assertEquals("match:ne",			res.at("/query/wrap/match").asText());
-        assertEquals("class",				res.at("/query/attr/key").asText());
-        assertEquals("header",				res.at("/query/attr/value").asText());
-        assertEquals("match:eq",			res.at("/query/attr/match").asText());
+        assertEquals("koral:span", res.at("/query/@type").asText());
+        assertEquals("vp", res.at("/query/wrap/key").asText());
+        assertEquals("cnx", res.at("/query/wrap/foundry").asText());
+        assertEquals("c", res.at("/query/wrap/layer").asText());
+        assertEquals("match:ne", res.at("/query/wrap/match").asText());
+        assertEquals("class", res.at("/query/attr/key").asText());
+        assertEquals("header", res.at("/query/attr/value").asText());
+        assertEquals("match:eq", res.at("/query/attr/match").asText());
 
         query = "<cnx/c!=vp !(class=header & id=7)>";
         qs.setQuery(query, "poliqarpplus");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:span", 			res.at("/query/@type").asText());
-        assertEquals("vp",					res.at("/query/wrap/key").asText());
-        assertEquals("cnx",					res.at("/query/wrap/foundry").asText());
-        assertEquals("c",					res.at("/query/wrap/layer").asText());
-        assertEquals("match:ne",			res.at("/query/wrap/match").asText());
-        assertEquals("koral:termGroup",		res.at("/query/attr/@type").asText());
-        assertEquals("relation:and",		res.at("/query/attr/relation").asText());
-        operands = Lists.newArrayList( res.at("/query/attr/operands").elements());
-        assertEquals("koral:term",			operands.get(0).at("/@type").asText());
-        assertEquals("class",				operands.get(0).at("/key").asText());
-        assertEquals("header",				operands.get(0).at("/value").asText());
-        assertEquals("match:ne",			operands.get(0).at("/match").asText());
-        assertEquals("koral:term",			operands.get(1).at("/@type").asText());
-        assertEquals("id",					operands.get(1).at("/key").asText());
-        assertEquals(7,						operands.get(1).at("/value").asInt());
-        assertEquals("match:ne",			operands.get(1).at("/match").asText());
+        assertEquals("koral:span", res.at("/query/@type").asText());
+        assertEquals("vp", res.at("/query/wrap/key").asText());
+        assertEquals("cnx", res.at("/query/wrap/foundry").asText());
+        assertEquals("c", res.at("/query/wrap/layer").asText());
+        assertEquals("match:ne", res.at("/query/wrap/match").asText());
+        assertEquals("koral:termGroup", res.at("/query/attr/@type").asText());
+        assertEquals("relation:and", res.at("/query/attr/relation").asText());
+        operands = Lists
+                .newArrayList(res.at("/query/attr/operands").elements());
+        assertEquals("koral:term", operands.get(0).at("/@type").asText());
+        assertEquals("class", operands.get(0).at("/key").asText());
+        assertEquals("header", operands.get(0).at("/value").asText());
+        assertEquals("match:ne", operands.get(0).at("/match").asText());
+        assertEquals("koral:term", operands.get(1).at("/@type").asText());
+        assertEquals("id", operands.get(1).at("/key").asText());
+        assertEquals(7, operands.get(1).at("/value").asInt());
+        assertEquals("match:ne", operands.get(1).at("/match").asText());
     }
 
+
     @Test
-    public void testDistances() throws JsonProcessingException, IOException {
+    public void testDistances () throws JsonProcessingException, IOException {
         query = "[base=der][][base=Mann]";
         qs.setQuery(query, "poliqarpplus");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:group", 		res.at("/query/@type").asText());
-        assertEquals("operation:sequence",	res.at("/query/operation").asText());
-        assertEquals("true",				res.at("/query/inOrder").asText());
-        assertEquals("koral:distance",		res.at("/query/distances").elements().next().at("/@type").asText());
-        assertEquals("w",					res.at("/query/distances").elements().next().at("/key").asText());
-        assertEquals("koral:boundary",		res.at("/query/distances").elements().next().at("/boundary/@type").asText());
-        assertEquals(1,						res.at("/query/distances").elements().next().at("/boundary/min").asInt());
-        assertEquals(1,						res.at("/query/distances").elements().next().at("/boundary/max").asInt());
+        assertEquals("koral:group", res.at("/query/@type").asText());
+        assertEquals("operation:sequence", res.at("/query/operation").asText());
+        assertEquals("true", res.at("/query/inOrder").asText());
+        assertEquals("koral:distance", res.at("/query/distances").elements()
+                .next().at("/@type").asText());
+        assertEquals("w",
+                res.at("/query/distances").elements().next().at("/key")
+                        .asText());
+        assertEquals("koral:boundary", res.at("/query/distances").elements()
+                .next().at("/boundary/@type").asText());
+        assertEquals(1,
+                res.at("/query/distances").elements().next()
+                        .at("/boundary/min").asInt());
+        assertEquals(1,
+                res.at("/query/distances").elements().next()
+                        .at("/boundary/max").asInt());
         operands = Lists.newArrayList(res.at("/query/operands").elements());
-        assertEquals("koral:token",			operands.get(0).at("/@type").asText());
-        assertEquals("der",					operands.get(0).at("/wrap/key").asText());
-        assertEquals("lemma",				operands.get(0).at("/wrap/layer").asText());
-        assertEquals("match:eq",			operands.get(0).at("/wrap/match").asText());
-        assertEquals("koral:token",			operands.get(1).at("/@type").asText());
-        assertEquals("Mann",				operands.get(1).at("/wrap/key").asText());
-        assertEquals("lemma",				operands.get(1).at("/wrap/layer").asText());
-        assertEquals("match:eq",			operands.get(1).at("/wrap/match").asText());
+        assertEquals("koral:token", operands.get(0).at("/@type").asText());
+        assertEquals("der", operands.get(0).at("/wrap/key").asText());
+        assertEquals("lemma", operands.get(0).at("/wrap/layer").asText());
+        assertEquals("match:eq", operands.get(0).at("/wrap/match").asText());
+        assertEquals("koral:token", operands.get(1).at("/@type").asText());
+        assertEquals("Mann", operands.get(1).at("/wrap/key").asText());
+        assertEquals("lemma", operands.get(1).at("/wrap/layer").asText());
+        assertEquals("match:eq", operands.get(1).at("/wrap/match").asText());
 
         query = "[base=der][][][base=Mann]";
         qs.setQuery(query, "poliqarpplus");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:group", 		res.at("/query/@type").asText());
-        assertEquals("operation:sequence",	res.at("/query/operation").asText());
-        assertEquals("true",				res.at("/query/inOrder").asText());
-        assertEquals("koral:distance",		res.at("/query/distances").elements().next().at("/@type").asText());
-        assertEquals("w",					res.at("/query/distances").elements().next().at("/key").asText());
-        assertEquals("koral:boundary",		res.at("/query/distances").elements().next().at("/boundary/@type").asText());
-        assertEquals(2,						res.at("/query/distances").elements().next().at("/boundary/min").asInt());
-        assertEquals(2,						res.at("/query/distances").elements().next().at("/boundary/max").asInt());
+        assertEquals("koral:group", res.at("/query/@type").asText());
+        assertEquals("operation:sequence", res.at("/query/operation").asText());
+        assertEquals("true", res.at("/query/inOrder").asText());
+        assertEquals("koral:distance", res.at("/query/distances").elements()
+                .next().at("/@type").asText());
+        assertEquals("w",
+                res.at("/query/distances").elements().next().at("/key")
+                        .asText());
+        assertEquals("koral:boundary", res.at("/query/distances").elements()
+                .next().at("/boundary/@type").asText());
+        assertEquals(2,
+                res.at("/query/distances").elements().next()
+                        .at("/boundary/min").asInt());
+        assertEquals(2,
+                res.at("/query/distances").elements().next()
+                        .at("/boundary/max").asInt());
         operands = Lists.newArrayList(res.at("/query/operands").elements());
-        assertEquals("koral:token",			operands.get(0).at("/@type").asText());
-        assertEquals("der",					operands.get(0).at("/wrap/key").asText());
-        assertEquals("lemma",				operands.get(0).at("/wrap/layer").asText());
-        assertEquals("match:eq",			operands.get(0).at("/wrap/match").asText());
-        assertEquals("koral:token",			operands.get(1).at("/@type").asText());
-        assertEquals("Mann",				operands.get(1).at("/wrap/key").asText());
-        assertEquals("lemma",				operands.get(1).at("/wrap/layer").asText());
-        assertEquals("match:eq",			operands.get(1).at("/wrap/match").asText());
+        assertEquals("koral:token", operands.get(0).at("/@type").asText());
+        assertEquals("der", operands.get(0).at("/wrap/key").asText());
+        assertEquals("lemma", operands.get(0).at("/wrap/layer").asText());
+        assertEquals("match:eq", operands.get(0).at("/wrap/match").asText());
+        assertEquals("koral:token", operands.get(1).at("/@type").asText());
+        assertEquals("Mann", operands.get(1).at("/wrap/key").asText());
+        assertEquals("lemma", operands.get(1).at("/wrap/layer").asText());
+        assertEquals("match:eq", operands.get(1).at("/wrap/match").asText());
 
         query = "[base=der][][]?[base=Mann]";
         qs.setQuery(query, "poliqarpplus");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:group", 		res.at("/query/@type").asText());
-        assertEquals("operation:sequence",	res.at("/query/operation").asText());
-        assertEquals("true",				res.at("/query/inOrder").asText());
-        assertEquals("koral:distance",		res.at("/query/distances").elements().next().at("/@type").asText());
-        assertEquals("w",					res.at("/query/distances").elements().next().at("/key").asText());
-        assertEquals("koral:boundary",		res.at("/query/distances").elements().next().at("/boundary/@type").asText());
-        assertEquals(1,						res.at("/query/distances").elements().next().at("/boundary/min").asInt());
-        assertEquals(2,						res.at("/query/distances").elements().next().at("/boundary/max").asInt());
+        assertEquals("koral:group", res.at("/query/@type").asText());
+        assertEquals("operation:sequence", res.at("/query/operation").asText());
+        assertEquals("true", res.at("/query/inOrder").asText());
+        assertEquals("koral:distance", res.at("/query/distances").elements()
+                .next().at("/@type").asText());
+        assertEquals("w",
+                res.at("/query/distances").elements().next().at("/key")
+                        .asText());
+        assertEquals("koral:boundary", res.at("/query/distances").elements()
+                .next().at("/boundary/@type").asText());
+        assertEquals(1,
+                res.at("/query/distances").elements().next()
+                        .at("/boundary/min").asInt());
+        assertEquals(2,
+                res.at("/query/distances").elements().next()
+                        .at("/boundary/max").asInt());
         operands = Lists.newArrayList(res.at("/query/operands").elements());
-        assertEquals("koral:token",			operands.get(0).at("/@type").asText());
-        assertEquals("der",					operands.get(0).at("/wrap/key").asText());
-        assertEquals("lemma",				operands.get(0).at("/wrap/layer").asText());
-        assertEquals("match:eq",			operands.get(0).at("/wrap/match").asText());
-        assertEquals("koral:token",			operands.get(1).at("/@type").asText());
-        assertEquals("Mann",				operands.get(1).at("/wrap/key").asText());
-        assertEquals("lemma",				operands.get(1).at("/wrap/layer").asText());
-        assertEquals("match:eq",			operands.get(1).at("/wrap/match").asText());
+        assertEquals("koral:token", operands.get(0).at("/@type").asText());
+        assertEquals("der", operands.get(0).at("/wrap/key").asText());
+        assertEquals("lemma", operands.get(0).at("/wrap/layer").asText());
+        assertEquals("match:eq", operands.get(0).at("/wrap/match").asText());
+        assertEquals("koral:token", operands.get(1).at("/@type").asText());
+        assertEquals("Mann", operands.get(1).at("/wrap/key").asText());
+        assertEquals("lemma", operands.get(1).at("/wrap/layer").asText());
+        assertEquals("match:eq", operands.get(1).at("/wrap/match").asText());
 
         query = "[base=der][]+[base=Mann]";
         qs.setQuery(query, "poliqarpplus");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:group", 		res.at("/query/@type").asText());
-        assertEquals("operation:sequence",	res.at("/query/operation").asText());
-        assertEquals("true",				res.at("/query/inOrder").asText());
-        assertEquals("koral:distance",		res.at("/query/distances").elements().next().at("/@type").asText());
-        assertEquals("w",					res.at("/query/distances").elements().next().at("/key").asText());
-        assertEquals("koral:boundary",		res.at("/query/distances").elements().next().at("/boundary/@type").asText());
-        assertEquals(1,						res.at("/query/distances").elements().next().at("/boundary/min").asInt());
-        assertEquals(true,					res.at("/query/distances").elements().next().at("/boundary/max").isMissingNode());
+        assertEquals("koral:group", res.at("/query/@type").asText());
+        assertEquals("operation:sequence", res.at("/query/operation").asText());
+        assertEquals("true", res.at("/query/inOrder").asText());
+        assertEquals("koral:distance", res.at("/query/distances").elements()
+                .next().at("/@type").asText());
+        assertEquals("w",
+                res.at("/query/distances").elements().next().at("/key")
+                        .asText());
+        assertEquals("koral:boundary", res.at("/query/distances").elements()
+                .next().at("/boundary/@type").asText());
+        assertEquals(1,
+                res.at("/query/distances").elements().next()
+                        .at("/boundary/min").asInt());
+        assertEquals(true,
+                res.at("/query/distances").elements().next()
+                        .at("/boundary/max").isMissingNode());
         operands = Lists.newArrayList(res.at("/query/operands").elements());
-        assertEquals("koral:token",			operands.get(0).at("/@type").asText());
-        assertEquals("der",					operands.get(0).at("/wrap/key").asText());
-        assertEquals("lemma",				operands.get(0).at("/wrap/layer").asText());
-        assertEquals("match:eq",			operands.get(0).at("/wrap/match").asText());
-        assertEquals("koral:token",			operands.get(1).at("/@type").asText());
-        assertEquals("Mann",				operands.get(1).at("/wrap/key").asText());
-        assertEquals("lemma",				operands.get(1).at("/wrap/layer").asText());
-        assertEquals("match:eq",			operands.get(1).at("/wrap/match").asText());
+        assertEquals("koral:token", operands.get(0).at("/@type").asText());
+        assertEquals("der", operands.get(0).at("/wrap/key").asText());
+        assertEquals("lemma", operands.get(0).at("/wrap/layer").asText());
+        assertEquals("match:eq", operands.get(0).at("/wrap/match").asText());
+        assertEquals("koral:token", operands.get(1).at("/@type").asText());
+        assertEquals("Mann", operands.get(1).at("/wrap/key").asText());
+        assertEquals("lemma", operands.get(1).at("/wrap/layer").asText());
+        assertEquals("match:eq", operands.get(1).at("/wrap/match").asText());
 
         query = "[base=der][]*[base=Mann]";
         qs.setQuery(query, "poliqarpplus");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:group", 		res.at("/query/@type").asText());
-        assertEquals("operation:sequence",	res.at("/query/operation").asText());
-        assertEquals("true",				res.at("/query/inOrder").asText());
-        assertEquals("koral:distance",		res.at("/query/distances").elements().next().at("/@type").asText());
-        assertEquals("w",					res.at("/query/distances").elements().next().at("/key").asText());
-        assertEquals("koral:boundary",		res.at("/query/distances").elements().next().at("/boundary/@type").asText());
-        assertEquals(0,						res.at("/query/distances").elements().next().at("/boundary/min").asInt());
-        assertEquals(true,					res.at("/query/distances").elements().next().at("/boundary/max").isMissingNode());
+        assertEquals("koral:group", res.at("/query/@type").asText());
+        assertEquals("operation:sequence", res.at("/query/operation").asText());
+        assertEquals("true", res.at("/query/inOrder").asText());
+        assertEquals("koral:distance", res.at("/query/distances").elements()
+                .next().at("/@type").asText());
+        assertEquals("w",
+                res.at("/query/distances").elements().next().at("/key")
+                        .asText());
+        assertEquals("koral:boundary", res.at("/query/distances").elements()
+                .next().at("/boundary/@type").asText());
+        assertEquals(0,
+                res.at("/query/distances").elements().next()
+                        .at("/boundary/min").asInt());
+        assertEquals(true,
+                res.at("/query/distances").elements().next()
+                        .at("/boundary/max").isMissingNode());
 
         query = "[base=der][]{2,5}[base=Mann][]?[][base=Frau]";
         qs.setQuery(query, "poliqarpplus");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:group", 		res.at("/query/@type").asText());
-        assertEquals("operation:sequence",	res.at("/query/operation").asText());
-        assertEquals("true",				res.at("/query/inOrder").asText());
-        assertEquals("koral:distance",		res.at("/query/distances").elements().next().at("/@type").asText());
-        assertEquals("w",					res.at("/query/distances").elements().next().at("/key").asText());
-        assertEquals("koral:boundary",		res.at("/query/distances").elements().next().at("/boundary/@type").asText());
-        assertEquals(2,						res.at("/query/distances").elements().next().at("/boundary/min").asInt());
-        assertEquals(5,						res.at("/query/distances").elements().next().at("/boundary/max").asInt());
+        assertEquals("koral:group", res.at("/query/@type").asText());
+        assertEquals("operation:sequence", res.at("/query/operation").asText());
+        assertEquals("true", res.at("/query/inOrder").asText());
+        assertEquals("koral:distance", res.at("/query/distances").elements()
+                .next().at("/@type").asText());
+        assertEquals("w",
+                res.at("/query/distances").elements().next().at("/key")
+                        .asText());
+        assertEquals("koral:boundary", res.at("/query/distances").elements()
+                .next().at("/boundary/@type").asText());
+        assertEquals(2,
+                res.at("/query/distances").elements().next()
+                        .at("/boundary/min").asInt());
+        assertEquals(5,
+                res.at("/query/distances").elements().next()
+                        .at("/boundary/max").asInt());
         operands = Lists.newArrayList(res.at("/query/operands").elements());
-        assertEquals("koral:token",			operands.get(0).at("/@type").asText());
-        assertEquals("der",					operands.get(0).at("/wrap/key").asText());
-        assertEquals("lemma",				operands.get(0).at("/wrap/layer").asText());
-        assertEquals("match:eq",			operands.get(0).at("/wrap/match").asText());
-        assertEquals("koral:group",			operands.get(1).at("/@type").asText());
-        assertEquals("operation:sequence",	operands.get(1).at("/operation").asText());
-        assertEquals("koral:distance",		operands.get(1).get("distances").elements().next().at("/@type").asText());
-        assertEquals("w",					operands.get(1).get("distances").elements().next().at("/key").asText());
-        assertEquals("koral:boundary",		operands.get(1).get("distances").elements().next().at("/boundary/@type").asText());
-        assertEquals(1,						operands.get(1).get("distances").elements().next().at("/boundary/min").asInt());
-        assertEquals(2,						operands.get(1).get("distances").elements().next().at("/boundary/max").asInt());
-        operands = Lists.newArrayList(operands.get(1).get("operands").elements());
-        assertEquals("Mann",				operands.get(0).at("/wrap/key").asText());
-        assertEquals("lemma",				operands.get(0).at("/wrap/layer").asText());
-        assertEquals("match:eq",			operands.get(0).at("/wrap/match").asText());
-        assertEquals("Frau",				operands.get(1).at("/wrap/key").asText());
-        assertEquals("lemma",				operands.get(1).at("/wrap/layer").asText());
-        assertEquals("match:eq",			operands.get(1).at("/wrap/match").asText());
+        assertEquals("koral:token", operands.get(0).at("/@type").asText());
+        assertEquals("der", operands.get(0).at("/wrap/key").asText());
+        assertEquals("lemma", operands.get(0).at("/wrap/layer").asText());
+        assertEquals("match:eq", operands.get(0).at("/wrap/match").asText());
+        assertEquals("koral:group", operands.get(1).at("/@type").asText());
+        assertEquals("operation:sequence", operands.get(1).at("/operation")
+                .asText());
+        assertEquals("koral:distance", operands.get(1).get("distances")
+                .elements().next().at("/@type").asText());
+        assertEquals("w", operands.get(1).get("distances").elements().next()
+                .at("/key").asText());
+        assertEquals("koral:boundary", operands.get(1).get("distances")
+                .elements().next().at("/boundary/@type").asText());
+        assertEquals(
+                1,
+                operands.get(1).get("distances").elements().next()
+                        .at("/boundary/min").asInt());
+        assertEquals(
+                2,
+                operands.get(1).get("distances").elements().next()
+                        .at("/boundary/max").asInt());
+        operands = Lists.newArrayList(operands.get(1).get("operands")
+                .elements());
+        assertEquals("Mann", operands.get(0).at("/wrap/key").asText());
+        assertEquals("lemma", operands.get(0).at("/wrap/layer").asText());
+        assertEquals("match:eq", operands.get(0).at("/wrap/match").asText());
+        assertEquals("Frau", operands.get(1).at("/wrap/key").asText());
+        assertEquals("lemma", operands.get(1).at("/wrap/layer").asText());
+        assertEquals("match:eq", operands.get(1).at("/wrap/match").asText());
 
         query = "[base=geht][base=der][]*contains(<s>,<np>)";
         qs.setQuery(query, "poliqarpplus");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:group", 		res.at("/query/@type").asText());
-        assertEquals("operation:sequence",	res.at("/query/operation").asText());
-        assertEquals(true,					res.at("/query/inOrder").isMissingNode());
-        assertEquals(true,					res.at("/query/distances").isMissingNode());
+        assertEquals("koral:group", res.at("/query/@type").asText());
+        assertEquals("operation:sequence", res.at("/query/operation").asText());
+        assertEquals(true, res.at("/query/inOrder").isMissingNode());
+        assertEquals(true, res.at("/query/distances").isMissingNode());
         operands = Lists.newArrayList(res.at("/query/operands").elements());
-        assertEquals("koral:token",			operands.get(0).at("/@type").asText());
-        assertEquals("geht",				operands.get(0).at("/wrap/key").asText());
-        assertEquals("lemma",				operands.get(0).at("/wrap/layer").asText());
-        assertEquals("match:eq",			operands.get(0).at("/wrap/match").asText());
-        assertEquals("koral:group",			operands.get(1).at("/@type").asText());
-        assertEquals("operation:sequence",	operands.get(1).at("/operation").asText());
-        assertEquals("koral:distance",		operands.get(1).get("distances").elements().next().at("/@type").asText());
-        assertEquals("w",					operands.get(1).get("distances").elements().next().at("/key").asText());
-        assertEquals("koral:boundary",		operands.get(1).get("distances").elements().next().at("/boundary/@type").asText());
-        assertEquals(0,						operands.get(1).get("distances").elements().next().at("/boundary/min").asInt());
-        assertEquals(true,					operands.get(1).get("distances").elements().next().at("/boundary/max").isMissingNode());
-        operands = Lists.newArrayList(operands.get(1).get("operands").elements());
-        assertEquals("der",					operands.get(0).at("/wrap/key").asText());
-        assertEquals("lemma",				operands.get(0).at("/wrap/layer").asText());
-        assertEquals("match:eq",			operands.get(0).at("/wrap/match").asText());
-        assertEquals("koral:group",			operands.get(1).at("/@type").asText());
-        assertEquals("operation:position",	operands.get(1).at("/operation").asText());
+        assertEquals("koral:token", operands.get(0).at("/@type").asText());
+        assertEquals("geht", operands.get(0).at("/wrap/key").asText());
+        assertEquals("lemma", operands.get(0).at("/wrap/layer").asText());
+        assertEquals("match:eq", operands.get(0).at("/wrap/match").asText());
+        assertEquals("koral:group", operands.get(1).at("/@type").asText());
+        assertEquals("operation:sequence", operands.get(1).at("/operation")
+                .asText());
+        assertEquals("koral:distance", operands.get(1).get("distances")
+                .elements().next().at("/@type").asText());
+        assertEquals("w", operands.get(1).get("distances").elements().next()
+                .at("/key").asText());
+        assertEquals("koral:boundary", operands.get(1).get("distances")
+                .elements().next().at("/boundary/@type").asText());
+        assertEquals(
+                0,
+                operands.get(1).get("distances").elements().next()
+                        .at("/boundary/min").asInt());
+        assertEquals(true, operands.get(1).get("distances").elements().next()
+                .at("/boundary/max").isMissingNode());
+        operands = Lists.newArrayList(operands.get(1).get("operands")
+                .elements());
+        assertEquals("der", operands.get(0).at("/wrap/key").asText());
+        assertEquals("lemma", operands.get(0).at("/wrap/layer").asText());
+        assertEquals("match:eq", operands.get(0).at("/wrap/match").asText());
+        assertEquals("koral:group", operands.get(1).at("/@type").asText());
+        assertEquals("operation:position", operands.get(1).at("/operation")
+                .asText());
     }
 
+
     @Test
-    public void testDistancesWithClass() throws JsonProcessingException, IOException {
+    public void testDistancesWithClass () throws JsonProcessingException,
+            IOException {
         query = "[base=der]{[]}[base=Mann]";
         qs.setQuery(query, "poliqarpplus");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:group", 		res.at("/query/@type").asText());
-        assertEquals("operation:sequence",	res.at("/query/operation").asText());
-        assertEquals(true,					res.at("/query/inOrder").isMissingNode());
-        assertEquals(true,					res.at("/query/distances").isMissingNode());
+        assertEquals("koral:group", res.at("/query/@type").asText());
+        assertEquals("operation:sequence", res.at("/query/operation").asText());
+        assertEquals(true, res.at("/query/inOrder").isMissingNode());
+        assertEquals(true, res.at("/query/distances").isMissingNode());
         operands = Lists.newArrayList(res.at("/query/operands").elements());
-        assertEquals("der",					operands.get(0).at("/wrap/key").asText());
-        assertEquals("Mann",				operands.get(2).at("/wrap/key").asText());
-        assertEquals("koral:group",			operands.get(1).at("/@type").asText());
-        assertEquals("operation:class",		operands.get(1).at("/operation").asText());
-        assertEquals(1,						operands.get(1).at("/classOut").asInt());
-        operands = Lists.newArrayList(operands.get(1).at("/operands").elements());
-        assertEquals("koral:token",			operands.get(0).at("/@type").asText());
-        assertEquals(true,					operands.get(0).at("/wrap").isMissingNode());
-        assertEquals(1,                     res.at("/meta/highlight/0").asInt());
+        assertEquals("der", operands.get(0).at("/wrap/key").asText());
+        assertEquals("Mann", operands.get(2).at("/wrap/key").asText());
+        assertEquals("koral:group", operands.get(1).at("/@type").asText());
+        assertEquals("operation:class", operands.get(1).at("/operation")
+                .asText());
+        assertEquals(1, operands.get(1).at("/classOut").asInt());
+        operands = Lists.newArrayList(operands.get(1).at("/operands")
+                .elements());
+        assertEquals("koral:token", operands.get(0).at("/@type").asText());
+        assertEquals(true, operands.get(0).at("/wrap").isMissingNode());
+        assertEquals(1, res.at("/meta/highlight/0").asInt());
 
         query = "[base=der]{2:[]}[base=Mann]";
         qs.setQuery(query, "poliqarpplus");
         res = mapper.readTree(qs.toJSON());
         operands = Lists.newArrayList(res.at("/query/operands").elements());
-        assertEquals("operation:class",		operands.get(1).at("/operation").asText());
-        assertEquals(2,						operands.get(1).at("/classOut").asInt());
-        assertEquals(2,                     res.at("/meta/highlight/0").asInt());
+        assertEquals("operation:class", operands.get(1).at("/operation")
+                .asText());
+        assertEquals(2, operands.get(1).at("/classOut").asInt());
+        assertEquals(2, res.at("/meta/highlight/0").asInt());
 
         query = "[base=der]{3:{2:[]}}";
         qs.setQuery(query, "poliqarpplus");
         res = mapper.readTree(qs.toJSON());
         operands = Lists.newArrayList(res.at("/query/operands").elements());
-        assertEquals("operation:class",		operands.get(1).at("/operation").asText());
-        assertEquals(3,						operands.get(1).at("/classOut").asInt());
-        assertEquals(3,                     res.at("/meta/highlight/0").asInt());
-        assertEquals("operation:class",		operands.get(1).at("/operands/0/operation").asText());
-        assertEquals(2,						operands.get(1).at("/operands/0/classOut").asInt());
-        assertEquals(3,                     res.at("/meta/highlight/0").asInt());
-        assertEquals(2,                     res.at("/meta/highlight/1").asInt());
+        assertEquals("operation:class", operands.get(1).at("/operation")
+                .asText());
+        assertEquals(3, operands.get(1).at("/classOut").asInt());
+        assertEquals(3, res.at("/meta/highlight/0").asInt());
+        assertEquals("operation:class",
+                operands.get(1).at("/operands/0/operation").asText());
+        assertEquals(2, operands.get(1).at("/operands/0/classOut").asInt());
+        assertEquals(3, res.at("/meta/highlight/0").asInt());
+        assertEquals(2, res.at("/meta/highlight/1").asInt());
 
 
         query = "{1:[]}[base=der][base=Mann]";
         qs.setQuery(query, "poliqarpplus");
         res = mapper.readTree(qs.toJSON());
         operands = Lists.newArrayList(res.at("/query/operands").elements());
-        assertEquals("operation:class",		operands.get(0).at("/operation").asText());
-        assertEquals(1,						operands.get(0).at("/classOut").asInt());
-        assertEquals(1,                     res.at("/meta/highlight/0").asInt());
+        assertEquals("operation:class", operands.get(0).at("/operation")
+                .asText());
+        assertEquals(1, operands.get(0).at("/classOut").asInt());
+        assertEquals(1, res.at("/meta/highlight/0").asInt());
 
         query = "{1:{2:der} {3:[]} Mann}";
         qs.setQuery(query, "poliqarpplus");
         res = mapper.readTree(qs.toJSON());
         operands = Lists.newArrayList(res.at("/query/operands").elements());
-        assertEquals(1,	operands.size());  // class operation may only have one operand (the sequence)
-        operands = Lists.newArrayList(operands.get(0).at("/operands").elements());
-        assertEquals(3,	operands.size());  // the sequence has three operands ("der", "[]" and "Mann")
-        assertEquals(1,                     res.at("/meta/highlight/0").asInt());
-        assertEquals(2,                     res.at("/meta/highlight/1").asInt());
-        assertEquals(3,                     res.at("/meta/highlight/2").asInt());
+        assertEquals(1, operands.size());  // class operation may only have one operand (the sequence)
+        operands = Lists.newArrayList(operands.get(0).at("/operands")
+                .elements());
+        assertEquals(3, operands.size());  // the sequence has three operands ("der", "[]" and "Mann")
+        assertEquals(1, res.at("/meta/highlight/0").asInt());
+        assertEquals(2, res.at("/meta/highlight/1").asInt());
+        assertEquals(3, res.at("/meta/highlight/2").asInt());
     }
 
+
     @Test
-    public void testEmptyTokens() throws JsonProcessingException, IOException {
+    public void testEmptyTokens () throws JsonProcessingException, IOException {
         query = "[]";
         qs.setQuery(query, "poliqarpplus");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:token",         res.at("/query/@type").asText());
-        assertEquals(true,                  res.at("/query/key").isMissingNode());
+        assertEquals("koral:token", res.at("/query/@type").asText());
+        assertEquals(true, res.at("/query/key").isMissingNode());
 
         query = "contains(<s>, [])";
         qs.setQuery(query, "poliqarpplus");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:group",         res.at("/query/@type").asText());
-        assertEquals("operation:position",  res.at("/query/operation").asText());
-        assertEquals("frames:isAround",     res.at("/query/frames/0").asText());
-        assertEquals(true,                  res.at("/query/frames/1").isMissingNode());
-        assertEquals("koral:span",          res.at("/query/operands/0/@type").asText());
-        assertEquals("s",                   res.at("/query/operands/0/wrap/key").asText());
-        assertEquals("koral:token",         res.at("/query/operands/1/@type").asText());
-        assertEquals(true,                  res.at("/query/operands/1/key").isMissingNode());
+        assertEquals("koral:group", res.at("/query/@type").asText());
+        assertEquals("operation:position", res.at("/query/operation").asText());
+        assertEquals("frames:isAround", res.at("/query/frames/0").asText());
+        assertEquals(true, res.at("/query/frames/1").isMissingNode());
+        assertEquals("koral:span", res.at("/query/operands/0/@type").asText());
+        assertEquals("s", res.at("/query/operands/0/wrap/key").asText());
+        assertEquals("koral:token", res.at("/query/operands/1/@type").asText());
+        assertEquals(true, res.at("/query/operands/1/key").isMissingNode());
 
         query = "contains(<s>, []{3})";
         qs.setQuery(query, "poliqarpplus");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("s",                   res.at("/query/operands/0/wrap/key").asText());
-        assertEquals("koral:group",         res.at("/query/operands/1/@type").asText());
-        assertEquals("operation:repetition",res.at("/query/operands/1/operation").asText());
-        assertEquals("koral:token",         res.at("/query/operands/1/operands/0/@type").asText());
-        assertEquals(true,                  res.at("/query/operands/1/operands/0/key").isMissingNode());
+        assertEquals("s", res.at("/query/operands/0/wrap/key").asText());
+        assertEquals("koral:group", res.at("/query/operands/1/@type").asText());
+        assertEquals("operation:repetition",
+                res.at("/query/operands/1/operation").asText());
+        assertEquals("koral:token", res
+                .at("/query/operands/1/operands/0/@type").asText());
+        assertEquals(true, res.at("/query/operands/1/operands/0/key")
+                .isMissingNode());
 
         query = "contains(<s>, {1:[]{3}})";
         qs.setQuery(query, "poliqarpplus");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("s",                   res.at("/query/operands/0/wrap/key").asText());
-        assertEquals("koral:group",         res.at("/query/operands/1/@type").asText());
-        assertEquals("operation:class",     res.at("/query/operands/1/operation").asText());
-        assertEquals("operation:repetition",res.at("/query/operands/1/operands/0/operation").asText());
-        assertEquals("koral:token",         res.at("/query/operands/1/operands/0/operands/0/@type").asText());
-        assertEquals(true,                  res.at("/query/operands/1/operands/0/operands/0/key").isMissingNode());
+        assertEquals("s", res.at("/query/operands/0/wrap/key").asText());
+        assertEquals("koral:group", res.at("/query/operands/1/@type").asText());
+        assertEquals("operation:class", res.at("/query/operands/1/operation")
+                .asText());
+        assertEquals("operation:repetition",
+                res.at("/query/operands/1/operands/0/operation").asText());
+        assertEquals("koral:token",
+                res.at("/query/operands/1/operands/0/operands/0/@type")
+                        .asText());
+        assertEquals(true, res
+                .at("/query/operands/1/operands/0/operands/0/key")
+                .isMissingNode());
 
     }
 
+
     @Test
-    public void testLeadingTrailingEmptyTokens() throws JsonProcessingException, IOException {
+    public void testLeadingTrailingEmptyTokens ()
+            throws JsonProcessingException, IOException {
         query = "[][base=Mann]";
         qs.setQuery(query, "poliqarpplus");
         res = mapper.readTree(qs.toJSON());
         operands = Lists.newArrayList(res.at("/query/operands").elements());
-        assertEquals("koral:token",			operands.get(0).at("/@type").asText());
-        assertEquals(true,					operands.get(0).at("/key").isMissingNode());
+        assertEquals("koral:token", operands.get(0).at("/@type").asText());
+        assertEquals(true, operands.get(0).at("/key").isMissingNode());
 
         query = "[][][base=Mann]";
         qs.setQuery(query, "poliqarpplus");
         res = mapper.readTree(qs.toJSON());
         operands = Lists.newArrayList(res.at("/query/operands").elements());
-        assertEquals("koral:group",			operands.get(0).at("/@type").asText());
-        assertEquals("operation:repetition",operands.get(0).at("/operation").asText());
-        assertEquals(2,						operands.get(0).at("/boundary/min").asInt());
-        assertEquals(2,						operands.get(0).at("/boundary/max").asInt());
-        operands = Lists.newArrayList(operands.get(0).at("/operands").elements());
-        assertEquals("koral:token",			operands.get(0).at("/@type").asText());
-        assertEquals(true,					operands.get(0).at("/key").isMissingNode());
+        assertEquals("koral:group", operands.get(0).at("/@type").asText());
+        assertEquals("operation:repetition", operands.get(0).at("/operation")
+                .asText());
+        assertEquals(2, operands.get(0).at("/boundary/min").asInt());
+        assertEquals(2, operands.get(0).at("/boundary/max").asInt());
+        operands = Lists.newArrayList(operands.get(0).at("/operands")
+                .elements());
+        assertEquals("koral:token", operands.get(0).at("/@type").asText());
+        assertEquals(true, operands.get(0).at("/key").isMissingNode());
 
         query = "startswith(<s>, [][base=Mann])";
         qs.setQuery(query, "poliqarpplus");
         res = mapper.readTree(qs.toJSON());
         operands = Lists.newArrayList(res.at("/query/operands"));
         operands = Lists.newArrayList(operands.get(1).at("/operands"));
-        assertEquals("koral:token",			operands.get(0).at("/@type").asText());
-        assertEquals(true,					operands.get(0).at("/key").isMissingNode());
+        assertEquals("koral:token", operands.get(0).at("/@type").asText());
+        assertEquals(true, operands.get(0).at("/key").isMissingNode());
     }
 
+
     @Test
-    public void testRepetition() throws JsonProcessingException, IOException {
+    public void testRepetition () throws JsonProcessingException, IOException {
         query = "der{3}";
         qs.setQuery(query, "poliqarpplus");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:group", 			res.at("/query/@type").asText());
-        assertEquals("operation:repetition", 	res.at("/query/operation").asText());
-        assertEquals("der", 					res.at("/query/operands/0/wrap/key").asText());
-        assertEquals(3, 						res.at("/query/boundary/min").asInt());
-        assertEquals(3, 						res.at("/query/boundary/max").asInt());
+        assertEquals("koral:group", res.at("/query/@type").asText());
+        assertEquals("operation:repetition", res.at("/query/operation")
+                .asText());
+        assertEquals("der", res.at("/query/operands/0/wrap/key").asText());
+        assertEquals(3, res.at("/query/boundary/min").asInt());
+        assertEquals(3, res.at("/query/boundary/max").asInt());
 
         query = "der{,3}";
         qs.setQuery(query, "poliqarpplus");
         res = mapper.readTree(qs.toJSON());
-        assertEquals(0,			res.at("/query/boundary/min").asInt());
-        assertEquals(3, 		res.at("/query/boundary/max").asInt());
+        assertEquals(0, res.at("/query/boundary/min").asInt());
+        assertEquals(3, res.at("/query/boundary/max").asInt());
 
         query = "der{3,}";
         qs.setQuery(query, "poliqarpplus");
         res = mapper.readTree(qs.toJSON());
-        assertEquals(3, 		res.at("/query/boundary/min").asInt());
-        assertEquals(true, 		res.at("/query/boundary/max").isMissingNode());
+        assertEquals(3, res.at("/query/boundary/min").asInt());
+        assertEquals(true, res.at("/query/boundary/max").isMissingNode());
 
         query = "der{3,7}";
         qs.setQuery(query, "poliqarpplus");
         res = mapper.readTree(qs.toJSON());
-        assertEquals(3, 		res.at("/query/boundary/min").asInt());
-        assertEquals(7, 		res.at("/query/boundary/max").asInt());
+        assertEquals(3, res.at("/query/boundary/min").asInt());
+        assertEquals(7, res.at("/query/boundary/max").asInt());
 
         query = "der*";
         qs.setQuery(query, "poliqarpplus");
         res = mapper.readTree(qs.toJSON());
-        assertEquals(0, 		res.at("/query/boundary/min").asInt());
-        assertEquals(true, 		res.at("/query/boundary/max").isMissingNode());
+        assertEquals(0, res.at("/query/boundary/min").asInt());
+        assertEquals(true, res.at("/query/boundary/max").isMissingNode());
 
         query = "der+";
         qs.setQuery(query, "poliqarpplus");
         res = mapper.readTree(qs.toJSON());
-        assertEquals(1, 		res.at("/query/boundary/min").asInt());
-        assertEquals(true, 		res.at("/query/boundary/max").isMissingNode());
+        assertEquals(1, res.at("/query/boundary/min").asInt());
+        assertEquals(true, res.at("/query/boundary/max").isMissingNode());
     };
 
+
     @Test
-    public void testGroupRepetition() throws JsonProcessingException, IOException {
+    public void testGroupRepetition () throws JsonProcessingException,
+            IOException {
         query = "contains(<s>, (der){3})";
         qs.setQuery(query, "poliqarpplus");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:group", 		res.at("/query/@type").asText());
-        assertEquals("operation:position", 	res.at("/query/operation").asText());
-        assertEquals("koral:span", 			res.at("/query/operands/0/@type").asText());
-        assertEquals("s", 					res.at("/query/operands/0/wrap/key").asText());
-        assertEquals("koral:group", 		res.at("/query/operands/1/@type").asText());
-        assertEquals("operation:repetition",res.at("/query/operands/1/operation").asText());
+        assertEquals("koral:group", res.at("/query/@type").asText());
+        assertEquals("operation:position", res.at("/query/operation").asText());
+        assertEquals("koral:span", res.at("/query/operands/0/@type").asText());
+        assertEquals("s", res.at("/query/operands/0/wrap/key").asText());
+        assertEquals("koral:group", res.at("/query/operands/1/@type").asText());
+        assertEquals("operation:repetition",
+                res.at("/query/operands/1/operation").asText());
 
         query = "contains(<s>, (der){3,})";
         qs.setQuery(query, "poliqarpplus");
         res = mapper.readTree(qs.toJSON());
-        assertEquals(3, 			res.at("/query/operands/1/boundary/min").asInt());
-        assertEquals(true, 			res.at("/query/operands/1/boundary/max").isMissingNode());
+        assertEquals(3, res.at("/query/operands/1/boundary/min").asInt());
+        assertEquals(true, res.at("/query/operands/1/boundary/max")
+                .isMissingNode());
 
         query = "contains(<s>, (der){,3})";
         qs.setQuery(query, "poliqarpplus");
         res = mapper.readTree(qs.toJSON());
-        assertEquals(0, 			res.at("/query/operands/1/boundary/min").asInt());
-        assertEquals(3, 			res.at("/query/operands/1/boundary/max").asInt());
+        assertEquals(0, res.at("/query/operands/1/boundary/min").asInt());
+        assertEquals(3, res.at("/query/operands/1/boundary/max").asInt());
 
         query = "contains(<s>, (der){3,7})";
         qs.setQuery(query, "poliqarpplus");
         res = mapper.readTree(qs.toJSON());
-        assertEquals(3, 			res.at("/query/operands/1/boundary/min").asInt());
-        assertEquals(7, 			res.at("/query/operands/1/boundary/max").asInt());
+        assertEquals(3, res.at("/query/operands/1/boundary/min").asInt());
+        assertEquals(7, res.at("/query/operands/1/boundary/max").asInt());
 
         query = "contains(<s>, (der)*)";
         qs.setQuery(query, "poliqarpplus");
         res = mapper.readTree(qs.toJSON());
-        assertEquals(0, 			res.at("/query/operands/1/boundary/min").asInt());
-        assertEquals(true, 			res.at("/query/operands/1/boundary/max").isMissingNode());
+        assertEquals(0, res.at("/query/operands/1/boundary/min").asInt());
+        assertEquals(true, res.at("/query/operands/1/boundary/max")
+                .isMissingNode());
     };
 
+
     @Test
-    public void testPositions() throws JsonProcessingException, IOException {
+    public void testPositions () throws JsonProcessingException, IOException {
         query = "contains(<s>, der)";
         qs.setQuery(query, "poliqarpplus");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:group", 		res.at("/query/@type").asText());
-        assertEquals("operation:position", 	res.at("/query/operation").asText());
-        assertEquals("frames:isAround",		res.at("/query/frames/0").asText());
-        assertEquals(true, 					res.at("/query/frames/1").isMissingNode());
-        assertEquals("koral:span", 			res.at("/query/operands/0/@type").asText());
-        assertEquals("s", 					res.at("/query/operands/0/wrap/key").asText());
-        assertEquals("koral:token", 		res.at("/query/operands/1/@type").asText());
+        assertEquals("koral:group", res.at("/query/@type").asText());
+        assertEquals("operation:position", res.at("/query/operation").asText());
+        assertEquals("frames:isAround", res.at("/query/frames/0").asText());
+        assertEquals(true, res.at("/query/frames/1").isMissingNode());
+        assertEquals("koral:span", res.at("/query/operands/0/@type").asText());
+        assertEquals("s", res.at("/query/operands/0/wrap/key").asText());
+        assertEquals("koral:token", res.at("/query/operands/1/@type").asText());
 
         query = "contains(<s>,<np>)";
         qs.setQuery(query, "poliqarpplus");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("s", 		res.at("/query/operands/0/wrap/key").asText());
-        assertEquals("np", 		res.at("/query/operands/1/wrap/key").asText());
+        assertEquals("s", res.at("/query/operands/0/wrap/key").asText());
+        assertEquals("np", res.at("/query/operands/1/wrap/key").asText());
 
         query = "contains(<s>,[orth=der][orth=Mann])";
         qs.setQuery(query, "poliqarpplus");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:group", 			res.at("/query/@type").asText());
-        assertEquals("operation:position", 		res.at("/query/operation").asText());
-        assertEquals("frames:isAround", 		res.at("/query/frames/0").asText());
-        assertEquals("s", 						res.at("/query/operands/0/wrap/key").asText());
-        assertEquals("koral:group", 			res.at("/query/operands/1/@type").asText());
-        assertEquals("operation:sequence", 		res.at("/query/operands/1/operation").asText());
-        assertEquals("der", 					res.at("/query/operands/1/operands/0/wrap/key").asText());
-        assertEquals("Mann", 					res.at("/query/operands/1/operands/1/wrap/key").asText());
+        assertEquals("koral:group", res.at("/query/@type").asText());
+        assertEquals("operation:position", res.at("/query/operation").asText());
+        assertEquals("frames:isAround", res.at("/query/frames/0").asText());
+        assertEquals("s", res.at("/query/operands/0/wrap/key").asText());
+        assertEquals("koral:group", res.at("/query/operands/1/@type").asText());
+        assertEquals("operation:sequence", res
+                .at("/query/operands/1/operation").asText());
+        assertEquals("der", res.at("/query/operands/1/operands/0/wrap/key")
+                .asText());
+        assertEquals("Mann", res.at("/query/operands/1/operands/1/wrap/key")
+                .asText());
 
         query = "contains(<s>,[orth=der][orth=Mann]*)";
         qs.setQuery(query, "poliqarpplus");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:group", 			res.at("/query/@type").asText());
-        assertEquals("operation:position", 		res.at("/query/operation").asText());
-        assertEquals("frames:isAround", 		res.at("/query/frames/0").asText());
-        assertEquals("s", 						res.at("/query/operands/0/wrap/key").asText());
-        assertEquals("koral:group", 			res.at("/query/operands/1/@type").asText());
-        assertEquals("operation:sequence", 		res.at("/query/operands/1/operation").asText());
-        assertEquals("der", 					res.at("/query/operands/1/operands/0/wrap/key").asText());
-        assertEquals("operation:repetition", 	res.at("/query/operands/1/operands/1/operation").asText());
-        assertEquals(0, 						res.at("/query/operands/1/operands/1/boundary/min").asInt());
-        assertEquals(true, 						res.at("/query/operands/1/operands/1/boundary/max").isMissingNode());
-        assertEquals("Mann", 					res.at("/query/operands/1/operands/1/operands/0/wrap/key").asText());
+        assertEquals("koral:group", res.at("/query/@type").asText());
+        assertEquals("operation:position", res.at("/query/operation").asText());
+        assertEquals("frames:isAround", res.at("/query/frames/0").asText());
+        assertEquals("s", res.at("/query/operands/0/wrap/key").asText());
+        assertEquals("koral:group", res.at("/query/operands/1/@type").asText());
+        assertEquals("operation:sequence", res
+                .at("/query/operands/1/operation").asText());
+        assertEquals("der", res.at("/query/operands/1/operands/0/wrap/key")
+                .asText());
+        assertEquals("operation:repetition",
+                res.at("/query/operands/1/operands/1/operation").asText());
+        assertEquals(0, res.at("/query/operands/1/operands/1/boundary/min")
+                .asInt());
+        assertEquals(true, res.at("/query/operands/1/operands/1/boundary/max")
+                .isMissingNode());
+        assertEquals("Mann",
+                res.at("/query/operands/1/operands/1/operands/0/wrap/key")
+                        .asText());
 
         query = "contains(<s>,startswith(<np>,<pp>))";
         qs.setQuery(query, "poliqarpplus");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("s", 						res.at("/query/operands/0/wrap/key").asText());
-        assertEquals("koral:group", 			res.at("/query/operands/1/@type").asText());
-        assertEquals("frames:startsWith", 		res.at("/query/operands/1/frames/0").asText());
-        assertEquals("operation:position", 		res.at("/query/operands/1/operation").asText());
-        assertEquals("np", 						res.at("/query/operands/1/operands/0/wrap/key").asText());
-        assertEquals("pp", 						res.at("/query/operands/1/operands/1/wrap/key").asText());
+        assertEquals("s", res.at("/query/operands/0/wrap/key").asText());
+        assertEquals("koral:group", res.at("/query/operands/1/@type").asText());
+        assertEquals("frames:startsWith", res.at("/query/operands/1/frames/0")
+                .asText());
+        assertEquals("operation:position", res
+                .at("/query/operands/1/operation").asText());
+        assertEquals("np", res.at("/query/operands/1/operands/0/wrap/key")
+                .asText());
+        assertEquals("pp", res.at("/query/operands/1/operands/1/wrap/key")
+                .asText());
 
         query = "[base=Auto]overlaps(<s>, der)";
         qs.setQuery(query, "poliqarpplus");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:group", 			res.at("/query/@type").asText());
-        assertEquals("operation:sequence", 		res.at("/query/operation").asText());
-        assertEquals("koral:group", 			res.at("/query/operands/1/@type").asText());
-        assertEquals("operation:position", 		res.at("/query/operands/1/operation").asText());
-        assertEquals("frames:overlapsLeft", 	res.at("/query/operands/1/frames/0").asText());
-        assertEquals("frames:overlapsRight", 	res.at("/query/operands/1/frames/1").asText());
-        assertEquals("koral:span", 				res.at("/query/operands/1/operands/0/@type").asText());
-        assertEquals("s", 						res.at("/query/operands/1/operands/0/wrap/key").asText());
-        assertEquals("koral:token", 			res.at("/query/operands/1/operands/1/@type").asText());
+        assertEquals("koral:group", res.at("/query/@type").asText());
+        assertEquals("operation:sequence", res.at("/query/operation").asText());
+        assertEquals("koral:group", res.at("/query/operands/1/@type").asText());
+        assertEquals("operation:position", res
+                .at("/query/operands/1/operation").asText());
+        assertEquals("frames:overlapsLeft", res
+                .at("/query/operands/1/frames/0").asText());
+        assertEquals("frames:overlapsRight",
+                res.at("/query/operands/1/frames/1").asText());
+        assertEquals("koral:span", res.at("/query/operands/1/operands/0/@type")
+                .asText());
+        assertEquals("s", res.at("/query/operands/1/operands/0/wrap/key")
+                .asText());
+        assertEquals("koral:token", res
+                .at("/query/operands/1/operands/1/@type").asText());
 
         query = "[base=Auto]            overlaps(<s>, der)";
         qs.setQuery(query, "poliqarpplus");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:group", 			res.at("/query/@type").asText());
-        assertEquals("operation:sequence", 		res.at("/query/operation").asText());
-        assertEquals("koral:group", 			res.at("/query/operands/1/@type").asText());
-        assertEquals("operation:position", 		res.at("/query/operands/1/operation").asText());
-        assertEquals("frames:overlapsLeft", 	res.at("/query/operands/1/frames/0").asText());
-        assertEquals("frames:overlapsRight", 	res.at("/query/operands/1/frames/1").asText());
-        assertEquals("koral:span", 				res.at("/query/operands/1/operands/0/@type").asText());
-        assertEquals("s", 						res.at("/query/operands/1/operands/0/wrap/key").asText());
-        assertEquals("koral:token", 			res.at("/query/operands/1/operands/1/@type").asText());
+        assertEquals("koral:group", res.at("/query/@type").asText());
+        assertEquals("operation:sequence", res.at("/query/operation").asText());
+        assertEquals("koral:group", res.at("/query/operands/1/@type").asText());
+        assertEquals("operation:position", res
+                .at("/query/operands/1/operation").asText());
+        assertEquals("frames:overlapsLeft", res
+                .at("/query/operands/1/frames/0").asText());
+        assertEquals("frames:overlapsRight",
+                res.at("/query/operands/1/frames/1").asText());
+        assertEquals("koral:span", res.at("/query/operands/1/operands/0/@type")
+                .asText());
+        assertEquals("s", res.at("/query/operands/1/operands/0/wrap/key")
+                .asText());
+        assertEquals("koral:token", res
+                .at("/query/operands/1/operands/1/@type").asText());
     };
 
+
     @Test
-    public void testCoordinatedFields() throws JsonProcessingException, IOException {
+    public void testCoordinatedFields () throws JsonProcessingException,
+            IOException {
         query = "[base=Mann&(cas=N|cas=A)]";
         qs.setQuery(query, "poliqarpplus");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:token", 		res.at("/query/@type").asText());
-        assertEquals("relation:and", 		res.at("/query/wrap/relation").asText());
-        assertEquals("Mann", 				res.at("/query/wrap/operands/0/key").asText());
-        assertEquals("lemma", 				res.at("/query/wrap/operands/0/layer").asText());
-        assertEquals("koral:termGroup", 	res.at("/query/wrap/operands/1/@type").asText());
-        assertEquals("relation:or", 		res.at("/query/wrap/operands/1/relation").asText());
-        assertEquals("N", 					res.at("/query/wrap/operands/1/operands/0/key").asText());
-        assertEquals("cas", 				res.at("/query/wrap/operands/1/operands/0/layer").asText());
-        assertEquals("A", 					res.at("/query/wrap/operands/1/operands/1/key").asText());
-        assertEquals("cas", 				res.at("/query/wrap/operands/1/operands/1/layer").asText());
+        assertEquals("koral:token", res.at("/query/@type").asText());
+        assertEquals("relation:and", res.at("/query/wrap/relation").asText());
+        assertEquals("Mann", res.at("/query/wrap/operands/0/key").asText());
+        assertEquals("lemma", res.at("/query/wrap/operands/0/layer").asText());
+        assertEquals("koral:termGroup", res.at("/query/wrap/operands/1/@type")
+                .asText());
+        assertEquals("relation:or", res.at("/query/wrap/operands/1/relation")
+                .asText());
+        assertEquals("N", res.at("/query/wrap/operands/1/operands/0/key")
+                .asText());
+        assertEquals("cas", res.at("/query/wrap/operands/1/operands/0/layer")
+                .asText());
+        assertEquals("A", res.at("/query/wrap/operands/1/operands/1/key")
+                .asText());
+        assertEquals("cas", res.at("/query/wrap/operands/1/operands/1/layer")
+                .asText());
 
         query = "[base=Mann&cas=N&gen=m]";
         qs.setQuery(query, "poliqarpplus");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:token", 		res.at("/query/@type").asText());
-        assertEquals("relation:and", 		res.at("/query/wrap/relation").asText());
-        assertEquals("Mann", 				res.at("/query/wrap/operands/0/key").asText());
-        assertEquals("lemma", 				res.at("/query/wrap/operands/0/layer").asText());
-        assertEquals("koral:termGroup", 	res.at("/query/wrap/operands/1/@type").asText());
-        assertEquals("relation:and", 		res.at("/query/wrap/operands/1/relation").asText());
-        assertEquals("N", 					res.at("/query/wrap/operands/1/operands/0/key").asText());
-        assertEquals("cas", 				res.at("/query/wrap/operands/1/operands/0/layer").asText());
-        assertEquals("m", 					res.at("/query/wrap/operands/1/operands/1/key").asText());
-        assertEquals("gen", 				res.at("/query/wrap/operands/1/operands/1/layer").asText());
+        assertEquals("koral:token", res.at("/query/@type").asText());
+        assertEquals("relation:and", res.at("/query/wrap/relation").asText());
+        assertEquals("Mann", res.at("/query/wrap/operands/0/key").asText());
+        assertEquals("lemma", res.at("/query/wrap/operands/0/layer").asText());
+        assertEquals("koral:termGroup", res.at("/query/wrap/operands/1/@type")
+                .asText());
+        assertEquals("relation:and", res.at("/query/wrap/operands/1/relation")
+                .asText());
+        assertEquals("N", res.at("/query/wrap/operands/1/operands/0/key")
+                .asText());
+        assertEquals("cas", res.at("/query/wrap/operands/1/operands/0/layer")
+                .asText());
+        assertEquals("m", res.at("/query/wrap/operands/1/operands/1/key")
+                .asText());
+        assertEquals("gen", res.at("/query/wrap/operands/1/operands/1/layer")
+                .asText());
     }
 
+
     @Test
-    public void testTokenSequence() throws JsonProcessingException, IOException {
+    public void testTokenSequence () throws JsonProcessingException,
+            IOException {
         query = "[base=Mann][orth=Frau]";
         qs.setQuery(query, "poliqarpplus");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:group", 		res.at("/query/@type").asText());
-        assertEquals("operation:sequence", 	res.at("/query/operation").asText());
-        assertEquals("Mann", 				res.at("/query/operands/0/wrap/key").asText());
-        assertEquals("lemma", 				res.at("/query/operands/0/wrap/layer").asText());
-        assertEquals("Frau", 				res.at("/query/operands/1/wrap/key").asText());
-        assertEquals("orth", 				res.at("/query/operands/1/wrap/layer").asText());
+        assertEquals("koral:group", res.at("/query/@type").asText());
+        assertEquals("operation:sequence", res.at("/query/operation").asText());
+        assertEquals("Mann", res.at("/query/operands/0/wrap/key").asText());
+        assertEquals("lemma", res.at("/query/operands/0/wrap/layer").asText());
+        assertEquals("Frau", res.at("/query/operands/1/wrap/key").asText());
+        assertEquals("orth", res.at("/query/operands/1/wrap/layer").asText());
 
         query = "[base=Mann][orth=Frau][p=NN]";
         qs.setQuery(query, "poliqarpplus");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("NN", 					res.at("/query/operands/2/wrap/key").asText());
-        assertEquals("p", 					res.at("/query/operands/2/wrap/layer").asText());
+        assertEquals("NN", res.at("/query/operands/2/wrap/key").asText());
+        assertEquals("p", res.at("/query/operands/2/wrap/layer").asText());
 
         query = "[base=Mann][orth=Frau][p=NN][foo=bar]";
         qs.setQuery(query, "poliqarpplus");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("bar", 				res.at("/query/operands/3/wrap/key").asText());
-        assertEquals("foo", 				res.at("/query/operands/3/wrap/layer").asText());
+        assertEquals("bar", res.at("/query/operands/3/wrap/key").asText());
+        assertEquals("foo", res.at("/query/operands/3/wrap/layer").asText());
     }
 
+
     @Test
-    public void testDisjSegments() throws JsonProcessingException, IOException {
+    public void testDisjSegments () throws JsonProcessingException, IOException {
         query = "[base=der]|[base=das]";
         qs.setQuery(query, "poliqarpplus");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:group", 		res.at("/query/@type").asText());
-        assertEquals("operation:disjunction", 		res.at("/query/operation").asText());
-        assertEquals("koral:token", 		res.at("/query/operands/0/@type").asText());
-        assertEquals("koral:token", 		res.at("/query/operands/1/@type").asText());
-        assertEquals("der", 				res.at("/query/operands/0/wrap/key").asText());
-        assertEquals("lemma", 				res.at("/query/operands/0/wrap/layer").asText());
-        assertEquals("das", 				res.at("/query/operands/1/wrap/key").asText());
-        assertEquals("lemma", 				res.at("/query/operands/1/wrap/layer").asText());
+        assertEquals("koral:group", res.at("/query/@type").asText());
+        assertEquals("operation:disjunction", res.at("/query/operation")
+                .asText());
+        assertEquals("koral:token", res.at("/query/operands/0/@type").asText());
+        assertEquals("koral:token", res.at("/query/operands/1/@type").asText());
+        assertEquals("der", res.at("/query/operands/0/wrap/key").asText());
+        assertEquals("lemma", res.at("/query/operands/0/wrap/layer").asText());
+        assertEquals("das", res.at("/query/operands/1/wrap/key").asText());
+        assertEquals("lemma", res.at("/query/operands/1/wrap/layer").asText());
 
         query = "([base=der]|[base=das])[base=Schild]";
         qs.setQuery(query, "poliqarpplus");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:group", 		res.at("/query/@type").asText());
-        assertEquals("operation:sequence", 	res.at("/query/operation").asText());
-        assertEquals("Schild", 				res.at("/query/operands/1/wrap/key").asText());
-        assertEquals("koral:group", 		res.at("/query/operands/0/@type").asText());
-        assertEquals("operation:disjunction", 		res.at("/query/operands/0/operation").asText());
+        assertEquals("koral:group", res.at("/query/@type").asText());
+        assertEquals("operation:sequence", res.at("/query/operation").asText());
+        assertEquals("Schild", res.at("/query/operands/1/wrap/key").asText());
+        assertEquals("koral:group", res.at("/query/operands/0/@type").asText());
+        assertEquals("operation:disjunction",
+                res.at("/query/operands/0/operation").asText());
 
         query = "[base=Schild]([base=der]|[base=das])";
         qs.setQuery(query, "poliqarpplus");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("Schild", 				res.at("/query/operands/0/wrap/key").asText());
-        assertEquals("koral:group", 		res.at("/query/operands/1/@type").asText());
-        assertEquals("operation:disjunction", 		res.at("/query/operands/1/operation").asText());
+        assertEquals("Schild", res.at("/query/operands/0/wrap/key").asText());
+        assertEquals("koral:group", res.at("/query/operands/1/@type").asText());
+        assertEquals("operation:disjunction",
+                res.at("/query/operands/1/operation").asText());
 
         query = "([orth=der][base=katze])|([orth=eine][base=baum])";
         qs.setQuery(query, "poliqarpplus");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:group", 		res.at("/query/@type").asText());
-        assertEquals("operation:disjunction", 		res.at("/query/operation").asText());
-        assertEquals("koral:group", 		res.at("/query/operands/0/@type").asText());
-        assertEquals("operation:sequence", 	res.at("/query/operands/0/operation").asText());
-        assertEquals("koral:token", 		res.at("/query/operands/0/operands/0/@type").asText());
-        assertEquals("der", 				res.at("/query/operands/0/operands/0/wrap/key").asText());
-        assertEquals("katze",				res.at("/query/operands/0/operands/1/wrap/key").asText());
-        assertEquals("eine", 				res.at("/query/operands/1/operands/0/wrap/key").asText());
-        assertEquals("baum", 				res.at("/query/operands/1/operands/1/wrap/key").asText());
+        assertEquals("koral:group", res.at("/query/@type").asText());
+        assertEquals("operation:disjunction", res.at("/query/operation")
+                .asText());
+        assertEquals("koral:group", res.at("/query/operands/0/@type").asText());
+        assertEquals("operation:sequence", res
+                .at("/query/operands/0/operation").asText());
+        assertEquals("koral:token", res
+                .at("/query/operands/0/operands/0/@type").asText());
+        assertEquals("der", res.at("/query/operands/0/operands/0/wrap/key")
+                .asText());
+        assertEquals("katze", res.at("/query/operands/0/operands/1/wrap/key")
+                .asText());
+        assertEquals("eine", res.at("/query/operands/1/operands/0/wrap/key")
+                .asText());
+        assertEquals("baum", res.at("/query/operands/1/operands/1/wrap/key")
+                .asText());
 
         query = "[orth=der][base=katze]|[orth=eine][base=baum]";
         qs.setQuery(query, "poliqarpplus");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:group", 		res.at("/query/@type").asText());
-        assertEquals("operation:disjunction", 		res.at("/query/operation").asText());
-        assertEquals("koral:group", 		res.at("/query/operands/0/@type").asText());
-        assertEquals("operation:sequence", 	res.at("/query/operands/0/operation").asText());
-        assertEquals("koral:token", 		res.at("/query/operands/0/operands/0/@type").asText());
-        assertEquals("der", 				res.at("/query/operands/0/operands/0/wrap/key").asText());
-        assertEquals("katze", 				res.at("/query/operands/0/operands/1/wrap/key").asText());
-        assertEquals("eine", 				res.at("/query/operands/1/operands/0/wrap/key").asText());
-        assertEquals("baum", 				res.at("/query/operands/1/operands/1/wrap/key").asText());
+        assertEquals("koral:group", res.at("/query/@type").asText());
+        assertEquals("operation:disjunction", res.at("/query/operation")
+                .asText());
+        assertEquals("koral:group", res.at("/query/operands/0/@type").asText());
+        assertEquals("operation:sequence", res
+                .at("/query/operands/0/operation").asText());
+        assertEquals("koral:token", res
+                .at("/query/operands/0/operands/0/@type").asText());
+        assertEquals("der", res.at("/query/operands/0/operands/0/wrap/key")
+                .asText());
+        assertEquals("katze", res.at("/query/operands/0/operands/1/wrap/key")
+                .asText());
+        assertEquals("eine", res.at("/query/operands/1/operands/0/wrap/key")
+                .asText());
+        assertEquals("baum", res.at("/query/operands/1/operands/1/wrap/key")
+                .asText());
 
         query = "[orth=der]([base=katze]|[orth=eine])[base=baum]";
         qs.setQuery(query, "poliqarpplus");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:group", 		res.at("/query/@type").asText());
-        assertEquals("operation:sequence", 	res.at("/query/operation").asText());
-        assertEquals("koral:group", 		res.at("/query/operands/1/@type").asText());
-        assertEquals("operation:disjunction", 		res.at("/query/operands/1/operation").asText());
-        assertEquals("koral:token", 		res.at("/query/operands/0/@type").asText());
-        assertEquals("koral:token", 		res.at("/query/operands/2/@type").asText());
-        assertEquals("der", 				res.at("/query/operands/0/wrap/key").asText());
-        assertEquals("katze", 				res.at("/query/operands/1/operands/0/wrap/key").asText());
-        assertEquals("eine", 				res.at("/query/operands/1/operands/1/wrap/key").asText());
-        assertEquals("baum", 				res.at("/query/operands/2/wrap/key").asText());
+        assertEquals("koral:group", res.at("/query/@type").asText());
+        assertEquals("operation:sequence", res.at("/query/operation").asText());
+        assertEquals("koral:group", res.at("/query/operands/1/@type").asText());
+        assertEquals("operation:disjunction",
+                res.at("/query/operands/1/operation").asText());
+        assertEquals("koral:token", res.at("/query/operands/0/@type").asText());
+        assertEquals("koral:token", res.at("/query/operands/2/@type").asText());
+        assertEquals("der", res.at("/query/operands/0/wrap/key").asText());
+        assertEquals("katze", res.at("/query/operands/1/operands/0/wrap/key")
+                .asText());
+        assertEquals("eine", res.at("/query/operands/1/operands/1/wrap/key")
+                .asText());
+        assertEquals("baum", res.at("/query/operands/2/wrap/key").asText());
 
         query = "[orth=der][base=katze]|[orth=der][base=hund]|[orth=der][base=baum]";
         qs.setQuery(query, "poliqarpplus");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("der", 				res.at("/query/operands/2/operands/0/wrap/key").asText());
-        assertEquals("baum", 				res.at("/query/operands/2/operands/1/wrap/key").asText());
+        assertEquals("der", res.at("/query/operands/2/operands/0/wrap/key")
+                .asText());
+        assertEquals("baum", res.at("/query/operands/2/operands/1/wrap/key")
+                .asText());
 
         query = "[orth=der]([base=katze]|[base=hund]|[base=baum])";
         qs.setQuery(query, "poliqarpplus");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:group", 		res.at("/query/@type").asText());
-        assertEquals("operation:sequence", 	res.at("/query/operation").asText());
-        assertEquals("koral:group", 		res.at("/query/operands/1/@type").asText());
-        assertEquals("operation:disjunction", 		res.at("/query/operands/1/operation").asText());
-        assertEquals("koral:token", 		res.at("/query/operands/0/@type").asText());
-        assertEquals("koral:token", 		res.at("/query/operands/1/operands/0/@type").asText());
-        assertEquals("koral:token", 		res.at("/query/operands/1/operands/1/@type").asText());
-        assertEquals("koral:token", 		res.at("/query/operands/1/operands/2/@type").asText());
-        assertEquals("katze", 				res.at("/query/operands/1/operands/0/wrap/key").asText());
-        assertEquals("hund", 				res.at("/query/operands/1/operands/1/wrap/key").asText());
-        assertEquals("baum", 				res.at("/query/operands/1/operands/2/wrap/key").asText());
+        assertEquals("koral:group", res.at("/query/@type").asText());
+        assertEquals("operation:sequence", res.at("/query/operation").asText());
+        assertEquals("koral:group", res.at("/query/operands/1/@type").asText());
+        assertEquals("operation:disjunction",
+                res.at("/query/operands/1/operation").asText());
+        assertEquals("koral:token", res.at("/query/operands/0/@type").asText());
+        assertEquals("koral:token", res
+                .at("/query/operands/1/operands/0/@type").asText());
+        assertEquals("koral:token", res
+                .at("/query/operands/1/operands/1/@type").asText());
+        assertEquals("koral:token", res
+                .at("/query/operands/1/operands/2/@type").asText());
+        assertEquals("katze", res.at("/query/operands/1/operands/0/wrap/key")
+                .asText());
+        assertEquals("hund", res.at("/query/operands/1/operands/1/wrap/key")
+                .asText());
+        assertEquals("baum", res.at("/query/operands/1/operands/2/wrap/key")
+                .asText());
     }
 
+
     @Test
-    public void testTokenSpanSequence() throws JsonProcessingException, IOException {
+    public void testTokenSpanSequence () throws JsonProcessingException,
+            IOException {
         query = "[base=Mann]<vp>";
         qs.setQuery(query, "poliqarpplus");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:group", 		res.at("/query/@type").asText());
-        assertEquals("operation:sequence", 	res.at("/query/operation").asText());
-        assertEquals("koral:token", 		res.at("/query/operands/0/@type").asText());
-        assertEquals("Mann", 				res.at("/query/operands/0/wrap/key").asText());
-        assertEquals("koral:span", 			res.at("/query/operands/1/@type").asText());
-        assertEquals("vp", 					res.at("/query/operands/1/wrap/key").asText());
+        assertEquals("koral:group", res.at("/query/@type").asText());
+        assertEquals("operation:sequence", res.at("/query/operation").asText());
+        assertEquals("koral:token", res.at("/query/operands/0/@type").asText());
+        assertEquals("Mann", res.at("/query/operands/0/wrap/key").asText());
+        assertEquals("koral:span", res.at("/query/operands/1/@type").asText());
+        assertEquals("vp", res.at("/query/operands/1/wrap/key").asText());
 
         query = "<vp>[base=Mann]";
         qs.setQuery(query, "poliqarpplus");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:group", 		res.at("/query/@type").asText());
-        assertEquals("operation:sequence", 	res.at("/query/operation").asText());
-        assertEquals("koral:span", 			res.at("/query/operands/0/@type").asText());
-        assertEquals("vp", 					res.at("/query/operands/0/wrap/key").asText());
-        assertEquals("koral:token", 		res.at("/query/operands/1/@type").asText());
-        assertEquals("Mann", 				res.at("/query/operands/1/wrap/key").asText());
+        assertEquals("koral:group", res.at("/query/@type").asText());
+        assertEquals("operation:sequence", res.at("/query/operation").asText());
+        assertEquals("koral:span", res.at("/query/operands/0/@type").asText());
+        assertEquals("vp", res.at("/query/operands/0/wrap/key").asText());
+        assertEquals("koral:token", res.at("/query/operands/1/@type").asText());
+        assertEquals("Mann", res.at("/query/operands/1/wrap/key").asText());
 
         query = "<vp>[base=Mann]<pp>";
         qs.setQuery(query, "poliqarpplus");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:span", 			res.at("/query/operands/2/@type").asText());
-        assertEquals("pp", 					res.at("/query/operands/2/wrap/key").asText());
+        assertEquals("koral:span", res.at("/query/operands/2/@type").asText());
+        assertEquals("pp", res.at("/query/operands/2/wrap/key").asText());
 
         query = "<vp>[base=Mann]<pp><np>";
         qs.setQuery(query, "poliqarpplus");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("pp", 					res.at("/query/operands/2/wrap/key").asText());
-        assertEquals("np", 					res.at("/query/operands/3/wrap/key").asText());
+        assertEquals("pp", res.at("/query/operands/2/wrap/key").asText());
+        assertEquals("np", res.at("/query/operands/3/wrap/key").asText());
     }
 
-    @Test 
-    public void testClasses() throws JsonProcessingException, IOException {
+
+    @Test
+    public void testClasses () throws JsonProcessingException, IOException {
         query = "{[base=Mann]}";
         qs.setQuery(query, "poliqarpplus");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:group", 		res.at("/query/@type").asText());
-        assertEquals("operation:class", 	res.at("/query/operation").asText());
-        assertEquals(1, 					res.at("/query/classOut").asInt());
-        assertEquals(true, 					res.at("/query/classIn").isMissingNode());
-        assertEquals("Mann", 				res.at("/query/operands/0/wrap/key").asText());
+        assertEquals("koral:group", res.at("/query/@type").asText());
+        assertEquals("operation:class", res.at("/query/operation").asText());
+        assertEquals(1, res.at("/query/classOut").asInt());
+        assertEquals(true, res.at("/query/classIn").isMissingNode());
+        assertEquals("Mann", res.at("/query/operands/0/wrap/key").asText());
 
         query = "{[base=Mann][orth=Frau]}";
         qs.setQuery(query, "poliqarpplus");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:group", 		res.at("/query/@type").asText());
-        assertEquals("operation:class", 	res.at("/query/operation").asText());
-        assertEquals(1, 					res.at("/query/classOut").asInt());
-        assertEquals(true, 					res.at("/query/classIn").isMissingNode());
-        assertEquals("Mann", 				res.at("/query/operands/0/operands/0/wrap/key").asText());
-        assertEquals("Frau", 				res.at("/query/operands/0/operands/1/wrap/key").asText());
+        assertEquals("koral:group", res.at("/query/@type").asText());
+        assertEquals("operation:class", res.at("/query/operation").asText());
+        assertEquals(1, res.at("/query/classOut").asInt());
+        assertEquals(true, res.at("/query/classIn").isMissingNode());
+        assertEquals("Mann", res.at("/query/operands/0/operands/0/wrap/key")
+                .asText());
+        assertEquals("Frau", res.at("/query/operands/0/operands/1/wrap/key")
+                .asText());
 
         query = "{[base=Mann]}{[orth=Frau]}";
         qs.setQuery(query, "poliqarpplus");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:group",         res.at("/query/@type").asText());
-        assertEquals("operation:sequence",  res.at("/query/operation").asText());
-        assertEquals("operation:class",     res.at("/query/operands/0/operation").asText());
-        assertEquals(1,                     res.at("/query/operands/0/classOut").asInt());
-        assertEquals("operation:class",     res.at("/query/operands/1/operation").asText());
-        assertEquals(1,                     res.at("/query/operands/1/classOut").asInt());
-        assertEquals(true,                  res.at("/query/classIn").isMissingNode());
-        assertEquals("Mann",                res.at("/query/operands/0/operands/0/wrap/key").asText());
-        assertEquals("Frau",                res.at("/query/operands/1/operands/0/wrap/key").asText());
-        
+        assertEquals("koral:group", res.at("/query/@type").asText());
+        assertEquals("operation:sequence", res.at("/query/operation").asText());
+        assertEquals("operation:class", res.at("/query/operands/0/operation")
+                .asText());
+        assertEquals(1, res.at("/query/operands/0/classOut").asInt());
+        assertEquals("operation:class", res.at("/query/operands/1/operation")
+                .asText());
+        assertEquals(1, res.at("/query/operands/1/classOut").asInt());
+        assertEquals(true, res.at("/query/classIn").isMissingNode());
+        assertEquals("Mann", res.at("/query/operands/0/operands/0/wrap/key")
+                .asText());
+        assertEquals("Frau", res.at("/query/operands/1/operands/0/wrap/key")
+                .asText());
+
         query = "[p=NN]{[base=Mann][orth=Frau]}";
         qs.setQuery(query, "poliqarpplus");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:group", 		res.at("/query/@type").asText());
-        assertEquals("operation:sequence", 	res.at("/query/operation").asText());
-        assertEquals("koral:group", 		res.at("/query/operands/1/@type").asText());
-        assertEquals("operation:class", 	res.at("/query/operands/1/operation").asText());
-        assertEquals(1, 					res.at("/query/operands/1/classOut").asInt());
-        assertEquals(true, 					res.at("/query/operands/1/classIn").isMissingNode());
-        assertEquals("Mann", 				res.at("/query/operands/1/operands/0/operands/0/wrap/key").asText());
-        assertEquals("Frau", 				res.at("/query/operands/1/operands/0/operands/1/wrap/key").asText());
+        assertEquals("koral:group", res.at("/query/@type").asText());
+        assertEquals("operation:sequence", res.at("/query/operation").asText());
+        assertEquals("koral:group", res.at("/query/operands/1/@type").asText());
+        assertEquals("operation:class", res.at("/query/operands/1/operation")
+                .asText());
+        assertEquals(1, res.at("/query/operands/1/classOut").asInt());
+        assertEquals(true, res.at("/query/operands/1/classIn").isMissingNode());
+        assertEquals("Mann",
+                res.at("/query/operands/1/operands/0/operands/0/wrap/key")
+                        .asText());
+        assertEquals("Frau",
+                res.at("/query/operands/1/operands/0/operands/1/wrap/key")
+                        .asText());
 
         query = "{[base=Mann][orth=Frau]}[p=NN]";
         qs.setQuery(query, "poliqarpplus");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:group", 		res.at("/query/@type").asText());
-        assertEquals("operation:sequence", 	res.at("/query/operation").asText());
-        assertEquals("koral:group", 		res.at("/query/operands/0/@type").asText());
-        assertEquals("operation:class", 	res.at("/query/operands/0/operation").asText());
-        assertEquals(1, 					res.at("/query/operands/0/classOut").asInt());
-        assertEquals(true, 					res.at("/query/operands/0/classIn").isMissingNode());
-        assertEquals("Mann", 				res.at("/query/operands/0/operands/0/operands/0/wrap/key").asText());
-        assertEquals("Frau", 				res.at("/query/operands/0/operands/0/operands/1/wrap/key").asText());
-        assertEquals(1,                     res.at("/meta/highlight/0").asInt());
+        assertEquals("koral:group", res.at("/query/@type").asText());
+        assertEquals("operation:sequence", res.at("/query/operation").asText());
+        assertEquals("koral:group", res.at("/query/operands/0/@type").asText());
+        assertEquals("operation:class", res.at("/query/operands/0/operation")
+                .asText());
+        assertEquals(1, res.at("/query/operands/0/classOut").asInt());
+        assertEquals(true, res.at("/query/operands/0/classIn").isMissingNode());
+        assertEquals("Mann",
+                res.at("/query/operands/0/operands/0/operands/0/wrap/key")
+                        .asText());
+        assertEquals("Frau",
+                res.at("/query/operands/0/operands/0/operands/1/wrap/key")
+                        .asText());
+        assertEquals(1, res.at("/meta/highlight/0").asInt());
 
         query = "{2:{1:[tt/p=ADJA]}[mate/p=NN]}";
         qs.setQuery(query, "poliqarpplus");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:group", 		res.at("/query/@type").asText());
-        assertEquals("operation:class", 	res.at("/query/operation").asText());
-        assertEquals("operation:sequence", 	res.at("/query/operands/0/operation").asText());
-        assertEquals(2, 					res.at("/query/classOut").asInt());
-        assertEquals(1, 					res.at("/query/operands/0/operands/0/classOut").asInt());
-        assertEquals(2,                     res.at("/meta/highlight/0").asInt());
-        assertEquals(1,                     res.at("/meta/highlight/1").asInt());
+        assertEquals("koral:group", res.at("/query/@type").asText());
+        assertEquals("operation:class", res.at("/query/operation").asText());
+        assertEquals("operation:sequence", res
+                .at("/query/operands/0/operation").asText());
+        assertEquals(2, res.at("/query/classOut").asInt());
+        assertEquals(1, res.at("/query/operands/0/operands/0/classOut").asInt());
+        assertEquals(2, res.at("/meta/highlight/0").asInt());
+        assertEquals(1, res.at("/meta/highlight/1").asInt());
     }
 
+
     @Test
-    public void testFocusSplit() throws JsonProcessingException, IOException {
+    public void testFocusSplit () throws JsonProcessingException, IOException {
         query = "focus([orth=Der]{[orth=Mann]})";
         qs.setQuery(query, "poliqarpplus");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:reference", 	res.at("/query/@type").asText());
-        assertEquals("operation:focus", 	res.at("/query/operation").asText());
-        assertEquals(1, 					res.at("/query/classRef/0").asInt());
-        assertEquals("operation:sequence", 	res.at("/query/operands/0/operation").asText());
-        assertEquals("operation:class", 	res.at("/query/operands/0/operands/1/operation").asText());
-        assertEquals(1, 					res.at("/query/operands/0/operands/1/classOut").asInt());
-        assertEquals("Mann", 				res.at("/query/operands/0/operands/1/operands/0/wrap/key").asText());
-        assertEquals(1,                     res.at("/meta/highlight/0").asInt());
+        assertEquals("koral:reference", res.at("/query/@type").asText());
+        assertEquals("operation:focus", res.at("/query/operation").asText());
+        assertEquals(1, res.at("/query/classRef/0").asInt());
+        assertEquals("operation:sequence", res
+                .at("/query/operands/0/operation").asText());
+        assertEquals("operation:class",
+                res.at("/query/operands/0/operands/1/operation").asText());
+        assertEquals(1, res.at("/query/operands/0/operands/1/classOut").asInt());
+        assertEquals("Mann",
+                res.at("/query/operands/0/operands/1/operands/0/wrap/key")
+                        .asText());
+        assertEquals(1, res.at("/meta/highlight/0").asInt());
 
         query = "focus([orth=Der]{[orth=Mann][orth=geht]})";
         qs.setQuery(query, "poliqarpplus");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("operation:sequence", 	res.at("/query/operands/0/operands/1/operands/0/operation").asText());
-        assertEquals("Mann", 				res.at("/query/operands/0/operands/1/operands/0/operands/0/wrap/key").asText());
-        assertEquals("geht", 				res.at("/query/operands/0/operands/1/operands/0/operands/1/wrap/key").asText());
+        assertEquals("operation:sequence",
+                res.at("/query/operands/0/operands/1/operands/0/operation")
+                        .asText());
+        assertEquals(
+                "Mann",
+                res.at("/query/operands/0/operands/1/operands/0/operands/0/wrap/key")
+                        .asText());
+        assertEquals(
+                "geht",
+                res.at("/query/operands/0/operands/1/operands/0/operands/1/wrap/key")
+                        .asText());
 
         query = "focus(2:[orth=Der]{2:[orth=Mann][orth=geht]})";
         qs.setQuery(query, "poliqarpplus");
         res = mapper.readTree(qs.toJSON());
-        assertEquals(2, 					res.at("/query/classRef/0").asInt());
-        assertEquals(2, 					res.at("/query/operands/0/operands/1/classOut").asInt());
-        assertEquals(2,                     res.at("/meta/highlight/0").asInt());
+        assertEquals(2, res.at("/query/classRef/0").asInt());
+        assertEquals(2, res.at("/query/operands/0/operands/1/classOut").asInt());
+        assertEquals(2, res.at("/meta/highlight/0").asInt());
 
         query = "focus(3:startswith(<s>,{3:<np>}))";
         qs.setQuery(query, "poliqarpplus");
         res = mapper.readTree(qs.toJSON());
-        assertEquals(3, 					res.at("/query/classRef/0").asInt());
-        assertEquals("koral:reference", 	res.at("/query/@type").asText());
-        assertEquals("operation:focus", 	res.at("/query/operation").asText());
-        assertEquals("operation:position", 	res.at("/query/operands/0/operation").asText());
-        assertEquals("operation:class", 	res.at("/query/operands/0/operands/1/operation").asText());
-        assertEquals(3, 					res.at("/query/operands/0/operands/1/classOut").asInt());
-        assertEquals("frames:startsWith", 	res.at("/query/operands/0/frames/0").asText());
-        assertEquals(3,                     res.at("/meta/highlight/0").asInt());
+        assertEquals(3, res.at("/query/classRef/0").asInt());
+        assertEquals("koral:reference", res.at("/query/@type").asText());
+        assertEquals("operation:focus", res.at("/query/operation").asText());
+        assertEquals("operation:position", res
+                .at("/query/operands/0/operation").asText());
+        assertEquals("operation:class",
+                res.at("/query/operands/0/operands/1/operation").asText());
+        assertEquals(3, res.at("/query/operands/0/operands/1/classOut").asInt());
+        assertEquals("frames:startsWith", res.at("/query/operands/0/frames/0")
+                .asText());
+        assertEquals(3, res.at("/meta/highlight/0").asInt());
 
         query = "focus(1000:startswith(<s>,{1000:<np>}))";
         qs.setQuery(query, "poliqarpplus");
         res = mapper.readTree(qs.toJSON());
-        assertEquals(1000, 					res.at("/query/classRef/0").asInt());
-        assertEquals(1000, 					res.at("/query/operands/0/operands/1/classOut").asInt());
-        assertEquals(1000,                  res.at("/meta/highlight/0").asInt());
+        assertEquals(1000, res.at("/query/classRef/0").asInt());
+        assertEquals(1000, res.at("/query/operands/0/operands/1/classOut")
+                .asInt());
+        assertEquals(1000, res.at("/meta/highlight/0").asInt());
 
         query = "focus(3: startswith(<s>, {3:[base=der]{1:[mate/p=ADJA]{2:[tt/p=NN]}}}))";
         qs.setQuery(query, "poliqarpplus");
         res = mapper.readTree(qs.toJSON());
-        assertEquals(3, 					res.at("/query/classRef/0").asInt());
-        assertEquals("koral:reference", 	res.at("/query/@type").asText());
-        assertEquals("operation:focus", 	res.at("/query/operation").asText());
-        assertEquals("operation:position", 	res.at("/query/operands/0/operation").asText());
-        assertEquals("frames:startsWith", 	res.at("/query/operands/0/frames/0").asText());
-        assertEquals("operation:class", 	res.at("/query/operands/0/operands/1/operation").asText());
-        assertEquals(3, 					res.at("/query/operands/0/operands/1/classOut").asInt());
-        assertEquals("operation:sequence", 	res.at("/query/operands/0/operands/1/operands/0/operation").asText());
-        assertEquals("operation:class", 	res.at("/query/operands/0/operands/1/operands/0/operands/1/operation").asText());
-        assertEquals(1, 					res.at("/query/operands/0/operands/1/operands/0/operands/1/classOut").asInt());
-        assertEquals("operation:sequence", 	res.at("/query/operands/0/operands/1/operands/0/operands/1/operands/0/operation").asText());
-        assertEquals("operation:class", 	res.at("/query/operands/0/operands/1/operands/0/operands/1/operands/0/operands/1/operation").asText());
-        assertEquals(2, 					res.at("/query/operands/0/operands/1/operands/0/operands/1/operands/0/operands/1/classOut").asInt());
+        assertEquals(3, res.at("/query/classRef/0").asInt());
+        assertEquals("koral:reference", res.at("/query/@type").asText());
+        assertEquals("operation:focus", res.at("/query/operation").asText());
+        assertEquals("operation:position", res
+                .at("/query/operands/0/operation").asText());
+        assertEquals("frames:startsWith", res.at("/query/operands/0/frames/0")
+                .asText());
+        assertEquals("operation:class",
+                res.at("/query/operands/0/operands/1/operation").asText());
+        assertEquals(3, res.at("/query/operands/0/operands/1/classOut").asInt());
+        assertEquals("operation:sequence",
+                res.at("/query/operands/0/operands/1/operands/0/operation")
+                        .asText());
+        assertEquals(
+                "operation:class",
+                res.at("/query/operands/0/operands/1/operands/0/operands/1/operation")
+                        .asText());
+        assertEquals(
+                1,
+                res.at("/query/operands/0/operands/1/operands/0/operands/1/classOut")
+                        .asInt());
+        assertEquals(
+                "operation:sequence",
+                res.at("/query/operands/0/operands/1/operands/0/operands/1/operands/0/operation")
+                        .asText());
+        assertEquals(
+                "operation:class",
+                res.at("/query/operands/0/operands/1/operands/0/operands/1/operands/0/operands/1/operation")
+                        .asText());
+        assertEquals(
+                2,
+                res.at("/query/operands/0/operands/1/operands/0/operands/1/operands/0/operands/1/classOut")
+                        .asInt());
 
         query = "split(3: startswith(<s>, {3:[base=der]{1:[mate/p=ADJA]{2:[tt/p=NN]}}}))";
         qs.setQuery(query, "poliqarpplus");
         res = mapper.readTree(qs.toJSON());
-        assertEquals(3, 					res.at("/query/classRef/0").asInt());
-        assertEquals(true, 					res.at("/query/classRef/1").isMissingNode());
-        assertEquals("koral:reference", 	res.at("/query/@type").asText());
-        assertEquals("operation:split", 	res.at("/query/operation").asText());
+        assertEquals(3, res.at("/query/classRef/0").asInt());
+        assertEquals(true, res.at("/query/classRef/1").isMissingNode());
+        assertEquals("koral:reference", res.at("/query/@type").asText());
+        assertEquals("operation:split", res.at("/query/operation").asText());
 
         query = "split(2|3: startswith(<s>, {3:[base=der]{1:[mate/p=ADJA]{2:[tt/p=NN]}}}))";
         qs.setQuery(query, "poliqarpplus");
         res = mapper.readTree(qs.toJSON());
-        assertEquals(2, 						res.at("/query/classRef/0").asInt());
-        assertEquals(3, 						res.at("/query/classRef/1").asInt());
-        assertEquals("classRefOp:intersection", res.at("/query/classRefOp").asText());
-        assertEquals("koral:reference", 		res.at("/query/@type").asText());
-        assertEquals("operation:split", 		res.at("/query/operation").asText());
-        assertEquals(3,                     res.at("/meta/highlight/0").asInt());
-        assertEquals(1,                     res.at("/meta/highlight/1").asInt());
-        assertEquals(2,                     res.at("/meta/highlight/2").asInt());
+        assertEquals(2, res.at("/query/classRef/0").asInt());
+        assertEquals(3, res.at("/query/classRef/1").asInt());
+        assertEquals("classRefOp:intersection", res.at("/query/classRefOp")
+                .asText());
+        assertEquals("koral:reference", res.at("/query/@type").asText());
+        assertEquals("operation:split", res.at("/query/operation").asText());
+        assertEquals(3, res.at("/meta/highlight/0").asInt());
+        assertEquals(1, res.at("/meta/highlight/1").asInt());
+        assertEquals(2, res.at("/meta/highlight/2").asInt());
 
         query = "focus(1:{[base=der]}{1:[pos=ADJA]})";
         qs.setQuery(query, "poliqarpplus");
         res = mapper.readTree(qs.toJSON());
-        assertEquals(1, 					res.at("/query/classRef/0").asInt());
-        assertEquals(1, 					res.at("/query/operands/0/operands/0/classOut").asInt());
-        assertEquals(1, 					res.at("/query/operands/0/operands/1/classOut").asInt());
+        assertEquals(1, res.at("/query/classRef/0").asInt());
+        assertEquals(1, res.at("/query/operands/0/operands/0/classOut").asInt());
+        assertEquals(1, res.at("/query/operands/0/operands/1/classOut").asInt());
     }
 
+
     @Test
-    public void testSubmatch() throws JsonProcessingException, IOException {
+    public void testSubmatch () throws JsonProcessingException, IOException {
         query = "submatch(1:<s>)";
         qs.setQuery(query, "poliqarpplus");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:reference", 	res.at("/query/@type").asText());
-        assertEquals("operation:focus", 	res.at("/query/operation").asText());
-        assertEquals(1, 					res.at("/query/spanRef/0").asInt());
-        assertEquals(true, 					res.at("/query/spanRef/1").isMissingNode());
-        assertEquals("s", 					res.at("/query/operands/0/wrap/key").asText());
+        assertEquals("koral:reference", res.at("/query/@type").asText());
+        assertEquals("operation:focus", res.at("/query/operation").asText());
+        assertEquals(1, res.at("/query/spanRef/0").asInt());
+        assertEquals(true, res.at("/query/spanRef/1").isMissingNode());
+        assertEquals("s", res.at("/query/operands/0/wrap/key").asText());
 
         query = "submatch(1,4:<s>)";
         qs.setQuery(query, "poliqarpplus");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:reference", 	res.at("/query/@type").asText());
-        assertEquals("operation:focus", 	res.at("/query/operation").asText());
-        assertEquals(1, 					res.at("/query/spanRef/0").asInt());
-        assertEquals(4, 					res.at("/query/spanRef/1").asInt());
+        assertEquals("koral:reference", res.at("/query/@type").asText());
+        assertEquals("operation:focus", res.at("/query/operation").asText());
+        assertEquals(1, res.at("/query/spanRef/0").asInt());
+        assertEquals(4, res.at("/query/spanRef/1").asInt());
 
         query = "submatch(1,4:contains(<s>,[base=Haus]))";
         qs.setQuery(query, "poliqarpplus");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:reference", 	res.at("/query/@type").asText());
-        assertEquals("operation:focus", 	res.at("/query/operation").asText());
-        assertEquals(1, 					res.at("/query/spanRef/0").asInt());
-        assertEquals(4, 					res.at("/query/spanRef/1").asInt());
-        assertEquals("frames:isAround", 	res.at("/query/operands/0/frames/0").asText());
-        assertEquals("s", 					res.at("/query/operands/0/operands/0/wrap/key").asText());
-        assertEquals("Haus", 				res.at("/query/operands/0/operands/1/wrap/key").asText());
+        assertEquals("koral:reference", res.at("/query/@type").asText());
+        assertEquals("operation:focus", res.at("/query/operation").asText());
+        assertEquals(1, res.at("/query/spanRef/0").asInt());
+        assertEquals(4, res.at("/query/spanRef/1").asInt());
+        assertEquals("frames:isAround", res.at("/query/operands/0/frames/0")
+                .asText());
+        assertEquals("s", res.at("/query/operands/0/operands/0/wrap/key")
+                .asText());
+        assertEquals("Haus", res.at("/query/operands/0/operands/1/wrap/key")
+                .asText());
     }
+
+
     @Test
-    public void testRelations() throws JsonProcessingException, IOException {
+    public void testRelations () throws JsonProcessingException, IOException {
         query = "dominates(<s>,<np>)";
         qs.setQuery(query, "poliqarpplus");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:group", 		res.at("/query/@type").asText());
-        assertEquals("operation:relation", 	res.at("/query/operation").asText());
-        assertEquals("koral:relation", 		res.at("/query/relation/@type").asText());
-        assertEquals("c",                   res.at("/query/relation/wrap/layer").asText());
-        assertEquals("s", 					res.at("/query/operands/0/wrap/key").asText());
-        assertEquals("np", 					res.at("/query/operands/1/wrap/key").asText());
+        assertEquals("koral:group", res.at("/query/@type").asText());
+        assertEquals("operation:relation", res.at("/query/operation").asText());
+        assertEquals("koral:relation", res.at("/query/relation/@type").asText());
+        assertEquals("c", res.at("/query/relation/wrap/layer").asText());
+        assertEquals("s", res.at("/query/operands/0/wrap/key").asText());
+        assertEquals("np", res.at("/query/operands/1/wrap/key").asText());
 
         query = "relatesTo([base=Baum],<np>)";
         qs.setQuery(query, "poliqarpplus");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:group", 		res.at("/query/@type").asText());
-        assertEquals("operation:relation", 	res.at("/query/operation").asText());
-        assertEquals("koral:relation", 		res.at("/query/relation/@type").asText());
-        assertEquals("Baum", 				res.at("/query/operands/0/wrap/key").asText());
-        assertEquals("np", 					res.at("/query/operands/1/wrap/key").asText());
+        assertEquals("koral:group", res.at("/query/@type").asText());
+        assertEquals("operation:relation", res.at("/query/operation").asText());
+        assertEquals("koral:relation", res.at("/query/relation/@type").asText());
+        assertEquals("Baum", res.at("/query/operands/0/wrap/key").asText());
+        assertEquals("np", res.at("/query/operands/1/wrap/key").asText());
 
         query = "relatesTo(Baum,<np>)";
         qs.setQuery(query, "poliqarpplus");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("orth", 				res.at("/query/operands/0/wrap/layer").asText());
-        assertEquals("Baum", 				res.at("/query/operands/0/wrap/key").asText());
+        assertEquals("orth", res.at("/query/operands/0/wrap/layer").asText());
+        assertEquals("Baum", res.at("/query/operands/0/wrap/key").asText());
 
         query = "relatesTo(mate/d=HEAD:<np>,[base=Baum])";
         qs.setQuery(query, "poliqarpplus");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("lemma", 				res.at("/query/operands/1/wrap/layer").asText());
-        assertEquals("Baum", 				res.at("/query/operands/1/wrap/key").asText());
-        assertEquals("koral:relation", 		res.at("/query/relation/@type").asText());
-        assertEquals("mate", 				res.at("/query/relation/wrap/foundry").asText());
-        assertEquals("d", 					res.at("/query/relation/wrap/layer").asText());
-        assertEquals("HEAD", 				res.at("/query/relation/wrap/key").asText());
+        assertEquals("lemma", res.at("/query/operands/1/wrap/layer").asText());
+        assertEquals("Baum", res.at("/query/operands/1/wrap/key").asText());
+        assertEquals("koral:relation", res.at("/query/relation/@type").asText());
+        assertEquals("mate", res.at("/query/relation/wrap/foundry").asText());
+        assertEquals("d", res.at("/query/relation/wrap/layer").asText());
+        assertEquals("HEAD", res.at("/query/relation/wrap/key").asText());
 
         query = "dependency([base=fällen],[base=Baum])";
         qs.setQuery(query, "poliqarpplus");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("lemma",               res.at("/query/operands/0/wrap/layer").asText());
-        assertEquals("fällen",              res.at("/query/operands/0/wrap/key").asText());
-        assertEquals("lemma",               res.at("/query/operands/1/wrap/layer").asText());
-        assertEquals("Baum",                res.at("/query/operands/1/wrap/key").asText());
-        assertEquals("koral:relation",      res.at("/query/relation/@type").asText());
-        assertEquals("d",                   res.at("/query/relation/wrap/layer").asText());
+        assertEquals("lemma", res.at("/query/operands/0/wrap/layer").asText());
+        assertEquals("fällen", res.at("/query/operands/0/wrap/key").asText());
+        assertEquals("lemma", res.at("/query/operands/1/wrap/layer").asText());
+        assertEquals("Baum", res.at("/query/operands/1/wrap/key").asText());
+        assertEquals("koral:relation", res.at("/query/relation/@type").asText());
+        assertEquals("d", res.at("/query/relation/wrap/layer").asText());
 
         query = "dominates(Baum,<np>)";
         qs.setQuery(query, "poliqarpplus");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("orth", 				res.at("/query/operands/0/wrap/layer").asText());
-        assertEquals("Baum", 				res.at("/query/operands/0/wrap/key").asText());
-        assertEquals("koral:relation", 		res.at("/query/relation/@type").asText());
-        assertEquals("c", 					res.at("/query/relation/wrap/layer").asText());
+        assertEquals("orth", res.at("/query/operands/0/wrap/layer").asText());
+        assertEquals("Baum", res.at("/query/operands/0/wrap/key").asText());
+        assertEquals("koral:relation", res.at("/query/relation/@type").asText());
+        assertEquals("c", res.at("/query/relation/wrap/layer").asText());
 
         query = "dominates(cnx/c:<vp>,<np>)";
         qs.setQuery(query, "poliqarpplus");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("cnx", 				res.at("/query/relation/wrap/foundry").asText());
-        assertEquals("c", 					res.at("/query/relation/wrap/layer").asText());
+        assertEquals("cnx", res.at("/query/relation/wrap/foundry").asText());
+        assertEquals("c", res.at("/query/relation/wrap/layer").asText());
 
         query = "dominates(cnx/c*:<vp>,<np>)";
         qs.setQuery(query, "poliqarpplus");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("cnx", 				res.at("/query/relation/wrap/foundry").asText());
-        assertEquals("c", 					res.at("/query/relation/wrap/layer").asText());
-        assertEquals(0, 					res.at("/query/relation/boundary/min").asInt());
-        assertEquals(true, 					res.at("/query/relation/boundary/max").isMissingNode());
+        assertEquals("cnx", res.at("/query/relation/wrap/foundry").asText());
+        assertEquals("c", res.at("/query/relation/wrap/layer").asText());
+        assertEquals(0, res.at("/query/relation/boundary/min").asInt());
+        assertEquals(true, res.at("/query/relation/boundary/max")
+                .isMissingNode());
 
         query = "dominates(cnx/c{1,5}:<vp>,<np>)";
         qs.setQuery(query, "poliqarpplus");
         res = mapper.readTree(qs.toJSON());
-        assertEquals(1, 					res.at("/query/relation/boundary/min").asInt());
-        assertEquals(5, 					res.at("/query/relation/boundary/max").asInt());
+        assertEquals(1, res.at("/query/relation/boundary/min").asInt());
+        assertEquals(5, res.at("/query/relation/boundary/max").asInt());
 
         query = "dominates(cnx/c{,5}:<vp>,<np>)";
         qs.setQuery(query, "poliqarpplus");
         res = mapper.readTree(qs.toJSON());
-        assertEquals(0, 					res.at("/query/relation/boundary/min").asInt());
-        assertEquals(5, 					res.at("/query/relation/boundary/max").asInt());
+        assertEquals(0, res.at("/query/relation/boundary/min").asInt());
+        assertEquals(5, res.at("/query/relation/boundary/max").asInt());
 
         query = "dominates(cnx/c{5}:<vp>,<np>)";
         qs.setQuery(query, "poliqarpplus");
         res = mapper.readTree(qs.toJSON());
-        assertEquals(5, 					res.at("/query/relation/boundary/min").asInt());
-        assertEquals(5, 					res.at("/query/relation/boundary/max").asInt());
+        assertEquals(5, res.at("/query/relation/boundary/min").asInt());
+        assertEquals(5, res.at("/query/relation/boundary/max").asInt());
     }
 
+
     @Test
-    public void testAlign() throws JsonProcessingException, IOException {
+    public void testAlign () throws JsonProcessingException, IOException {
         query = "[orth=der]^[orth=Mann]";
         qs.setQuery(query, "poliqarpplus");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("operation:sequence", 	res.at("/query/operation").asText());
-        assertEquals("der", 				res.at("/query/operands/0/operands/0/wrap/key").asText());
-        assertEquals(1,                     res.at("/query/operands/0/classOut").asInt());
-        assertEquals("Mann",                res.at("/query/operands/1/operands/0/wrap/key").asText());
-        assertEquals("operation:class", 	res.at("/query/operands/1/operation").asText());
-        assertEquals(2,   					res.at("/query/operands/1/classOut").asInt());
-        assertEquals(1,   					res.at("/meta/alignment/0/0").asInt());
-        assertEquals(2,                     res.at("/meta/alignment/0/1").asInt());
+        assertEquals("operation:sequence", res.at("/query/operation").asText());
+        assertEquals("der", res.at("/query/operands/0/operands/0/wrap/key")
+                .asText());
+        assertEquals(1, res.at("/query/operands/0/classOut").asInt());
+        assertEquals("Mann", res.at("/query/operands/1/operands/0/wrap/key")
+                .asText());
+        assertEquals("operation:class", res.at("/query/operands/1/operation")
+                .asText());
+        assertEquals(2, res.at("/query/operands/1/classOut").asInt());
+        assertEquals(1, res.at("/meta/alignment/0/0").asInt());
+        assertEquals(2, res.at("/meta/alignment/0/1").asInt());
 
         query = "[orth=der]^[orth=große][orth=Mann]";
         qs.setQuery(query, "poliqarpplus");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("operation:sequence",  res.at("/query/operation").asText());
-        assertEquals("der",                 res.at("/query/operands/0/operands/0/wrap/key").asText());
-        assertEquals(1,                     res.at("/query/operands/0/classOut").asInt());
-        assertEquals("große",               res.at("/query/operands/1/operands/0/wrap/key").asText());
-        assertEquals("operation:class",     res.at("/query/operands/1/operation").asText());
-        assertEquals(2,                     res.at("/query/operands/1/classOut").asInt());
-        assertEquals("Mann",                res.at("/query/operands/2/wrap/key").asText());
-        assertEquals(1,                     res.at("/meta/alignment/0/0").asInt());
-        assertEquals(2,                     res.at("/meta/alignment/0/1").asInt());
-        
+        assertEquals("operation:sequence", res.at("/query/operation").asText());
+        assertEquals("der", res.at("/query/operands/0/operands/0/wrap/key")
+                .asText());
+        assertEquals(1, res.at("/query/operands/0/classOut").asInt());
+        assertEquals("große", res.at("/query/operands/1/operands/0/wrap/key")
+                .asText());
+        assertEquals("operation:class", res.at("/query/operands/1/operation")
+                .asText());
+        assertEquals(2, res.at("/query/operands/1/classOut").asInt());
+        assertEquals("Mann", res.at("/query/operands/2/wrap/key").asText());
+        assertEquals(1, res.at("/meta/alignment/0/0").asInt());
+        assertEquals(2, res.at("/meta/alignment/0/1").asInt());
+
 
         query = "([base=a]^[base=b])|[base=c]";
         qs.setQuery(query, "poliqarpplus");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("operation:disjunction", 		res.at("/query/operation").asText());
-        assertEquals("operation:sequence", 	res.at("/query/operands/0/operation").asText());
-        assertEquals("operation:class", 	res.at("/query/operands/0/operands/1/operation").asText());
-        assertEquals("a", 					res.at("/query/operands/0/operands/0/operands/0/wrap/key").asText());
-        assertEquals("b", 					res.at("/query/operands/0/operands/1/operands/0/wrap/key").asText());
-        assertEquals("c", 					res.at("/query/operands/1/wrap/key").asText());
-        assertEquals(1,                     res.at("/query/operands/0/operands/0/classOut").asInt());
-        assertEquals(2,   					res.at("/query/operands/0/operands/1/classOut").asInt());
-        assertEquals(1,                     res.at("/meta/alignment/0/0").asInt());
-        assertEquals(2,                     res.at("/meta/alignment/0/1").asInt());
+        assertEquals("operation:disjunction", res.at("/query/operation")
+                .asText());
+        assertEquals("operation:sequence", res
+                .at("/query/operands/0/operation").asText());
+        assertEquals("operation:class",
+                res.at("/query/operands/0/operands/1/operation").asText());
+        assertEquals("a",
+                res.at("/query/operands/0/operands/0/operands/0/wrap/key")
+                        .asText());
+        assertEquals("b",
+                res.at("/query/operands/0/operands/1/operands/0/wrap/key")
+                        .asText());
+        assertEquals("c", res.at("/query/operands/1/wrap/key").asText());
+        assertEquals(1, res.at("/query/operands/0/operands/0/classOut").asInt());
+        assertEquals(2, res.at("/query/operands/0/operands/1/classOut").asInt());
+        assertEquals(1, res.at("/meta/alignment/0/0").asInt());
+        assertEquals(2, res.at("/meta/alignment/0/1").asInt());
 
         query = "([base=a]^[base=b][base=c])|[base=d]";
         qs.setQuery(query, "poliqarpplus");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("a",                   res.at("/query/operands/0/operands/0/operands/0/wrap/key").asText());
-        assertEquals("b", 					res.at("/query/operands/0/operands/1/operands/0/wrap/key").asText());
-        assertEquals("c", 					res.at("/query/operands/0/operands/2/wrap/key").asText());
-        assertEquals("d", 					res.at("/query/operands/1/wrap/key").asText());
+        assertEquals("a",
+                res.at("/query/operands/0/operands/0/operands/0/wrap/key")
+                        .asText());
+        assertEquals("b",
+                res.at("/query/operands/0/operands/1/operands/0/wrap/key")
+                        .asText());
+        assertEquals("c", res.at("/query/operands/0/operands/2/wrap/key")
+                .asText());
+        assertEquals("d", res.at("/query/operands/1/wrap/key").asText());
 
         query = "([base=a]^[base=b]^[base=c])|[base=d]";
         qs.setQuery(query, "poliqarpplus");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("a",                   res.at("/query/operands/0/operands/0/operands/0/wrap/key").asText());
-        assertEquals(1,                     res.at("/query/operands/0/operands/0/classOut").asInt());
-        assertEquals("b",                   res.at("/query/operands/0/operands/1/operands/0/wrap/key").asText());
-        assertEquals(2,                     res.at("/query/operands/0/operands/1/classOut").asInt());
-        assertEquals("c",                   res.at("/query/operands/0/operands/2/operands/0/wrap/key").asText());
-        assertEquals(3,                     res.at("/query/operands/0/operands/2/classOut").asInt());
-        assertEquals("d",                   res.at("/query/operands/1/wrap/key").asText());
-        assertEquals(1,                     res.at("/meta/alignment/0/0").asInt());
-        assertEquals(2,                     res.at("/meta/alignment/0/1").asInt());
-        assertEquals(2,                     res.at("/meta/alignment/1/0").asInt());
-        assertEquals(3,                     res.at("/meta/alignment/1/1").asInt());
-        
+        assertEquals("a",
+                res.at("/query/operands/0/operands/0/operands/0/wrap/key")
+                        .asText());
+        assertEquals(1, res.at("/query/operands/0/operands/0/classOut").asInt());
+        assertEquals("b",
+                res.at("/query/operands/0/operands/1/operands/0/wrap/key")
+                        .asText());
+        assertEquals(2, res.at("/query/operands/0/operands/1/classOut").asInt());
+        assertEquals("c",
+                res.at("/query/operands/0/operands/2/operands/0/wrap/key")
+                        .asText());
+        assertEquals(3, res.at("/query/operands/0/operands/2/classOut").asInt());
+        assertEquals("d", res.at("/query/operands/1/wrap/key").asText());
+        assertEquals(1, res.at("/meta/alignment/0/0").asInt());
+        assertEquals(2, res.at("/meta/alignment/0/1").asInt());
+        assertEquals(2, res.at("/meta/alignment/1/0").asInt());
+        assertEquals(3, res.at("/meta/alignment/1/1").asInt());
+
         query = "^ Mann";
         qs.setQuery(query, "poliqarpplus");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("Mann",                res.at("/query/operands/0/wrap/key").asText());
-        assertEquals("operation:class",     res.at("/query/operation").asText());
-        assertEquals(1,                     res.at("/query/classOut").asInt());
-        assertEquals(-1,                    res.at("/meta/alignment/0/0").asInt());
-        assertEquals(1,                     res.at("/meta/alignment/0/1").asInt());
-        
+        assertEquals("Mann", res.at("/query/operands/0/wrap/key").asText());
+        assertEquals("operation:class", res.at("/query/operation").asText());
+        assertEquals(1, res.at("/query/classOut").asInt());
+        assertEquals(-1, res.at("/meta/alignment/0/0").asInt());
+        assertEquals(1, res.at("/meta/alignment/0/1").asInt());
+
         query = "Mann ^";
         qs.setQuery(query, "poliqarpplus");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("Mann",                res.at("/query/operands/0/wrap/key").asText());
-        assertEquals("operation:class",     res.at("/query/operation").asText());
-        assertEquals(1,                     res.at("/query/classOut").asInt());
-        assertEquals(1,                     res.at("/meta/alignment/0/0").asInt());
-        assertEquals(-1,                    res.at("/meta/alignment/0/1").asInt());
+        assertEquals("Mann", res.at("/query/operands/0/wrap/key").asText());
+        assertEquals("operation:class", res.at("/query/operation").asText());
+        assertEquals(1, res.at("/query/classOut").asInt());
+        assertEquals(1, res.at("/meta/alignment/0/0").asInt());
+        assertEquals(-1, res.at("/meta/alignment/0/1").asInt());
     }
 
+
     @Test
-    public void testSimpleQueries() throws JsonProcessingException, IOException {
+    public void testSimpleQueries () throws JsonProcessingException,
+            IOException {
         query = "Baum";
         qs.setQuery(query, "poliqarpplus");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:token", 		res.at("/query/@type").asText());
-        assertEquals("koral:term",			res.at("/query/wrap/@type").asText());
-        assertEquals("Baum",				res.at("/query/wrap/key").asText());
-        assertEquals("orth", 				res.at("/query/wrap/layer").asText());
-        assertEquals("match:eq",			res.at("/query/wrap/match").asText());
+        assertEquals("koral:token", res.at("/query/@type").asText());
+        assertEquals("koral:term", res.at("/query/wrap/@type").asText());
+        assertEquals("Baum", res.at("/query/wrap/key").asText());
+        assertEquals("orth", res.at("/query/wrap/layer").asText());
+        assertEquals("match:eq", res.at("/query/wrap/match").asText());
 
         query = "Der Baum";
         qs.setQuery(query, "poliqarpplus");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("koral:group", 		res.at("/query/@type").asText());
-        assertEquals("operation:sequence",	res.at("/query/operation").asText());
-        assertEquals("koral:token",			res.at("/query/operands/0/@type").asText());
-        assertEquals("koral:term",			res.at("/query/operands/0/wrap/@type").asText());
-        assertEquals("Der",					res.at("/query/operands/0/wrap/key").asText());
-        assertEquals("Baum",				res.at("/query/operands/1/wrap/key").asText());
-        assertEquals("orth", 				res.at("/query/operands/0/wrap/layer").asText());
-        assertEquals("match:eq",			res.at("/query/operands/0/wrap/match").asText());
-        assertEquals("orth", 				res.at("/query/operands/1/wrap/layer").asText());
-        assertEquals("match:eq",			res.at("/query/operands/1/wrap/match").asText());
+        assertEquals("koral:group", res.at("/query/@type").asText());
+        assertEquals("operation:sequence", res.at("/query/operation").asText());
+        assertEquals("koral:token", res.at("/query/operands/0/@type").asText());
+        assertEquals("koral:term", res.at("/query/operands/0/wrap/@type")
+                .asText());
+        assertEquals("Der", res.at("/query/operands/0/wrap/key").asText());
+        assertEquals("Baum", res.at("/query/operands/1/wrap/key").asText());
+        assertEquals("orth", res.at("/query/operands/0/wrap/layer").asText());
+        assertEquals("match:eq", res.at("/query/operands/0/wrap/match")
+                .asText());
+        assertEquals("orth", res.at("/query/operands/1/wrap/layer").asText());
+        assertEquals("match:eq", res.at("/query/operands/1/wrap/match")
+                .asText());
 
         query = "Der große Baum";
         qs.setQuery(query, "poliqarpplus");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("Der",					res.at("/query/operands/0/wrap/key").asText());
-        assertEquals("große",				res.at("/query/operands/1/wrap/key").asText());
-        assertEquals("Baum",				res.at("/query/operands/2/wrap/key").asText());
+        assertEquals("Der", res.at("/query/operands/0/wrap/key").asText());
+        assertEquals("große", res.at("/query/operands/1/wrap/key").asText());
+        assertEquals("Baum", res.at("/query/operands/2/wrap/key").asText());
 
         query = "Der (große|kleine) Baum";
         qs.setQuery(query, "poliqarpplus");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("Der",					res.at("/query/operands/0/wrap/key").asText());
-        assertEquals("operation:disjunction",		res.at("/query/operands/1/operation").asText());
-        assertEquals("große",				res.at("/query/operands/1/operands/0/wrap/key").asText());
-        assertEquals("kleine",				res.at("/query/operands/1/operands/1/wrap/key").asText());
-        assertEquals("Baum",				res.at("/query/operands/2/wrap/key").asText());
+        assertEquals("Der", res.at("/query/operands/0/wrap/key").asText());
+        assertEquals("operation:disjunction",
+                res.at("/query/operands/1/operation").asText());
+        assertEquals("große", res.at("/query/operands/1/operands/0/wrap/key")
+                .asText());
+        assertEquals("kleine", res.at("/query/operands/1/operands/1/wrap/key")
+                .asText());
+        assertEquals("Baum", res.at("/query/operands/2/wrap/key").asText());
 
         query = "der große Baum | der kleine Baum";
         qs.setQuery(query, "poliqarpplus");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("operation:disjunction",		res.at("/query/operation").asText());
-        assertEquals("der",					res.at("/query/operands/0/operands/0/wrap/key").asText());
-        assertEquals("große",				res.at("/query/operands/0/operands/1/wrap/key").asText());
-        assertEquals("Baum",				res.at("/query/operands/0/operands/2/wrap/key").asText());
-        assertEquals("der",					res.at("/query/operands/1/operands/0/wrap/key").asText());
-        assertEquals("kleine",				res.at("/query/operands/1/operands/1/wrap/key").asText());
-        assertEquals("Baum",				res.at("/query/operands/1/operands/2/wrap/key").asText());
+        assertEquals("operation:disjunction", res.at("/query/operation")
+                .asText());
+        assertEquals("der", res.at("/query/operands/0/operands/0/wrap/key")
+                .asText());
+        assertEquals("große", res.at("/query/operands/0/operands/1/wrap/key")
+                .asText());
+        assertEquals("Baum", res.at("/query/operands/0/operands/2/wrap/key")
+                .asText());
+        assertEquals("der", res.at("/query/operands/1/operands/0/wrap/key")
+                .asText());
+        assertEquals("kleine", res.at("/query/operands/1/operands/1/wrap/key")
+                .asText());
+        assertEquals("Baum", res.at("/query/operands/1/operands/2/wrap/key")
+                .asText());
 
         query = "Der [p=ADJA] Baum";
         qs.setQuery(query, "poliqarpplus");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("Der",					res.at("/query/operands/0/wrap/key").asText());
-        assertEquals("ADJA",				res.at("/query/operands/1/wrap/key").asText());
-        assertEquals("p",					res.at("/query/operands/1/wrap/layer").asText());
-        assertEquals("Baum",				res.at("/query/operands/2/wrap/key").asText());
+        assertEquals("Der", res.at("/query/operands/0/wrap/key").asText());
+        assertEquals("ADJA", res.at("/query/operands/1/wrap/key").asText());
+        assertEquals("p", res.at("/query/operands/1/wrap/layer").asText());
+        assertEquals("Baum", res.at("/query/operands/2/wrap/key").asText());
     }
 
+
     @Test
-    public void testWithin() throws JsonProcessingException, IOException {
+    public void testWithin () throws JsonProcessingException, IOException {
         query = "[p=VVFIN] within s";
         qs.setQuery(query, "poliqarpplus");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("operation:position",  res.at("/query/operation").asText());
-        assertEquals("frames:isAround",     res.at("/query/frames/0").asText());
-        assertEquals("s",                   res.at("/query/operands/0/key").asText());
-        assertEquals("VVFIN",               res.at("/query/operands/1/wrap/key").asText());
+        assertEquals("operation:position", res.at("/query/operation").asText());
+        assertEquals("frames:isAround", res.at("/query/frames/0").asText());
+        assertEquals("s", res.at("/query/operands/0/key").asText());
+        assertEquals("VVFIN", res.at("/query/operands/1/wrap/key").asText());
     }
 
+
     @Test
-    public void testMeta() throws JsonProcessingException, IOException {
+    public void testMeta () throws JsonProcessingException, IOException {
         query = "x meta textClass=Sport";
         qs.setQuery(query, "poliqarpplus");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("x",                   res.at("/query/wrap/key").asText());
-        assertEquals("koral:doc",           res.at("/collection/@type").asText());
-        assertEquals("textClass",           res.at("/collection/key").asText());
-        assertEquals("Sport",               res.at("/collection/value").asText());
+        assertEquals("x", res.at("/query/wrap/key").asText());
+        assertEquals("koral:doc", res.at("/collection/@type").asText());
+        assertEquals("textClass", res.at("/collection/key").asText());
+        assertEquals("Sport", res.at("/collection/value").asText());
 
         query = "x meta textClass=Sport";
         qs.setQuery(query, "poliqarpplus");
         qs.setCollection("author=Smith");
         res = mapper.readTree(qs.toJSON());
-        assertEquals("x",                   res.at("/query/wrap/key").asText());
-        assertEquals("koral:docGroup",      res.at("/collection/@type").asText());
-        assertEquals("operation:and",       res.at("/collection/operation").asText());
-        assertEquals("textClass",           res.at("/collection/operands/0/key").asText());
-        assertEquals("Sport",               res.at("/collection/operands/0/value").asText());
-        assertEquals("author",              res.at("/collection/operands/1/key").asText());
-        assertEquals("Smith",               res.at("/collection/operands/1/value").asText());
+        assertEquals("x", res.at("/query/wrap/key").asText());
+        assertEquals("koral:docGroup", res.at("/collection/@type").asText());
+        assertEquals("operation:and", res.at("/collection/operation").asText());
+        assertEquals("textClass", res.at("/collection/operands/0/key").asText());
+        assertEquals("Sport", res.at("/collection/operands/0/value").asText());
+        assertEquals("author", res.at("/collection/operands/1/key").asText());
+        assertEquals("Smith", res.at("/collection/operands/1/value").asText());
 
         // TODO more tests
     }