diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..1bda32e
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,75 @@
+Artistic License 2.0
+
+Copyright (c) 2000-2006, The Perl Foundation.
+
+Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.
+
+Preamble
+
+This license establishes the terms under which a given free software Package may be copied, modified, distributed, and/or redistributed. The intent is that the Copyright Holder maintains some artistic control over the development of that Package while still keeping the Package available as open source and free software.
+
+You are always permitted to make arrangements wholly outside of this license directly with the Copyright Holder of a given Package. If the terms of this license do not permit the full use that you propose to make of the Package, you should contact the Copyright Holder and seek a different licensing arrangement.
+Definitions
+
+"Copyright Holder" means the individual(s) or organization(s) named in the copyright notice for the entire Package.
+
+"Contributor" means any party that has contributed code or other material to the Package, in accordance with the Copyright Holder's procedures.
+
+"You" and "your" means any person who would like to copy, distribute, or modify the Package.
+
+"Package" means the collection of files distributed by the Copyright Holder, and derivatives of that collection and/or of those files. A given Package may consist of either the Standard Version, or a Modified Version.
+
+"Distribute" means providing a copy of the Package or making it accessible to anyone else, or in the case of a company or organization, to others outside of your company or organization.
+
+"Distributor Fee" means any fee that you charge for Distributing this Package or providing support for this Package to another party. It does not mean licensing fees.
+
+"Standard Version" refers to the Package if it has not been modified, or has been modified only in ways explicitly requested by the Copyright Holder.
+
+"Modified Version" means the Package, if it has been changed, and such changes were not explicitly requested by the Copyright Holder.
+
+"Original License" means this Artistic License as Distributed with the Standard Version of the Package, in its current version or as it may be modified by The Perl Foundation in the future.
+
+"Source" form means the source code, documentation source, and configuration files for the Package.
+
+"Compiled" form means the compiled bytecode, object code, binary, or any other form resulting from mechanical transformation or translation of the Source form.
+Permission for Use and Modification Without Distribution
+
+(1) You are permitted to use the Standard Version and create and use Modified Versions for any purpose without restriction, provided that you do not Distribute the Modified Version.
+Permissions for Redistribution of the Standard Version
+
+(2) You may Distribute verbatim copies of the Source form of the Standard Version of this Package in any medium without restriction, either gratis or for a Distributor Fee, provided that you duplicate all of the original copyright notices and associated disclaimers. At your discretion, such verbatim copies may or may not include a Compiled form of the Package.
+
+(3) You may apply any bug fixes, portability changes, and other modifications made available from the Copyright Holder. The resulting Package will still be considered the Standard Version, and as such will be subject to the Original License.
+Distribution of Modified Versions of the Package as Source
+
+(4) You may Distribute your Modified Version as Source (either gratis or for a Distributor Fee, and with or without a Compiled form of the Modified Version) provided that you clearly document how it differs from the Standard Version, including, but not limited to, documenting any non-standard features, executables, or modules, and provided that you do at least ONE of the following:
+
+(a) make the Modified Version available to the Copyright Holder of the Standard Version, under the Original License, so that the Copyright Holder may include your modifications in the Standard Version.
+(b) ensure that installation of your Modified Version does not prevent the user installing or running the Standard Version. In addition, the Modified Version must bear a name that is different from the name of the Standard Version.
+(c) allow anyone who receives a copy of the Modified Version to make the Source form of the Modified Version available to others under
+(i) the Original License or
+(ii) a license that permits the licensee to freely copy, modify and redistribute the Modified Version using the same licensing terms that apply to the copy that the licensee received, and requires that the Source form of the Modified Version, and of any works derived from it, be made freely available in that license fees are prohibited but Distributor Fees are allowed.
+Distribution of Compiled Forms of the Standard Version or Modified Versions without the Source
+
+(5) You may Distribute Compiled forms of the Standard Version without the Source, provided that you include complete instructions on how to get the Source of the Standard Version. Such instructions must be valid at the time of your distribution. If these instructions, at any time while you are carrying out such distribution, become invalid, you must provide new instructions on demand or cease further distribution. If you provide valid instructions or cease distribution within thirty days after you become aware that the instructions are invalid, then you do not forfeit any of your rights under this license.
+
+(6) You may Distribute a Modified Version in Compiled form without the Source, provided that you comply with Section 4 with respect to the Source of the Modified Version.
+Aggregating or Linking the Package
+
+(7) You may aggregate the Package (either the Standard Version or Modified Version) with other packages and Distribute the resulting aggregation provided that you do not charge a licensing fee for the Package. Distributor Fees are permitted, and licensing fees for other components in the aggregation are permitted. The terms of this license apply to the use and Distribution of the Standard or Modified Versions as included in the aggregation.
+
+(8) You are permitted to link Modified and Standard Versions with other works, to embed the Package in a larger work of your own, or to build stand-alone binary or bytecode versions of applications that include the Package, and Distribute the result without restriction, provided the result does not expose a direct interface to the Package.
+Items That are Not Considered Part of a Modified Version
+
+(9) Works (including, but not limited to, modules and scripts) that merely extend or make use of the Package, do not, by themselves, cause the Package to be a Modified Version. In addition, such works are not considered parts of the Package itself, and are not subject to the terms of this license.
+General Provisions
+
+(10) Any use, modification, and distribution of the Standard or Modified Versions is governed by this Artistic License. By using, modifying or distributing the Package, you accept this license. Do not use, modify, or distribute the Package, if you do not accept this license.
+
+(11) If your Modified Version has been derived from a Modified Version made by someone other than you, you are nevertheless required to ensure that your Modified Version complies with the requirements of this license.
+
+(12) This license does not grant you the right to use any trademark, service mark, tradename, or logo of the Copyright Holder.
+
+(13) This license includes the non-exclusive, worldwide, free-of-charge patent license to make, have made, use, offer to sell, sell, import and otherwise transfer the Package with respect to any patent claims licensable by the Copyright Holder that are necessarily infringed by the Package. If you institute patent litigation (including a cross-claim or counterclaim) against any party alleging that the Package constitutes direct or contributory patent infringement, then this Artistic License to you shall terminate on the date that such litigation is filed.
+
+(14) Disclaimer of Warranty: THE PACKAGE IS PROVIDED BY THE COPYRIGHT HOLDER AND CONTRIBUTORS "AS IS' AND WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES. THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT ARE DISCLAIMED TO THE EXTENT PERMITTED BY YOUR LOCAL LAW. UNLESS REQUIRED BY LAW, NO COPYRIGHT HOLDER OR CONTRIBUTOR WILL BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING IN ANY WAY OUT OF THE USE OF THE PACKAGE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
\ No newline at end of file
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..4377b40
--- /dev/null
+++ b/README.md
@@ -0,0 +1,54 @@
+## Koral v1.0
+
+Koral is a library designed for the translation of different corpus query 
+languages to KoralQuery, a JSON-LD-based protocol for the representation
+of linguistic queries. 
+
+As of v1.0, the following corpus query languages (QLs) are supported:
+* [Cosmas-II QL][http://www.ids-mannheim.de/cosmas2/web-app/hilfe/suchanfrage/] 
+* [ANNIS QL][http://annis-tools.org/aql.html]
+* [Poliqarp QL][http://korpus.pl/en/cheatsheet/node3.html] (extended by numerous operators to "PoliqarpPlus" QL)
+* [CQP][http://www.loc.gov/standards/sru/cql/spec.html]
+
+## Code Example
+
+You can use the main class QuerySerializer to translate and serialize queries
+for you. The following code snippet illustrates this. Valid QL identifiers
+are `cosmas', `annis', `poliqarp', `poliqarpplus' and `cqp'.
+
+```java
+import de.ids_mannheim.korap.query.serialize.QuerySerialzer;
+QuerySerializer qs = new QuerySerializer();
+qs.setQuery("This is a poliqarp query.", "poliqarp");
+System.out.println(qs.toJSON());
+```
+
+This will print out a JSON-LD string with you Koralized query. 
+There is also a command line version. After installation, simply run
+
+```
+java -jar target/Koral-1.0.jar [query] [queryLanguage]
+'''
+
+## Motivation
+
+Koral and KoralQuery have been designed and developed within the [KorAP Project][http://korap.ids-mannheim.de/].
+Through Koral, linguists can use the KorAP query engine with the QL of their 
+preference. As the KorAP backend only sees the incoming KoralQuery,
+new QLs can be supported by KorAP without having to change a single line of
+code in the backend.
+
+## Installation
+
+Installation is straightforward:
+
+```
+git clone https://github.com/korap/Koral [install-dir]
+cd [install-dir]
+mvn install
+'''
+
+## License
+
+Koral is published under the Perl [Artistic License][http://opensource.org/licenses/artistic-license-2.0].
+See also the attached LICENSE.
diff --git a/pom.xml b/pom.xml
index d838e0f..216bc3b 100644
--- a/pom.xml
+++ b/pom.xml
@@ -8,10 +8,10 @@
 	</parent>
 
 	<groupId>KorAP-modules</groupId>
-	<artifactId>KorAP-querySerialization</artifactId>
-	<version>0.02</version>
+	<artifactId>Koral</artifactId>
+	<version>1.0</version>
 	<packaging>jar</packaging>
-	<name>KorAP-querySerialization</name>
+	<name>Koral</name>
 	<url>http://maven.apache.org</url>
 	<repositories>
 		<repository>
@@ -96,6 +96,34 @@
 				</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>
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 4aeed1e..0f638ee 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
@@ -1080,11 +1080,13 @@
             switch (posOption) {
                 case "L":
                     positions.add("frames:startswith");
+                    positions.add("frames:matches");
                     classRefCheck.add("classRefCheck:includes");
                     frame = "startswith";
                     break;
                 case "R":
                     positions.add("frames:endswith");
+                    positions.add("frames:matches");
                     classRefCheck.add("classRefCheck:includes");
                     frame = "endswith";
                     break;
@@ -1172,12 +1174,14 @@
                 case "L":
                     positions.add("frames:startswith");
                     positions.add("frames:overlapsLeft");
+                    positions.add("frames:matches");
                     classRefCheck.add("classRefCheck:intersects");
                     frame = "overlapsLeft";
                     break;
                 case "R":
                     positions.add("frames:endswith");
                     positions.add("frames:overlapsRight");
+                    positions.add("frames:matches");
                     classRefCheck.add("classRefCheck:intersects");
                     frame = "overlapsRight";
                     break;
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 c5fa7a8..d9e7a0d 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
@@ -54,14 +54,11 @@
         BasicConfigurator.configure();
         QuerySerializer jg = new QuerySerializer();
         int i = 0;
-        String[] queries;
+        String[] queries = null;
         String ql = "poliqarpplus";
         if (args.length < 2) {
-            queries = new String[] {
-//                    "tok=\"corpus\" & tok=\"query\" & tok=\"language\"& #2 . #3 & #1 . #2 "
-                    "[] Mann"
-
-            };
+            System.err.println("Usage: QuerySerializer \"query\" queryLanguage");
+            System.exit(1);
         }
         else {
             queries = new String[] { args[0] };
@@ -70,7 +67,6 @@
         for (String q : queries) {
             i++;
             try {
-                System.out.println(q);
                 jg.run(q, ql);
                 System.out.println();
             }
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 f86ee28..ac91781 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
@@ -557,8 +557,9 @@
         qs.setQuery(query, "cosmas2");
         res = mapper.readTree(qs.toJSON());
         assertEquals("classRefCheck:includes",		res.at("/query/operands/0/classRefCheck/0").asText());
-        assertEquals("frames:startswith",			res.at("/query/operands/0/operands/0/frames/0").asText());
-        assertEquals(true,							res.at("/query/operands/0/operands/0/frames/1").isMissingNode());
+        assertEquals("frames:startswith",           res.at("/query/operands/0/operands/0/frames/0").asText());
+        assertEquals("frames:matches",              res.at("/query/operands/0/operands/0/frames/1").asText());
+        assertEquals(true,							res.at("/query/operands/0/operands/0/frames/2").isMissingNode());
 
         query = "wegen #IN(F) <s>";
         qs.setQuery(query, "cosmas2");
@@ -587,15 +588,16 @@
         res = mapper.readTree(qs.toJSON());
         assertEquals("classRefCheck:includes",		res.at("/query/operands/0/classRefCheck/0").asText());
         assertEquals("frames:startswith",			res.at("/query/operands/0/operands/0/frames/0").asText());
-        assertEquals(true,							res.at("/query/operands/0/operands/0/frames/1").isMissingNode());
-        assertEquals(true,							res.at("/query/operands/0/operands/0/exclude").asBoolean());
-
+        assertEquals("frames:matches",				res.at("/query/operands/0/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(true,							res.at("/query/operands/0/operands/0/exclude").asBoolean());
+        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");
