diff --git a/core/org.eclipse.smila.solr/code/src/org/eclipse/smila/solr/administration/FieldInfoCache.java b/core/org.eclipse.smila.solr/code/src/org/eclipse/smila/solr/administration/FieldInfoCache.java
index b2b270c..e4a5ef2 100755
--- a/core/org.eclipse.smila.solr/code/src/org/eclipse/smila/solr/administration/FieldInfoCache.java
+++ b/core/org.eclipse.smila.solr/code/src/org/eclipse/smila/solr/administration/FieldInfoCache.java
@@ -8,6 +8,7 @@
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
 
 import org.apache.commons.httpclient.HttpException;
 import org.apache.solr.common.params.CommonParams;
@@ -25,33 +26,39 @@
 
   public static final String PARAM_INCLUDE_DYNAMIC = "includeDynamic";
 
-  final static Map<String, Map<String, FieldInfo>> _fieldInfo = new HashMap<String, Map<String, FieldInfo>>();
+  final static Map<String, Map<String, FieldInfo>> _fieldInfoMap =
+    new ConcurrentHashMap<String, Map<String, FieldInfo>>();
 
-  public static Map<String, FieldInfo> getFieldInfo(final String index) {
-    Map<String, FieldInfo> fieldInfo = _fieldInfo.get(index);
-    if (fieldInfo == null) {
-      fieldInfo = new HashMap<String, FieldInfo>();
-      _fieldInfo.put(index, fieldInfo);
-    }
-    return fieldInfo;
-  }
-
-  public static FieldInfo getFieldInfo(final String index, final String fieldName)
-    throws HttpException, InterruptedException, IOException {
-    FieldInfo fieldInfo = getFieldInfo(index).get(fieldName);
-    if (fieldInfo == null) {
+  public static FieldInfo getFieldInfo(final String index, final String fieldName) throws HttpException,
+    InterruptedException, IOException {
+    FieldInfo fieldInfo;
+    final Map<String, FieldInfo> fieldInfos = getFieldInfos(index);
+    if (fieldInfos.containsKey(fieldName)) {
+      fieldInfo = fieldInfos.get(fieldName);
+    } else {
       fieldInfo = getFromSchema(index, fieldName);
       if (fieldInfo != null) {
-        getFieldInfo(index).put(fieldName, fieldInfo);
+        fieldInfos.put(fieldName, fieldInfo);
       }
     }
     return fieldInfo;
   }
 
-  private static FieldInfo getFromSchema(final String index, final String fieldName)
-    throws InterruptedException, HttpException, IOException {
+  private static Map<String, FieldInfo> getFieldInfos(final String index) {
+    Map<String, FieldInfo> fieldInfos;
+    if (_fieldInfoMap.containsKey(index)) {
+      fieldInfos = _fieldInfoMap.get(index);
+    } else {
+      fieldInfos = new ConcurrentHashMap<String, FieldInfo>();
+      _fieldInfoMap.put(index, fieldInfos);
+    }
+    return fieldInfos;
+  }
+
+  private static FieldInfo getFromSchema(final String index, final String fieldName) throws InterruptedException,
+    HttpException, IOException {
     final SolrOperationService service = ServiceUtils.getService(SolrOperationService.class);
-    // add parameter
+    // add Parameter
     final Map<String, String[]> params = new HashMap<String, String[]>();
     params.put(CommonParams.FL, new String[] { fieldName });
     params.put(PARAM_INCLUDE_DYNAMIC, new String[] { Boolean.toString(true) });
@@ -66,5 +73,4 @@
     }
     return null;
   }
-
 }
