diff --git a/src/main/java/de/ids_mannheim/korap/query/serialize/FCSQLQueryProcessor.java b/src/main/java/de/ids_mannheim/korap/query/serialize/FCSQLQueryProcessor.java
index ef7e375..671f505 100644
--- a/src/main/java/de/ids_mannheim/korap/query/serialize/FCSQLQueryProcessor.java
+++ b/src/main/java/de/ids_mannheim/korap/query/serialize/FCSQLQueryProcessor.java
@@ -12,8 +12,9 @@
 import eu.clarin.sru.server.fcs.parser.QueryParser;
 import eu.clarin.sru.server.fcs.parser.QueryParserException;
 
-/** FCSQLQueryProcessor is accountable for the serialization of FCSQL to KoralQuery.
- * The KoralQuery is structured as a map containing parts of JSON-LD serializations of KoralObjects.  
+/** FCSQLQueryProcessor is accountable for the serialization of FCSQL 
+ *  to KoralQuery. The KoralQuery is structured as a map containing 
+ *  parts of JSON-LD serializations of KoralObjects.  
  * 
  * @author margaretha
  * 
@@ -32,22 +33,13 @@
         }
     }
 
-    private static final String VERSION_2_0 = "2.0";
-
     private final QueryParser fcsParser = new QueryParser();
-    private String version;
     
-    public FCSQLQueryProcessor (String query) {
-        this(query, VERSION_2_0);
-    }
-
     /** Constructs FCSQLQueryProcessor for the given query and version.
      * @param query an FCS query string
-     * @param version the FCSQL version of the query
      */
