diff --git a/oaipmh-core/src/main/java/info/textgrid/middleware/RecordListDeliverer.java b/oaipmh-core/src/main/java/info/textgrid/middleware/RecordListDeliverer.java
index cf6ef1e4050fd04312e3c77d93401571322b8327..c1eb588a2d29ce099f1211c7cd6f8367c419017c 100644
--- a/oaipmh-core/src/main/java/info/textgrid/middleware/RecordListDeliverer.java
+++ b/oaipmh-core/src/main/java/info/textgrid/middleware/RecordListDeliverer.java
@@ -7,9 +7,7 @@ import java.util.ArrayList;
 import java.util.Hashtable;
 import java.util.List;
 import java.util.Map;
-
 import javax.xml.datatype.DatatypeConfigurationException;
-
 import org.apache.commons.logging.LogFactory;
 import org.elasticsearch.action.get.GetRequestBuilder;
 import org.elasticsearch.action.get.GetResponse;
@@ -19,7 +17,6 @@ import org.elasticsearch.common.unit.TimeValue;
 import org.elasticsearch.index.query.QueryBuilder;
 import org.elasticsearch.index.query.QueryBuilders;
 import org.elasticsearch.search.SearchHit;
-
 import info.textgrid.middleware.oaipmh.HeaderType;
 import info.textgrid.middleware.oaipmh.ListRecordsType;
 import info.textgrid.middleware.oaipmh.MetadataType;
@@ -30,694 +27,691 @@ import info.textgrid.middleware.oaipmh.RequestType;
 import info.textgrid.middleware.oaipmh.ResumptionTokenType;
 
 /**
- * TODO Care about repeatable fields as done in TITLE!
+ * FIXME Care about all repeatable fields as done in TITLE!
  */
