diff --git a/oaipmh-core/pom.xml b/oaipmh-core/pom.xml
index dbdacba73f397173396d848f9bebbbed1fed3251..43fbd8609e40b9cea832e8d768fea531e58b8f75 100644
--- a/oaipmh-core/pom.xml
+++ b/oaipmh-core/pom.xml
@@ -91,6 +91,11 @@
 			<artifactId>package-info-maven-plugin</artifactId>
 			<version>1.4.5</version>
 		</dependency>
+<dependency>
+    <groupId>com.google.code.gson</groupId>
+    <artifactId>gson</artifactId>
+    <version>2.8.5</version>
+</dependency>
 	</dependencies>
 	<build>
 		<pluginManagement>
diff --git a/oaipmh-core/src/main/java/info/textgrid/middleware/DublinCoreFieldLoader.java b/oaipmh-core/src/main/java/info/textgrid/middleware/DublinCoreFieldLoader.java
index 4589b4f74fed07df70979e8430f3ddbf55bbf7ef..c14a85c6b1f1f04967cca844a9f221ba954278a0 100644
--- a/oaipmh-core/src/main/java/info/textgrid/middleware/DublinCoreFieldLoader.java
+++ b/oaipmh-core/src/main/java/info/textgrid/middleware/DublinCoreFieldLoader.java
@@ -3,6 +3,8 @@ package info.textgrid.middleware;
 import java.text.ParseException;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
+
 import javax.xml.datatype.DatatypeConfigurationException;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