-    public FCSQLQueryProcessor (String query, String version) {
+    public FCSQLQueryProcessor (String query) {
         super();
-        this.version = version;
         process(query);
     }
 
@@ -58,33 +50,17 @@
 
     @Override
     public void process(String query) {
-        if (isVersionValid()) {
-            FCSSRUQuery fcsSruQuery = parseQueryStringtoFCSQuery(query);
-            if (fcsSruQuery != null) {
-                QueryNode fcsQueryNode = fcsSruQuery.getParsedQuery();
-                try {
-					parseFCSQueryToKoralQuery(fcsQueryNode);
-				} catch (KoralException e) {
-					addError(e.getStatusCode(), e.getMessage());
-				}
-            }
+        FCSSRUQuery fcsSruQuery = parseQueryStringtoFCSQuery(query);
+        if (fcsSruQuery != null) {
+            QueryNode fcsQueryNode = fcsSruQuery.getParsedQuery();
+            try {
+				parseFCSQueryToKoralQuery(fcsQueryNode);
+			} catch (KoralException e) {
+				addError(e.getStatusCode(), e.getMessage());
+			}
         }
     }
 
-    private boolean isVersionValid() {
-        if (version == null || version.isEmpty()) {
-            addError(StatusCodes.MISSING_VERSION,
-                    "Version number is missing.");
-            return false;
-        }
-        else if (!version.equals(VERSION_2_0)) {
-            addError(StatusCodes.UNSUPPORTED_VERSION,
-                    "Only supports SRU version 2.0.");
-            return false;
-        }
-        return true;
-    }
-
     /** Translates the given FCS query string into an FCSSSRUQuery object.
      * @param query an FCS query string
      * @return an FCSSRUQuery
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 4b192b0..699581b 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
@@ -1,15 +1,21 @@
 package de.ids_mannheim.korap.query.serialize;
 
-import com.fasterxml.jackson.core.JsonProcessingException;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import de.ids_mannheim.korap.query.serialize.util.KoralObjectGenerator;
-import de.ids_mannheim.korap.query.serialize.util.StatusCodes;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
 import org.apache.log4j.BasicConfigurator;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import java.io.IOException;
-import java.util.*;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+import de.ids_mannheim.korap.query.serialize.util.KoralObjectGenerator;
+import de.ids_mannheim.korap.query.serialize.util.StatusCodes;
 
 /**
  * Main class for Koral, serializes queries from concrete QLs to KoralQuery
@@ -118,7 +124,7 @@
             ast = new CqlQueryProcessor(query);
         }
         else if (queryLanguage.equalsIgnoreCase("fcsql")) {
-            ast = new FCSQLQueryProcessor(query, "2.0");
+            ast = new FCSQLQueryProcessor(query);
         }
         else if (queryLanguage.equalsIgnoreCase("annis")) {
             ast = new AnnisQueryProcessor(query);
@@ -157,14 +163,7 @@
             }
         }
         else if (ql.equalsIgnoreCase("fcsql")) {
-            if (version == null) {
-                ast = new FCSQLQueryProcessor(query);
-//                ast.addError(StatusCodes.MISSING_VERSION,
-//                        "SRU Version is missing!");
-            }
-            else {
-                ast = new FCSQLQueryProcessor(query, version);
-            }
+            ast = new FCSQLQueryProcessor(query);
         }
         else if (ql.equalsIgnoreCase("annis")) {
             ast = new AnnisQueryProcessor(query);
diff --git a/src/test/java/de/ids_mannheim/korap/query/test/fcsql/FCSQLComplexTest.java b/src/test/java/de/ids_mannheim/korap/query/test/fcsql/FCSQLComplexTest.java
index 60199bb..7417644 100644
--- a/src/test/java/de/ids_mannheim/korap/query/test/fcsql/FCSQLComplexTest.java
+++ b/src/test/java/de/ids_mannheim/korap/query/test/fcsql/FCSQLComplexTest.java
@@ -382,8 +382,7 @@
                 .validateNode(query, "/query/operands/0", jsonLd);
 
         query = "[cnx:pos=\"VVFIN\"] within u";
-        error = FCSQLQueryProcessorTest.getError(new FCSQLQueryProcessor(query,
-                "2.0"));
+        error = FCSQLQueryProcessorTest.getError(new FCSQLQueryProcessor(query));
         assertEquals(311, error.get(0));
         assertEquals(
                 "Within scope UTTERANCE is currently unsupported.",
@@ -435,24 +434,20 @@
         
         // expression should always be within a segment
         query = "!(mate:lemma=\"sein\" | mate:pos=\"PPOSS\")";
-        error = FCSQLQueryProcessorTest.getError(new FCSQLQueryProcessor(query,
-                "2.0"));
+        error = FCSQLQueryProcessorTest.getError(new FCSQLQueryProcessor(query));
         assertEquals(399, error.get(0));
         assertEquals(errorMessage, error.get(1).toString());
 
         query = "![mate:lemma=\"sein\" | mate:pos=\"PPOSS\"]";
-        error = FCSQLQueryProcessorTest.getError(new FCSQLQueryProcessor(query,
-                "2.0"));
+        error = FCSQLQueryProcessorTest.getError(new FCSQLQueryProcessor(query));
         assertEquals(errorMessage, error.get(1).toString());
 
         query = "(\"blaue\"&\"grüne\")";
-        error = FCSQLQueryProcessorTest.getError(new FCSQLQueryProcessor(query,
-                "2.0"));
+        error = FCSQLQueryProcessorTest.getError(new FCSQLQueryProcessor(query));
         assertEquals(errorMessage, error.get(1).toString());
 
         query = "[pos=\"NN\"]&[text=\"Mann\"]";
-        error = FCSQLQueryProcessorTest.getError(new FCSQLQueryProcessor(query,
-                "2.0"));
+        error = FCSQLQueryProcessorTest.getError(new FCSQLQueryProcessor(query));
         assertEquals(399, error.get(0));
         assertEquals(errorMessage, error.get(1).toString());
     }
diff --git a/src/test/java/de/ids_mannheim/korap/query/test/fcsql/FCSQLQueryProcessorTest.java b/src/test/java/de/ids_mannheim/korap/query/test/fcsql/FCSQLQueryProcessorTest.java
index 4876943..3d8bfaa 100644
--- a/src/test/java/de/ids_mannheim/korap/query/test/fcsql/FCSQLQueryProcessorTest.java
+++ b/src/test/java/de/ids_mannheim/korap/query/test/fcsql/FCSQLQueryProcessorTest.java
@@ -29,7 +29,7 @@
 
     public static void runAndValidate(String query, String jsonLd)
             throws JsonProcessingException {
-        FCSQLQueryProcessor processor = new FCSQLQueryProcessor(query, "2.0");
+        FCSQLQueryProcessor processor = new FCSQLQueryProcessor(query);
         String serializedQuery = mapper.writeValueAsString(processor
                 .getRequestMap().get("query"));
         assertEquals(jsonLd.replace(" ", ""), serializedQuery.replace("\"", ""));
@@ -37,7 +37,7 @@
 
     public static void validateNode(String query, String path, String jsonLd)
             throws JsonProcessingException, IOException {
-        qs.setQuery(query, "fcsql", "2.0");
+        qs.setQuery(query, "fcsql");
         node = mapper.readTree(qs.toJSON());
         String serializedQuery = mapper.writeValueAsString(node.at(path));
         assertEquals(jsonLd.replace(" ", ""), serializedQuery.replace("\"", ""));
@@ -48,19 +48,6 @@
         return (List<Object>) errors.get(0);
     }
 
-    @Test
-    public void testVersion() throws JsonProcessingException {
-        error = getError(new FCSQLQueryProcessor("\"Sonne\"", "1.0"));
-        assertEquals(310, error.get(0));
-        assertEquals("Only supports SRU version 2.0.",
-                error.get(1));
-
-        error = getError(new FCSQLQueryProcessor("\"Sonne\"", null));
-        assertEquals(309, error.get(0));
-        assertEquals("Version number is missing.",
-                error.get(1));
-    }
-
     // regexp ::= quoted-string
     @Test
     public void testTermQuery() throws JsonProcessingException {
@@ -116,15 +103,13 @@
         FCSQLQueryProcessorTest.validateNode(query, "/query/wrap", jsonLd);
 
         query = "\"Fliegen\" /l";
-        error = FCSQLQueryProcessorTest.getError(new FCSQLQueryProcessor(query,
-                "2.0"));
+        error = FCSQLQueryProcessorTest.getError(new FCSQLQueryProcessor(query));
         assertEquals(306, error.get(0));
         String msg = (String) error.get(1);
         assertEquals(true, msg.startsWith("Regexflags"));
 
         query = "\"Fliegen\" /d";
-        error = FCSQLQueryProcessorTest.getError(new FCSQLQueryProcessor(query,
-                "2.0"));
+        error = FCSQLQueryProcessorTest.getError(new FCSQLQueryProcessor(query));
         assertEquals(306, error.get(0));
         assertEquals(
                 "Regexflag: IGNORE_DIACRITICS is unsupported.",
@@ -300,7 +285,7 @@
                 + "{@type: koral:term, key: PPOSS, foundry: mate, layer: p, type:type:regex, match: match:ne}]}}";
         //FCSQLQueryProcessorTest.runAndValidate(query, jsonLd);
         
-        error = getError(new FCSQLQueryProcessor(query, "2.0"));
+        error = getError(new FCSQLQueryProcessor(query));
         assertEquals(399, error.get(0));
         assertEquals(
                 "Query cannot be parsed, an unexpcected occured exception while parsing",
@@ -311,35 +296,35 @@
     public void testExceptions() throws JsonProcessingException {
         // unsupported lemma und qualifier
         query = "[opennlp:lemma = \"sein\"]";
-        error = getError(new FCSQLQueryProcessor(query, "2.0"));
+        error = getError(new FCSQLQueryProcessor(query));
         assertEquals(306, error.get(0));
         assertEquals(
                 "Layer lemma with qualifier opennlp is unsupported.",
                 error.get(1));
 
         query = "[tt:morph = \"sein\"]";
-        error = getError(new FCSQLQueryProcessor(query, "2.0"));
+        error = getError(new FCSQLQueryProcessor(query));
         assertEquals(306, error.get(0));
         assertEquals("Layer morph is unsupported.",
                 error.get(1));
 
         // unsupported qualifier
         query = "[malt:lemma = \"sein\"]";
-        error = getError(new FCSQLQueryProcessor(query, "2.0"));
+        error = getError(new FCSQLQueryProcessor(query));
         assertEquals(306, error.get(0));
         assertEquals("Qualifier malt is unsupported.",
                 error.get(1));
 
         // unsupported layer
         query = "[cnx:morph = \"heit\"]";
-        error = getError(new FCSQLQueryProcessor(query, "2.0"));
+        error = getError(new FCSQLQueryProcessor(query));
         assertEquals(306, error.get(0));
         assertEquals("Layer morph is unsupported.",
                 error.get(1));
 
         // missing layer
         query = "[cnx=\"V\"]";
-        error = getError(new FCSQLQueryProcessor(query, "2.0"));
+        error = getError(new FCSQLQueryProcessor(query));
         assertEquals(306, error.get(0));
         assertEquals("Layer cnx is unsupported.",
                 error.get(1));
