diff --git a/src/main/java/de/ids_mannheim/korap/query/spans/UnorderedDistanceSpans.java b/src/main/java/de/ids_mannheim/korap/query/spans/UnorderedDistanceSpans.java
index e08db92..06227e2 100644
--- a/src/main/java/de/ids_mannheim/korap/query/spans/UnorderedDistanceSpans.java
+++ b/src/main/java/de/ids_mannheim/korap/query/spans/UnorderedDistanceSpans.java
@@ -126,25 +126,23 @@
             if (currentFirstSpan.getStart() < currentSecondSpan.getStart()
                     || isLastCandidateSmaller(currentFirstSpan,
                             currentSecondSpan)) {
-                // log.trace("current target: "
-                // + firstSpanList.get(0).getStart() + " "
-                // + firstSpanList.get(0).getEnd());
-                // System.out.println("candidates:");
-                // for (CandidateSpan cs: secondSpanList) {
-                // System.out.println(cs.getStart() +" "+ cs.getEnd());
-                // }
+//                log.trace("current target: " + firstSpanList.get(0).getStart()
+//                        + " " + firstSpanList.get(0).getEnd());
+//                System.out.println("candidates:");
+//                for (CandidateSpan cs : secondSpanList) {
+//                    System.out.println(cs.getStart() + " " + cs.getEnd());
+//                }
 
                 matchList = findMatches(currentFirstSpan, secondSpanList, true);
                 updateList(firstSpanList);
             }
             else {
-                // log.trace("current target: "
-                // + secondSpanList.get(0).getStart() + " "
-                // + secondSpanList.get(0).getEnd());
-                // System.out.println("candidates:");
-                // for (CandidateSpan cs: firstSpanList) {
-                // System.out.println(cs.getStart() +" "+ cs.getEnd());
-                // }
+//                log.trace("current target: " + secondSpanList.get(0).getStart()
+//                        + " " + secondSpanList.get(0).getEnd());
+//                System.out.println("candidates:");
+//                for (CandidateSpan cs : firstSpanList) {
+//                    System.out.println(cs.getStart() + " " + cs.getEnd());
+//                }
 
                 matchList = findMatches(currentSecondSpan, firstSpanList,
                         false);
@@ -264,7 +262,7 @@
      * @return a candidate span match
      */
     protected CandidateSpan createMatchCandidate (CandidateSpan target,
-            CandidateSpan cs, boolean isDistanceZero) {
+            CandidateSpan cs, boolean isDistanceZero, boolean isTargetFirstSpan) {
 
         int start = Math.min(target.getStart(), cs.getStart());
         int end = Math.max(target.getEnd(), cs.getEnd());
@@ -282,6 +280,14 @@
         }
         CandidateSpan match = new CandidateSpan(start, end, doc, cost,
                 payloads);
+        if (isTargetFirstSpan) {
+            match.setChildSpan(target);
+            match.setSecondChildSpan(cs);
+        }
+        else {
+            match.setChildSpan(cs);
+            match.setSecondChildSpan(target);
+        }
         //match.setChildSpan(cs);
         return match;
     }
diff --git a/src/main/java/de/ids_mannheim/korap/query/spans/UnorderedElementDistanceSpans.java b/src/main/java/de/ids_mannheim/korap/query/spans/UnorderedElementDistanceSpans.java
index 0e4b7fa..388e97b 100644
--- a/src/main/java/de/ids_mannheim/korap/query/spans/UnorderedElementDistanceSpans.java
+++ b/src/main/java/de/ids_mannheim/korap/query/spans/UnorderedElementDistanceSpans.java
@@ -261,38 +261,6 @@
         return matches;
     }
 