@@ -54,17 +56,7 @@ public class DublinCoreFieldLoader {
    */
   public static List<String> setContributor(GetResponse responseWorkValues, String[] fields) {
 
-    List<String> contributors = new ArrayList<String>();
-
-    if (responseWorkValues.isExists()) {
-      for (String field : fields) {
-        if (responseWorkValues.getField(field) != null) {
-          contributors.add(responseWorkValues.getField(field).getValue().toString());
-        }
-      }
-    }
-
-    return contributors;
+	  return fillList(responseWorkValues, fields);
   }
 
 
@@ -75,17 +67,9 @@ public class DublinCoreFieldLoader {
    */
   public static List<String> setCreator(GetResponse responseWorkValues, String[] fields) {
 
-    List<String> creators = new ArrayList<String>();
+	  return fillList(responseWorkValues, fields);
 
-    if (responseWorkValues.isExists()) {
-      for (String field : fields) {
-        if (responseWorkValues.getField(field) != null) {
-          creators.add(responseWorkValues.getField(field).getValue().toString());
-        }
-      }
-    }
 
-    return creators;
   }
 
   /**
@@ -113,18 +97,7 @@ public class DublinCoreFieldLoader {
    * @return all elements mapped from TetxGrid metadata scheme to Dublin Core
    */
   public static List<String> setCoverage(GetResponse responseWorkValues, String[] fields) {
-
-    List<String> coverages = new ArrayList<String>();
-
-    if (responseWorkValues.isExists()) {
-      for (String field : fields) {
-        if (responseWorkValues.getField(field) != null) {
-          coverages.add(responseWorkValues.getField(field).getValue().toString());
-        }
-      }
-    }
-
-    return coverages;
+	  return fillList(responseWorkValues, fields);
   }
 
   /**
@@ -152,35 +125,8 @@ public class DublinCoreFieldLoader {
    * @return all elements mapped from TetxGrid metadata scheme to Dublin Core
    */
   public static List<String> setDate(GetResponse responseWorkValues, String[] fields) {
-
-    List<String> dates = new ArrayList<String>();
-
-    if (responseWorkValues.isExists()) {
-      for (String field : fields) {
-        try {
-          // FIXME DO SET VALUES VIA CONFIG FILE!
-          if (responseWorkValues.getField(field) != null) {
-            dates.add(OAIPMHUtillities
-                .convertDateFormat(responseWorkValues.getField(field).getValue().toString())
-                .toXMLFormat());
-          }
-        } catch (ParseException e) {
-          // FIXME DO NOT USE INVALID DATE HERE!
-          dates.add(responseWorkValues.getField(field).getValue().toString());
-          log.debug(e);
-          log.debug("Tried to parse date value: "
-              + responseWorkValues.getField(field).getValue().toString());
-        } catch (DatatypeConfigurationException e) {
-          // FIXME DO NOT USE INVALID DATE HERE!
-          dates.add(responseWorkValues.getField(field).getValue().toString());
-          log.debug("Tried to configure date value: "
-              + responseWorkValues.getField(field).getValue().toString());
-          log.debug(e);
-        }
-      }
-    }
-
-    return dates;
+	  //TODO: transform to OAI-PMH certificated time stamp
+	  return fillList(responseWorkValues, fields);
   }
 
   /**
@@ -218,17 +164,7 @@ public class DublinCoreFieldLoader {
    */
   public static List<String> setDescription(GetResponse responseWorkValues, String[] fields) {
 
-    List<String> descriptions = new ArrayList<String>();
-
-    if (responseWorkValues.isExists()) {
-      for (String field : fields) {
-        if (responseWorkValues.getField(field) != null) {
-          descriptions.add(responseWorkValues.getField(field).getValue().toString());
-        }
-      }
-    }
-
-    return descriptions;
+	  return fillList(responseWorkValues, fields);
   }
 
   /**
@@ -276,17 +212,7 @@ public class DublinCoreFieldLoader {
    */
   public static List<String> setFormat(GetResponse responseWorkValues, String[] fields) {
 
-    List<String> formats = new ArrayList<String>();
-
-    if (responseWorkValues.isExists()) {
-      for (String field : fields) {
-        if (responseWorkValues.getField(field) != null) {
-          formats.add(responseWorkValues.getField(field).getValue().toString());
-        }
-      }
-    }
-
-    return formats;
+	  return fillList(responseWorkValues, fields);
   }
 
   /**
@@ -323,21 +249,7 @@ public class DublinCoreFieldLoader {
    */
   public static List<String> setIdentifier(GetResponse responseWorkValues, String[] fields) {
 
-    List<String> identifiers = new ArrayList<String>();
-
-    if (responseWorkValues.isExists()) {
-      for (String field : fields) {
-
-        if (responseWorkValues.getField(field) != null) {
-          List<Object> entireIdentifier = responseWorkValues.getField(field).getValues();
-          for (int i = 0; i < responseWorkValues.getField(field).getValues().size(); i++) {
-            identifiers.add(entireIdentifier.get(i).toString());
-          }
-        }
-      }
-    }
-
-    return identifiers;
+	  return fillList(responseWorkValues, fields);
   }
 
   /**
@@ -365,17 +277,7 @@ public class DublinCoreFieldLoader {
    */
   public static List<String> setLanguage(GetResponse responseWorkValues, String[] fields) {
 
-    List<String> languages = new ArrayList<String>();
-
-    if (responseWorkValues.isExists()) {
-      for (String field : fields) {
-        if (responseWorkValues.getField(field) != null) {
-          languages.add(responseWorkValues.getField(field).getValue().toString());
-        }
-      }
-    }
-
-    return languages;
+	  return fillList(responseWorkValues, fields);
   }
 
   /**
@@ -403,17 +305,7 @@ public class DublinCoreFieldLoader {
    */
   public static List<String> setPublisher(GetResponse responseWorkValues, String[] fields) {
 
-    List<String> publishers = new ArrayList<String>();
-
-    if (responseWorkValues.isExists()) {
-      for (String field : fields) {
-        if (responseWorkValues.getField(field) != null) {
-          publishers.add(responseWorkValues.getField(field).getValue().toString());
-        }
-      }
-    }
-
-    return publishers;
+	  return fillList(responseWorkValues, fields);
   }
 
   /**
@@ -443,17 +335,7 @@ public class DublinCoreFieldLoader {
    */
   public static List<String> setRelation(GetResponse responseWorkValues, String[] fields) {
 
-    List<String> relations = new ArrayList<String>();
-
-    if (responseWorkValues.isExists()) {
-      for (String field : fields) {
-        if (responseWorkValues.getField(field) != null) {
-          relations.add(responseWorkValues.getField(field).getValue().toString());
-        }
-      }
-    }
-
-    return relations;
+	  return fillList(responseWorkValues, fields);
   }
 
   /**
@@ -463,17 +345,11 @@ public class DublinCoreFieldLoader {
    */
   public static List<String> setRelationForWork(GetResponse responseWorkValues, String[] fields) {
 
-    List<String> relations = new ArrayList<String>();
-
-    if (responseWorkValues.isExists()) {
-      for (String field : fields) {
-        if (responseWorkValues.getField(field) != null) {
-          relations.add(responseWorkValues.getField(field).getValue().toString());
-        }
-      }
-    }
-
-    return relations;
+	  for(String field : fields) {
+		  System.out.println(field);
+	  }
+	  
+	  return fillList(responseWorkValues, fields);
   }
 
   /**
@@ -501,17 +377,7 @@ public class DublinCoreFieldLoader {
    */
   public static List<String> setRights(GetResponse responseWorkValues, String[] fields) {
 
-    List<String> rights = new ArrayList<String>();
-
-    if (responseWorkValues.isExists()) {
-      for (String field : fields) {
-        if (responseWorkValues.getField(field) != null) {
-          rights.add(responseWorkValues.getField(field).getValue().toString());
-        }
-      }
-    }
-
-    return rights;
+	  return fillList(responseWorkValues, fields);
   }
 
   /**
@@ -539,17 +405,7 @@ public class DublinCoreFieldLoader {
    */
   public static List<String> setSources(GetResponse responseWorkValues, String[] fields) {
 
-    List<String> sources = new ArrayList<String>();
-
-    if (responseWorkValues.isExists()) {
-      for (String field : fields) {
-        if (responseWorkValues.getField(field) != null) {
-          sources.add(responseWorkValues.getField(field).getValue().toString());
-        }
-      }
-    }
-
-    return sources;
+	  return fillList(responseWorkValues, fields);
   }
 
   /**
@@ -559,15 +415,7 @@ public class DublinCoreFieldLoader {
    */
   public static List<String> setSubject(GetResponse responseWorkValues, String[] fields) {
 
-    List<String> subjects = new ArrayList<String>();
-
-    for (String field : fields) {
-      if (responseWorkValues.getField(field) != null) {
-        subjects.add(responseWorkValues.getField(field).getValue().toString());
-      }
-    }
-
-    return subjects;
+	  return fillList(responseWorkValues, fields);
   }
 
   /**
@@ -615,20 +463,7 @@ public class DublinCoreFieldLoader {
    */
   public static List<String> setTitle(GetResponse responseWorkValues, String[] fields) {
 
-    List<String> titles = new ArrayList<String>();
-
-    if (responseWorkValues.isExists()) {
-      for (String field : fields) {
-        String entireTitles = responseWorkValues.getSourceAsMap().get(field).toString();
-        if (responseWorkValues.getSourceAsMap().get(field) != null) {
-          //for (int i = 0; i < responseWorkValues.getField(field).getValues().size(); i++) {
-            titles.add(entireTitles);
-          //}
-        }
-      }
-    }
-
-    return titles;
+	  return fillList(responseWorkValues, fields);
   }
 
   /**
@@ -638,25 +473,11 @@ public class DublinCoreFieldLoader {
    */
   public static List<String> setType(GetResponse responseWorkValues, String[] fields) {
 
-    List<String> types = new ArrayList<String>();
-    System.out.println(responseWorkValues.getSourceAsMap().get("work"));
-    if (responseWorkValues.isExists()) {
+    //List<String> types = new ArrayList<String>();    
 
-      if (fields != null) {
+    return fillList(responseWorkValues, fields);
+  } 
   
-        for (String field : fields) {
-        	System.out.println("types: ");
-        	System.out.println(responseWorkValues.getSourceAsMap().get(field));
-          if (responseWorkValues.getSourceAsMap().get(field) != null) {
-        	
-            types.add(responseWorkValues.getSourceAsMap().get(field).toString());
-          }
-        }
-      }
-    }
-
-    return types;
-  }
 
   /**
    * @param hit contains results of the ElasticSearch request
@@ -677,5 +498,41 @@ public class DublinCoreFieldLoader {
 
     return types;
   }
+  
+  public static List<String> fillList(GetResponse responseWorkValues, String[] fields){
+	  List<String> list = new ArrayList<String>();
+	  
+	    if (responseWorkValues.isExists()) {
+	        if (fields != null) {	          
+	          for (String field : fields) {    
+	            if(responseWorkValues.getSourceAsMap().get(field)==null ) {	
+		          String[] requestedField = field.split("\\.");
+		          Map<String, Object> nestedMap = responseWorkValues.getSourceAsMap();
+		          String valueOfRequestedField=null;
+		          Map<String, Object> nestedMap2 = null;
+		          for(int i=0; i<requestedField.length; i++) {
+		            if(i<requestedField.length-1 && nestedMap!=null && nestedMap.get(requestedField[i])!=null) {
+		              nestedMap2 = (Map<String, Object>)nestedMap.get(requestedField[i]);
+		            }            
+		            if(i==requestedField.length-1 &&  
+		            		nestedMap2!=null && nestedMap2.get(requestedField[i])!=null ) {
+		              valueOfRequestedField =nestedMap2.get(requestedField[i]).toString();
+		              if(valueOfRequestedField.length()>0) {
+		            	  System.out.println("VALUE: " + valueOfRequestedField);
+		              	list.add(valueOfRequestedField);
+		              }
+		            }
+		            nestedMap= nestedMap2;
+		          }
+	            }else {
+	            	list.add(responseWorkValues.getSourceAsMap().get(field).toString());
+	            }
+	        }
+	      }
+	    }
+	  
+	  return list;
+  }
+  
 
 }
diff --git a/oaipmh-core/src/main/java/info/textgrid/middleware/RecordDelivererDC.java b/oaipmh-core/src/main/java/info/textgrid/middleware/RecordDelivererDC.java
index f3a47a6851af12a17e5cf566fd5c197aacffdb2d..d1c2ff0d73c1573872cede7d76967dcc1f205b8c 100644
--- a/oaipmh-core/src/main/java/info/textgrid/middleware/RecordDelivererDC.java
+++ b/oaipmh-core/src/main/java/info/textgrid/middleware/RecordDelivererDC.java
@@ -2,13 +2,11 @@ package info.textgrid.middleware;
 
 import java.io.IOException;
 import java.text.ParseException;
-import java.util.HashMap;
 import java.util.Map;
 
 import javax.xml.datatype.DatatypeConfigurationException;
 import org.apache.commons.logging.LogFactory;
 import org.elasticsearch.action.get.GetRequest;
-import org.elasticsearch.action.get.GetRequestBuilder;
 import org.elasticsearch.action.get.GetResponse;
 import org.elasticsearch.client.RequestOptions;
 import org.elasticsearch.common.Strings;
@@ -18,6 +16,13 @@ import info.textgrid.middleware.oaipmh.GetRecordType;
 import info.textgrid.middleware.oaipmh.HeaderType;
 import info.textgrid.middleware.oaipmh.RecordType;
 
+import com.google.gson.Gson;
+import com.google.gson.GsonBuilder;
+import com.google.gson.JsonElement;
+import com.google.gson.JsonObject;
+import com.google.gson.JsonParser;
+
+
 /**
  * FIXME
  * 
@@ -60,6 +65,8 @@ public class RecordDelivererDC extends RecordDelivererAbstract {
   private String[] titleList;
   private String[] typeList;
 
+  private String textGridObjectAsJSON;
+  
   private static org.apache.commons.logging.Log log = LogFactory.getLog(RecordDelivererDC.class);
 
   private OAI_ESClient oaiEsClient;
@@ -100,6 +107,9 @@ public class RecordDelivererDC extends RecordDelivererAbstract {
 
 		esResultObject = 
 				OAI_ESClient.getEsClient().get(getRequest, RequestOptions.DEFAULT);
+		Gson gson = new GsonBuilder().create();
+		textGridObjectAsJSON=esResultObject.getSourceAsString();
+
 
 	} catch (IOException e1) {
 		// TODO Auto-generated catch block
@@ -136,15 +146,32 @@ public class RecordDelivererDC extends RecordDelivererAbstract {
 
       if (this.textgrid == true && esResultObject.getSourceAsMap().get(this.formatField).equals(this.formatToFilter)) {
 
+    	String[] requestedField = relationToFurtherMetadataObject.split("\\.");
+    	
     	Map<String, Object> nestedMap = esResultObject.getSourceAsMap();
-    	Map<String, Object> nestedMap2 = (Map<String, Object>)nestedMap.get("edition");
-
+    	String valueOfRequestedField=null;
+    	Map<String, Object> nestedMap2 = null;
+    	for(int i=0; i<requestedField.length; i++) {
+
+    		if(i<requestedField.length-1) {
+    			nestedMap2 = (Map<String, Object>)nestedMap.get(requestedField[i]);
+    		}
+        	if(i==requestedField.length-1) {
+        		valueOfRequestedField =nestedMap2.get(requestedField[i]).toString();
+        	}
+        	
+
+    	}
+    	
+    	
+    	
+    	//Map<String, Object> nestedMap2 = (Map<String, Object>)nestedMap.get("edition");
     	
         String workUri = nestedMap2.get("isEditionOf").toString();
         workUri = workUri.substring(this.repositoryObjectURIPrefix.length());
         dublinCoreBuilder = putContentIntoDCFieldLists(esResultObject, furtherDCElements(workUri));
         identifier = esResultObject.getSourceAsMap().get(this.identifierField).toString();
-        String dateOfCreation =
+        String dateOfCreation = 
             esResultObject.getSourceAsMap().get(this.dateOfObjectCreation).toString();
         setRecordHeader(dateOfCreation, identifier, record, dublinCoreBuilder);
         record.setMetadata(dublinCoreBuilder.getDC());
@@ -188,7 +215,7 @@ public class RecordDelivererDC extends RecordDelivererAbstract {
    * @return
    */
   private GetResponse furtherDCElements(String id) {
-	  System.out.println("damdam");
+
 	    String[] includes = this.workFields;
 	    String[] excludes = Strings.EMPTY_ARRAY;
 	    FetchSourceContext fetchSourceContext =
@@ -204,7 +231,7 @@ public class RecordDelivererDC extends RecordDelivererAbstract {
 
     try {
 		responseWorkValues = OAI_ESClient.getEsClient().get(getRequest, RequestOptions.DEFAULT);
-		System.out.println(responseWorkValues.getSourceAsString());
+
 	} catch (IOException e) {
 		// TODO Auto-generated catch block
 		e.printStackTrace();
diff --git a/oaipmh-core/src/test/java/info/textgrid/middleware/OaiPmhTest.java b/oaipmh-core/src/test/java/info/textgrid/middleware/OaiPmhTest.java
index eae734a85712f96fb117e4dde395fe867be336f8..e9946dd864bfe90096fd7ff0de55e434853badb9 100644
--- a/oaipmh-core/src/test/java/info/textgrid/middleware/OaiPmhTest.java
+++ b/oaipmh-core/src/test/java/info/textgrid/middleware/OaiPmhTest.java
@@ -192,8 +192,7 @@ public class OaiPmhTest {
     record.setFormatToFilter(TextGridMimetypes.EDITION);
     record.setDateOfObjectCreation(TGConstants.CREATED);
     record.setRelationToFurtherMetadataObject(TGConstants.EDITION_ISEDITIONOF);
-    record.setRepositoryObjectURIPrefix(TGConstants.ITEM_IDENTIFIER_PREFIX);
-    
+    record.setRepositoryObjectURIPrefix(TGConstants.ITEM_IDENTIFIER_PREFIX);    
     record.setIdentifierField("textgridUri");
 
     System.out.println("Test for the verb \"GetRecord\" with succesfull response");