diff --git a/pom.xml b/pom.xml
index 47118ed..22842ce 100644
--- a/pom.xml
+++ b/pom.xml
@@ -309,14 +309,14 @@
         <directory>src/main/resources</directory>
         <filtering>true</filtering>
 	<includes>
-	  <include>krill.properties</include>
+	  <include>krill.info</include>
 	</includes>
       </resource>
       <resource>
         <directory>src/main/resources</directory>
         <filtering>false</filtering>
 	<excludes>
-	  <exclude>krill.properties</exclude>
+	  <exclude>krill.info</exclude>
 	</excludes>
       </resource>
     </resources> 
diff --git a/src/main/java/de/ids_mannheim/korap/KrillIndex.java b/src/main/java/de/ids_mannheim/korap/KrillIndex.java
index 44528f0..e4535c0 100644
--- a/src/main/java/de/ids_mannheim/korap/KrillIndex.java
+++ b/src/main/java/de/ids_mannheim/korap/KrillIndex.java
@@ -118,7 +118,7 @@
     // TODO: Use configuration instead.
     // Last line of defense against DOS
     private int autoCommit = 500;
-    private String version = "unknown";
+    private String version = "Unknown";
     private String name = "Unknown";
 
     // Temp:
diff --git a/src/main/java/de/ids_mannheim/korap/query/spans/ElementSpans.java b/src/main/java/de/ids_mannheim/korap/query/spans/ElementSpans.java
index 8227bda..ba056d1 100644
--- a/src/main/java/de/ids_mannheim/korap/query/spans/ElementSpans.java
+++ b/src/main/java/de/ids_mannheim/korap/query/spans/ElementSpans.java
@@ -77,12 +77,17 @@
         super(spanElementQuery, context, acceptDocs, termContexts);
         termSpans = (TermSpans) this.firstSpans;
         hasMoreSpans = true;
-        // termSpans.next();
+        if (DEBUG)
+            log.trace("Create ElementSpan");
     };
 
 
     @Override
     public boolean next () throws IOException {
+
+        if (DEBUG)
+            log.trace("Next element span for element");
+
         if (!hasMoreSpans || !(hasMoreSpans = termSpans.next()))
             return false;
 
@@ -94,8 +99,6 @@
 
 
     private boolean advance () throws IOException {
-
-
         this.matchStartPosition = termSpans.start();
         this.matchDocNumber = termSpans.doc();
         isPayloadLoaded = false;
diff --git a/src/main/resources/log4j.properties b/src/main/resources/log4j.properties
index fd0328d..78bf62e 100644
--- a/src/main/resources/log4j.properties
+++ b/src/main/resources/log4j.properties
@@ -1,4 +1,4 @@
-# log4j.rootLogger = ERROR, stdout
+log4j.rootLogger = ERROR, stdout
 
 # Queries:
 # log4j.logger.de.ids_mannheim.korap.query.SpanNextQuery = TRACE, stdout
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 b85206e..ce6dac3 100644
--- a/src/test/java/de/ids_mannheim/korap/index/TestWithinIndex.java
+++ b/src/test/java/de/ids_mannheim/korap/index/TestWithinIndex.java
@@ -16,8 +16,10 @@
 
 import de.ids_mannheim.korap.KrillIndex;
 import de.ids_mannheim.korap.KrillQuery;
+import de.ids_mannheim.korap.query.QueryBuilder;
 import de.ids_mannheim.korap.query.SpanClassQuery;
 import de.ids_mannheim.korap.query.SpanElementQuery;
+import de.ids_mannheim.korap.query.wrap.SpanQueryWrapper;
 import de.ids_mannheim.korap.query.SpanNextQuery;
 import de.ids_mannheim.korap.query.SpanWithinQuery;
 import de.ids_mannheim.korap.query.wrap.SpanQueryWrapper;
@@ -1055,14 +1057,14 @@
 
     /** SpanElementQueries */
     @Test
-    public void indexExample8 () throws IOException {
+    public void indexExample8 () throws QueryException, IOException {
         KrillIndex ki = new KrillIndex();
         FieldDocument fd = new FieldDocument();
         // <a>xx <e>hi j <e>hi j</e></e></a>
         fd.addTV(
                 "base",
                 "xx hi j hi j",
-                "[(0-1)s:x|i:x|_0$<i>0<i>1|<>:a$<b>64<i>1<i>12<i>8<b>0]"
+                "[(0-1)s:x|i:x|_0$<i>0<i>1|<>:a$<b>64<i>0<i>12<i>8<b>0]"
                         + "[(1-2)s:x|i:x|_1$<i>1<i>2]"
                         + "[(3-4)s:h|i:h|_2$<i>3<i>4|<>:e$<b>64<i>3<i>12<i>8<b>0]"
                         + "[(4-5)s:i|i:i|_3$<i>4<i>5]"
@@ -1071,8 +1073,30 @@
                         + "[(9-10)s:i|i:i|_6$<i>9<i>10]"
                         + "[(11-12)s:j|i:j|_7$<i>11<i>12]");
         ki.addDoc(fd);
+        ki.commit();
 
-        // TODO!!
+        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);
+        assertEquals(2, kr.getTotalResults());
+
+        sqw = qb.tag("a");
+        kr = ki.search(sqw.toQuery(), (short) 10);
+        assertEquals(1, kr.getTotalResults());
+
+        sqw = qb.startswith(qb.tag("a"), qb.seg("i:x"));
+        assertEquals("spanStartsWith(<base:a />, base:i:x)",
+                     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());
+        kr = ki.search(sqw.toQuery(), (short) 10);
+        assertEquals(2, kr.getTotalResults());
     };
 
 
