diff --git a/Changes b/Changes
index 2dda6e1..04373a8 100644
--- a/Changes
+++ b/Changes
@@ -1,4 +1,4 @@
-0.52 2015-06-26
+0.52 2015-06-27
         - [bugfix] Fixed payload filtering in FocusSpans (margaretha)
 	- [workaround] Reintroduced empty collection support,
 	  as Koral still creates them (diewald)
@@ -18,6 +18,7 @@
 	- [bugfix] Remove legacy error handling in Match (diewald)
 	- [bugfix] JSON-serialization bug in match in case of error messages (diewald)
 	- [bugfix] 'fields' serialization (diewald)
+	- [bugfix] deserialization of group:disjunction (diewald)
 
 0.51 2015-03-17
         - This is a major version (prepared for the GitHub release)
diff --git a/src/main/java/de/ids_mannheim/korap/KrillQuery.java b/src/main/java/de/ids_mannheim/korap/KrillQuery.java
index 3bf8bcd..19377fd 100644
--- a/src/main/java/de/ids_mannheim/korap/KrillQuery.java
+++ b/src/main/java/de/ids_mannheim/korap/KrillQuery.java
@@ -395,37 +395,39 @@
 
         // Branch on operation
         switch (operation) {
-            case "operation:junction":
-                return this._operationJunctionFromJson(operands);
+        case "operation:junction":
+            return this._operationJunctionFromJson(operands);
 
-            case "operation:position":
-                return this._operationPositionFromJson(json, operands);
+        case "operation:position":
+            return this._operationPositionFromJson(json, operands);
 
-            case "operation:sequence":
-                return this._operationSequenceFromJson(json, operands);
+        case "operation:sequence":
+            return this._operationSequenceFromJson(json, operands);
 
-            case "operation:class":
-                return this._operationClassFromJson(json, operands);
+        case "operation:class":
+            return this._operationClassFromJson(json, operands);
 
-            case "operation:repetition":
-                return this._operationRepetitionFromJson(json, operands);
+        case "operation:repetition":
+            return this._operationRepetitionFromJson(json, operands);
 
-            case "operation:relation":
-                if (!json.has("relation")) {
-                    throw new QueryException(717, "Missing relation node");
-                }
+        case "operation:relation":
+            if (!json.has("relation")) {
+                throw new QueryException(717, "Missing relation node");
+            }
 
-                return _operationRelationFromJson(operands,
-                        json.get("relation"));
-                /*throw new QueryException(765,
-                        "Relations are currently not supported");*/
+            return _operationRelationFromJson(operands,
+                                              json.get("relation"));
+            /*throw new QueryException(765,
+              "Relations are currently not supported");*/
 
-            case "operation:or": // Deprecated in favor of operation:junction
-                return this._operationJunctionFromJson(operands);
-                /*
-                case "operation:submatch": // Deprecated in favor of koral:reference
-                return this._operationSubmatchFromJson(json, operands);
-                */
+        case "operation:or": // Deprecated in favor of operation:junction
+            return this._operationJunctionFromJson(operands);
+            /*
+              case "operation:submatch": // Deprecated in favor of koral:reference
+              return this._operationSubmatchFromJson(json, operands);
+            */
+        case "operation:disjunction":
+            return this._operationJunctionFromJson(operands);
         };
 
         // Unknown
diff --git a/src/test/java/de/ids_mannheim/korap/query/TestKrillQueryJSON.java b/src/test/java/de/ids_mannheim/korap/query/TestKrillQueryJSON.java
index df00673..4ffbb78 100644
--- a/src/test/java/de/ids_mannheim/korap/query/TestKrillQueryJSON.java
+++ b/src/test/java/de/ids_mannheim/korap/query/TestKrillQueryJSON.java
@@ -32,6 +32,19 @@
         assertTrue(sqwi.isOptional());
     };
 
+    @Test
+    public void queryJSONBsp1Disjunction () throws QueryException {
+        SpanQueryWrapper sqwi = jsonQuery(getClass().getResource(
+                "/queries/bsp1c.jsonld").getFile());
+
+        // There is a repetition in here
+        // ([base=foo]|[base=bar])[base=foobar]
+        assertEquals(
+                sqwi.toQuery().toString(),
+                "spanOr([tokens:base:foo, spanRepetition(spanNext(tokens:base:foo, tokens:base:bar){1,100})])");
+        assertTrue(sqwi.isOptional());
+    };
+
 
     @Test
     public void queryJSONBsp1b () throws QueryException {
diff --git a/src/test/resources/queries/bsp1c.jsonld b/src/test/resources/queries/bsp1c.jsonld
new file mode 100644
index 0000000..7b0b48f
--- /dev/null
+++ b/src/test/resources/queries/bsp1c.jsonld
@@ -0,0 +1,46 @@
+{
+  "@context" : "http://ids-mannheim.de/ns/KorAP/json-ld/v0.1/context.jsonld",
+  "query": {
+    "@type": "koral:group", 
+    "operation": "operation:disjunction",
+    "operands": [
+      {
+	"@type": "koral:token", 
+	"wrap": {
+	  "@type": "koral:term", 
+	  "layer": "base",
+	  "key": "foo"
+	}
+      }, 
+      {
+	"@type": "koral:group", 
+	"min" : 0,
+	"operation": "operation:repetition",
+	"operands": [
+	  {
+	    "@type": "koral:group", 
+	    "operation" : "operation:sequence",
+	    "operands": [
+	      {
+		"@type": "koral:token", 
+		"wrap": {
+		  "@type": "koral:term", 
+		  "key": "foo", 
+		  "layer" : "base"
+		}
+	      },
+	      {
+		"@type": "koral:token", 
+		"wrap": {
+		  "@type": "koral:term",
+		  "layer": "base",
+		  "key" : "bar"
+		}
+	      }
+	    ]
+	  }
+	]
+      }
+    ]
+  }
+}