-
 public class RecordListDeliverer {
 
-	// **
-	// STATICS
-	// **
-
-	private static org.apache.commons.logging.Log	log				= LogFactory.getLog(RecordDeliverer.class);
-
-	// **
-	// CLASS VARIABLES
-	// **
-
-//	private OAI_ESClient						oaiEsClient;
-	private String[]							fields;
-	private String[]							workFields;
-	private boolean							textgrid;
-	private boolean							dariah;
-	private String								formatField;
-	private String								formatToFilter;
-	private String								dateOfObjectCreation;
-	private String								relationToFurtherMetadataObject;
-	private String								repositoryObjectURIPrefix;
-	private String								rangeField;
-	private String								modifiedField;
-	private String								identifierField;
-	private boolean							foundItems;
-
-
-
-	// **
-	// DC-Field Lists
-	// **
-
-	private List<String>						contributors	= new ArrayList<String>();
-	private List<String>						coverages		= new ArrayList<String>();
-	private List<String>						creators		= new ArrayList<String>();
-	private List<String>						dates			= new ArrayList<String>();
-	private List<String>						descriptions	= new ArrayList<String>();
-	private List<String>						formats			= new ArrayList<String>();
-	private List<String>						identifiers		= new ArrayList<String>();
-	private List<String>						languages		= new ArrayList<String>();
-	private List<String>						publishers		= new ArrayList<String>();
-	private List<String>						relations		= new ArrayList<String>();
-	private List<String>						rights			= new ArrayList<String>();
-	private List<String>						sources			= new ArrayList<String>();
-	private List<String>						subjects		= new ArrayList<String>();
-	private List<String>						titles			= new ArrayList<String>();
-	private List<String>						types			= new ArrayList<String>();
-
-	private String[]							contributorList;
-	private String[]							coverageList;
-	private String[]							creatorList;
-	private String[]							dateList;
-	private String[]							descriptionList;
-	private String[]							formatList;
-	private String[]							identifierList;
-	private String[]							languageList;
-	private String[]							publisherList;
-	private String[]							relationList;
-	private String[]							relationForWorkList;
-	private String[]							rightList;
-	private String[]							sourceList;
-	private String[]							subjectList;
-	private String[]							titleList;
-	private String[]							typeList;
-	private String 								modifiedValue;
-	private static final int					lifeTimeResToken = 60000;
-
-	static Map<String, Integer> cursorCollector = new Hashtable<String, Integer >();
-	
-	private int searchResponseSize;
-		
-	/**
-	 * @param oaiEsClient
-	 */
-	public RecordListDeliverer(String[] fields,String[] workFields, boolean textgrid, boolean dariah) {
-//		this.oaiEsClient = oaiEsClient;
-		this.fields = fields;
-		this.workFields = workFields;
-		this.textgrid = textgrid;
-		this.dariah = dariah;
-	}
-
-	/**
-	 * the furtherDCElementes fetches the specified fields from the work object.
-	 * This function is called from the function fetchFields
-	 * 
-	 * @param id
-	 * @param client
-	 * @throws UnsupportedEncodingException
-	 */
-	public GetResponse furtherDCElements(String id, Client client) {
-		if(id != null){
-			try {
-				id = URLDecoder.decode(id, "UTF-8");
-			} catch (UnsupportedEncodingException e) {
-				e.printStackTrace();
-			}
-			
-			GetRequestBuilder getWorkValues = OAI_ESClient.getOaiESClient()
-					.prepareGet().setIndex(OAI_ESClient.getEsIndex())
-					.setType(OAI_ESClient.getEsType()).setId(id)
-					.setFields(this.workFields);
-				
-			GetResponse responseWorkValues = getWorkValues.execute().actionGet();
-			return responseWorkValues;
-		}
-		
-		return null;
-	}
-
-	
-	/**
-	 * <p>
-	 * The fetchFields function filters all edition and fetch the specified
-	 * fields
-	 * </p>
-	 * 
-	 * @param query
-	 * @param recordList
-	 * @throws UnsupportedEncodingException 
-	 */
-	
-	public void fetchFields(QueryBuilder query, ListRecordsType recordList, String resumptionToken, String set) throws UnsupportedEncodingException {
-		String scrollID = ""; 
-		SearchResponse scrollResp;
-		QueryBuilder recordFilter;
-		
-		if(this.dariah == true) {
-			recordFilter = query;
-		}else {
-			recordFilter = QueryBuilders.boolQuery().must(query).must(QueryBuilders.matchPhraseQuery(formatField, formatToFilter));
-		}
-
-		if (resumptionToken == null) {
-			scrollResp = OAI_ESClient.getOaiESClient().prepareSearch(OAI_ESClient.getEsIndex())
-			        .setScroll(new TimeValue(lifeTimeResToken))
-			        .setTypes(OAI_ESClient.getEsType())
-			        .addFields(this.fields)
-			        .setQuery(recordFilter)
-			        .setSize(searchResponseSize)
-			        .execute()
-			        .actionGet();
-			
-		} else {			
-			scrollResp = OAI_ESClient.getOaiESClient().prepareSearchScroll(resumptionToken).setScroll(new TimeValue(lifeTimeResToken)).execute().actionGet();						
-		}
-		
-		scrollID = scrollResp.getScrollId();
-		long completeListSize = scrollResp.getHits().totalHits();
-		System.out.println("LISTSIZE: " + completeListSize);
-
-		
-		if (completeListSize > 0) {
-			setFoundItems(true);
-
-			int i =0;
-
-			for (SearchHit hit : scrollResp.getHits().getHits()) {
-
-				i++;
-
-				if (hit != null && hit.getFields() != null) {					
-					try {
-						if(hit.getFields().get(this.dateOfObjectCreation)!=null){
-							String datestamp = hit.getFields().get(this.dateOfObjectCreation).getValue().toString();
-							datestamp = OAIPMHUtillities.convertDateFormat(datestamp).toXMLFormat();
-						}
-					} catch (ParseException e1) {
-						log.debug(e1);
-					} catch (DatatypeConfigurationException e1) {
-						log.debug(e1);
-					}
-					modifiedValue = hit.getFields().get(this.modifiedField).getValue().toString();
-					// TextGrid search!
-					String workUri = "";
-					if (this.textgrid == true && hit.getFields().get(formatField).values().get(0).toString().equals(formatToFilter)) {
-						if( hit.getFields().get(this.relationToFurtherMetadataObject) != null){
-							workUri = hit.getFields().get(this.relationToFurtherMetadataObject).values().get(0).toString()
-									.substring(this.repositoryObjectURIPrefix.length());
-							
-							if (!workUri.endsWith(".0")) {
-								workUri = workUri.concat(".0");		
-							}
-						}
-							
-						putContentIntoDCFieldLists(hit,	furtherDCElements(workUri, OAI_ESClient.getOaiESClient()));
-						buildRecord(recordList, set, hit.getFields().get(this.identifierField).getValue().toString());
-						listClearer();
-					}
-	
-					if (this.dariah == true) {
-						putContentIntoDCFieldLists2(hit, furtherDCElements(hit.getId(), OAI_ESClient.getOaiESClient()));
-						buildRecord(recordList, set, hit.getFields().get(this.identifierField).getValue().toString());
-						listClearer();
-					}	
-				}
-
-			}
-			
-			// Check the need for a resumption token!
-			ResumptionTokenType resTokenForResponse = OAIPMHUtillities.getResumptionToken(completeListSize, resumptionToken, cursorCollector, scrollID, searchResponseSize, i);
-			if (resTokenForResponse != null) {
-				recordList.setResumptionToken(resTokenForResponse);
-			}
-		
-		} else {
-			setFoundItems(false);
-		}			
-	}
-
-	/**
-	 * @param hit
-	 * @param responseWorkValues
-	 */
-	public void putContentIntoDCFieldLists(SearchHit hit, GetResponse responseWorkValues) {
-		
-		this.contributors = DublinCoreFieldLoader.setContributor(hit,this.contributorList);
-		this.coverages = DublinCoreFieldLoader.setCoverage(responseWorkValues,this.coverageList);
-		this.creators = DublinCoreFieldLoader.setCreator(responseWorkValues,this.creatorList);
-		this.dates = DublinCoreFieldLoader.setDate(responseWorkValues,this.dateList);
-		this.descriptions = DublinCoreFieldLoader.setDescription(responseWorkValues, this.descriptionList);
-		this.formats = DublinCoreFieldLoader.setFormat(hit, this.formatList);
-		this.identifiers = DublinCoreFieldLoader.setIdentifier(hit,this.identifierList);
-		this.languages = DublinCoreFieldLoader.setLanguage(hit,this.languageList);
-		this.publishers = DublinCoreFieldLoader.setPublisher(hit,this.publisherList);
-		this.relations = DublinCoreFieldLoader.setRelation(hit,this.relationList);
-		this.relations = DublinCoreFieldLoader.setRelationForWork(responseWorkValues, this.relationForWorkList);
-		this.rights = DublinCoreFieldLoader.setRights(hit, this.rightList);
-		this.sources = DublinCoreFieldLoader.setSources(hit, this.sourceList);
-		this.subjects = DublinCoreFieldLoader.setSubject(hit, this.subjectList);
-		this.titles = DublinCoreFieldLoader.setTitle(hit, this.titleList);
-		this.types = DublinCoreFieldLoader.setType(responseWorkValues,this.typeList);
-
-	}
-
-	/**
-	 * @param hit
-	 * @param responseWorkValues
-	 */
-	public void putContentIntoDCFieldLists2(SearchHit hit, GetResponse responseWorkValues) {
-
-		this.contributors = DublinCoreFieldLoader.setContributor(hit,this.contributorList);
-		this.coverages = DublinCoreFieldLoader.setCoverage(hit,this.coverageList);
-		this.creators = DublinCoreFieldLoader.setCreator(hit, this.creatorList);
-		this.dates = DublinCoreFieldLoader.setDate(hit, this.dateList);
-		this.descriptions = DublinCoreFieldLoader.setDescription(hit,this.descriptionList);
-		this.formats = DublinCoreFieldLoader.setFormat(hit, this.formatList);
-		this.identifiers = DublinCoreFieldLoader.setIdentifier(hit,this.identifierList);
-		this.languages = DublinCoreFieldLoader.setLanguage(hit,	this.languageList);
-		this.publishers = DublinCoreFieldLoader.setPublisher(hit, this.publisherList);
-		this.relations = DublinCoreFieldLoader.setRelation(hit,	this.relationList);
-		this.rights = DublinCoreFieldLoader.setRights(hit, this.rightList);
-		this.sources = DublinCoreFieldLoader.setSources(hit, this.sourceList);
-		this.subjects = DublinCoreFieldLoader.setSources(hit, this.subjectList);
-
-		this.titles = DublinCoreFieldLoader.setTitle(hit, this.titleList);
-		this.types = DublinCoreFieldLoader.setType(hit, this.typeList);
-
-	}
-
-	/**
-	 * @param recordList
-	 * @return
-	 */
-	public RecordType buildRecord(ListRecordsType recordList, String set, String headerIdentifier) {
-
-		ObjectFactory of = new ObjectFactory();
-		OaiDcType odt = new OaiDcType();
-		DublinCoreBuilder newDbc = new DublinCoreBuilder(odt, of);
-		MetadataType metadata = new MetadataType();
-		RecordType record = new RecordType();
-		// TODO Test if this is unnecessary
-		//HeaderType recordHeader = new HeaderType();
-		
-		setDCObject(odt, of);
-		
-		/*if (!this.identifiers.isEmpty()) {
-			recordHeader.setIdentifier(this.identifiers.get(0));
-		}
-		if (!this.dates.isEmpty()) {
-			recordHeader.setDatestamp(this.dates.get(0));
-		}*/
-
-		metadata = newDbc.getDC();
-		record.setMetadata(metadata);
-		record.setHeader(setHeader(set, headerIdentifier));
-		recordList.getRecord().add(record);
-
-		return record;
-	}
-
-	/**
-	 * @param from
-	 * @param to
-	 * @param set
-	 * @return
-	 */
-	public ListRecordsType getRecords(String from, String to, String set, String resumptionToken) {
-		
-		ListRecordsType recordList = new ListRecordsType();
-		QueryBuilder query;
-		QueryBuilder rangeQuery = QueryBuilders.rangeQuery(this.rangeField).from(from).to(to);
-
-		if (set != null) {
-			String queryField = "";
-			String valueField = "";
-
-			if (this.dariah == true) {
-				queryField = "descriptiveMetadata.dc:relation";
-				valueField = set;
-			}
-
-			if (this.textgrid == true) {
-				String[] setParts = set.split(":");
-				if (setParts[0].equals("project")) {
-					queryField = "project.id";
-					valueField = setParts[1];
-				}
-			}
-			
-			QueryBuilder matchQuery = QueryBuilders.matchPhraseQuery(queryField, valueField);			
-			QueryBuilder boolQuery = QueryBuilders.boolQuery().must(rangeQuery).must(matchQuery);
-			query = boolQuery;
-			System.out.println(query);
-			
-		} else {
-			query = rangeQuery;
-		}
-		try {
-			fetchFields(query, recordList, resumptionToken, set);
-		} catch (UnsupportedEncodingException e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
-		}
-
-		return recordList;
-	}
-
-	/**
-	 * @param set
-	 * @return
-	 */
-	public HeaderType setHeader(String set, String headerIdentifier) {
-		//System.out.println("HEADER TIME WITH SET: " + set);
-		HeaderType header = new HeaderType();
-		String identifierForHeader = "";
-		//System.out.println("DATESIZE: " + dates.size());
-		
-		//if(dates.size() > 0){			
-			try {
-				header.setDatestamp(OAIPMHUtillities.convertDateFormat(this.modifiedValue).toXMLFormat());				
-			} catch (ParseException e) {
-				// TODO Auto-generated catch block
-				e.printStackTrace();
-			} catch (DatatypeConfigurationException e) {
-				// TODO Auto-generated catch block
-				e.printStackTrace();
-			}
-			if(this.textgrid == true)
-				if(this.identifiers.isEmpty()){
-					System.out.println("HEADER IDENTIFIER: " + headerIdentifier);
-				}
-				identifierForHeader = this.identifiers.get(0);
-				if(identifierForHeader.startsWith("https://textgridrep.org/")){
-					identifierForHeader = identifierForHeader.replaceFirst("https://textgridrep.org/", "");
-					header.setIdentifier(identifierForHeader);
-				}				
-			else				
-				header.setIdentifier(headerIdentifier);
-		if (set != null) {
-			header.getSetSpec().add(set);
-		}
-		return header;
-	}
-
-	/**
-	 * @param odt
-	 * @param of
-	 * @return
-	 */
-	public DublinCoreBuilder setDCObject(OaiDcType odt, ObjectFactory of) {
-
-		DublinCoreBuilder dbc = new DublinCoreBuilder(odt, of);
-
-		dbc.setContributor(this.contributors);
-		dbc.setCoverage(this.coverages);
-		dbc.setCreator(this.creators);
-		dbc.setDate(this.dates);
-		dbc.setDescription(this.descriptions);
-		dbc.setFormat(this.formats);
-		dbc.setIdentifier(this.identifiers);
-		dbc.setLanguage(this.languages);
-		dbc.setPublisher(this.publishers);
-		dbc.setRelation(this.relations);
-		dbc.setRights(this.rights);
-		dbc.setSource(this.sources);
-		dbc.setSubject(this.subjects);
-		dbc.setTitle(this.titles);
-		dbc.setType(this.types);
-
-		return dbc;
-	}
-
-	/**
-	 * 
-	 */
-	public void listClearer() {
-
-		this.contributors.clear();
-		this.coverages.clear();
-		this.creators.clear();
-		this.dates.clear();
-		this.descriptions.clear();
-		this.formats.clear();
-		this.identifiers.clear();
-		this.languages.clear();
-		this.publishers.clear();
-		this.relations.clear();
-		this.rights.clear();
-		this.sources.clear();
-		this.subjects.clear();
-		this.titles.clear();
-		this.types.clear();
-	}
-
-	/**
-	 * @param formatToFilter
-	 */
-	public void setFormatToFilter(String formatToFilter) {
-		this.formatToFilter = formatToFilter;
-	}
-
-	/**
-	 * @param formatField
-	 */
-	public void setFormatField(String formatField) {
-		this.formatField = formatField;
-	}
-
-	/**
-	 * @return
-	 */
-	public String getDateOfObjectCreation() {
-		return this.dateOfObjectCreation;
-	}
-
-	/**
-	 * @param dateOfObjectCreation
-	 */
-	public void setDateOfObjectCreation(String dateOfObjectCreation) {
-		this.dateOfObjectCreation = dateOfObjectCreation;
-	}
-
-	/**
-	 * @return
-	 */
-	public String getRelationToFurtherMetadataObject() {
-		return this.relationToFurtherMetadataObject;
-	}
-
-	/**
-	 * @param relationToFurtherMetadataObject
-	 */
-	public void setRelationToFurtherMetadataObject(
-			String relationToFurtherMetadataObject) {
-		this.relationToFurtherMetadataObject = relationToFurtherMetadataObject;
-	}
-
-	/**
-	 * @return
-	 */
-	public String getRepositoryObjectURIPrefix() {
-		return this.repositoryObjectURIPrefix;
-	}
-
-	/**
-	 * @param repositoryObjectURIPrefix
-	 */
-	public void setRepositoryObjectURIPrefix(String repositoryObjectURIPrefix) {
-		this.repositoryObjectURIPrefix = repositoryObjectURIPrefix;
-	}
-
-	/**
-	 * @return
-	 */
-	public String getFieldForRange() {
-		return this.rangeField;
-	}
-
-	/**
-	 * @param fieldForRange
-	 */
-	public void setFieldForRange(String fieldForRange) {
-		this.rangeField = fieldForRange;
-	}
-
-	/*
-	 * Setter for DublinCore Lists
-	 */
-
-	/**
-	 * @param contributorList
-	 */
-	public void setContributor(String[] contributorList) {
-		this.contributorList = contributorList;
-	}
-
-	/**
-	 * @param coveragesList
-	 */
-	public void setCoverage(String[] coveragesList) {
-		this.coverageList = coveragesList;
-	}
-
-	/**
-	 * @param creatorsList
-	 */
-	public void setCreators(String[] creatorsList) {
-		this.creatorList = creatorsList;
-	}
-
-	/**
-	 * @param datesList
-	 */
-	public void setDates(String[] datesList) {
-		this.dateList = datesList;
-	}
-
-	/**
-	 * @param descriptionsList
-	 */
-	public void setDescriptions(String[] descriptionsList) {
-		this.descriptionList = descriptionsList;
-	}
-
-	/**
-	 * @param formatsList
-	 */
-	public void setFormats(String[] formatsList) {
-		this.formatList = formatsList;
-	}
-
-	/**
-	 * @param identifiersList
-	 */
-	public void setIdentifiers(String[] identifiersList) {
-		this.identifierList = identifiersList;
-	}
-
-	/**
-	 * @param languagesList
-	 */
-	public void setLanguages(String[] languagesList) {
-		this.languageList = languagesList;
-	}
-
-	/**
-	 * @param publishersList
-	 */
-	public void setPublishers(String[] publishersList) {
-		this.publisherList = publishersList;
-	}
-
-	/**
-	 * @param relationsList
-	 */
-	public void setRelations(String[] relationsList) {
-		this.relationList = relationsList;
-	}
-
-	/**
-	 * @param relationsList
-	 */
-	public void setRelationsForWork(String[] relationsList) {
-		this.relationForWorkList = relationsList;
-	}
-
-	/**
-	 * @param rightsList
-	 */
-	public void setRights(String[] rightsList) {
-		this.rightList = rightsList;
-	}
-
-	/**
-	 * @param sourcesList
-	 */
-	public void setSources(String[] sourcesList) {
-		this.sourceList = sourcesList;
-	}
-
-	/**
-	 * @param subjectsList
-	 */
-	public void setSubjects(String[] subjectsList) {
-		this.subjectList = subjectsList;
-	}
-
-	/**
-	 * @param titlesList
-	 */
-	public void setTitles(String[] titlesList) {
-		this.titleList = titlesList;
-	}
-
-	/**
-	 * @param typesList
-	 */
-	public void setTypes(String[] typesList) {
-		this.typeList = typesList;
-	}
-
-	/**
-	 * @param request
-	 * @return
-	 */
-	public boolean requestChecker(RequestType request) {
-
-		boolean requestCheck;
-
-		if (request.getIdentifier() != null
-				|| request.getMetadataPrefix() == null) {
-
-			requestCheck = false;
-		} else {
-			requestCheck = true;
-		}
-
-		return requestCheck;
-	}
-
-	/**
-	 * @return
-	 */
-	public boolean isFoundItems() {
-		return this.foundItems;
-	}
-
-	/**
-	 * @param foundItems
-	 */
-	public void setFoundItems(boolean foundItems) {
-		this.foundItems = foundItems;
-	}
-
-	public String getModifiedField() {
-		return modifiedField;
-	}
-
-	public void setModifiedField(String modifiedField) {
-		this.modifiedField = modifiedField;
-	}
-
-	public String getIdentifierField() {
-		return identifierField;
-	}
-
-	public void setIdentifierField(String identifierField) {
-		this.identifierField = identifierField;
-	}
-	
-	public int getSearchResponseSize() {
-		return searchResponseSize;
-	}
-
-	public void setSearchResponseSize(String searchResponseSize) {		
-		this.searchResponseSize = Integer.parseInt(searchResponseSize);
-	}
-	
-	/*public void setBlubb(String test) {
-		System.out.println("blubb: " + test);
-	}*/
-
-
-	/*
-	 * public String getCollectionTitle() { return collectionTitle; }
-	 * 
-	 * public void setCollectionTitle(GetResponse responseWorkValues) {
-	 * 
-	 * this.collectionTitle =
-	 * responseWorkValues.getField("metadata.dc:title").getValue().toString();
-	 * 
-	 * 
-	 * }
-	 */
+  // **
+  // STATICS
+  // **
+
+  private static org.apache.commons.logging.Log log = LogFactory.getLog(RecordDeliverer.class);
+
+  // **
+  // CLASS VARIABLES
+  // **
+
+  // private OAI_ESClient oaiEsClient;
+  private String[] fields;
+  private String[] workFields;
+  private boolean textgrid;
+  private boolean dariah;
+  private String formatField;
+  private String formatToFilter;
+  private String dateOfObjectCreation;
+  private String relationToFurtherMetadataObject;
+  private String repositoryObjectURIPrefix;
+  private String rangeField;
+  private String modifiedField;
+  private String identifierField;
+  private boolean foundItems;
+
+  // **
+  // DC-Field Lists
+  // **
+
+  private List<String> contributors = new ArrayList<String>();
+  private List<String> coverages = new ArrayList<String>();
+  private List<String> creators = new ArrayList<String>();
+  private List<String> dates = new ArrayList<String>();
+  private List<String> descriptions = new ArrayList<String>();
+  private List<String> formats = new ArrayList<String>();
+  private List<String> identifiers = new ArrayList<String>();
+  private List<String> languages = new ArrayList<String>();
+  private List<String> publishers = new ArrayList<String>();
+  private List<String> relations = new ArrayList<String>();
+  private List<String> rights = new ArrayList<String>();
+  private List<String> sources = new ArrayList<String>();
+  private List<String> subjects = new ArrayList<String>();
+  private List<String> titles = new ArrayList<String>();
+  private List<String> types = new ArrayList<String>();
+
+  private String[] contributorList;
+  private String[] coverageList;
+  private String[] creatorList;
+  private String[] dateList;
+  private String[] descriptionList;
+  private String[] formatList;
+  private String[] identifierList;
+  private String[] languageList;
+  private String[] publisherList;
+  private String[] relationList;
+  private String[] relationForWorkList;
+  private String[] rightList;
+  private String[] sourceList;
+  private String[] subjectList;
+  private String[] titleList;
+  private String[] typeList;
+  private String modifiedValue;
+  private static final int lifeTimeResToken = 60000;
+
+  static Map<String, Integer> cursorCollector = new Hashtable<String, Integer>();
+
+  private int searchResponseSize;
+
+  /**
+   * @param fields
+   * @param workFields
+   * @param textgrid
+   * @param dariah
+   */
+  public RecordListDeliverer(String[] fields, String[] workFields, boolean textgrid,
+      boolean dariah) {
+    // this.oaiEsClient = oaiEsClient;
+    this.fields = fields;
+    this.workFields = workFields;
+    this.textgrid = textgrid;
+    this.dariah = dariah;
+  }
+
+  /**
+   * the furtherDCElementes fetches the specified fields from the work object. This function is
+   * called from the function fetchFields
+   * 
+   * @param id
+   * @param client
+   * @return
+   */
+  public GetResponse furtherDCElements(String id, Client client) {
+
+    if (id != null) {
+      try {
+        id = URLDecoder.decode(id, "UTF-8");
+      } catch (UnsupportedEncodingException e) {
+        e.printStackTrace();
+      }
+
+      GetRequestBuilder getWorkValues =
+          OAI_ESClient.getOaiESClient().prepareGet().setIndex(OAI_ESClient.getEsIndex())
+              .setType(OAI_ESClient.getEsType()).setId(id).setFields(this.workFields);
+
+      GetResponse responseWorkValues = getWorkValues.execute().actionGet();
+      return responseWorkValues;
+    }
+
+    return null;
+  }
+
+
+  /**
+   * <p>
+   * The fetchFields function filters all edition and fetch the specified fields
+   * </p>
+   * 
+   * @param query
+   * @param recordList
+   * @param resumptionToken
+   * @param set
+   * @throws UnsupportedEncodingException
+   */
+  public void fetchFields(QueryBuilder query, ListRecordsType recordList, String resumptionToken,
+      String set) throws UnsupportedEncodingException {
+
+    String scrollID = "";
+    SearchResponse scrollResp;
+    QueryBuilder recordFilter;
+
+    if (this.dariah == true) {
+      recordFilter = query;
+    } else {
+      recordFilter = QueryBuilders.boolQuery().must(query)
+          .must(QueryBuilders.matchPhraseQuery(formatField, formatToFilter));
+    }
+
+    if (resumptionToken == null) {
+      scrollResp = OAI_ESClient.getOaiESClient().prepareSearch(OAI_ESClient.getEsIndex())
+          .setScroll(new TimeValue(lifeTimeResToken)).setTypes(OAI_ESClient.getEsType())
+          .addFields(this.fields).setQuery(recordFilter).setSize(searchResponseSize).execute()
+          .actionGet();
+    } else {
+      scrollResp = OAI_ESClient.getOaiESClient().prepareSearchScroll(resumptionToken)
+          .setScroll(new TimeValue(lifeTimeResToken)).execute().actionGet();
+    }
+
+    scrollID = scrollResp.getScrollId();
+    long completeListSize = scrollResp.getHits().totalHits();
+
+    // System.out.println("LISTSIZE: " + completeListSize);
+
+    if (completeListSize > 0) {
+      setFoundItems(true);
+
+      int i = 0;
+
+      for (SearchHit hit : scrollResp.getHits().getHits()) {
+
+        i++;
+
+        if (hit != null && hit.getFields() != null) {
+          try {
+            if (hit.getFields().get(this.dateOfObjectCreation) != null) {
+              String datestamp =
+                  hit.getFields().get(this.dateOfObjectCreation).getValue().toString();
+              datestamp = OAIPMHUtillities.convertDateFormat(datestamp).toXMLFormat();
+            }
+          } catch (ParseException e1) {
+            log.debug(e1);
+          } catch (DatatypeConfigurationException e1) {
+            log.debug(e1);
+          }
+          modifiedValue = hit.getFields().get(this.modifiedField).getValue().toString();
+          // TextGrid search!
+          String workUri = "";
+          if (this.textgrid == true && hit.getFields().get(formatField).values().get(0).toString()
+              .equals(formatToFilter)) {
+            if (hit.getFields().get(this.relationToFurtherMetadataObject) != null) {
+              workUri = hit.getFields().get(this.relationToFurtherMetadataObject).values().get(0)
+                  .toString().substring(this.repositoryObjectURIPrefix.length());
+
+              if (!workUri.endsWith(".0")) {
+                workUri = workUri.concat(".0");
+              }
+            }
+
+            putContentIntoDCFieldLists(hit,
+                furtherDCElements(workUri, OAI_ESClient.getOaiESClient()));
+            buildRecord(recordList, set,
+                hit.getFields().get(this.identifierField).getValue().toString());
+            listClearer();
+          }
+
+          if (this.dariah == true) {
+            putContentIntoDCFieldLists2(hit,
+                furtherDCElements(hit.getId(), OAI_ESClient.getOaiESClient()));
+            buildRecord(recordList, set,
+                hit.getFields().get(this.identifierField).getValue().toString());
+            listClearer();
+          }
+        }
+      }
+
+      // Check the need for a resumption token!
+      ResumptionTokenType resTokenForResponse = OAIPMHUtillities.getResumptionToken(
+          completeListSize, resumptionToken, cursorCollector, scrollID, searchResponseSize, i);
+      if (resTokenForResponse != null) {
+        recordList.setResumptionToken(resTokenForResponse);
+      }
+
+    } else {
+      setFoundItems(false);
+    }
+  }
+
+  /**
+   * @param hit
+   * @param responseWorkValues
+   */
+  public void putContentIntoDCFieldLists(SearchHit hit, GetResponse responseWorkValues) {
+
+    this.contributors = DublinCoreFieldLoader.setContributor(hit, this.contributorList);
+    this.coverages = DublinCoreFieldLoader.setCoverage(responseWorkValues, this.coverageList);
+    this.creators = DublinCoreFieldLoader.setCreator(responseWorkValues, this.creatorList);
+    this.dates = DublinCoreFieldLoader.setDate(responseWorkValues, this.dateList);
+    this.descriptions =
+        DublinCoreFieldLoader.setDescription(responseWorkValues, this.descriptionList);
+    this.formats = DublinCoreFieldLoader.setFormat(hit, this.formatList);
+    this.identifiers = DublinCoreFieldLoader.setIdentifier(hit, this.identifierList);
+    this.languages = DublinCoreFieldLoader.setLanguage(hit, this.languageList);
+    this.publishers = DublinCoreFieldLoader.setPublisher(hit, this.publisherList);
+    this.relations = DublinCoreFieldLoader.setRelation(hit, this.relationList);
+    this.relations =
+        DublinCoreFieldLoader.setRelationForWork(responseWorkValues, this.relationForWorkList);
+    this.rights = DublinCoreFieldLoader.setRights(hit, this.rightList);
+    this.sources = DublinCoreFieldLoader.setSources(hit, this.sourceList);
+    this.subjects = DublinCoreFieldLoader.setSubject(hit, this.subjectList);
+    this.titles = DublinCoreFieldLoader.setTitle(hit, this.titleList);
+    this.types = DublinCoreFieldLoader.setType(responseWorkValues, this.typeList);
+
+  }
+
+  /**
+   * @param hit
+   * @param responseWorkValues
+   */
+  public void putContentIntoDCFieldLists2(SearchHit hit, GetResponse responseWorkValues) {
+
+    this.contributors = DublinCoreFieldLoader.setContributor(hit, this.contributorList);
+    this.coverages = DublinCoreFieldLoader.setCoverage(hit, this.coverageList);
+    this.creators = DublinCoreFieldLoader.setCreator(hit, this.creatorList);
+    this.dates = DublinCoreFieldLoader.setDate(hit, this.dateList);
+    this.descriptions = DublinCoreFieldLoader.setDescription(hit, this.descriptionList);
+    this.formats = DublinCoreFieldLoader.setFormat(hit, this.formatList);
+    this.identifiers = DublinCoreFieldLoader.setIdentifier(hit, this.identifierList);
+    this.languages = DublinCoreFieldLoader.setLanguage(hit, this.languageList);
+    this.publishers = DublinCoreFieldLoader.setPublisher(hit, this.publisherList);
+    this.relations = DublinCoreFieldLoader.setRelation(hit, this.relationList);
+    this.rights = DublinCoreFieldLoader.setRights(hit, this.rightList);
+    this.sources = DublinCoreFieldLoader.setSources(hit, this.sourceList);
+    this.subjects = DublinCoreFieldLoader.setSources(hit, this.subjectList);
+    this.titles = DublinCoreFieldLoader.setTitle(hit, this.titleList);
+    this.types = DublinCoreFieldLoader.setType(hit, this.typeList);
+  }
+
+  /**
+   * @param recordList
+   * @param set
+   * @param headerIdentifier
+   * @return
+   */
+  public RecordType buildRecord(ListRecordsType recordList, String set, String headerIdentifier) {
+
+    ObjectFactory of = new ObjectFactory();
+    OaiDcType odt = new OaiDcType();
+    DublinCoreBuilder newDbc = new DublinCoreBuilder(odt, of);
+    MetadataType metadata = new MetadataType();
+    RecordType record = new RecordType();
+    // TODO Test if this is unnecessary
+    // HeaderType recordHeader = new HeaderType();
+
+    setDCObject(odt, of);
+
+    /*
+     * if (!this.identifiers.isEmpty()) { recordHeader.setIdentifier(this.identifiers.get(0)); } if
+     * (!this.dates.isEmpty()) { recordHeader.setDatestamp(this.dates.get(0)); }
+     */
+
+    metadata = newDbc.getDC();
+    record.setMetadata(metadata);
+    record.setHeader(setHeader(set, headerIdentifier));
+    recordList.getRecord().add(record);
+
+    return record;
+  }
+
+  /**
+   * @param from
+   * @param to
+   * @param set
+   * @param resumptionToken
+   * @return
+   */
+  public ListRecordsType getRecords(String from, String to, String set, String resumptionToken) {
+
+    ListRecordsType recordList = new ListRecordsType();
+    QueryBuilder query;
+    QueryBuilder rangeQuery = QueryBuilders.rangeQuery(this.rangeField).from(from).to(to);
+
+    if (set != null) {
+      String queryField = "";
+      String valueField = "";
+
+      if (this.dariah == true) {
+        queryField = "descriptiveMetadata.dc:relation";
+        valueField = set;
+      }
+
+      if (this.textgrid == true) {
+        String[] setParts = set.split(":");
+        if (setParts[0].equals("project")) {
+          queryField = "project.id";
+          valueField = setParts[1];
+        }
+      }
+
+      QueryBuilder matchQuery = QueryBuilders.matchPhraseQuery(queryField, valueField);
+      QueryBuilder boolQuery = QueryBuilders.boolQuery().must(rangeQuery).must(matchQuery);
+      query = boolQuery;
+      System.out.println(query);
+
+    } else {
+      query = rangeQuery;
+    }
+    try {
+      fetchFields(query, recordList, resumptionToken, set);
+    } catch (UnsupportedEncodingException e) {
+      // TODO Auto-generated catch block
+      e.printStackTrace();
+    }
+
+    return recordList;
+  }
+
+  /**
+   * @param set
+   * @param headerIdentifier
+   * @return
+   */
+  public HeaderType setHeader(String set, String headerIdentifier) {
+
+    // System.out.println("HEADER TIME WITH SET: " + set);
+    HeaderType header = new HeaderType();
+    String identifierForHeader = "";
+    // System.out.println("DATESIZE: " + dates.size());
+
+    // if(dates.size() > 0){
+    try {
+      header.setDatestamp(OAIPMHUtillities.convertDateFormat(this.modifiedValue).toXMLFormat());
+    } catch (ParseException e) {
+      // TODO Auto-generated catch block
+      e.printStackTrace();
+    } catch (DatatypeConfigurationException e) {
+      // TODO Auto-generated catch block
+      e.printStackTrace();
+    }
+    if (this.textgrid == true)
+      if (this.identifiers.isEmpty()) {
+        System.out.println("HEADER IDENTIFIER: " + headerIdentifier);
+      }
+    identifierForHeader = this.identifiers.get(0);
+    if (identifierForHeader.startsWith("https://textgridrep.org/")) {
+      identifierForHeader = identifierForHeader.replaceFirst("https://textgridrep.org/", "");
+      header.setIdentifier(identifierForHeader);
+    } else
+      header.setIdentifier(headerIdentifier);
+    if (set != null) {
+      header.getSetSpec().add(set);
+    }
+
+    return header;
+  }
+
+  /**
+   * @param odt
+   * @param of
+   * @return
+   */
+  public DublinCoreBuilder setDCObject(OaiDcType odt, ObjectFactory of) {
+
+    DublinCoreBuilder dbc = new DublinCoreBuilder(odt, of);
+
+    dbc.setContributor(this.contributors);
+    dbc.setCoverage(this.coverages);
+    dbc.setCreator(this.creators);
+    dbc.setDate(this.dates);
+    dbc.setDescription(this.descriptions);
+    dbc.setFormat(this.formats);
+    dbc.setIdentifier(this.identifiers);
+    dbc.setLanguage(this.languages);
+    dbc.setPublisher(this.publishers);
+    dbc.setRelation(this.relations);
+    dbc.setRights(this.rights);
+    dbc.setSource(this.sources);
+    dbc.setSubject(this.subjects);
+    dbc.setTitle(this.titles);
+    dbc.setType(this.types);
+
+    return dbc;
+  }
+
+  /**
+   * 
+   */
+  public void listClearer() {
+    this.contributors.clear();
+    this.coverages.clear();
+    this.creators.clear();
+    this.dates.clear();
+    this.descriptions.clear();
+    this.formats.clear();
+    this.identifiers.clear();
+    this.languages.clear();
+    this.publishers.clear();
+    this.relations.clear();
+    this.rights.clear();
+    this.sources.clear();
+    this.subjects.clear();
+    this.titles.clear();
+    this.types.clear();
+  }
+
+  /**
+   * @param formatToFilter
+   */
+  public void setFormatToFilter(String formatToFilter) {
+    this.formatToFilter = formatToFilter;
+  }
+
+  /**
+   * @param formatField
+   */
+  public void setFormatField(String formatField) {
+    this.formatField = formatField;
+  }
+
+  /**
+   * @return
+   */
+  public String getDateOfObjectCreation() {
+    return this.dateOfObjectCreation;
+  }
+
+  /**
+   * @param dateOfObjectCreation
+   */
+  public void setDateOfObjectCreation(String dateOfObjectCreation) {
+    this.dateOfObjectCreation = dateOfObjectCreation;
+  }
+
+  /**
+   * @return
+   */
+  public String getRelationToFurtherMetadataObject() {
+    return this.relationToFurtherMetadataObject;
+  }
+
+  /**
+   * @param relationToFurtherMetadataObject
+   */
+  public void setRelationToFurtherMetadataObject(String relationToFurtherMetadataObject) {
+    this.relationToFurtherMetadataObject = relationToFurtherMetadataObject;
+  }
+
+  /**
+   * @return
+   */
+  public String getRepositoryObjectURIPrefix() {
+    return this.repositoryObjectURIPrefix;
+  }
+
+  /**
+   * @param repositoryObjectURIPrefix
+   */
+  public void setRepositoryObjectURIPrefix(String repositoryObjectURIPrefix) {
+    this.repositoryObjectURIPrefix = repositoryObjectURIPrefix;
+  }
+
+  /**
+   * @return
+   */
+  public String getFieldForRange() {
+    return this.rangeField;
+  }
+
+  /**
+   * @param fieldForRange
+   */
+  public void setFieldForRange(String fieldForRange) {
+    this.rangeField = fieldForRange;
+  }
+
+  /*
+   * Setter for DublinCore Lists
+   */
+
+  /**
+   * @param contributorList
+   */
+  public void setContributor(String[] contributorList) {
+    this.contributorList = contributorList;
+  }
+
+  /**
+   * @param coveragesList
+   */
+  public void setCoverage(String[] coveragesList) {
+    this.coverageList = coveragesList;
+  }
+
+  /**
+   * @param creatorsList
+   */
+  public void setCreators(String[] creatorsList) {
+    this.creatorList = creatorsList;
+  }
+
+  /**
+   * @param datesList
+   */
+  public void setDates(String[] datesList) {
+    this.dateList = datesList;
+  }
+
+  /**
+   * @param descriptionsList
+   */
+  public void setDescriptions(String[] descriptionsList) {
+    this.descriptionList = descriptionsList;
+  }
+
+  /**
+   * @param formatsList
+   */
+  public void setFormats(String[] formatsList) {
+    this.formatList = formatsList;
+  }
+
+  /**
+   * @param identifiersList
+   */
+  public void setIdentifiers(String[] identifiersList) {
+    this.identifierList = identifiersList;
+  }
+
+  /**
+   * @param languagesList
+   */
+  public void setLanguages(String[] languagesList) {
+    this.languageList = languagesList;
+  }
+
+  /**
+   * @param publishersList
+   */
+  public void setPublishers(String[] publishersList) {
+    this.publisherList = publishersList;
+  }
+
+  /**
+   * @param relationsList
+   */
+  public void setRelations(String[] relationsList) {
+    this.relationList = relationsList;
+  }
+
+  /**
+   * @param relationsList
+   */
+  public void setRelationsForWork(String[] relationsList) {
+    this.relationForWorkList = relationsList;
+  }
+
+  /**
+   * @param rightsList
+   */
+  public void setRights(String[] rightsList) {
+    this.rightList = rightsList;
+  }
+
+  /**
+   * @param sourcesList
+   */
+  public void setSources(String[] sourcesList) {
+    this.sourceList = sourcesList;
+  }
+
+  /**
+   * @param subjectsList
+   */
+  public void setSubjects(String[] subjectsList) {
+    this.subjectList = subjectsList;
+  }
+
+  /**
+   * @param titlesList
+   */
+  public void setTitles(String[] titlesList) {
+    this.titleList = titlesList;
+  }
+
+  /**
+   * @param typesList
+   */
+  public void setTypes(String[] typesList) {
+    this.typeList = typesList;
+  }
+
+  /**
+   * @param request
+   * @return
+   */
+  public boolean requestChecker(RequestType request) {
+
+    boolean requestCheck;
+
+    if (request.getIdentifier() != null || request.getMetadataPrefix() == null) {
+
+      requestCheck = false;
+    } else {
+      requestCheck = true;
+    }
+
+    return requestCheck;
+  }
+
+  /**
+   * @return
+   */
+  public boolean isFoundItems() {
+    return this.foundItems;
+  }
+
+  /**
+   * @param foundItems
+   */
+  public void setFoundItems(boolean foundItems) {
+    this.foundItems = foundItems;
+  }
+
+  public String getModifiedField() {
+    return modifiedField;
+  }
+
+  public void setModifiedField(String modifiedField) {
+    this.modifiedField = modifiedField;
+  }
+
+  public String getIdentifierField() {
+    return identifierField;
+  }
+
+  public void setIdentifierField(String identifierField) {
+    this.identifierField = identifierField;
+  }
+
+  public int getSearchResponseSize() {
+    return searchResponseSize;
+  }
+
+  public void setSearchResponseSize(String searchResponseSize) {
+    this.searchResponseSize = Integer.parseInt(searchResponseSize);
+  }
+
+  // public String getCollectionTitle() {
+  // return collectionTitle;
+  // }
+
+  // public void setCollectionTitle(GetResponse responseWorkValues) {
+  // this.collectionTitle = responseWorkValues.getField("metadata.dc:title").getValue().toString();
+  // }
 
 }