-
-    /**
-     * Creates a match from the two given spans (target and candidate)
-     * 
-     * @param target
-     *            the target span
-     * @param cs
-     *            the candidate span
-     * @param isDistanceZero
-     *            true if the distance between the two spans are zero,
-     *            false otherwise
-     * @param isTargetFirstSpan
-     *            true is the target span is of the first span, false
-     *            otherwise
-     * @return a match
-     */
-    private CandidateSpan createMatchCandidate (CandidateSpan target,
-            CandidateSpan cs, boolean isDistanceZero,
-            boolean isTargetFirstSpan) {
-        CandidateSpan match = createMatchCandidate(target, cs, isDistanceZero);
-        if (isTargetFirstSpan) {
-            match.setChildSpan(target);
-            match.setSecondChildSpan(cs);
-        }
-        else {
-            match.setChildSpan(cs);
-            match.setSecondChildSpan(target);
-        }
-        return match;
-    }
-
-
     @Override
     protected void updateList (List<CandidateSpan> candidateList) {
         updateElementList(candidateList.get(0).getPosition());
diff --git a/src/main/java/de/ids_mannheim/korap/query/spans/UnorderedTokenDistanceSpans.java b/src/main/java/de/ids_mannheim/korap/query/spans/UnorderedTokenDistanceSpans.java
index c0ac7f1..691f978 100644
--- a/src/main/java/de/ids_mannheim/korap/query/spans/UnorderedTokenDistanceSpans.java
+++ b/src/main/java/de/ids_mannheim/korap/query/spans/UnorderedTokenDistanceSpans.java
@@ -127,12 +127,14 @@
 
         List<CandidateSpan> matches = new ArrayList<>();
         int actualDistance;
+        CandidateSpan match;
         for (CandidateSpan cs : candidateList) {
             if (minDistance == 0 &&
             // intersection
                     target.getStart() < cs.getEnd()
                     && cs.getStart() < target.getEnd()) {
-                matches.add(createMatchCandidate(target, cs, true));
+                match = createMatchCandidate(target, cs, true, isTargetFirstSpan);
+                matches.add(match);
                 continue;
             }
 
@@ -146,7 +148,8 @@
             }
             if (minDistance <= actualDistance
                     && actualDistance <= maxDistance) {
-                matches.add(createMatchCandidate(target, cs, false));
+                match = createMatchCandidate(target, cs, false, isTargetFirstSpan);
+                matches.add(match);
             }
         }
         return matches;
diff --git a/src/test/java/de/ids_mannheim/korap/index/TestMultipleDistanceIndex.java b/src/test/java/de/ids_mannheim/korap/index/TestMultipleDistanceIndex.java
index c6363e5..c016b5f 100644
--- a/src/test/java/de/ids_mannheim/korap/index/TestMultipleDistanceIndex.java
+++ b/src/test/java/de/ids_mannheim/korap/index/TestMultipleDistanceIndex.java
@@ -123,7 +123,6 @@
         SpanQuery mdq;
         mdq = createQuery("s:b", "s:c", constraints, false);
         kr = ki.search(mdq, (short) 10);
-        // System.out.println(mdq);
 
         assertEquals((long) 3, kr.getTotalResults());
         assertEquals(0, kr.getMatch(0).getStartPos());
@@ -267,7 +266,7 @@
 
 
     /**
-     * Same tokens: ordered and unordered yield the same results
+     * Same tokens: unordered yields twice the same results as ordered
      */
     @Test
     public void testCase5 () throws IOException {
@@ -276,14 +275,15 @@
         ki.addDoc(createFieldDoc1());
         ki.commit();
 
+        // ordered
         List<DistanceConstraint> constraints = new ArrayList<DistanceConstraint>();
-        constraints.add(createConstraint("w", 1, 2, false, false));
-        constraints.add(createConstraint("s", 1, 2, false, false));
+        constraints.add(createConstraint("w", 1, 2, true, false));
+        constraints.add(createConstraint("s", 1, 2, true, false));
 
         SpanQuery mdq;
         mdq = createQuery("s:c", "s:c", constraints, false);
         kr = ki.search(mdq, (short) 10);
-
+        
         assertEquals((long) 4, kr.getTotalResults());
         assertEquals(1, kr.getMatch(0).getStartPos());
         assertEquals(3, kr.getMatch(0).getEndPos());
@@ -294,6 +294,15 @@
         assertEquals(4, kr.getMatch(2).getEndPos());
         assertEquals(3, kr.getMatch(3).getStartPos());
         assertEquals(6, kr.getMatch(3).getEndPos());
+        
+        //unordered
+        constraints = new ArrayList<DistanceConstraint>();
+        constraints.add(createConstraint("w", 1, 2, false, false));
+        constraints.add(createConstraint("s", 1, 2, false, false));
+
+        mdq = createQuery("s:c", "s:c", constraints, false);
+        kr = ki.search(mdq, (short) 10);
+        assertEquals((long) 8, kr.getTotalResults());
 
     }
 
