diff --git a/Changes b/Changes
index 646b434..3ee25bc 100644
--- a/Changes
+++ b/Changes
@@ -1,4 +1,4 @@
-0.50.1 2015-02-27
+0.50.1 2015-03-02
 	- [feature] Deserialization of arbitrary elements with attributes (margaretha)
 	- [cleanup] Extracted KrillMeta from Krill,
 	  renamed KorapQuery to KrillQuery,
@@ -19,7 +19,8 @@
 	  moved model/* to index,
 	  moved meta/SearchContext to response/SearchContext,
 	  krillified property files,
-	  added Errorcodes (diewald)
+	  added Errorcodes,
+	  removed KrillIndex#addDocFile (diewald)
         - [documentation] Improved documentation for API classes (diewald)
 
 0.50 2015-02-23
diff --git a/src/main/java/de/ids_mannheim/korap/KrillIndex.java b/src/main/java/de/ids_mannheim/korap/KrillIndex.java
index 0672362..032cf5b 100644
--- a/src/main/java/de/ids_mannheim/korap/KrillIndex.java
+++ b/src/main/java/de/ids_mannheim/korap/KrillIndex.java
@@ -1,12 +1,11 @@
 package de.ids_mannheim.korap;
 
-// Java classes
-import java.util.*;
-import java.util.zip.GZIPInputStream;
-import java.util.regex.Pattern;
-import java.io.*;
-import java.net.URL;
-import java.nio.ByteBuffer;
+// Krill classes
+import de.ids_mannheim.korap.*;
+import de.ids_mannheim.korap.index.*;
+import de.ids_mannheim.korap.response.*;
+import de.ids_mannheim.korap.query.SpanElementQuery;
+import de.ids_mannheim.korap.util.QueryException;
 
 // Lucene classes
 import org.apache.lucene.search.*;
@@ -26,52 +25,72 @@
 import com.fasterxml.jackson.annotation.*;
 import com.fasterxml.jackson.databind.ObjectMapper;
 
-// Krill classes
-import de.ids_mannheim.korap.*;
-import de.ids_mannheim.korap.index.*;
-import de.ids_mannheim.korap.response.*;
-import de.ids_mannheim.korap.query.SpanElementQuery;
-import de.ids_mannheim.korap.util.QueryException;
-
 // Log4j Logger classes
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+// Java core classes
+import java.util.*;
+import java.util.zip.GZIPInputStream;
+import java.util.regex.Pattern;
+import java.io.*;
+import java.net.URL;
+import java.nio.ByteBuffer;
+
 /**
- * KrillIndex implements a simple API for searching in and writing to a
+ * <p>KrillIndex implements a simple API for searching in and writing to a
  * Lucene index and requesting several information about the index' nature.
- * Please consult {@link Krill} for the preferred use of this class.
- * <br />
+ * Please consult {@link Krill} for the preferred use of this class.</p>
  *
  * <blockquote><pre>
+ *   // Create new file backed index
  *   KrillIndex ki = new KrillIndex(
  *       new MMapDirectory(new File("/myindex"))
  *   );
- *   Result result = new Krill(koralQueryString).apply(ki);
+ *
+ *   // Add documents to the index
+ *   ki.addDoc(1, "{\"ID\":\"WPD-001\", ... }");
+ *   ki.addDoc(2, "{\"ID\":\"WPD-002\", ... }");
+ *
+ *   // Apply Krill searches on the index
+ *   String koral = "{\"@type\":"koral:group", ... }";
+ *   Result result = new Krill(koral).apply(ki);
  * </pre></blockquote>
  *
- * Properties can be stored in a properies file called <tt>krill.properties</tt>.
- * Relevant properties are <tt>krill.version</tt> and
- * <tt>krill.name</tt>.
+ * <p>Properties can be stored in a properies file called
+ * <tt>krill.properties</tt>. Relevant properties are
+ * <tt>krill.version</tt> and <tt>krill.name</tt>.</p>
  *
  * @author diewald
  */
 /*
-  NOTE: Search could run in parallel on atomic readers (although Lucene developers
-        strongly discourage that). Benefits are not clear and testing is harder,
-        so let's stick to serial processing for now.
+ * Concerning parallel processing:
+ * ===============================
+ * Search /could/ be run in parallel on atomic readers
+ * (although Lucene developers strongly discourage that).
+ * Benefits are not clear and would need some benchmarks,
+ * the huge drawback would be more complicated testing.
+ * Aside from (probably) co-occurrence analysis, shared memory
+ * is not an important thing, so I guess the preferred
+ * way of using Krill on multicore machines for now is by using
+ * the same mechanism as for distribution:
+ * Running multiple nodes (and separated indices) per machine,
+ * registered independently at the Zookeeper.
+ *
+ * On the other hand: Threaded indexing should be implemented!
+ */
+/*
+  TODO: Use FieldCache!!!
   TODO: Add word count as a meta data field!
   TODO: Improve validation of document import!
   TODO: Don't store the text in the token field!
         (It has only to be lifted for match views!
         Benchmark how worse that is!)
   TODO: Support layer for specific foundries in terminfo (IMPORTANT)
-  TODO: Use FieldCache!
   TODO: Reuse the indexreader everywhere - it should be threadsafe!
   TODO: Support document removal!
   TODO: Support document update!
   TODO: Support callback for interrupts (to stop the searching)!
-  TODO: Support multiple indices (Probably).
 
   http://invertedindex.blogspot.co.il/2009/04/lucene-dociduid-mapping-and-payload.html
   see korap/search.java -> retrieveTokens
@@ -368,6 +387,9 @@
      *         object, that was passed to the method.
      */
     public FieldDocument addDoc (FieldDocument doc) {
+        if (doc == null)
+            return doc;
+
         try {
 
             // Add document to writer
@@ -394,30 +416,101 @@
      * @return The created {@link FieldDocument}.
      * @throws IOException
      */
-    public FieldDocument addDoc (String json) throws IOException {
-        FieldDocument fd = this.mapper.readValue(json, FieldDocument.class);
-        return this.addDoc(fd);
+    public FieldDocument addDoc (String json) {
+        return this.addDoc(_fromJson(json));
     };
 
 
-
-    // To document:
-
-
-
-    // Add document to index as JSON file
-    public FieldDocument addDocFile(String json) {
-        return this.addDocFile(json, false);
+    /**
+     * Add a document to the index as a JSON string
+     * with a unique integer ID (unique throughout the index
+     * or even throughout the cluster of indices).
+     *
+     * @param uid The unique document identifier.
+     * @param json The document to add to the index as a string.
+     * @return The created {@link FieldDocument}.
+     * @throws IOException
+     */
+    public FieldDocument addDoc (Integer uid, String json) {
+        FieldDocument fd = _fromJson(json);
+        if (fd != null) {
+            fd.setUID(uid);
+            fd = this.addDoc(fd);
+        };
+        return fd;
     };
 
 
-    public FieldDocument addDocfromFile (String json, boolean gzip) {
+    /**
+     * Add a document to the index as a JSON string.
+     *
+     * @param json The document to add to the index as
+     *        an {@link InputStream}.
+     * @return The created {@link FieldDocument}.
+     * @throws IOException
+     */
+    public FieldDocument addDoc (InputStream json) {
+        return this.addDoc(_fromFile(json, false));
+    };
+
+
+    /**
+     * Add a document to the index as a JSON string.
+     *
+     * @param json The document to add to the index as
+     *        an {@link InputStream}.
+     * @param gzip Boolean value indicating if the file is gzipped.
+     * @return The created {@link FieldDocument}.
+     * @throws IOException
+     */
+    public FieldDocument addDoc (InputStream json, boolean gzip) {
+        return this.addDoc(_fromFile(json, gzip));
+    };
+
+
+    /**
+     * Add a document to the index as a JSON string
+     * with a unique integer ID (unique throughout the index
+     * or even throughout the cluster of indices).
+     *
+     * @param uid The unique document identifier.
+     * @param json The document to add to the index as
+     *        an {@link InputStream}.
+     * @param gzip Boolean value indicating if the file is gzipped.
+     * @return The created {@link FieldDocument}.
+     * @throws IOException
+     */
+    public FieldDocument addDoc (Integer uid, InputStream json, boolean gzip) {
+        FieldDocument fd = _fromFile(json, gzip);
+        if (fd != null) {
+            fd.setUID(uid);
+            return this.addDoc(fd);
+        };
+        return fd;
+    };
+
+
+    // Parse JSON document from Input stream
+    private FieldDocument _fromJson (String json) {
+        try {
+            FieldDocument fd = this.mapper.readValue(json, FieldDocument.class);
+            return fd;
+        }
+        catch (IOException e) {
+            log.error("File json not found");
+        };
+        return (FieldDocument) null;
+    };
+
+
+    // Load json document from file
+    private FieldDocument _fromFile (InputStream json, boolean gzip) {
         try {
             if (gzip) {
 
                 // Create json field document
                 FieldDocument fd = this.mapper.readValue(
-                    new GZIPInputStream(new FileInputStream(json)),
+                    new GZIPInputStream(json),
                     FieldDocument.class
                 );
                 return fd;
@@ -432,35 +525,10 @@
         return (FieldDocument) null;
     };
 
-    
-    // Add document to index as JSON file (possibly gzipped)
-    public FieldDocument addDocFile(String json, boolean gzip) {
-        return this.addDoc(this.addDocfromFile(json, gzip));
-    };
-
-
-    /**
-     * Add a document to the index as a JSON string
-     * with a unique integer ID (unique throughout the index
-     * or even throughout the cluster of indices).
-     *
-     * @param uid The unique document identifier.
-     * @param json The document to add to the index as a string.
-     * @return The created {@link FieldDocument}.
-     * @throws IOException
-     */
 
 
 
-    // Add document to index as JSON file (possibly gzipped)
-    public FieldDocument addDocFile(int uid, String json, boolean gzip) {
-        FieldDocument fd = this.addDocfromFile(json, gzip);
-        if (fd != null) {
-            fd.setUID(uid);
-            return this.addDoc(fd);
-        };
-        return fd;
-    };
+
 
 
 
@@ -729,13 +797,13 @@
     };
 
     public Match getMatchInfo (String id,
-                                    String field,
-                                    boolean info,
-                                    String foundry,
-                                    String layer,
-                                    boolean includeSpans,
-                                    boolean includeHighlights,
-                                    boolean extendToSentence) throws QueryException {
+                               String field,
+                               boolean info,
+                               String foundry,
+                               String layer,
+                               boolean includeSpans,
+                               boolean includeHighlights,
+                               boolean extendToSentence) throws QueryException {
     	ArrayList<String> foundryList = new ArrayList<>(1);
         if (foundry != null)
             foundryList.add(foundry);
@@ -763,13 +831,13 @@
       per position in the match.
     */
     public Match getMatchInfo (String idString,
-                                    String field,
-                                    boolean info,
-                                    List<String> foundry,
-                                    List<String> layer,
-                                    boolean includeSpans,
-                                    boolean includeHighlights,
-                                    boolean extendToSentence) throws QueryException {
+                               String field,
+                               boolean info,
+                               List<String> foundry,
+                               List<String> layer,
+                               boolean includeSpans,
+                               boolean includeHighlights,
+                               boolean extendToSentence) throws QueryException {
 
         Match match = new Match(idString, includeHighlights);
 
diff --git a/src/main/java/de/ids_mannheim/korap/index/Indexer.java b/src/main/java/de/ids_mannheim/korap/index/Indexer.java
index 7c7acfd..5af92e5 100644
--- a/src/main/java/de/ids_mannheim/korap/index/Indexer.java
+++ b/src/main/java/de/ids_mannheim/korap/index/Indexer.java
@@ -61,16 +61,21 @@
                 System.out.print("  Index " + found + " ... ");
 
                 // Add file to the index
-                if (this.index.addDocFile(found, true) == null) {
-                    System.out.println("fail.");
-                    continue;
-                };
-                System.out.println("done (" + count + ").");
-                this.count++;
+                try {
+                    if (this.index.addDoc(new FileInputStream(found), true) == null) {
+                        System.out.println("fail.");
+                        continue;
+                    };
+                    System.out.println("done (" + count + ").");
+                    this.count++;
 
-                // Commit in case the commit count is reached
-                if ((this.count % this.commitCount) == 0)
-                    this.commit();
+                    // Commit in case the commit count is reached
+                    if ((this.count % this.commitCount) == 0)
+                        this.commit();
+                }
+                catch (FileNotFoundException e) {
+                    System.out.println("not found!");
+                };
             };
         };
     };
diff --git a/src/main/java/de/ids_mannheim/korap/server/Resource.java b/src/main/java/de/ids_mannheim/korap/server/Resource.java
index 39e5437..2c47e63 100644
--- a/src/main/java/de/ids_mannheim/korap/server/Resource.java
+++ b/src/main/java/de/ids_mannheim/korap/server/Resource.java
@@ -148,19 +148,17 @@
         kresp.setVersion(index.getVersion());
         kresp.setName(index.getName());
 
-        String ID = "Unknown";
-        try {
-            FieldDocument fd = index.addDoc(json);
-            fd.setUID(uid);
-            ID = fd.getID();
-        }
-        // Set HTTP to ???
-        // TODO: This may be a field error!
-        catch (IOException e) {
+        FieldDocument fd = index.addDoc(uid, json);
+        if (fd == null) {
+            // Set HTTP to ???
+            // TODO: This may be a field error!
             kresp.addError(602, "Unable to add document to index");
             return kresp.toJsonString();
         };
 
+        String ID = "Unknown";
+        ID = fd.getID();
+
         // Set HTTP to 200
         kresp.addMessage(681, "Document was added successfully", ID);
 
diff --git a/src/test/java/de/ids_mannheim/korap/benchmark/TestBenchmarkSpans.java b/src/test/java/de/ids_mannheim/korap/benchmark/TestBenchmarkSpans.java
index e80be5f..3f9f91d 100644
--- a/src/test/java/de/ids_mannheim/korap/benchmark/TestBenchmarkSpans.java
+++ b/src/test/java/de/ids_mannheim/korap/benchmark/TestBenchmarkSpans.java
@@ -28,11 +28,11 @@
     @Test
     public void checkBenchmark1 () throws IOException {
         Properties prop = new Properties();
-        InputStream fr = new FileInputStream(getClass().getResource("/korap.conf").getFile());
+        InputStream fr = new FileInputStream(getClass().getResource("/krill.properties").getFile());
         prop.load(fr);
 
         // Get the real index
-        KrillIndex ki = new KrillIndex(new MMapDirectory(new File(prop.getProperty("lucene.indexDir"))));
+        KrillIndex ki = new KrillIndex(new MMapDirectory(new File(prop.getProperty("krill.indexDir"))));
 
         // Create a container for virtual collections:
         KrillCollection kc = new KrillCollection(ki);
@@ -79,11 +79,11 @@
     @Test
     public void checkBenchmark2JSON () throws IOException {
         Properties prop = new Properties();
-        InputStream fr = new FileInputStream(getClass().getResource("/korap.conf").getFile());
+        InputStream fr = new FileInputStream(getClass().getResource("/krill.properties").getFile());
         prop.load(fr);
 
         // Get the real index
-        KrillIndex ki = new KrillIndex(new MMapDirectory(new File(prop.getProperty("lucene.indexDir"))));
+        KrillIndex ki = new KrillIndex(new MMapDirectory(new File(prop.getProperty("krill.indexDir"))));
         
         // Create a container for virtual collections:
         KrillCollection kc = new KrillCollection(ki);
@@ -122,11 +122,11 @@
     @Test
     public void checkBenchmarkSentences () throws IOException {
         Properties prop = new Properties();
-        InputStream fr = new FileInputStream(getClass().getResource("/korap.conf").getFile());
+        InputStream fr = new FileInputStream(getClass().getResource("/krill.properties").getFile());
         prop.load(fr);
 
         // Get the real index
-        KrillIndex ki = new KrillIndex(new MMapDirectory(new File(prop.getProperty("lucene.indexDir"))));
+        KrillIndex ki = new KrillIndex(new MMapDirectory(new File(prop.getProperty("krill.indexDir"))));
 
         // Create a container for virtual collections:
         KrillCollection kc = new KrillCollection(ki);
@@ -164,11 +164,11 @@
         // [orth=Der]{1:[orth=Mann]{2:[orth=und]}}
 
         Properties prop = new Properties();
-        InputStream fr = new FileInputStream(getClass().getResource("/korap.conf").getFile());
+        InputStream fr = new FileInputStream(getClass().getResource("/krill.properties").getFile());
         prop.load(fr);
 
         // Get the real index
-        KrillIndex ki = new KrillIndex(new MMapDirectory(new File(prop.getProperty("lucene.indexDir"))));
+        KrillIndex ki = new KrillIndex(new MMapDirectory(new File(prop.getProperty("krill.indexDir"))));
 
         // Create a container for virtual collections:
         KrillCollection kc = new KrillCollection(ki);
@@ -284,8 +284,8 @@
             
             // Indexing test files
             for (String d : docs) {
-                FieldDocument fd = ki.addDocFile(
-                    getClass().getResource("/wiki/" + d + ".json.gz").getFile(),
+                FieldDocument fd = ki.addDoc(
+                    getClass().getResourceAsStream("/wiki/" + d + ".json.gz"),
                     true
                 );
             };
@@ -311,11 +311,11 @@
     @Test
     public void checkBenchmark3 () throws IOException {
         Properties prop = new Properties();
-        InputStream fr = new FileInputStream(getClass().getResource("/korap.conf").getFile());
+        InputStream fr = new FileInputStream(getClass().getResource("/krill.properties").getFile());
         prop.load(fr);
 
         // Get the real index
-        KrillIndex ki = new KrillIndex(new MMapDirectory(new File(prop.getProperty("lucene.indexDir"))));
+        KrillIndex ki = new KrillIndex(new MMapDirectory(new File(prop.getProperty("krill.indexDir"))));
 
         // Create a container for virtual collections:
         KrillCollection kc = new KrillCollection(ki);
diff --git a/src/test/java/de/ids_mannheim/korap/collection/TestKrillCollectionLegacy.java b/src/test/java/de/ids_mannheim/korap/collection/TestKrillCollectionLegacy.java
index 5ff9891..4c2a83b 100644
--- a/src/test/java/de/ids_mannheim/korap/collection/TestKrillCollectionLegacy.java
+++ b/src/test/java/de/ids_mannheim/korap/collection/TestKrillCollectionLegacy.java
@@ -37,8 +37,8 @@
 				      "00005",
 				      "00006",
 				      "02439"}) {
-	    ki.addDocFile(
-	        getClass().getResource("/wiki/" + i + ".json.gz").getFile(), true
+	    ki.addDoc(
+	        getClass().getResourceAsStream("/wiki/" + i + ".json.gz"), true
             );
 	};
 	ki.commit();
@@ -112,8 +112,8 @@
 				      "00005",
 				      "00006",
 				      "02439"}) {
-	    ki.addDocFile(
-	      getClass().getResource("/wiki/" + i + ".json.gz").getFile(), true
+	    ki.addDoc(
+	      getClass().getResourceAsStream("/wiki/" + i + ".json.gz"), true
             );
 	    ki.commit();
 	};
@@ -188,13 +188,13 @@
 				      "00005",
 				      "00006",
 				      "02439"}) {
-	  ki.addDocFile(
-	      getClass().getResource("/wiki/" + i + ".json.gz").getFile(), true
+	  ki.addDoc(
+	      getClass().getResourceAsStream("/wiki/" + i + ".json.gz"), true
             );
 	};
 	ki.commit();
 
-	ki.addDocFile(getClass().getResource("/wiki/00012-fakemeta.json.gz").getFile(), true);
+	ki.addDoc(getClass().getResourceAsStream("/wiki/00012-fakemeta.json.gz"), true);
 
 	ki.commit();
 
@@ -239,9 +239,9 @@
 				      "00005",
 				      "00006",
 				      "02439"}) {
-	    FieldDocument fd = ki.addDocFile(
-		uid++,
-	        getClass().getResource("/wiki/" + i + ".json.gz").getFile(),
+	    FieldDocument fd = ki.addDoc(
+                                     uid++,
+	        getClass().getResourceAsStream("/wiki/" + i + ".json.gz"),
 		true
 	    );
 	};
diff --git a/src/test/java/de/ids_mannheim/korap/highlight/TestClass.java b/src/test/java/de/ids_mannheim/korap/highlight/TestClass.java
index 34481c4..003b129 100644
--- a/src/test/java/de/ids_mannheim/korap/highlight/TestClass.java
+++ b/src/test/java/de/ids_mannheim/korap/highlight/TestClass.java
@@ -38,10 +38,10 @@
 		//System.out.println(sq.toString());
 		
 		ki = new KrillIndex();
-	    ki.addDocFile(
-	    	getClass().getResource("/wiki/JJJ-00785.json.gz").getFile(),true);
-	    ki.addDocFile(
-		        getClass().getResource("/wiki/DDD-01402.json.gz").getFile(),true);
+	    ki.addDoc(
+	    	getClass().getResourceAsStream("/wiki/JJJ-00785.json.gz"),true);
+	    ki.addDoc(
+		        getClass().getResourceAsStream("/wiki/DDD-01402.json.gz"),true);
 		ki.commit();
 		kr = ki.search(sq, (short) 10);
 
@@ -72,8 +72,8 @@
 		
 
 		ki = new KrillIndex();
-	    ki.addDocFile(
-	    	getClass().getResource("/wiki/SSS-09803.json.gz").getFile(),true);
+	    ki.addDoc(
+	    	getClass().getResourceAsStream("/wiki/SSS-09803.json.gz"), true);
 	    
 	    ki.commit();
 		kr = ki.search(sq, (short) 10);
diff --git a/src/test/java/de/ids_mannheim/korap/highlight/TestHighlight.java b/src/test/java/de/ids_mannheim/korap/highlight/TestHighlight.java
index 6c4b633..bb5b236 100644
--- a/src/test/java/de/ids_mannheim/korap/highlight/TestHighlight.java
+++ b/src/test/java/de/ids_mannheim/korap/highlight/TestHighlight.java
@@ -273,8 +273,8 @@
         KrillIndex ki = new KrillIndex();
         // Indexing test files
         for (String i : new String[] {"00001", "00002"}) {
-            ki.addDocFile(
-                getClass().getResource("/wiki/" + i + ".json.gz").getFile(), true
+            ki.addDoc(
+                getClass().getResourceAsStream("/wiki/" + i + ".json.gz"), true
             );
         };
         ki.commit();
diff --git a/src/test/java/de/ids_mannheim/korap/index/TestElementDistanceIndex.java b/src/test/java/de/ids_mannheim/korap/index/TestElementDistanceIndex.java
index 4c31b16..8b52266 100644
--- a/src/test/java/de/ids_mannheim/korap/index/TestElementDistanceIndex.java
+++ b/src/test/java/de/ids_mannheim/korap/index/TestElementDistanceIndex.java
@@ -198,7 +198,7 @@
 	public void testCase5() throws Exception{
 		//System.out.println("testCase4");
 		ki = new KrillIndex();
-		ki.addDocFile(getClass().getResource("/wiki/00001.json.gz").getFile(),true);       
+		ki.addDoc(getClass().getResourceAsStream("/wiki/00001.json.gz"),true);       
         ki.commit();
         
         InputStream is = getClass().getResourceAsStream("/queries/cosmas1.json");        
diff --git a/src/test/java/de/ids_mannheim/korap/index/TestFieldDocument.java b/src/test/java/de/ids_mannheim/korap/index/TestFieldDocument.java
index d1c7a8c..38d53e4 100644
--- a/src/test/java/de/ids_mannheim/korap/index/TestFieldDocument.java
+++ b/src/test/java/de/ids_mannheim/korap/index/TestFieldDocument.java
@@ -168,8 +168,8 @@
 				      "00005",
 				      "00006",
 				      "02439"}) {
-	    FieldDocument fd = ki.addDocFile(
-	        getClass().getResource("/wiki/" + i + ".json.gz").getFile(), true
+	    FieldDocument fd = ki.addDoc(
+	        getClass().getResourceAsStream("/wiki/" + i + ".json.gz"), true
             );
 	};
 	ki.commit();
@@ -217,8 +217,8 @@
 				      "00005",
 				      "00006",
 				      "02439"}) {
-	    FieldDocument fd = ki.addDocFile(
-	        getClass().getResource("/wiki/" + i + ".json.gz").getFile(), true
+	    FieldDocument fd = ki.addDoc(
+	        getClass().getResourceAsStream("/wiki/" + i + ".json.gz"), true
             );
 	};
 	ki.commit();
diff --git a/src/test/java/de/ids_mannheim/korap/index/TestRepetitionIndex.java b/src/test/java/de/ids_mannheim/korap/index/TestRepetitionIndex.java
index fe0621d..087bd9f 100644
--- a/src/test/java/de/ids_mannheim/korap/index/TestRepetitionIndex.java
+++ b/src/test/java/de/ids_mannheim/korap/index/TestRepetitionIndex.java
@@ -211,8 +211,8 @@
 	@Test
 	public void testCase5() throws IOException {
 		ki = new KrillIndex();
-	    ki.addDocFile(
-	        getClass().getResource("/wiki/00001.json.gz").getFile(), true
+	    ki.addDoc(
+	        getClass().getResourceAsStream("/wiki/00001.json.gz"), true
         );
 		ki.commit();
 		
diff --git a/src/test/java/de/ids_mannheim/korap/index/TestSpanExpansionIndex.java b/src/test/java/de/ids_mannheim/korap/index/TestSpanExpansionIndex.java
index f612409..2731cf4 100644
--- a/src/test/java/de/ids_mannheim/korap/index/TestSpanExpansionIndex.java
+++ b/src/test/java/de/ids_mannheim/korap/index/TestSpanExpansionIndex.java
@@ -31,7 +31,7 @@
 
     public TestSpanExpansionIndex() throws IOException {
         ki = new KrillIndex();
-        ki.addDocFile(getClass().getResource("/wiki/00001.json.gz").getFile(),
+        ki.addDoc(getClass().getResourceAsStream("/wiki/00001.json.gz"),
                 true);
         ki.commit();
     }
@@ -283,9 +283,9 @@
     @Test
     public void testCase7() throws IOException, QueryException {
         KrillIndex ki = new KrillIndex();
-        ki.addDocFile(getClass().getResource("/wiki/00001.json.gz").getFile(),
+        ki.addDoc(getClass().getResourceAsStream("/wiki/00001.json.gz"),
                 true);
-        ki.addDocFile(getClass().getResource("/wiki/00002.json.gz").getFile(),
+        ki.addDoc(getClass().getResourceAsStream("/wiki/00002.json.gz"),
                 true);
         ki.commit();
 
diff --git a/src/test/java/de/ids_mannheim/korap/index/TestSubSpanIndex.java b/src/test/java/de/ids_mannheim/korap/index/TestSubSpanIndex.java
index 41607cd..b9b41cf 100644
--- a/src/test/java/de/ids_mannheim/korap/index/TestSubSpanIndex.java
+++ b/src/test/java/de/ids_mannheim/korap/index/TestSubSpanIndex.java
@@ -21,7 +21,7 @@
 
     public TestSubSpanIndex () throws IOException {
         ki = new KrillIndex();
-        ki.addDocFile(getClass().getResource("/wiki/00001.json.gz").getFile(),
+        ki.addDoc(getClass().getResourceAsStream("/wiki/00001.json.gz"),
                 true);
         ki.commit();
     }
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 6d35d59..e91be18 100644
--- a/src/test/java/de/ids_mannheim/korap/index/TestWithinIndex.java
+++ b/src/test/java/de/ids_mannheim/korap/index/TestWithinIndex.java
@@ -1096,12 +1096,12 @@
 		
         KrillIndex ki = new KrillIndex();
 
-        ki.addDocFile(
-            getClass().getResource("/wiki/DDD-08370.json.gz").getFile(),
+        ki.addDoc(
+            getClass().getResourceAsStream("/wiki/DDD-08370.json.gz"),
             true
         );
-        ki.addDocFile(
-            getClass().getResource("/wiki/PPP-02924.json.gz").getFile(),
+        ki.addDoc(
+            getClass().getResourceAsStream("/wiki/PPP-02924.json.gz"),
             true
         );
 
diff --git a/src/test/java/de/ids_mannheim/korap/search/TestKrill.java b/src/test/java/de/ids_mannheim/korap/search/TestKrill.java
index 5932ee3..33175d2 100644
--- a/src/test/java/de/ids_mannheim/korap/search/TestKrill.java
+++ b/src/test/java/de/ids_mannheim/korap/search/TestKrill.java
@@ -94,8 +94,8 @@
                                       "00005",
                                       "00006",
                                       "02439"}) {
-            ki.addDocFile(
-                getClass().getResource("/wiki/" + i + ".json.gz").getFile(),
+            ki.addDoc(
+                getClass().getResourceAsStream("/wiki/" + i + ".json.gz"),
                 true
             );
         };
@@ -145,8 +145,8 @@
                                       "00005",
                                       "00006",
                                       "02439"}) {
-            ki.addDocFile(
-                getClass().getResource("/wiki/" + i + ".json.gz").getFile(),
+            ki.addDoc(
+                getClass().getResourceAsStream("/wiki/" + i + ".json.gz"),
                 true
             );
         };
@@ -187,8 +187,8 @@
                                         "07452-deep"
                                       */
             }) {
-            ki.addDocFile(
-                getClass().getResource("/wiki/" + i + ".json.gz").getFile(),
+            ki.addDoc(
+                getClass().getResourceAsStream("/wiki/" + i + ".json.gz"),
                 true
             );
         };
@@ -240,8 +240,8 @@
                                       "00006",
                                       "02439"
             }) {
-            ki.addDocFile(
-                getClass().getResource("/wiki/" + i + ".json.gz").getFile(),
+            ki.addDoc(
+                      getClass().getResourceAsStream("/wiki/" + i + ".json.gz"),
                 true
             );
         };
@@ -264,8 +264,8 @@
                                       "00005",
                                       "00006",
                                       "02439"}) {
-            ki.addDocFile(
-                getClass().getResource("/wiki/" + i + ".json.gz").getFile(),
+            ki.addDoc(
+                getClass().getResourceAsStream("/wiki/" + i + ".json.gz"),
                 true
             );
         };
@@ -294,8 +294,8 @@
                                       "00005",
                                       "00006",
                                       "02439"}) {
-            ki.addDocFile(
-                getClass().getResource("/wiki/" + i + ".json.gz").getFile(),
+            ki.addDoc(
+                getClass().getResourceAsStream("/wiki/" + i + ".json.gz"),
                 true
             );
         };
@@ -324,8 +324,8 @@
                                       "00005",
                                       "00006",
                                       "02439"}) {
-            ki.addDocFile(
-                getClass().getResource("/wiki/" + i + ".json.gz").getFile(),
+            ki.addDoc(
+                getClass().getResourceAsStream("/wiki/" + i + ".json.gz"),
                 true
             );
         };
@@ -384,8 +384,8 @@
                                       "00005",
                                       "00006",
                                       "02439"}) {
-            ki.addDocFile(
-                getClass().getResource("/wiki/" + i + ".json.gz").getFile(),
+            ki.addDoc(
+                getClass().getResourceAsStream("/wiki/" + i + ".json.gz"),
                 true
             );
         };
@@ -431,8 +431,8 @@
                                       "00005",
                                       "00006",
                                       "02439"}) {
-            ki.addDocFile(
-                getClass().getResource("/wiki/" + i + ".json.gz").getFile(),
+            ki.addDoc(
+                getClass().getResourceAsStream("/wiki/" + i + ".json.gz"),
                 true
             );
         };
@@ -519,9 +519,9 @@
                                       "00005",
                                       "00006",
                                       "02439"}) {
-            ki.addDocFile(
+            ki.addDoc(
                 uid++,
-                getClass().getResource("/wiki/" + i + ".json.gz").getFile(),
+                getClass().getResourceAsStream("/wiki/" + i + ".json.gz"),
                 true
             );
         };
@@ -554,11 +554,10 @@
         // Construct index
         KrillIndex ki = new KrillIndex();
         // Indexing test files
-        FieldDocument fd = ki.addDocFile(
+        FieldDocument fd = ki.addDoc(
             1,
             getClass().
-            getResource("/goe/AGA-03828.json.gz").
-            getFile(),
+            getResourceAsStream("/goe/AGA-03828.json.gz"),
             true
         );
         ki.commit();
@@ -641,11 +640,10 @@
         // Construct index
         KrillIndex ki = new KrillIndex();
         // Indexing test files
-        FieldDocument fd = ki.addDocFile(
+        FieldDocument fd = ki.addDoc(
             1,
             getClass().
-            getResource("/bzk/D59-00089.json.gz").
-            getFile(),
+            getResourceAsStream("/bzk/D59-00089.json.gz"),
             true
         );
         ki.commit();
@@ -732,11 +730,10 @@
         // Construct index
         KrillIndex ki = new KrillIndex();
         // Indexing test files
-        FieldDocument fd = ki.addDocFile(
+        FieldDocument fd = ki.addDoc(
             1,
             getClass().
-            getResource("/bzk/D59-00089.json.gz").
-            getFile(),
+            getResourceAsStream("/bzk/D59-00089.json.gz"),
             true
 	    );
         ki.commit();
@@ -807,18 +804,16 @@
         // Construct index
         KrillIndex ki = new KrillIndex();
         // Indexing test files
-        ki.addDocFile(
+        ki.addDoc(
             1,
             getClass().
-            getResource("/bzk/D59-00089.json.gz").
-            getFile(),
+            getResourceAsStream("/bzk/D59-00089.json.gz"),
             true
         );
-        ki.addDocFile(
+        ki.addDoc(
             2,
             getClass().
-            getResource("/bzk/D59-00089.json.gz").
-            getFile(),
+            getResourceAsStream("/bzk/D59-00089.json.gz"),
             true
         );
 
@@ -852,18 +847,16 @@
         // Construct index
         KrillIndex ki = new KrillIndex();
         // Indexing test files
-        ki.addDocFile(
+        ki.addDoc(
             1,
             getClass().
-            getResource("/goe/AGA-03828.json.gz").
-            getFile(),
+            getResourceAsStream("/goe/AGA-03828.json.gz"),
             true
         );
-        ki.addDocFile(
+        ki.addDoc(
             2,
             getClass().
-            getResource("/bzk/D59-00089.json.gz").
-            getFile(),
+            getResourceAsStream("/bzk/D59-00089.json.gz"),
             true
         );
 
@@ -907,11 +900,10 @@
         assertEquals(ki.numberOf("documents"), 0);
 
         // Indexing test files
-        FieldDocument fd = ki.addDocFile(
+        FieldDocument fd = ki.addDoc(
             1,
             getClass().
-            getResource("/bzk/D59-00089.json.gz").
-            getFile(),
+            getResourceAsStream("/bzk/D59-00089.json.gz"),
             true
         );
         ki.commit();
@@ -995,10 +987,9 @@
                                       "00005",
                                       "00006",
                                       "02439"}) {
-            ki.addDocFile(
+            ki.addDoc(
                 getClass().
-                getResource("/wiki/" + i + ".json.gz").
-                getFile(),
+                getResourceAsStream("/wiki/" + i + ".json.gz"),
                 true
             );
         };
@@ -1088,10 +1079,9 @@
                                       "00005",
                                       "00006",
                                       "02439"}) {
-            ki.addDocFile(
+            ki.addDoc(
                 getClass().
-                getResource("/wiki/" + i + ".json.gz").
-                getFile(),
+                getResourceAsStream("/wiki/" + i + ".json.gz"),
                 true
             );
         };
@@ -1159,10 +1149,9 @@
                                       "00005",
                                       "00006",
                                       "02439"}) {
-            ki.addDocFile(
+            ki.addDoc(
                 getClass().
-                getResource("/wiki/" + i + ".json.gz").
-                getFile(),
+                getResourceAsStream("/wiki/" + i + ".json.gz"),
                 true
             );
         };
@@ -1191,10 +1180,9 @@
 		// Construct index
 		KrillIndex ki = new KrillIndex();
 		// Indexing test files
-		ki.addDocFile(
+		ki.addDoc(
             getClass().
-            getResource("/wiki/00002.json.gz").
-            getFile(),
+            getResourceAsStream("/wiki/00002.json.gz"),
             true
         );
 		ki.commit();
@@ -1236,10 +1224,9 @@
 		ki = new KrillIndex();
 		for (String i : new String[] {"00001",
                                       "00002"}) {
-		    ki.addDocFile(
+		    ki.addDoc(
                 getClass().
-                getResource("/wiki/" + i + ".json.gz").
-                getFile(),
+                getResourceAsStream("/wiki/" + i + ".json.gz"),
                 true
             );
 		};
@@ -1294,10 +1281,9 @@
                                       "00005",
                                       "00006",
                                       "02439"}) {
-            ki.addDocFile(
+            ki.addDoc(
                 getClass().
-                getResource("/wiki/" + i + ".json.gz").
-                getFile(),
+                getResourceAsStream("/wiki/" + i + ".json.gz"),
                 true
             );
         };
diff --git a/src/test/java/de/ids_mannheim/korap/search/TestMetaFields.java b/src/test/java/de/ids_mannheim/korap/search/TestMetaFields.java
index 93894cb..70480b7 100644
--- a/src/test/java/de/ids_mannheim/korap/search/TestMetaFields.java
+++ b/src/test/java/de/ids_mannheim/korap/search/TestMetaFields.java
@@ -37,8 +37,8 @@
         // Indexing test files
         for (String i : new String[] {"00001",
                                       "00002"}) {
-            ki.addDocFile(
-                getClass().getResource("/wiki/" + i + ".json.gz").getFile(), true
+            ki.addDoc(
+                getClass().getResourceAsStream("/wiki/" + i + ".json.gz"), true
             );
         };
         ki.commit();
