diff --git a/Changes b/Changes
index 8cfb3d1..06e541a 100644
--- a/Changes
+++ b/Changes
@@ -1,8 +1,9 @@
-0.36 2020-07-15
+0.36 2020-07-24
     - [security] Upgraded version of Google Guava
       (CVE-2018-10237; diewald)
     - Optimize regular expressions to use character classes
       instead of alternations (kupietz)
+    - Updated FCS support (dependabot, diewald)
 
 0.35 2019-11-12
     - Added a method to add warnings in QuerySerializer (margaretha)
diff --git a/pom.xml b/pom.xml
index 062c8dc..a4a0591 100644
--- a/pom.xml
+++ b/pom.xml
@@ -142,7 +142,7 @@
 		<dependency>
 			<groupId>eu.clarin.sru.fcs</groupId>
 			<artifactId>fcs-simple-endpoint</artifactId>
-			<version>1.3.0</version>
+			<version>1.4.0</version>
 		</dependency>
 	</dependencies>
 	<build>
diff --git a/src/main/java/de/ids_mannheim/korap/query/parse/fcsql/ExpressionParser.java b/src/main/java/de/ids_mannheim/korap/query/parse/fcsql/ExpressionParser.java
index 1c42d5e..c4184d4 100644
--- a/src/main/java/de/ids_mannheim/korap/query/parse/fcsql/ExpressionParser.java
+++ b/src/main/java/de/ids_mannheim/korap/query/parse/fcsql/ExpressionParser.java
@@ -314,10 +314,10 @@
         Iterator<RegexFlag> i = set.iterator();
         while (i.hasNext()) {
             RegexFlag f = i.next();
-            if (f == RegexFlag.CASE_SENSITVE) {
+            if (f == RegexFlag.CASE_SENSITIVE) {
                 koralTerm.setCaseSensitive(true);
             }
-            else if (f == RegexFlag.CASE_INSENSITVE) {
+            else if (f == RegexFlag.CASE_INSENSITIVE) {
                 koralTerm.setCaseSensitive(false);
             }
             else {
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 35305c1..c44a084 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
@@ -1,6 +1,7 @@
 package de.ids_mannheim.korap.query.test.fcsql;
 
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
 
 import java.io.IOException;
 import java.util.List;
@@ -430,25 +431,25 @@
     @Test
     public void testWrongQuery() throws IOException {
         
-        String errorMessage = "Query cannot be parsed, an unexpcected occured exception while parsing";
+        String errorMessage = "Query cannot be parsed";
         
         // expression should always be within a segment
         query = "!(tt:lemma=\"sein\" | tt:pos=\"PPOSS\")";
         error = FCSQLQueryProcessorTest.getError(new FCSQLQueryProcessor(query));
         assertEquals(399, error.get(0));
-        assertEquals(errorMessage, error.get(1).toString());
+        assertTrue(error.get(1).toString().startsWith(errorMessage));
 
         query = "![tt:lemma=\"sein\" | tt:pos=\"PPOSS\"]";
         error = FCSQLQueryProcessorTest.getError(new FCSQLQueryProcessor(query));
-        assertEquals(errorMessage, error.get(1).toString());
+        assertTrue(error.get(1).toString().startsWith(errorMessage));
 
         query = "(\"blaue\"&\"grüne\")";
         error = FCSQLQueryProcessorTest.getError(new FCSQLQueryProcessor(query));
-        assertEquals(errorMessage, error.get(1).toString());
+        assertTrue(error.get(1).toString().startsWith(errorMessage));
 
         query = "[pos=\"NN\"]&[text=\"Mann\"]";
         error = FCSQLQueryProcessorTest.getError(new FCSQLQueryProcessor(query));
         assertEquals(399, error.get(0));
-        assertEquals(errorMessage, error.get(1).toString());
+        assertTrue(error.get(1).toString().startsWith(errorMessage));
     }
 }
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 7ca180d..fe2352c 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
@@ -107,7 +107,7 @@
         error = FCSQLQueryProcessorTest.getError(new FCSQLQueryProcessor(query));
         assertEquals(306, error.get(0));
         String msg = (String) error.get(1);
-        assertTrue(msg.startsWith("Regexflags"));
+        assertTrue(msg.startsWith("Regexflag"));
 
         query = "\"Fliegen\" /d";
         error = FCSQLQueryProcessorTest.getError(new FCSQLQueryProcessor(query));
@@ -288,9 +288,7 @@
         
         error = getError(new FCSQLQueryProcessor(query));
         assertEquals(399, error.get(0));
-        assertEquals(
-                "Query cannot be parsed, an unexpcected occured exception while parsing",
-                error.get(1));
+        assertTrue(error.get(1).toString().startsWith("Query cannot be parsed"));
     }
 
     @Test
