diff --git a/Changes b/Changes
index fa5c8d6..e67a228 100644
--- a/Changes
+++ b/Changes
@@ -1,8 +1,9 @@
-0.55.5 2016-04-26
+0.55.5 2016-04-29
 	- [performance] Changed to a dynamic window for sorting in FocusSpans (margaretha)
-0.55.5 2016-04-25
 	- [bugfix] store skipped spans in Repetitionspans as candidates
 	  (margaretha)
+	- [bugfix] Store lazy loading embedded spans for startsWith in
+	  WithinSpans (diewald)
 
 0.55.4 2016-04-22
 	- [bugfix] Wrap <base/s=t> boundaries around right extended queries
diff --git a/pom.xml b/pom.xml
index 22842ce..60dd27b 100644
--- a/pom.xml
+++ b/pom.xml
@@ -25,7 +25,7 @@
 
   <groupId>de.ids_mannheim.korap</groupId>
   <artifactId>Krill</artifactId>
-  <version>0.55.4</version>
+  <version>0.55.5</version>
   <packaging>jar</packaging>
 
   <name>Krill</name>
diff --git a/src/main/java/de/ids_mannheim/korap/query/spans/WithinSpans.java b/src/main/java/de/ids_mannheim/korap/query/spans/WithinSpans.java
index 215dc85..31a0e12 100644
--- a/src/main/java/de/ids_mannheim/korap/query/spans/WithinSpans.java
+++ b/src/main/java/de/ids_mannheim/korap/query/spans/WithinSpans.java
@@ -162,6 +162,7 @@
         while (this.more && (wrapDoc == embeddedDoc ||
         // this.inSameDoc ||
                 this.toSameDoc())) {
+
             if (DEBUG)
                 log.trace("We are in the same doc: {}, {}", wrapDoc,
                         embeddedDoc);
@@ -219,6 +220,8 @@
 
                     // Forward with embedding
                     if (!this.embeddedSpans.next()) {
+
+                        // TODO: May need storeEmpdedded
                         this.nextSpanA();
                         continue;
                     }
@@ -235,7 +238,7 @@
                     if (this.embeddedDoc != this.wrapDoc) {
 
                         if (DEBUG) {
-                            log.trace("Embedded span is in a new document {}",
+                            log.trace("(A) Embedded span is in a new document {}",
                                     _currentEmbedded().toString());
                             log.trace("Reset current embedded doc");
                         };
@@ -264,6 +267,12 @@
 
                     if (this.embeddedDoc != this.wrapDoc) {
 
+                        if (DEBUG) {
+                            log.trace("(B) Embedded span is in a new document {}",
+                                    _currentEmbedded().toString());
+                            log.trace("Reset current embedded doc");
+                        };
+
                         // Is this always a good idea?
                         /*
                         this.spanStore1.clear();
@@ -658,7 +667,7 @@
 
     // Check if the current span constellation does match
     // Store backtracking relevant data and say, how to proceed
-    private boolean doesMatch () {
+    private boolean doesMatch () throws IOException {
         if (DEBUG)
             log.trace("In the match test branch");
 
@@ -690,8 +699,14 @@
         else if (this.wrapStart < this.embeddedStart) {
             // Can't match for sw and m and will always
             // lead to next_a
+
             if (flag >= STARTSWITH) {
+                if (DEBUG)
+                    log.trace("Shortcut for lazy loading");
+
+                this.storeEmbedded();
                 this.nextSpanA();
+                
                 if (DEBUG)
                     _logCurrentCase((byte) 15);
                 return false;
@@ -846,6 +861,10 @@
 
 
     private void todo (byte currentCase) throws IOException {
+        if (DEBUG) {
+            log.trace("Check what to do next ...");
+        };
+
         /*
           Check what to do next with the spans.
           
@@ -881,6 +900,9 @@
                 this.nextSpanB();
             }
             else if (this.flag >= STARTSWITH) {
+
+                // TODO: May need storeEmbedded
+
                 this.nextSpanA();
             }
             else {
@@ -903,6 +925,7 @@
                     // Case 9, 10
                     (currentCase >= (byte) 9 && this.flag >= STARTSWITH)) {
 
+                // TODO: May need storeEmbedded
                 this.nextSpanA();
             }
             else {
diff --git a/src/test/java/de/ids_mannheim/korap/index/TestWithinIndex.java b/src/test/java/de/ids_mannheim/korap/index/TestWithinIndex.java
index ce6dac3..cba0c3a 100644
--- a/src/test/java/de/ids_mannheim/korap/index/TestWithinIndex.java
+++ b/src/test/java/de/ids_mannheim/korap/index/TestWithinIndex.java
@@ -1075,11 +1075,15 @@
         ki.addDoc(fd);
         ki.commit();
 
+
         assertEquals(1, ki.numberOf("documents"));
 
         QueryBuilder qb = new KrillQuery("base").builder();
-        SpanQueryWrapper sqw = qb.seg("i:x");
-        Result kr = ki.search(sqw.toQuery(), (short) 10);
+        SpanQueryWrapper sqw;
+        Result kr;
+        /*
+        sqw = qb.seg("i:x");
+        kr = ki.search(sqw.toQuery(), (short) 10);
         assertEquals(2, kr.getTotalResults());
 
         sqw = qb.tag("a");
@@ -1091,7 +1095,7 @@
                      sqw.toQuery().toString());
         kr = ki.search(sqw.toQuery(), (short) 10);
         assertEquals(1, kr.getTotalResults());
-
+        */
         sqw = qb.startswith(qb.tag("e"), qb.seg("i:h"));
         assertEquals("spanStartsWith(<base:e />, base:i:h)",
                      sqw.toQuery().toString());
