Update UnorderedDistanceSpans as an abstract class 
Add UnorderedElementDistanceSpans and UnorderedTokenDistanceSpans
diff --git a/src/main/java/de/ids_mannheim/korap/query/spans/SimpleSpans.java b/src/main/java/de/ids_mannheim/korap/query/spans/SimpleSpans.java
index 0b7b08c..a7483aa 100644
--- a/src/main/java/de/ids_mannheim/korap/query/spans/SimpleSpans.java
+++ b/src/main/java/de/ids_mannheim/korap/query/spans/SimpleSpans.java
@@ -2,6 +2,7 @@
 
 import java.io.IOException;
 import java.util.Collection;
+import java.util.Iterator;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
@@ -17,18 +18,18 @@
 /** An abstract class for Span enumeration including span match properties
  * 	and basic methods.
  *  
- * 	@author margaretha
- * 
+ * 	@author margaretha 
  * */
 public abstract class SimpleSpans extends Spans{
+	private SimpleSpanQuery query;
 	protected boolean isStartEnumeration;
+	
 	protected boolean hasMoreSpans;
-	protected int matchDocNumber, matchStartPosition, matchEndPosition;	
-	protected List<byte[]> matchPayload;	
-    
 	// Warning: enumeration of Spans
 	protected Spans firstSpans, secondSpans;
-	private SimpleSpanQuery query;
+	
+	protected int matchDocNumber, matchStartPosition, matchEndPosition;	
+	protected List<byte[]> matchPayload;	
       
     public SimpleSpans (SimpleSpanQuery simpleSpanQuery,
 			AtomicReaderContext context,
@@ -74,7 +75,25 @@
   		}		
   		return true;
   	} 	
-
+  	
+	/** Find the same doc shared by element, firstspan and secondspan.
+	 *  @return true iff such a doc is found.
+	 * */
+	protected boolean findSameDoc(Spans x, 
+			Spans y, Spans e) throws IOException{
+		
+		while (hasMoreSpans) {
+			if (ensureSameDoc(x, y) &&
+					e.doc() == x.doc()){
+				return true;
+			}			
+			if (!ensureSameDoc(e,y)){
+				return false;
+			};
+		}		
+  		return false;
+	}
+	
   	@Override
   	public int doc() {
   		return matchDocNumber;