diff --git a/CHANGES b/CHANGES
index f9690c3..fc83369 100644
--- a/CHANGES
+++ b/CHANGES
@@ -5,6 +5,8 @@
   	  SpanSequenceQueryWrapper (diewald)
 	- [bugfix] Sequences with [problem][problem][anchor] can now
 	  be deserialized (diewald)
+	- [bugfix] Queries with regular expressions in spanNext() are now
+	  correctly rewritten (diewald)
 
 0.47 2014-11-05
         - [feature] Support new index format with more metadata (diewald)
diff --git a/src/main/java/de/ids_mannheim/korap/query/SpanNextQuery.java b/src/main/java/de/ids_mannheim/korap/query/SpanNextQuery.java
index 7274826..122a65b 100644
--- a/src/main/java/de/ids_mannheim/korap/query/SpanNextQuery.java
+++ b/src/main/java/de/ids_mannheim/korap/query/SpanNextQuery.java
@@ -10,6 +10,8 @@
 import java.util.Map;
 
 import org.apache.lucene.index.AtomicReaderContext;
+import org.apache.lucene.index.IndexReader;
+import org.apache.lucene.search.Query;
 import org.apache.lucene.index.Term;
 import org.apache.lucene.index.TermContext;
 import org.apache.lucene.search.spans.SpanQuery;
@@ -17,9 +19,11 @@
 import org.apache.lucene.util.Bits;
 import org.apache.lucene.util.ToStringUtils;
 
+
 import de.ids_mannheim.korap.query.spans.NextSpans;
 
-/** Matches spans which are directly next to each other. 
+/**
+ * Matches spans which are directly next to each other. 
  *  this is identical to a phrase query with exactly two clauses. 
  */
 public class SpanNextQuery extends SimpleSpanQuery implements Cloneable {
@@ -57,7 +61,39 @@
 	spanNextQuery.setBoost(getBoost());
 	return spanNextQuery;
     };
-    
+   
+
+    /*
+     * Rewrite query in case it includes regular expressions or wildcards
+     */
+    @Override
+    public Query rewrite (IndexReader reader) throws IOException {
+	SpanNextQuery clone = null;
+
+	// Does the first clause needs a rewrite?
+	SpanQuery query = (SpanQuery) firstClause.rewrite(reader);
+	if (query != firstClause) {
+	    if (clone == null)
+		clone = this.clone();
+	    clone.firstClause = query;
+	};
+
+	// Does the second clause needs a rewrite?
+	query = (SpanQuery) secondClause.rewrite(reader);
+	if (query != secondClause) {
+	    if (clone == null)
+		clone = this.clone();
+	    clone.secondClause = query;
+	};
+
+	// There is a clone and it is important
+	if (clone != null)
+	    return clone;
+
+	return this;
+    };
+
+ 
     @Override
 	public String toString(String field) {
 		StringBuilder sb = new StringBuilder();
diff --git a/src/test/java/de/ids_mannheim/korap/search/TestKorapSearch.java b/src/test/java/de/ids_mannheim/korap/search/TestKorapSearch.java
index 8c407ad..c2d73e2 100644
--- a/src/test/java/de/ids_mannheim/korap/search/TestKorapSearch.java
+++ b/src/test/java/de/ids_mannheim/korap/search/TestKorapSearch.java
@@ -755,37 +755,46 @@
 	ki.addDocFile(
             1,getClass().getResource("/bzk/D59-00089.json.gz").getFile(), true
 	);
-	ki.addDocFile(
-            2,getClass().getResource("/bzk/D59-00089.json.gz").getFile(), true
-	);
-
 	ki.commit();
 
+	// [tt/p="A.*"]{0,3}[tt/p="N.*"]
 	String json = getString(
 	    getClass().getResource("/queries/bugs/multiterm_rewrite.jsonld").getFile()
         );
 	
 	KorapSearch ks = new KorapSearch(json);
 	KorapResult kr = ks.run(ki);
-	assertEquals(kr.getQuery(),"");
-
-
-	/*
-
 	assertEquals(
             kr.getQuery(),
-	    "{4: spanNext({1: spanNext({2: tokens:s:ins}, {3: tokens:s:Leben})}, tokens:s:gerufen)}"
-        );
-	assertEquals(
-	    kr.getMatch(0).getSnippetBrackets(),
-	    "... sozialistischen Initiative\" eine neue politische Gruppierung " +
-	    "[{4:{1:{2:ins} {3:Leben}} gerufen}] hatten. " +
-	    "Pressemeldungen zufolge haben sich in ..."
+	    "spanOr([SpanMultiTermQueryWrapper(tokens:/tt/p:N.*/), " +
+	    "spanNext(spanRepetition(SpanMultiTermQueryWrapper(tokens:/tt/p:A.*/){1,3}), " +
+	    "SpanMultiTermQueryWrapper(tokens:/tt/p:N.*/))])"
         );
 
-	assertEquals(2, kr.getTotalResults());
+	assertEquals(58, kr.getTotalResults());
 	assertEquals(0, kr.getStartIndex());
-	*/
+
+	assertEquals(
+	    kr.getMatch(0).getSnippetBrackets(),
+	    "[Saragat-Partei] zerfällt Rom (ADN) die von dem"
+        );
+	assertEquals(
+	    kr.getMatch(1).getSnippetBrackets(),
+	    "[Saragat-Partei] zerfällt Rom (ADN) die von dem"
+        );
+	assertEquals(
+	    kr.getMatch(2).getSnippetBrackets(),
+	    "Saragat-Partei zerfällt [Rom] (ADN) die von dem Rechtssozialisten Saragat"
+        );
+	assertEquals(
+	    kr.getMatch(3).getSnippetBrackets(),
+	    "Saragat-Partei zerfällt Rom ([ADN]) die von dem Rechtssozialisten Saragat geführte"
+        );
+
+	assertEquals(
+	    kr.getMatch(23).getSnippetBrackets(),
+	    "dem Namen \"Einheitsbewegung der sozialistischen Initiative\" [eine neue politische Gruppierung] ins Leben gerufen hatten. Pressemeldungen zufolge"
+        );
     };
 
 
