diff --git a/Changes b/Changes
index 68caaa5..23d6a7d 100644
--- a/Changes
+++ b/Changes
@@ -1,3 +1,6 @@
+0.58.6 2019-05-02
+	- [bugfix] Updated cache loading (fixed #55) (diewald, margaretha)
+
 0.58.5 2019-03-18
     - [bugfix] Fix bug where duplicate keys occured in
       field data output (diewald)
diff --git a/pom.xml b/pom.xml
index 26308bf..76a0896 100644
--- a/pom.xml
+++ b/pom.xml
@@ -35,7 +35,7 @@
 
 	<groupId>de.ids_mannheim.korap</groupId>
 	<artifactId>Krill</artifactId>
-	<version>0.58.5</version>
+	<version>0.58.6</version>
 	<packaging>jar</packaging>
 
 	<name>Krill</name>
@@ -286,7 +286,7 @@
 				<version>2.22.1</version>
 				<configuration>
           		    <useSystemClassLoader>false</useSystemClassLoader>
-          		    <argLine>-Xms512m</argLine>
+          		    <argLine>-Xmx512m</argLine>
 					<excludes>
 						<exclude>**/benchmark/*</exclude>
 						<exclude>**/TestWPDIndex.java</exclude>
diff --git a/src/main/java/de/ids_mannheim/korap/KrillCollection.java b/src/main/java/de/ids_mannheim/korap/KrillCollection.java
index 3d8a3a6..11469e6 100644
--- a/src/main/java/de/ids_mannheim/korap/KrillCollection.java
+++ b/src/main/java/de/ids_mannheim/korap/KrillCollection.java
@@ -80,14 +80,16 @@
     // This advices the java compiler to ignore all loggings
     public static final boolean DEBUG = false;
 
-    public final static CacheManager cacheManager = CacheManager.newInstance();
-    public static Cache cache = cacheManager.getCache("named_vc");
+    public static CacheManager cacheManager;
+    public static Cache cache;
 
     /**
      * Construct a new KrillCollection.
      * 
      */
-    public KrillCollection () {};
+    public KrillCollection () {
+        initializeCache();
+    };
 
 
     /**
@@ -97,6 +99,7 @@
      *            The {@link KrillIndex} object.
      */
     public KrillCollection (KrillIndex index) {
+        initializeCache();
         this.index = index;
     };
 
@@ -107,7 +110,7 @@
      *            The KoralQuery document as a JSON string.
      */
     public KrillCollection (String jsonString) {
-
+        initializeCache();
         try {
             JsonNode json = mapper.readTree(jsonString);
 
@@ -142,7 +145,16 @@
         };
     };
 
-
+    public static void initializeCache () {
+        if (cacheManager == null) {
+            cacheManager = CacheManager.newInstance();
+        }
+        if (cache == null) {
+            cache = cacheManager.getCache("named_vc");
+        }
+    }
+    
+    
     /**
      * Set the {@link KrillIndex} the virtual collection refers to.
      * 
diff --git a/src/main/java/de/ids_mannheim/korap/collection/CollectionBuilder.java b/src/main/java/de/ids_mannheim/korap/collection/CollectionBuilder.java
index 07a1598..9f6dbe7 100644
--- a/src/main/java/de/ids_mannheim/korap/collection/CollectionBuilder.java
+++ b/src/main/java/de/ids_mannheim/korap/collection/CollectionBuilder.java
@@ -286,8 +286,10 @@
         };
 
         public Filter toFilter () throws QueryException {
-			Element element = KrillCollection.cache.get(this.reference);
-			
+            Element element = null;
+            if (KrillCollection.cache != null){
+                element = KrillCollection.cache.get(this.reference);
+            }
             if (element == null) {
                 if (DEBUG) {
                     log.debug(reference + " is NOT found in the cache");
diff --git a/src/main/java/de/ids_mannheim/korap/collection/ToCacheVCFilter.java b/src/main/java/de/ids_mannheim/korap/collection/ToCacheVCFilter.java
index 4e638ee..072e1dc 100644
--- a/src/main/java/de/ids_mannheim/korap/collection/ToCacheVCFilter.java
+++ b/src/main/java/de/ids_mannheim/korap/collection/ToCacheVCFilter.java
@@ -73,6 +73,9 @@
             CachedVCData cachedVCData =
                     new CachedVCData(new HashMap<>(docIdMap));
 
+            if (KrillCollection.cache == null){
+                KrillCollection.initializeCache();
+            }
             KrillCollection.cache.remove(cacheKey);
             KrillCollection.cache.put(new Element(cacheKey, cachedVCData));
         }
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 005ac2e..3759329 100644
--- a/src/main/java/de/ids_mannheim/korap/index/Indexer.java
+++ b/src/main/java/de/ids_mannheim/korap/index/Indexer.java
@@ -157,6 +157,7 @@
     }
 
     private void closeIndex() throws IOException{
+        this.commit();
         index.close();
     }
 
@@ -238,7 +239,9 @@
             if (f.isDirectory())
                 indexer.parse(f);
         }
+        
         indexer.closeIndex();
+        
         // Final commit
         log.info("Finished indexing.");
         // Finish indexing
