diff --git a/Changes b/Changes
index be9fd4b..2c1bb16 100644
--- a/Changes
+++ b/Changes
@@ -1,3 +1,7 @@
+0.34 2019-07-17
+    - [bugfix] Ignore min:max order in distance operators
+      (#67; diewald)
+
 0.33 2019-02-20
     - Added debug flags (margaretha)
     - [bugfix] Fixed poliqarp layer bug (#52; margaretha)
@@ -23,9 +27,9 @@
 0.29 2018-07-23
     - Added check for errors on QuerySerializer object (diewald)
     - Support verbatim string values in Poliqarp
-    (fixes #42; diewald)
+      (fixes #42; diewald)
     - Fix support for verbatim string values in collection queries
-    (diewald)
+      (diewald)
     - Added hint to update the library (diewald)
 
 0.28 2018-01-10
diff --git a/pom.xml b/pom.xml
index 1364510..a8cddbb 100644
--- a/pom.xml
+++ b/pom.xml
@@ -4,7 +4,7 @@
 
 	<groupId>de.ids_mannheim.korap</groupId>
 	<artifactId>Koral</artifactId>
-	<version>0.33</version>
+	<version>0.34</version>
 	<packaging>jar</packaging>
 	<name>Koral</name>
 	<url>http://maven.apache.org</url>
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 5f19798..4bc806a 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
@@ -641,7 +641,7 @@
 
         boolean putIntoOverlapDisjunction = false;
 
-        int min = 0, max = 0;
+        int tmin, 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)
@@ -672,6 +672,13 @@
             if (!meas.equals("w") && min == 0) {
                 processSpanDistance(meas, min, max);
             }
+
+            if (max < min) {
+                tmin = min;
+                min = max;
+                max = tmin;
+            }
+            
             Map<String, Object> distance =
                     KoralObjectGenerator.makeDistance(meas, min, max);
             // override @type, min/max to be treated according to 
diff --git a/src/test/java/de/ids_mannheim/korap/test/cosmas2/Cosmas2QueryProcessorTest.java b/src/test/java/de/ids_mannheim/korap/test/cosmas2/Cosmas2QueryProcessorTest.java
index dedc9f3..da64bbe 100644
--- a/src/test/java/de/ids_mannheim/korap/test/cosmas2/Cosmas2QueryProcessorTest.java
+++ b/src/test/java/de/ids_mannheim/korap/test/cosmas2/Cosmas2QueryProcessorTest.java
@@ -561,6 +561,36 @@
         assertEquals("Mond", res.at("/query/operands/1/operands/0/wrap/key")
                 .asText());
 
+        // Order of min and max is irrelevant in C2
+        query = "Sonne /+w4:1,s0,p3:1 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("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());
