diff --git a/Changes b/Changes
index 75bd931..bac3b68 100644
--- a/Changes
+++ b/Changes
@@ -21,7 +21,9 @@
         - [feature] Improved deserialization of SpanSubSpanQueries
           (margaretha)
 	- [feature] Introducing the potential need for resorting queries
-	  on focussing (set by relations) (diewald)
+	  on focussing (e.g., set by relations) (diewald)
+	- [bugfix] Hopefully fixing a resource related bug for
+	  server instantiation (diewald)
 
 0.49.3 2015-02-03
         - [documentation] Improved documentation for API classes (diewald)
diff --git a/Readme.md b/Readme.md
index d71659f..c545522 100644
--- a/Readme.md
+++ b/Readme.md
@@ -1,9 +1,16 @@
 # Krill
 
-A Corpus Retrieval Index using Lucene for Look-Ups
+A Corpusdata Retrieval Index using Lucene for Look-Ups
+
 
 ## Synopsis
 
+... TODO:
+> Adding data (JSON via server)
+> Querying data (KoralQuery)
+> Show results (JSON)
+
+
 ## Description
 
 Krill is a [Lucene](https://lucene.apache.org/) based search
@@ -11,55 +18,50 @@
 developed at the Institute for German Language (IDS) in Mannheim,
 Germany.
 
+**The software is in its early stages and not stable yet**
+
+
 ## Features
 
-Krill is the reference implementation for the
-[KoralQuery](https://github.com/KorAP/Koral) protocol, covering
-most of its query features, including ...
+Krill is the reference implementation for
+[KoralQuery](https://github.com/KorAP/Koral), covering
+most of the protocols features, including ...
 
-### Fulltext search
 
-"Find all occurrences of the phrase 'sea monster'!"
+- **Fulltext search**<br>
+  "Find all occurrences of the phrase 'sea monster'!"<br>
+  "Find all case-insensitive words matching the regular expression /krak.*/"
 
-"Find all case-insensitive words matching the regular expression /krak.*/"
+- **Token-based annotation search**<br>
+  "Find all plural nouns in accusative!"
 
-### Token-based annotation search
+- **Span-based annotation search**<br>
+  "Find all nominal phrases!"
 
-"Find all plural nouns in accusative!"
+- **Distance search**<br>
+  ...
 
-### Span-based annotation search
+- **Positional search**<br>
+  ...
 
-"Find all nominal phrases!"
+- **Nested queries**<br>
+  ...
 
-### Distance search
+- **and many more ...**<br>
+  Multiple annotation resources;
+  Virtual Collections;
+  Partial highlightings;
+  Support for overlapping spans;
+  Relational queries;
+  Hierarchical queries ...
 
-...
-
-### Positional search
-
-...
-
-### Nested queries
-
-...
-
-### Multiple annotation resources
-
-"Find all words marked as a noun by
-[TreeTagger](http://www.ims.uni-stuttgart.de/forschung/ressourcen/werkzeuge/treetagger.html)
-and marked as an adjective by CoreNLP](https://github.com/stanfordnlp/CoreNLP)!"
-
-### and many more ...
-
-Virtual Collections;
-partial highlightings;
-Support for overlapping spans;
-relational queries;
-hierarchical queries ...
 
 ## Prerequisites
 
-...
+At least Java 7,
+[Git](http://git-scm.com/),
+[Maven](https://maven.apache.org/).
+Further dependencies are resolved using Maven.
 
 ## Setup
 
@@ -82,6 +84,17 @@
     src/main/resources/korap.conf
     src/test/resources/examples/
 
+
+## Caveats
+
+Krill operates on tokens and is limited to a single tokenization stream.
+Token annotations therefore have to rely on that tokenization,
+Span annotations have to wrap at least one token.
+Punctuations are currently not supported.
+The order of results is currently bound to the order of documents in the
+index, but this is likely to change.
+
+
 ## Development and License
 
 **Authors**: [Nils Diewald](http://nils-diewald.de/), Eliza Margaretha
@@ -95,11 +108,21 @@
 [Changes](https://raw.githubusercontent.com/KorAP/Krill/master/Changes)
 file.
 
+**Contributions to Krill are very welcome!**
+Before contribution, please reformat your code according to the korap
+style guideline, provided by means of an
+[Eclipse style sheet](https://raw.githubusercontent.com/KorAP/Krill/master/korap-style.xml).
+You can either reformat using [Eclipse](http://eclipse.org/) or using
+[Maven](https://maven.apache.org/) with the command
+
+  $ mvn java-formatter:format
+
 Krill is published under the
 [BSD-2 License](https://raw.githubusercontent.com/KorAP/Krill/master/LICENSE).
 
 To cite this work, please ...
 
+
 ## References and bundled Software
 
 Named entities annotated in the test data by CoreNLP were using
diff --git a/src/main/java/de/ids_mannheim/korap/query/wrap/SpanAlterQueryWrapper.java b/src/main/java/de/ids_mannheim/korap/query/wrap/SpanAlterQueryWrapper.java
index 28e9c72..e60ca21 100644
--- a/src/main/java/de/ids_mannheim/korap/query/wrap/SpanAlterQueryWrapper.java
+++ b/src/main/java/de/ids_mannheim/korap/query/wrap/SpanAlterQueryWrapper.java
@@ -104,18 +104,25 @@
         return this;
     };
 
+    @Override
     public SpanQuery toQuery() throws QueryException {
         if (this.isNull || this.alternatives.size() == 0)
             return (SpanQuery) null;
 	    
         if (this.alternatives.size() == 1) {
-            return (SpanQuery) this.alternatives.get(0).toQuery();
+            return (SpanQuery) this.alternatives.get(0).
+                retrieveNode(this.retrieveNode).
+                toQuery();
         };
 
         Iterator<SpanQueryWrapper> clause = this.alternatives.iterator();
-        SpanOrQuery soquery = new SpanOrQuery( clause.next().toQuery() );
+        SpanOrQuery soquery = new SpanOrQuery(
+            clause.next().retrieveNode(this.retrieveNode).toQuery()
+        );
         while (clause.hasNext()) {
-            soquery.addClause( clause.next().toQuery() );
+            soquery.addClause(
+                clause.next().retrieveNode(this.retrieveNode).toQuery()
+            );
         };
         return (SpanQuery) soquery;
     };
diff --git a/src/main/java/de/ids_mannheim/korap/query/wrap/SpanAttributeQueryWrapper.java b/src/main/java/de/ids_mannheim/korap/query/wrap/SpanAttributeQueryWrapper.java
index 52e2036..07ca212 100644
--- a/src/main/java/de/ids_mannheim/korap/query/wrap/SpanAttributeQueryWrapper.java
+++ b/src/main/java/de/ids_mannheim/korap/query/wrap/SpanAttributeQueryWrapper.java
@@ -24,7 +24,7 @@
     @Override
     public SpanQuery toQuery() throws QueryException {
 
-        SpanQuery sq = subquery.toQuery();
+        SpanQuery sq = subquery.retrieveNode(this.retrieveNode).toQuery();
         if (sq instanceof SpanTermQuery) {
             return new SpanAttributeQuery((SpanTermQuery) sq, isNegation, true);
         }
diff --git a/src/main/java/de/ids_mannheim/korap/query/wrap/SpanClassQueryWrapper.java b/src/main/java/de/ids_mannheim/korap/query/wrap/SpanClassQueryWrapper.java
index a10670a..96c9a3b 100644
--- a/src/main/java/de/ids_mannheim/korap/query/wrap/SpanClassQueryWrapper.java
+++ b/src/main/java/de/ids_mannheim/korap/query/wrap/SpanClassQueryWrapper.java
@@ -66,7 +66,7 @@
 		if (this.subquery.isNull())
             return (SpanQuery) null;
 
-        SpanQuery sq = (SpanQuery) this.subquery.toQuery();
+        SpanQuery sq = (SpanQuery) this.subquery.retrieveNode(this.retrieveNode).toQuery();
 
         if (sq == null) return (SpanQuery) null;
 	
diff --git a/src/main/java/de/ids_mannheim/korap/query/wrap/SpanElementQueryWrapper.java b/src/main/java/de/ids_mannheim/korap/query/wrap/SpanElementQueryWrapper.java
index 26853db..c12f1dd 100644
--- a/src/main/java/de/ids_mannheim/korap/query/wrap/SpanElementQueryWrapper.java
+++ b/src/main/java/de/ids_mannheim/korap/query/wrap/SpanElementQueryWrapper.java
@@ -6,6 +6,14 @@
 import de.ids_mannheim.korap.query.wrap.SpanQueryWrapper;
 import de.ids_mannheim.korap.util.QueryException;
 
+/*
+ * SpanElementQuery has to support two constructors:
+ * One respecting and adding node information to the payload,
+ * one ignoring node information.
+ * node aka depth in a tree information is only relevant for
+ * child relation queries.
+ */
+
 public class SpanElementQueryWrapper extends SpanQueryWrapper {
     String element;
     String field;
@@ -15,10 +23,15 @@
         this.element = element;
     };
 
+
+    @Override
     public SpanQuery toQuery () throws QueryException {
+        // Todo: Respect request for retrieving node data (i.e. depth information)
         return (SpanQuery) new SpanElementQuery(this.field, this.element);
     };
 
+
+    @Override
     public boolean isNull () {
         return false;
     };
diff --git a/src/main/java/de/ids_mannheim/korap/query/wrap/SpanMatchModifyQueryWrapper.java b/src/main/java/de/ids_mannheim/korap/query/wrap/SpanMatchModifyQueryWrapper.java
index 4c57320..f9cafc9 100644
--- a/src/main/java/de/ids_mannheim/korap/query/wrap/SpanMatchModifyQueryWrapper.java
+++ b/src/main/java/de/ids_mannheim/korap/query/wrap/SpanMatchModifyQueryWrapper.java
@@ -45,9 +45,11 @@
     };
 
     public SpanQuery toQuery () throws QueryException {
-	if (this.subquery.isNull())
-	    return (SpanQuery) null;
-	return new SpanMatchModifyClassQuery(this.subquery.toQuery(), this.number);
+        if (this.subquery.isNull())
+            return (SpanQuery) null;
+        return new SpanMatchModifyClassQuery(
+            this.subquery.retrieveNode(this.retrieveNode).toQuery(), this.number
+        );
     };
 
     public boolean isOptional () {
diff --git a/src/main/java/de/ids_mannheim/korap/query/wrap/SpanQueryWrapper.java b/src/main/java/de/ids_mannheim/korap/query/wrap/SpanQueryWrapper.java
index 7ed43eb..5247ac4 100644
--- a/src/main/java/de/ids_mannheim/korap/query/wrap/SpanQueryWrapper.java
+++ b/src/main/java/de/ids_mannheim/korap/query/wrap/SpanQueryWrapper.java
@@ -34,7 +34,8 @@
         isEmpty    = false,
         isExtended = false,
         isExtendedToTheRight = false,
-        maybeUnsorted = false;
+        maybeUnsorted = false,
+        retrieveNode = false;
 
     /**
      * Serialize the wrapped query and return a SpanQuery.
@@ -283,6 +284,20 @@
 
 
     /**
+     * Make the query request node information in addition to
+     * span information.
+     *
+     * @param retrieve Boolean value saying the wrapper
+     *        has or has not to respect node information.
+     * @return The {@link SpanQueryWrapper} object for chaining.
+     */
+    public SpanQueryWrapper retrieveNode (boolean retrieve) {
+        this.retrieveNode = retrieve;
+        return this;
+    };
+
+
+    /**
      * Boolean value indicating that a wrapped query
      * has a class. This is especially relevant for classed
      * extension queries.
diff --git a/src/main/java/de/ids_mannheim/korap/query/wrap/SpanRepetitionQueryWrapper.java b/src/main/java/de/ids_mannheim/korap/query/wrap/SpanRepetitionQueryWrapper.java
index 3e829be..8785098 100644
--- a/src/main/java/de/ids_mannheim/korap/query/wrap/SpanRepetitionQueryWrapper.java
+++ b/src/main/java/de/ids_mannheim/korap/query/wrap/SpanRepetitionQueryWrapper.java
@@ -91,11 +91,11 @@
 
         // The query is not a repetition query at all, but may be optional
         if (this.min == 1 && this.max == 1)
-            return this.subquery.toQuery();
+            return this.subquery.retrieveNode(this.retrieveNode).toQuery();
 
         // That's a fine repetition query
         return new SpanRepetitionQuery(
-            this.subquery.toQuery(),
+            this.subquery.retrieveNode(this.retrieveNode).toQuery(),
             this.min,
             this.max,
             true
diff --git a/src/main/java/de/ids_mannheim/korap/query/wrap/SpanSequenceQueryWrapper.java b/src/main/java/de/ids_mannheim/korap/query/wrap/SpanSequenceQueryWrapper.java
index e3cc0d2..97cb24f 100644
--- a/src/main/java/de/ids_mannheim/korap/query/wrap/SpanSequenceQueryWrapper.java
+++ b/src/main/java/de/ids_mannheim/korap/query/wrap/SpanSequenceQueryWrapper.java
@@ -481,7 +481,7 @@
         try {
             this.constraints.add(
                 new DistanceConstraint(
-                    (SpanElementQuery) unit.toQuery(),
+                    (SpanElementQuery) unit.retrieveNode(this.retrieveNode).toQuery(),
                     min,
                     max,
                     isInOrder,
@@ -612,7 +612,7 @@
 
             // Unproblematic single query
             if (this.segments.get(0).maybeAnchor())
-                return (SpanQuery) this.segments.get(0).toQuery();
+                return (SpanQuery) this.segments.get(0).retrieveNode(this.retrieveNode).toQuery();
 
             if (this.segments.get(0).isEmpty())
                 throw new QueryException(
@@ -653,7 +653,7 @@
         SpanQuery query = null;// = this.segments.get(0).toQuery();
         int i = 0;
         while (query == null && i < this.segments.size()) {
-            query = this.segments.get(i).toQuery();
+            query = this.segments.get(i).retrieveNode(this.retrieveNode).toQuery();
             i++;
         };
 
@@ -664,7 +664,7 @@
         if (!this.hasConstraints() && this.isInOrder()) {
             for (; i < this.segments.size(); i++) {
 
-                SpanQuery second = this.segments.get(i).toQuery();
+                SpanQuery second = this.segments.get(i).retrieveNode(this.retrieveNode).toQuery();
                 if (second == null)
                     continue;
 
@@ -688,7 +688,7 @@
                     if (this.segments.get(i).isExtended())
                         throw new QueryException(613, limitationError);
 
-                    SpanQuery sq = (SpanQuery) this.segments.get(i).toQuery();
+                    SpanQuery sq = (SpanQuery) this.segments.get(i).retrieveNode(this.retrieveNode).toQuery();
                     if (sq == null) continue;
 
                     SpanDistanceQuery sdquery = new SpanDistanceQuery(
@@ -709,7 +709,7 @@
                     if (this.segments.get(i).isExtended())
                         throw new QueryException(613, limitationError);
 
-                    SpanQuery sq = (SpanQuery) this.segments.get(i).toQuery();
+                    SpanQuery sq = (SpanQuery) this.segments.get(i).retrieveNode(this.retrieveNode).toQuery();
                     if (sq == null) continue;
                     
                     SpanDistanceQuery sdquery = new SpanDistanceQuery(
@@ -732,7 +732,7 @@
             if (this.segments.get(i).isExtended())
                 throw new QueryException(613, limitationError);
 
-            SpanQuery sq = (SpanQuery) this.segments.get(i).toQuery();
+            SpanQuery sq = (SpanQuery) this.segments.get(i).retrieveNode(this.retrieveNode).toQuery();
             if (sq == null) continue;
 
             query = new SpanMultipleDistanceQuery(
@@ -889,7 +889,7 @@
                           problem.getClassNumber());
 
             query = new SpanExpansionQuery(
-                anchor.toQuery(),
+                anchor.retrieveNode(this.retrieveNode).toQuery(),
                 problem.getMin(),
                 problem.getMax(),
                 direction,
@@ -909,8 +909,8 @@
                           problem.getClassNumber());
 
             query = new SpanExpansionQuery(
-                anchor.toQuery(),
-                problem.toQuery(),
+                anchor.retrieveNode(this.retrieveNode).toQuery(),
+                problem.retrieveNode(this.retrieveNode).toQuery(),
                 problem.getMin(),
                 problem.getMax(),
                 direction,
@@ -935,10 +935,10 @@
 
         // [base=der][base=baum]
         if (mergeLeft)
-            ssqw.append(new SpanSimpleQueryWrapper(problem.toQuery()));
+            ssqw.append(new SpanSimpleQueryWrapper(problem.retrieveNode(this.retrieveNode).toQuery()));
         // [base=baum][base=der]
         else
-            ssqw.prepend(new SpanSimpleQueryWrapper(problem.toQuery()));
+            ssqw.prepend(new SpanSimpleQueryWrapper(problem.retrieveNode(this.retrieveNode).toQuery()));
 	
         saqw.or(ssqw);
 
diff --git a/src/main/java/de/ids_mannheim/korap/query/wrap/SpanSubspanQueryWrapper.java b/src/main/java/de/ids_mannheim/korap/query/wrap/SpanSubspanQueryWrapper.java
index c907f5a..1b3d160 100644
--- a/src/main/java/de/ids_mannheim/korap/query/wrap/SpanSubspanQueryWrapper.java
+++ b/src/main/java/de/ids_mannheim/korap/query/wrap/SpanSubspanQueryWrapper.java
@@ -108,7 +108,7 @@
 			return null;
 		}
 
-		SpanQuery sq = subquery.toQuery();
+		SpanQuery sq = subquery.retrieveNode(this.retrieveNode).toQuery();
 		if (sq == null)
 			return null;
 		if (sq instanceof SpanTermQuery) {
diff --git a/src/main/java/de/ids_mannheim/korap/query/wrap/SpanWithinQueryWrapper.java b/src/main/java/de/ids_mannheim/korap/query/wrap/SpanWithinQueryWrapper.java
index bb15807..a04b33a 100644
--- a/src/main/java/de/ids_mannheim/korap/query/wrap/SpanWithinQueryWrapper.java
+++ b/src/main/java/de/ids_mannheim/korap/query/wrap/SpanWithinQueryWrapper.java
@@ -93,7 +93,11 @@
 	
         // TODO: if (wrap.isNegative())
 
-        return new SpanWithinQuery(this.element.toQuery(), this.wrap.toQuery(), this.flag);
+        return new SpanWithinQuery(
+            this.element.retrieveNode(this.retrieveNode).toQuery(),
+            this.wrap.retrieveNode(this.retrieveNode).toQuery(),
+            this.flag
+        );
     };
 
 
diff --git a/src/main/resources/index.properties b/src/main/resources/index.properties
deleted file mode 100644
index 1c87567..0000000
--- a/src/main/resources/index.properties
+++ /dev/null
@@ -1,5 +0,0 @@
-lucene.version = ${project.version}
-lucene.name = ${project.name}
-lucene.index.commit.count = 134217000
-lucene.index.commit.log = log/korap.commit.log
-lucene.indexDir = /home/ndiewald/Repositories/korap/KorAP-modules/KorAP-lucene-index/sandbox/index-tanja
diff --git a/src/main/resources/server.properties.info b/src/main/resources/server.properties.info
index 2a392e8..f35a016 100644
--- a/src/main/resources/server.properties.info
+++ b/src/main/resources/server.properties.info
@@ -1,3 +1,6 @@
+lucene.version = ${project.version}
+lucene.name = ${project.name}
+
 # Lucene Backend properties
 lucene.properties   = true
 lucene.indexDir     = [PATH TO INDEX DIRECTORY]
@@ -9,3 +12,6 @@
 lucene.db.URL       = jdbc:mysql://[DB_IP]:[DB_PORT]/[DB_NAME]
 lucene.db.pwd       = [DB_PWD]
 lucene.db.user      = [DB_USER]
+
+lucene.index.commit.count = 134217000
+lucene.index.commit.log = log/korap.commit.log
diff --git a/src/test/java/de/ids_mannheim/korap/node/TestResource.java b/src/test/java/de/ids_mannheim/korap/node/TestResource.java
index da10c71..643ec6a 100644
--- a/src/test/java/de/ids_mannheim/korap/node/TestResource.java
+++ b/src/test/java/de/ids_mannheim/korap/node/TestResource.java
@@ -1,13 +1,9 @@
 package de.ids_mannheim.korap.node;
 
-/*
-  http://harryjoy.com/2012/09/08/simple-rest-client-in-java/
-*/
 import java.io.*;
 import java.util.ArrayList;
 import java.util.List;
 
-
 import javax.ws.rs.client.Client;
 import javax.ws.rs.client.ClientBuilder;
 import javax.ws.rs.client.WebTarget;
@@ -27,13 +23,18 @@
 import de.ids_mannheim.korap.response.KorapResponse;
 import static de.ids_mannheim.korap.util.KorapString.*;
 
+
+/**
+ * @author diewald
+ */
+// http://harryjoy.com/2012/09/08/simple-rest-client-in-java/
 public class TestResource {
 
     private HttpServer server;
     private WebTarget target;
 
     @Before
-    public void setUp() throws Exception {
+    public void setUp () throws Exception {
         // start the server
         server = KorapNode.startServer("milena", (String) null);
         // create the client
@@ -57,7 +58,7 @@
      * Test to see that the message "Gimme 5 minutes, please!" is sent in the response.
      */
     @Test
-    public void testPing() {
+    public void testPing () {
         String responseMsg = target.path("ping").request().get(String.class);
         assertEquals("Gimme 5 minutes, please!", responseMsg);
     };
@@ -75,7 +76,10 @@
                                       "02439"
             }) {
 
-            String json = StringfromFile(getClass().getResource("/wiki/" + i + ".json").getFile());
+            String json = StringfromFile(
+                getClass().getResource("/wiki/" + i + ".json").getFile()
+            );
+
             kresp = target.path("/index/" + i).
                 request("application/json").
                 put(Entity.json(json), KorapResponse.class);
