diff --git a/oaipmh-core/src/main/java/info/textgrid/middleware/IdentifierListDelivererAbstract.java b/oaipmh-core/src/main/java/info/textgrid/middleware/IdentifierListDelivererAbstract.java
index fd28d5ff8e6ca6f647b5bdfdee3d46ff2ef837c6..6febc63430ffee347a460c64b871d06a9363404c 100644
--- a/oaipmh-core/src/main/java/info/textgrid/middleware/IdentifierListDelivererAbstract.java
+++ b/oaipmh-core/src/main/java/info/textgrid/middleware/IdentifierListDelivererAbstract.java
@@ -2,105 +2,118 @@ package info.textgrid.middleware;
 
 import java.util.ArrayList;
 import java.util.List;
-
 import info.textgrid.middleware.oaipmh.ListIdentifiersType;
 import info.textgrid.middleware.oaipmh.RequestType;
 
+/**
+ *
+ */
 public abstract class IdentifierListDelivererAbstract implements IdentifierListDelivererInterface {
 
-	protected boolean textgrid;
-	protected boolean dariah;
-	private static boolean idiomMets;
-	private static boolean dublinCore;
-	
-	public IdentifierListDelivererAbstract(boolean textgrid, boolean dariah) {
-	    this.textgrid = textgrid;
-	    this.dariah = dariah;
-	}
-	
-	@Override
-	public ListIdentifiersType processIdentifierList(String from, String to, String set, String resumptionToken) {
-		// TODO Auto-generated method stub
-		return null;
-	}
+  protected boolean textgrid;
+  protected boolean dariah;
+
+  /**
+   * @param textgrid
+   * @param dariah
+   */
+  public IdentifierListDelivererAbstract(boolean textgrid, boolean dariah) {
+    this.textgrid = textgrid;
+    this.dariah = dariah;
+  }
+
+  /*
+   * (non-Javadoc)
+   * 
+   * @see info.textgrid.middleware.IdentifierListDelivererInterface#processIdentifierList(java.lang.
+   * String, java.lang.String, java.lang.String, java.lang.String)
+   */
+  @Override
+  public ListIdentifiersType processIdentifierList(String from, String to, String set,
+      String resumptionToken) {
+    return null;
+  }
 
-	public static ErrorHandler requestChecker(RequestType request) {
+  /**
+   * @param request
+   * @return
+   */
+  public static ErrorHandler requestChecker(RequestType request) {
 
-		    ErrorHandler result = new ErrorHandler();
+    ErrorHandler result = new ErrorHandler();
 
-		    // Check if metadata prefix is existing and valid.
-		    if (request.getMetadataPrefix() != null
-		        && !request.getMetadataPrefix().equals(TGConstants.METADATA_DC_PREFIX)
-		        && !request.getMetadataPrefix().equals(TGConstants.METADATA_IDIOM_PREFIX)) {
-		      result.setError(TGConstants.OAI_METADATA_FORMAT_ERROR,
-		          "The value of the metadataPrefix: " + request.getMetadataPrefix()
-		              + " is not supported by the item identified by the value of: "
-		              + request.getIdentifier());
-		    }
-		    // Check if resumptioToken is valid
-			if(request.getResumptionToken() != null) {
-			
-				if(IdentifierListDelivererAbstract.isIdiomMets() && IdentifierListDelivererIDIOM.cursorCollector.containsKey(request.getResumptionToken())) {
-					  IdentifierListDelivererAbstract.setIdiomMets(true);
-					  IdentifierListDelivererAbstract.setDublinCore(false);					
-				}else if(IdentifierListDelivererAbstract.isDublinCore() && IdentifierListDelivererDC.cursorCollector.containsKey(request.getResumptionToken())){
-					  IdentifierListDelivererAbstract.setDublinCore(true);
-					  IdentifierListDelivererAbstract.setIdiomMets(false);
-				}else {
-				  	result.setError(TGConstants.OAI_BAD_RESUMPTION_TOKEN, 
-				  			"The value of the " + request.getResumptionToken() + " argument is invalid or expired.");
-				}
-			}
-		    
-		   if (request.getResumptionToken() == null && request.getMetadataPrefix() != null) {
-		    	if(request.getMetadataPrefix().equals(TGConstants.METADATA_IDIOM_PREFIX)) {
-		    		IdentifierListDelivererAbstract.setIdiomMets(true);
-		    		IdentifierListDelivererAbstract.setDublinCore(false);
-		    	}
-		    	if(request.getMetadataPrefix().equals(TGConstants.METADATA_DC_PREFIX)) {
-		    		IdentifierListDelivererAbstract.setDublinCore(true);
-		    		IdentifierListDelivererAbstract.setIdiomMets(false);
-		    	}
-			}
-			
-		    // Check if other params are existing, they shouldn't!
-		    else {
+    // Check if metadata prefix is existing and valid.
+    if (request.getMetadataPrefix() != null
+        && !request.getMetadataPrefix().equals(TGConstants.METADATA_DC_PREFIX)
+        && !request.getMetadataPrefix().equals(TGConstants.METADATA_IDIOM_PREFIX)) {
+      result.setError(TGConstants.OAI_METADATA_FORMAT_ERROR,
+          "The value of the metadataPrefix: " + request.getMetadataPrefix()
+              + " is not supported by the item identified by the value of: "
+              + request.getIdentifier());
+    }
 
-		      List<String> errorValues = new ArrayList<String>();
-		      
-		      if (request.getResumptionToken() != null && request.getMetadataPrefix() !=null) {
-		        errorValues.add("metadataPrefix");
-		      }	     
-		      if (request.getResumptionToken() == null && request.getMetadataPrefix() == null) {
-		        errorValues.add("metadataPrefix");		        
-		      }
-		      if (request.getIdentifier() != null) {
-		        errorValues.add("identifier");
-		      }
-		      if(errorValues.size()>0) {
-		          result.setError(TGConstants.OAI_BAD_ARGUMENT, "The request includes illegal arguments "
-		                  + "or is missing required arguments: " + errorValues);
-		      }
+    // // Check if resumptioToken is valid
+    // if (request.getResumptionToken() != null) {
+    //
+    // if (IdentifierListDelivererAbstract.isIdiomMets()
+    // && IdentifierListDelivererIDIOM.cursorCollector
+    // .containsKey(request.getResumptionToken())) {
+    // IdentifierListDelivererAbstract.setIdiomMets(true);
+    // IdentifierListDelivererAbstract.setDublinCore(false);
+    // } else if (IdentifierListDelivererAbstract.isDublinCore()
+    // && IdentifierListDelivererDC.cursorCollector.containsKey(request.getResumptionToken())) {
+    // IdentifierListDelivererAbstract.setDublinCore(true);
+    // IdentifierListDelivererAbstract.setIdiomMets(false);
+    // } else {
+    // result.setError(TGConstants.OAI_BAD_RESUMPTION_TOKEN,
+    // "The value of the " + request.getResumptionToken()
+    // + " argument is invalid or expired.");
+    // }
+    // }
 
-		    }
+    // Check if resumptionToken is invalid or existing.
+    if (request.getResumptionToken() != null) {
+      boolean restokDCExisting = RecordListDelivererIDIOM.cursorCollector != null
+          && RecordListDelivererIDIOM.cursorCollector.containsKey(request.getResumptionToken());
+      boolean restokIDIOMExisting = RecordListDelivererDC.cursorCollector != null
+          && RecordListDelivererDC.cursorCollector.containsKey(request.getResumptionToken());
+      if (restokDCExisting || restokIDIOMExisting) {
+        result.setError(TGConstants.OAI_BAD_RESUMPTION_TOKEN, "The value of the "
+            + request.getResumptionToken() + " argument is invalid or expired.");
+      }
+    }
 
-		    return result;
-		  }
+    // if (request.getResumptionToken() == null && request.getMetadataPrefix() != null) {
+    // if (request.getMetadataPrefix().equals(TGConstants.METADATA_IDIOM_PREFIX)) {
+    // IdentifierListDelivererAbstract.setIdiomMets(true);
+    // IdentifierListDelivererAbstract.setDublinCore(false);
+    // }
+    // if (request.getMetadataPrefix().equals(TGConstants.METADATA_DC_PREFIX)) {
+    // IdentifierListDelivererAbstract.setDublinCore(true);
+    // IdentifierListDelivererAbstract.setIdiomMets(false);
+    // }
+    // }
+    //
+    // // Check if other params are existing, they shouldn't!
+    // else {
 
-	public static boolean isIdiomMets() {
-		return idiomMets;
-	}
+    List<String> errorValues = new ArrayList<String>();
 
-	public static void setIdiomMets(boolean idiomMets) {
-		IdentifierListDelivererAbstract.idiomMets = idiomMets;
-	}
+    if (request.getResumptionToken() != null && request.getMetadataPrefix() != null) {
+      errorValues.add("metadataPrefix");
+    }
+    if (request.getResumptionToken() == null && request.getMetadataPrefix() == null) {
+      errorValues.add("metadataPrefix");
+    }
+    if (request.getIdentifier() != null) {
+      errorValues.add("identifier");
+    }
+    if (errorValues.size() > 0) {
+      result.setError(TGConstants.OAI_BAD_ARGUMENT, "The request includes illegal arguments "
+          + "or is missing required arguments: " + errorValues);
+    }
 
-	public static boolean isDublinCore() {
-		return dublinCore;
-	}
+    return result;
+  }
 
-	public static void setDublinCore(boolean dublinCore) {
-		IdentifierListDelivererAbstract.dublinCore = dublinCore;
-	}	
-	
 }
diff --git a/oaipmh-core/src/main/java/info/textgrid/middleware/IdentifierListDelivererDC.java b/oaipmh-core/src/main/java/info/textgrid/middleware/IdentifierListDelivererDC.java
index 77db4d5e98b7bf24d625c153b8438f8ffdce6ef6..86523c2c6b3c579e529c65a22906ac99545a0bb3 100644
--- a/oaipmh-core/src/main/java/info/textgrid/middleware/IdentifierListDelivererDC.java
+++ b/oaipmh-core/src/main/java/info/textgrid/middleware/IdentifierListDelivererDC.java
@@ -4,13 +4,10 @@ import info.textgrid.middleware.oaipmh.HeaderType;
 import info.textgrid.middleware.oaipmh.ListIdentifiersType;
 import info.textgrid.middleware.oaipmh.ResumptionTokenType;
 import info.textgrid.namespaces.middleware.tgcrud.common.TextGridMimetypes;
-
 import java.text.ParseException;
 import java.util.Hashtable;
 import java.util.Map;
-
 import javax.xml.datatype.DatatypeConfigurationException;
-
 import org.apache.commons.logging.LogFactory;
 import org.elasticsearch.action.search.SearchResponse;
 import org.elasticsearch.common.unit.TimeValue;
@@ -30,269 +27,331 @@ import org.elasticsearch.search.SearchHit;
 
 public class IdentifierListDelivererDC extends IdentifierListDelivererAbstract {
 
-	private static org.apache.commons.logging.Log	log		= LogFactory.getLog(IdentifierListDelivererDC.class);
-	private String									datestamp;
-	private boolean								    idExist	= true;
-	private OAI_ESClient							oaiEsClient;
-
-	private String[]								identifierListFields;  //Fields for the elasticsearch request
-	private String									rangeField; 		// Field for the optional range query 
-	private String									dateOfObjectCreation; // Field for the object creation in the repository 
-	private String									repositoryObjectURIPrefix; //
-	private String									identifierField;
-	private static final int					    lifeTimeResToken = 10000;
-	
-	public static Map<String, Integer> cursorCollector = new Hashtable<String, Integer >();
-	
-	private int searchResponseSize;
-	
-	
-	/**
-	 * In OAIPMH a ListIdentifiers request is answered by responding the
-	 * datestamp and the identifier of an object Both will be responded in a
-	 * header element. This function build the header element
-	 * 
-	 * @param datestamp
-	 *            taken from the elasticSearch index (created element)
-	 * @param identifier
-	 *            taken from the elasticSearch index (textgridUri)
-	 * @return the ListIdentifierElement with the responded header element
-	 */
-
-	public IdentifierListDelivererDC(boolean textgrid, boolean dariah) {
-		super(textgrid, dariah);
-	}
-	
-	
-	// FIXME Delete this function and check for empty set string in setListIdentifierHeaderWithSet
-	
-	private ListIdentifiersType setListIdentifierHeader(String datestamp, String identifier, ListIdentifiersType lit, String set) {
-		HeaderType header = new HeaderType();
-		header.setDatestamp(datestamp);
-		header.setIdentifier(identifier);
-		
-		if(set!=null){
-			header.getSetSpec().add(set);
-		}
-		
-		lit.getHeader().add(header);
-		return lit;
-	}
-
-	/**
-	 * To get the required values for the ListIdentifiers request this function
-	 * will ask ElasticSearch for a specific textgridUri the values "created"
-	 * and "textgridUri".
-	 * 
-	 * Since the ListIdentifiers request enables the possibility the limit the
-	 * request in a specific time interval, it is necessary to perform a range
-	 * query on the ElasticSearch index
-	 * 
-	 * @param from
-	 *            : start value for the range query
-	 * @param to
-	 *            : end value to the range query
-	 * @return after calling the function "setListIdentifierHeader" the return
-	 *         value is the whole ListIdentifiers element
-	 */
-	
-	// FIXME combine it with with getIdentifierListWithSet and check for empty set
-	
-	
-	public ListIdentifiersType processIdentifierList(String from, String to, String set, String resumptionToken) {
-		ListIdentifiersType lit = new ListIdentifiersType();
-		QueryBuilder query = setOrNot(set, from, to);
-		SearchResponse listListIdentiferValues;		
-		
-		if(resumptionToken != null){
-			listListIdentiferValues = OAI_ESClient.getOaiESClient().prepareSearchScroll(resumptionToken).setScroll(new TimeValue(lifeTimeResToken)).execute().actionGet();
-		}		
-		else{
-			listListIdentiferValues = OAI_ESClient
-					.getOaiESClient().prepareSearch(OAI_ESClient.getEsIndex())				
-					.setTypes(OAI_ESClient.getEsType())
-					.setScroll(new TimeValue(lifeTimeResToken))
-					.addFields(identifierListFields)
-					.setQuery(query)				
-					.setSize(searchResponseSize)
-					.execute()
-					.actionGet();
-		}		
-		listListIdentiferValues = hitHandling(listListIdentiferValues,  lit,  set, listListIdentiferValues.getScrollId());
-		
-		return lit;
-	}
-	
-
-	public SearchResponse hitHandling(SearchResponse listFurtherValues, ListIdentifiersType lit, String set, String resumptionToken){
-	
-		int i = 0;
-		for (SearchHit hit : listFurtherValues.getHits().getHits()) {
-			i++;
-			if (this.textgrid) {				
-				
-				String datestamp = hit.getFields().get(dateOfObjectCreation).getValue().toString();
-				try {					
-					datestamp = OAIPMHUtillities.convertDateFormat(datestamp).toXMLFormat();
-				} catch (ParseException e1) {
-					log.debug(e1);
-				} catch (DatatypeConfigurationException e1) {
-					log.debug(e1);
-				}
-				String identifier = hit.getFields().get(identifierField).getValue().toString();
-				
-				lit = setListIdentifierHeader(datestamp, identifier, lit, set);
-			}				
-
-			if (this.dariah) {
-
-				datestamp = hit.getFields().get(dateOfObjectCreation).getValue().toString();
-				
-				try {
-					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);
-				}
-								
-				String identifier = hit.getFields().get(identifierField).getValue().toString();					
-				lit = setListIdentifierHeader(datestamp, identifier, lit, set);
-			}
-			
-		}
-		
-		// Check the need for a resumption token!
-		ResumptionTokenType resTokenForResponse = OAIPMHUtillities.getResumptionToken(
-				listFurtherValues.getHits().getTotalHits(), resumptionToken, cursorCollector,
-				listFurtherValues.getScrollId(), this.searchResponseSize, i);
-		if (resTokenForResponse != null) {
-			lit.setResumptionToken(resTokenForResponse);
-		}
-		
-		return listFurtherValues;
-	}
-	
-	public QueryBuilder setOrNot(String set, String from, String to){
-		
-		String filterFormat = "";
-		if(textgrid==true) {
-			filterFormat = TextGridMimetypes.EDITION;			
-		}else {
-			filterFormat = TextGridMimetypes.DARIAH_COLLECTION;
-		}
-			
-		QueryBuilder rangeQuery = QueryBuilders.rangeQuery(rangeField).from(from).to(to);		
-		QueryBuilder formatQuery = QueryBuilders.matchPhrasePrefixQuery("format", filterFormat);
-		QueryBuilder query;
-		
-		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);
-			if (dariah){
-				query = matchQuery;
-			}
-			else {
-				query = QueryBuilders.boolQuery().must(matchQuery).must(formatQuery);
-			}
-			
-						
-		} else {
-			if(dariah == true)
-				query = rangeQuery;
-			else 
-				query = QueryBuilders.boolQuery().must(rangeQuery).must(formatQuery);
-		}
-
-		return query;		
-	}
-	
-	
-	public ListIdentifiersType getLit(ListIdentifiersType lit) {
-		return lit;
-	}
-
-	public String getDateOfObjectCreation() {
-		return dateOfObjectCreation;
-	}
-
-	public void setDateOfObjectCreation(String dateOfObjectCreation) {
-		this.dateOfObjectCreation = dateOfObjectCreation;
-	}
-
-	public void setRepositoryObjectURIPrefix(String repositoryObjectURIPrefix) {
-		this.repositoryObjectURIPrefix = repositoryObjectURIPrefix;
-	}
-
-	public String getRepositoryObjectURIPrefix() {
-		return repositoryObjectURIPrefix;
-	}
-
-	public void setIdExist(boolean validItem) {
-		idExist = validItem;
-	}
-
-	public boolean getIdExist() {
-		return idExist;
-	}
-
-	public String[] getIdentifierListFields() {
-		return identifierListFields;
-	}
-
-	public void setIdentifierListFields(String[] identifierListFields) {
-		this.identifierListFields = identifierListFields;
-	}
-
-	public String getFieldForRange() {
-		return rangeField;
-	}
-
-	public void setFieldForRange(String fieldForRange) {
-		this.rangeField = fieldForRange;
-	}
-	
-	public String getIdentifierField() {
-		return identifierField;
-	}
-
-	public void setIdentifierField(String identifierPrefix) {
-		this.identifierField = identifierPrefix;
-	}
-	public int getSearchResponseSize() {
-		return searchResponseSize;
-	}
-
-	public void setSearchResponseSize(String searchResponseSize) {
-//		System.out.println(searchResponseSize);
-		this.searchResponseSize = Integer.parseInt(searchResponseSize);
-//		System.out.println(this.searchResponseSize);
-	}
-
-
-	public OAI_ESClient getOaiEsClient() {
-		return oaiEsClient;
-	}
-
-
-	public void setOaiEsClient(OAI_ESClient oaiEsClient) {
-		this.oaiEsClient = oaiEsClient;
-	}
+  private static org.apache.commons.logging.Log log =
+      LogFactory.getLog(IdentifierListDelivererDC.class);
+  private String datestamp;
+  private boolean idExist = true;
+  private OAI_ESClient oaiEsClient;
+
+  private String[] identifierListFields; // Fields for the elasticsearch request
+  private String rangeField; // Field for the optional range query
+  private String dateOfObjectCreation; // Field for the object creation in the repository
+  private String repositoryObjectURIPrefix; //
+  private String identifierField;
+  private static final int lifeTimeResToken = 10000;
+
+  public static Map<String, Integer> cursorCollector = new Hashtable<String, Integer>();
+
+  private int searchResponseSize;
+
+  /**
+   * In OAIPMH a ListIdentifiers request is answered by responding the datestamp and the identifier
+   * of an object Both will be responded in a header element. This function build the header element
+   * 
+   * @param datestamp taken from the elasticSearch index (created element)
+   * @param identifier taken from the elasticSearch index (textgridUri)
+   * @return the ListIdentifierElement with the responded header element
+   */
+
+  public IdentifierListDelivererDC(boolean textgrid, boolean dariah) {
+    super(textgrid, dariah);
+  }
+
+
+
+  /**
+   * @param datestamp
+   * @param identifier
+   * @param lit
+   * @param set
+   * @return
+   */
+  private static ListIdentifiersType setListIdentifierHeader(String datestamp, String identifier,
+      ListIdentifiersType lit, String set) {
+
+    // FIXME Delete this function and check for empty set string in setListIdentifierHeaderWithSet
+
+    HeaderType header = new HeaderType();
+    header.setDatestamp(datestamp);
+    header.setIdentifier(identifier);
+
+    if (set != null) {
+      header.getSetSpec().add(set);
+    }
+    lit.getHeader().add(header);
+
+    return lit;
+  }
+
+  /**
+   * To get the required values for the ListIdentifiers request this function will ask ElasticSearch
+   * for a specific textgridUri the values "created" and "textgridUri".
+   * 
+   * Since the ListIdentifiers request enables the possibility the limit the request in a specific
+   * time interval, it is necessary to perform a range query on the ElasticSearch index
+   * 
+   * @param from : start value for the range query
+   * @param to : end value to the range query
+   * @return after calling the function "setListIdentifierHeader" the return value is the whole
+   *         ListIdentifiers element
+   */
+  public ListIdentifiersType processIdentifierList(String from, String to, String set,
+      String resumptionToken) {
+
+    // FIXME combine it with with getIdentifierListWithSet and check for empty set
+
+    ListIdentifiersType lit = new ListIdentifiersType();
+    QueryBuilder query = setOrNot(set, from, to);
+    SearchResponse listListIdentiferValues;
+
+    if (resumptionToken != null) {
+      listListIdentiferValues = OAI_ESClient.getOaiESClient().prepareSearchScroll(resumptionToken)
+          .setScroll(new TimeValue(lifeTimeResToken)).execute().actionGet();
+    } else {
+      listListIdentiferValues = OAI_ESClient
+          .getOaiESClient().prepareSearch(OAI_ESClient.getEsIndex())
+          .setTypes(OAI_ESClient.getEsType())
+          .setScroll(new TimeValue(lifeTimeResToken))
+          .addFields(this.identifierListFields)
+          .setQuery(query)
+          .setSize(this.searchResponseSize)
+          .execute()
+          .actionGet();
+    }
+    listListIdentiferValues =
+        hitHandling(listListIdentiferValues, lit, set, listListIdentiferValues.getScrollId());
+
+    return lit;
+  }
+
+  /**
+   * @param listFurtherValues
+   * @param lit
+   * @param set
+   * @param resumptionToken
+   * @return
+   */
+  public SearchResponse hitHandling(SearchResponse listFurtherValues, ListIdentifiersType lit,
+      String set, String resumptionToken) {
+
+    int i = 0;
+    for (SearchHit hit : listFurtherValues.getHits().getHits()) {
+      i++;
+      if (this.textgrid) {
+
+        String datestamp = hit.getFields().get(this.dateOfObjectCreation).getValue().toString();
+        try {
+          datestamp = OAIPMHUtillities.convertDateFormat(datestamp).toXMLFormat();
+        } catch (ParseException e1) {
+          log.debug(e1);
+        } catch (DatatypeConfigurationException e1) {
+          log.debug(e1);
+        }
+        String identifier = hit.getFields().get(this.identifierField).getValue().toString();
+
+        lit = setListIdentifierHeader(datestamp, identifier, lit, set);
+      }
+
+      if (this.dariah) {
+
+        this.datestamp = hit.getFields().get(this.dateOfObjectCreation).getValue().toString();
+
+        try {
+          this.datestamp = hit.getFields().get(this.dateOfObjectCreation).getValue().toString();
+          this.datestamp = OAIPMHUtillities.convertDateFormat(this.datestamp).toXMLFormat();
+        } catch (ParseException e1) {
+          log.debug(e1);
+        } catch (DatatypeConfigurationException e1) {
+          log.debug(e1);
+        }
+
+        String identifier = hit.getFields().get(this.identifierField).getValue().toString();
+        lit = setListIdentifierHeader(this.datestamp, identifier, lit, set);
+      }
+    }
+
+    // Check the need for a resumption token!
+    ResumptionTokenType resTokenForResponse = OAIPMHUtillities.getResumptionToken(
+        listFurtherValues.getHits().getTotalHits(), resumptionToken, cursorCollector,
+        listFurtherValues.getScrollId(), this.searchResponseSize, i);
+    if (resTokenForResponse != null) {
+      lit.setResumptionToken(resTokenForResponse);
+    }
+
+    return listFurtherValues;
+  }
+
+  /**
+   * @param set
+   * @param from
+   * @param to
+   * @return
+   */
+  public QueryBuilder setOrNot(String set, String from, String to) {
+
+    String filterFormat = "";
+    if (this.textgrid == true) {
+      filterFormat = TextGridMimetypes.EDITION;
+    } else {
+      filterFormat = TextGridMimetypes.DARIAH_COLLECTION;
+    }
+
+    QueryBuilder rangeQuery = QueryBuilders.rangeQuery(this.rangeField).from(from).to(to);
+    QueryBuilder formatQuery = QueryBuilders.matchPhrasePrefixQuery("format", filterFormat);
+    QueryBuilder query;
+
+    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);
+      if (this.dariah) {
+        query = matchQuery;
+      } else {
+        query = QueryBuilders.boolQuery().must(matchQuery).must(formatQuery);
+      }
+
+    } else {
+      if (this.dariah == true)
+        query = rangeQuery;
+      else
+        query = QueryBuilders.boolQuery().must(rangeQuery).must(formatQuery);
+    }
+
+    return query;
+  }
+
+  /**
+   * @param lit
+   * @return
+   */
+  public ListIdentifiersType getLit(ListIdentifiersType lit) {
+    return lit;
+  }
+
+  /**
+   * @return
+   */
+  public String getDateOfObjectCreation() {
+    return this.dateOfObjectCreation;
+  }
+
+  /**
+   * @param dateOfObjectCreation
+   */
+  public void setDateOfObjectCreation(String dateOfObjectCreation) {
+    this.dateOfObjectCreation = dateOfObjectCreation;
+  }
+
+  /**
+   * @param repositoryObjectURIPrefix
+   */
+  public void setRepositoryObjectURIPrefix(String repositoryObjectURIPrefix) {
+    this.repositoryObjectURIPrefix = repositoryObjectURIPrefix;
+  }
+
+  /**
+   * @return
+   */
+  public String getRepositoryObjectURIPrefix() {
+    return this.repositoryObjectURIPrefix;
+  }
+
+  /**
+   * @param validItem
+   */
+  public void setIdExist(boolean validItem) {
+    this.idExist = validItem;
+  }
+
+  /**
+   * @return
+   */
+  public boolean getIdExist() {
+    return this.idExist;
+  }
+
+  /**
+   * @return
+   */
+  public String[] getIdentifierListFields() {
+    return this.identifierListFields;
+  }
+
+  /**
+   * @param identifierListFields
+   */
+  public void setIdentifierListFields(String[] identifierListFields) {
+    this.identifierListFields = identifierListFields;
+  }
+
+  /**
+   * @return
+   */
+  public String getFieldForRange() {
+    return this.rangeField;
+  }
+
+  /**
+   * @param fieldForRange
+   */
+  public void setFieldForRange(String fieldForRange) {
+    this.rangeField = fieldForRange;
+  }
+
+  /**
+   * @return
+   */
+  public String getIdentifierField() {
+    return this.identifierField;
+  }
+
+  /**
+   * @param identifierPrefix
+   */
+  public void setIdentifierField(String identifierPrefix) {
+    this.identifierField = identifierPrefix;
+  }
+
+  /**
+   * @return
+   */
+  public int getSearchResponseSize() {
+    return this.searchResponseSize;
+  }
+
+  /**
+   * @param searchResponseSize
+   */
+  public void setSearchResponseSize(String searchResponseSize) {
+    this.searchResponseSize = Integer.parseInt(searchResponseSize);
+  }
+
+  /**
+   * @return
+   */
+  public OAI_ESClient getOaiEsClient() {
+    return this.oaiEsClient;
+  }
+
+  /**
+   * @param oaiEsClient
+   */
+  public void setOaiEsClient(OAI_ESClient oaiEsClient) {
+    this.oaiEsClient = oaiEsClient;
+  }
 
 }
diff --git a/oaipmh-core/src/main/java/info/textgrid/middleware/IdentifierListDelivererInterface.java b/oaipmh-core/src/main/java/info/textgrid/middleware/IdentifierListDelivererInterface.java
index 241d5676df5008a4bbc4fabd15cc5a380e91628d..2e9b56f3cc793b0b6c6b322c1bff0733c0fe8fd3 100644
--- a/oaipmh-core/src/main/java/info/textgrid/middleware/IdentifierListDelivererInterface.java
+++ b/oaipmh-core/src/main/java/info/textgrid/middleware/IdentifierListDelivererInterface.java
@@ -1,11 +1,22 @@
 package info.textgrid.middleware;
 
 import java.text.ParseException;
-
 import info.textgrid.middleware.oaipmh.ListIdentifiersType;
 
+/**
+ *
+ */
 public interface IdentifierListDelivererInterface {
-	
-	public ListIdentifiersType processIdentifierList(String from, String to, String set, String resumptionToken) throws ParseException;
+
+  /**
+   * @param from
+   * @param to
+   * @param set
+   * @param resumptionToken
+   * @return
+   * @throws ParseException
+   */
+  public ListIdentifiersType processIdentifierList(String from, String to, String set,
+      String resumptionToken) throws ParseException;
 
 }
diff --git a/oaipmh-core/src/main/java/info/textgrid/middleware/OAIPMHImpl.java b/oaipmh-core/src/main/java/info/textgrid/middleware/OAIPMHImpl.java
index 2e1b3be4572f1721575a44800bc0f9653ef29f3c..e635753b2c41b3164a0497a6970d307b3776d9af 100644
--- a/oaipmh-core/src/main/java/info/textgrid/middleware/OAIPMHImpl.java
+++ b/oaipmh-core/src/main/java/info/textgrid/middleware/OAIPMHImpl.java
@@ -25,7 +25,7 @@ import info.textgrid.middleware.oaipmh.VerbType;
  * </p>
  * 
  * @author Maximilian Brodhun, SUB Göttingen
- * @version 2019-03-07
+ * @version 2019-05-28
  * @since 2014-01-29
  */
 public class OAIPMHImpl implements OAIPMHProducer {
@@ -52,18 +52,19 @@ public class OAIPMHImpl implements OAIPMHProducer {
   ListIdentifiersType lit = new ListIdentifiersType();
 
   /**
-   * @param oaiEsClient
    * @param rep
-   * @param recDeliv
-   * @param recordList
+   * @param recDelivDC
+   * @param recDelivIDIOM
+   * @param recordListDC
+   * @param recordListIDIOM
    * @param metadataFormatList
    * @param setList
    * @param identifierList
+   * @param identifierListIDIOM
    */
   public OAIPMHImpl(RepIdentification rep, RecordDelivererDC recDelivDC,
-      RecordDelivererIDIOM recDelivIDIOM,
-      RecordListDelivererDC recordListDC, RecordListDelivererIDIOM recordListIDIOM,
-      MetadataFormatListDeliverer metadataFormatList,
+      RecordDelivererIDIOM recDelivIDIOM, RecordListDelivererDC recordListDC,
+      RecordListDelivererIDIOM recordListIDIOM, MetadataFormatListDeliverer metadataFormatList,
       SetDeliverer setList, IdentifierListDelivererDC identifierList,
       IdentifierListDelivererIDIOM identifierListIDIOM) {
     this.rep = rep;
@@ -236,24 +237,50 @@ public class OAIPMHImpl implements OAIPMHProducer {
     if (requestErrors.getError().getValue() != null) {
       oai.getError().add(requestErrors.getError());
     } else {
-      // Default is DC.
 
-      IdentifierListDelivererInterface listDeliv = this.identifierListDC;
-      this.log.info("Actual Value of IDIOM MetsMods Boolean is: "
-          + IdentifierListDelivererAbstract.isIdiomMets());
-      this.log.info("Actual Value of DublinCore Boolean is: "
-          + IdentifierListDelivererAbstract.isDublinCore());
+      // If metadataFormat IS SET, set recordListDeliverer accordingly.
+      IdentifierListDelivererInterface idListDeliv = null;
+      if (request.getMetadataPrefix() != null) {
+        if (request.getMetadataPrefix().equals(TGConstants.METADATA_DC_PREFIX)) {
+          idListDeliv = this.identifierListDC;
+        } else {
+          idListDeliv = this.identifierListIDIOM;
+        }
+      }
 
-      if (IdentifierListDelivererAbstract.isIdiomMets()) {
-        listDeliv = this.identifierListIDIOM;
-      } else if (IdentifierListDelivererAbstract.isDublinCore()) {
-        listDeliv = this.identifierListDC;
+      // If metadata format IS NOT SET, check resumption token hash maps to decide if we have to
+      // serve oai_dc or idiom_mets metadata format.
+      else {
+        boolean restokDCExisting = IdentifierListDelivererDC.cursorCollector != null
+            && IdentifierListDelivererDC.cursorCollector.containsKey(request.getResumptionToken());
+        boolean restokIDIOMExisting = IdentifierListDelivererIDIOM.cursorCollector != null
+            && IdentifierListDelivererIDIOM.cursorCollector
+                .containsKey(request.getResumptionToken());
+        if (restokDCExisting) {
+          idListDeliv = this.identifierListDC;
+        } else if (restokIDIOMExisting) {
+          idListDeliv = this.identifierListIDIOM;
+        }
       }
 
-      ListIdentifiersType listIdentifiers = new ListIdentifiersType();
-      listIdentifiers = listDeliv.processIdentifierList(request.getFrom(), request.getUntil(),
-          request.getSet(), request.getResumptionToken());
-      
+      // // Default is DC.
+      //
+      // IdentifierListDelivererInterface listDeliv = this.identifierListDC;
+      //
+      // this.log.info("Actual Value of IDIOM MetsMods Boolean is: "
+      // + IdentifierListDelivererAbstract.isIdiomMets());
+      // this.log.info("Actual Value of DublinCore Boolean is: "
+      // + IdentifierListDelivererAbstract.isDublinCore());
+      //
+      // if (IdentifierListDelivererAbstract.isIdiomMets()) {
+      // listDeliv = this.identifierListIDIOM;
+      // } else if (IdentifierListDelivererAbstract.isDublinCore()) {
+      // listDeliv = this.identifierListDC;
+      // }
+
+      ListIdentifiersType listIdentifiers = idListDeliv.processIdentifierList(request.getFrom(),
+          request.getUntil(), request.getSet(), request.getResumptionToken());
+
       if (listIdentifiers != null) {
         oai.setListIdentifiers(listIdentifiers);
       } else {
@@ -300,7 +327,7 @@ public class OAIPMHImpl implements OAIPMHProducer {
     List<String> errorValues = new ArrayList<String>();
     ListMetadataFormatsType listMF = new ListMetadataFormatsType();
     JAXBElement<OAIPMHType> oaipmhRoot = obf.createOAIPMH(oai);
-    
+
     if (this.metadataFormatList.requestChecker(request)) {
 
       if (id.isEmpty()) {
@@ -351,26 +378,42 @@ public class OAIPMHImpl implements OAIPMHProducer {
   public JAXBElement<OAIPMHType> listRecordsRequest(ObjectFactory obf, OAIPMHType oai,
       RequestType request) {
 
+    // Create OAIPMH root object.
     JAXBElement<OAIPMHType> oaipmhRoot = obf.createOAIPMH(oai);
-    
+
+    // Check request's syntax.
     ErrorHandler requestErrors = RecordListDelivererAbstract.requestChecker(request);
 
-    // System.out.println("DU KOMMST NICHT VORBEI!!!");
     if (requestErrors.getError().getCode() != null) {
       oai.getError().add(requestErrors.getError());
     } else {
-      // Default is DC.
-      RecordListDelivererInterface recListDeliv = this.recordListDC;
 
-      if (RecordListDelivererAbstract.isIdiomMets()) {
-        recListDeliv = this.recordListIDIOM;
-      } else if (RecordListDelivererAbstract.isDublinCore()) {
-        recListDeliv = this.recordListDC;
+      // If metadataFormat IS SET, set recordListDeliverer accordingly.
+      RecordListDelivererInterface recListDeliv = null;
+      if (request.getMetadataPrefix() != null) {
+        if (request.getMetadataPrefix().equals(TGConstants.METADATA_DC_PREFIX)) {
+          recListDeliv = this.recordListDC;
+        } else {
+          recListDeliv = this.recordListIDIOM;
+        }
+      }
+
+      // If metadata format IS NOT SET, check resumption token hash maps to decide if we have to
+      // serve oai_dc or idiom_mets metadata format.
+      else {
+        boolean restokDCExisting = RecordListDelivererDC.cursorCollector != null
+            && RecordListDelivererDC.cursorCollector.containsKey(request.getResumptionToken());
+        boolean restokIDIOMExisting = RecordListDelivererIDIOM.cursorCollector != null
+            && RecordListDelivererIDIOM.cursorCollector.containsKey(request.getResumptionToken());
+        if (restokDCExisting) {
+          recListDeliv = this.recordListDC;
+        } else if (restokIDIOMExisting) {
+          recListDeliv = this.recordListIDIOM;
+        }
       }
-      
-      ListRecordsType listRecords = new ListRecordsType();
-      listRecords = recListDeliv.getRecords(request.getFrom(), request.getUntil(), request.getSet(),
-          request.getResumptionToken());
+
+      ListRecordsType listRecords = recListDeliv.getRecords(request.getFrom(), request.getUntil(),
+          request.getSet(), request.getResumptionToken());
 
       if (listRecords != null) {
         oai.setListRecords(listRecords);
diff --git a/oaipmh-core/src/main/java/info/textgrid/middleware/RecordDelivererAbstract.java b/oaipmh-core/src/main/java/info/textgrid/middleware/RecordDelivererAbstract.java
index 8ffcb85d7158ea9223c29e097fc88b547dbc575b..c5af207168d447627aac9536b323ab8e738838ef 100644
--- a/oaipmh-core/src/main/java/info/textgrid/middleware/RecordDelivererAbstract.java
+++ b/oaipmh-core/src/main/java/info/textgrid/middleware/RecordDelivererAbstract.java
@@ -69,11 +69,10 @@ public abstract class RecordDelivererAbstract implements RecordDelivererInterfac
       if (request.getIdentifier() == null) {
         errorValues.add("identifier");
       }
-      if(errorValues.size()>0) {
-          result.setError(TGConstants.OAI_BAD_ARGUMENT, "The request includes illegal arguments "
-                  + "or is missing required arguments: " + errorValues);
+      if (errorValues.size() > 0) {
+        result.setError(TGConstants.OAI_BAD_ARGUMENT, "The request includes illegal arguments "
+            + "or is missing required arguments: " + errorValues);
       }
-
     }
 
     return result;
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 d7193d21484f0651fac385d5cbb4d4a4fd5c1be7..eccb54aa5338267acdf80473f08625b3df591133 100644
--- a/oaipmh-core/src/main/java/info/textgrid/middleware/RecordDelivererDC.java
+++ b/oaipmh-core/src/main/java/info/textgrid/middleware/RecordDelivererDC.java
@@ -34,22 +34,6 @@ public class RecordDelivererDC extends RecordDelivererAbstract {
    * several times
    */
 
-  // 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;
@@ -202,7 +186,9 @@ public class RecordDelivererDC extends RecordDelivererAbstract {
 
     GetResponse responseWorkValues = getWorkValues.execute().actionGet();
 
-    // FIXMEMAX!!!
+    // FIXME MAX!!! DO WE NEED THST DATE???
+    // FIXME MAX!!! DO WE NEED THST DATE???
+    // FIXME MAX!!! DO WE NEED THST DATE???
 
     // try {
     // if (responseWorkValues.getField(this.dateOfObjectCreation) != null) {
diff --git a/oaipmh-core/src/main/java/info/textgrid/middleware/RecordDelivererInterface.java b/oaipmh-core/src/main/java/info/textgrid/middleware/RecordDelivererInterface.java
index 8e0ee0a8d193f5c368413e6b562d666e8bbefa9c..133a902258065444fc5e24e4a3915ccade5026ea 100644
--- a/oaipmh-core/src/main/java/info/textgrid/middleware/RecordDelivererInterface.java
+++ b/oaipmh-core/src/main/java/info/textgrid/middleware/RecordDelivererInterface.java
@@ -3,8 +3,6 @@ package info.textgrid.middleware;
 import info.textgrid.middleware.oaipmh.GetRecordType;
 
 /**
- * FIXME
- * 
  * @author Maximilian Brodhun, SUB Göttingen
  * @author Stefan E. Funk, SUB Göttingen
  * @version 2019-03-07
diff --git a/oaipmh-core/src/main/java/info/textgrid/middleware/RecordListDelivererAbstract.java b/oaipmh-core/src/main/java/info/textgrid/middleware/RecordListDelivererAbstract.java
index e54a87cd9a069730296598dd7bd378926b5902f0..a62afe19609d2a17f75bac188d051f98d7913555 100644
--- a/oaipmh-core/src/main/java/info/textgrid/middleware/RecordListDelivererAbstract.java
+++ b/oaipmh-core/src/main/java/info/textgrid/middleware/RecordListDelivererAbstract.java
@@ -11,8 +11,6 @@ public abstract class RecordListDelivererAbstract implements RecordListDeliverer
 
   protected boolean textgrid;
   protected boolean dariah;
-  private static boolean idiomMets;
-  private static boolean dublinCore;
 
   /**
    * @param textgrid
@@ -40,83 +38,37 @@ public abstract class RecordListDelivererAbstract implements RecordListDeliverer
               + " is not supported by the item identified by the value of: "
               + request.getIdentifier());
     }
-    // Check if resumptioToken is valid
-    if (request.getResumptionToken() != null) {
-
-      if (RecordListDelivererAbstract.isIdiomMets()
-          && RecordListDelivererIDIOM.cursorCollector.containsKey(request.getResumptionToken())) {
-        RecordListDelivererAbstract.setIdiomMets(true);
-        RecordListDelivererAbstract.setDublinCore(false);
-      } else if (RecordListDelivererAbstract.isDublinCore()
-          && RecordListDelivererDC.cursorCollector.containsKey(request.getResumptionToken())) {
-        RecordListDelivererAbstract.setDublinCore(true);
-        RecordListDelivererAbstract.setIdiomMets(false);
-      } else {
-        result.setError(TGConstants.OAI_BAD_RESUMPTION_TOKEN,
-            "The value of the " + request.getResumptionToken()
-                + " argument is invalid or expired.");
-      }
-    }
 
-    if (request.getResumptionToken() == null && request.getMetadataPrefix() != null) {
-      if (request.getMetadataPrefix().equals(TGConstants.METADATA_IDIOM_PREFIX)) {
-        RecordListDelivererAbstract.setIdiomMets(true);
-        RecordListDelivererAbstract.setDublinCore(false);
-      }
-      if (request.getMetadataPrefix().equals(TGConstants.METADATA_DC_PREFIX)) {
-        RecordListDelivererAbstract.setDublinCore(true);
-        RecordListDelivererAbstract.setIdiomMets(false);
+    // Check if resumptionToken is invalid or existing.
+    if (request.getResumptionToken() != null) {
+      boolean restokDCExisting = RecordListDelivererIDIOM.cursorCollector != null
+          && RecordListDelivererIDIOM.cursorCollector.containsKey(request.getResumptionToken());
+      boolean restokIDIOMExisting = RecordListDelivererDC.cursorCollector != null
+          && RecordListDelivererDC.cursorCollector.containsKey(request.getResumptionToken());
+      if (restokDCExisting || restokIDIOMExisting) {
+        result.setError(TGConstants.OAI_BAD_RESUMPTION_TOKEN, "The value of the "
+            + request.getResumptionToken() + " argument is invalid or expired.");
       }
     }
 
-    // Check if other params are existing, they shouldn't!
-    else {
-      List<String> errorValues = new ArrayList<String>();
-
-      if (request.getResumptionToken() != null && request.getMetadataPrefix() != null) {
-        errorValues.add("metadataPrefix");
-      }
-      if (request.getResumptionToken() == null && request.getMetadataPrefix() == null) {
-        errorValues.add("metadataPrefix");
-      }
-      if (request.getIdentifier() != null) {
-        errorValues.add("identifier");
-      }
-      if (errorValues.size() > 0) {
-        result.setError(TGConstants.OAI_BAD_ARGUMENT, "The request includes illegal arguments "
-            + "or is missing required arguments: " + errorValues);
-      }
+    // Check params in general.
+    List<String> errorValues = new ArrayList<String>();
 
+    if (request.getResumptionToken() != null && request.getMetadataPrefix() != null) {
+      errorValues.add("metadataPrefix");
+    }
+    if (request.getResumptionToken() == null && request.getMetadataPrefix() == null) {
+      errorValues.add("metadataPrefix");
+    }
+    if (request.getIdentifier() != null) {
+      errorValues.add("identifier");
+    }
+    if (errorValues.size() > 0) {
+      result.setError(TGConstants.OAI_BAD_ARGUMENT, "The request includes illegal arguments "
+          + "or is missing required arguments: " + errorValues);
     }
 
     return result;
   }
 
-  /**
-   * @return
-   */
-  public static boolean isIdiomMets() {
-    return idiomMets;
-  }
-
-  /**
-   * @param idiomMets
-   */
-  public static void setIdiomMets(boolean idiomMets) {
-    RecordListDelivererAbstract.idiomMets = idiomMets;
-  }
-
-  /**
-   * @return
-   */
-  public static boolean isDublinCore() {
-    return dublinCore;
-  }
-
-  /**
-   * @param dublinCore
-   */
-  public static void setDublinCore(boolean dublinCore) {
-    RecordListDelivererAbstract.dublinCore = dublinCore;
-  }
 }
diff --git a/oaipmh-core/src/main/java/info/textgrid/middleware/RecordListDelivererDC.java b/oaipmh-core/src/main/java/info/textgrid/middleware/RecordListDelivererDC.java
index f50830e71057a774af39fa439dabf41d49fb62a2..7b434caeb0313fc9b58394c743fed69ff41fc7e1 100644
--- a/oaipmh-core/src/main/java/info/textgrid/middleware/RecordListDelivererDC.java
+++ b/oaipmh-core/src/main/java/info/textgrid/middleware/RecordListDelivererDC.java
@@ -5,9 +5,7 @@ import java.net.URLDecoder;
 import java.text.ParseException;
 import java.util.Hashtable;
 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;
@@ -17,7 +15,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;
@@ -25,9 +22,8 @@ import info.textgrid.middleware.oaipmh.RecordType;
 import info.textgrid.middleware.oaipmh.ResumptionTokenType;
 
 /**
- * FIXME Care about all repeatable fields as done in TITLE!
+ *
  */
-
 public class RecordListDelivererDC extends RecordListDelivererAbstract {
 
   // **
@@ -136,20 +132,19 @@ public class RecordListDelivererDC extends RecordListDelivererAbstract {
    */
   public void fetchFields(QueryBuilder query, ListRecordsType recordList, String resumptionToken,
       String set) throws UnsupportedEncodingException {
-    
+
     String scrollID = "";
     SearchResponse scrollResp;
     QueryBuilder recordFilter;
     DublinCoreBuilder dublinCoreBuilder = new DublinCoreBuilder();
     if (this.dariah == true) {
       recordFilter = query;
-    } else {    
+    } else {
       recordFilter = QueryBuilders.boolQuery().must(query)
-          .must(QueryBuilders.matchPhraseQuery(this.formatField, this.formatToFilter));      
+          .must(QueryBuilders.matchPhraseQuery(this.formatField, this.formatToFilter));
     }
 
     if (resumptionToken == null) {
-
       scrollResp = OAI_ESClient.getOaiESClient()
           .prepareSearch(OAI_ESClient.getEsIndex())
           .setScroll(new TimeValue(lifeTimeResToken))
@@ -165,7 +160,7 @@ public class RecordListDelivererDC extends RecordListDelivererAbstract {
     }
 
     log.info("Queried fields: " + this.fields.toString());
-    log.info("Life time for resumption token is set to: " + lifeTimeResToken);
+    log.info("Lifetime for resumption token is set to: " + lifeTimeResToken);
 
     scrollID = scrollResp.getScrollId();
 
@@ -196,9 +191,8 @@ public class RecordListDelivererDC extends RecordListDelivererAbstract {
           // TextGrid search!
           String workUri = "";
 
-          if (this.textgrid == true
-              && hit.getFields().get(this.formatField).values().get(0).toString()
-                  .equals(this.formatToFilter)) {
+          if (this.textgrid == true && hit.getFields().get(this.formatField).values().get(0)
+              .toString().equals(this.formatToFilter)) {
             if (hit.getFields().get(this.relationToFurtherMetadataObject) != null) {
               workUri = hit.getFields().get(this.relationToFurtherMetadataObject).values().get(0)
                   .toString().substring(this.repositoryObjectURIPrefix.length());
@@ -216,7 +210,7 @@ public class RecordListDelivererDC extends RecordListDelivererAbstract {
           }
 
           if (this.dariah == true) {
-        	  dublinCoreBuilder = putContentIntoDCFieldLists2(hit,
+            dublinCoreBuilder = putContentIntoDCFieldLists2(hit,
                 furtherDCElements(hit.getId(), OAI_ESClient.getOaiESClient()));
             buildRecord(recordList, set,
                 hit.getFields().get(this.identifierField).getValue().toString(), dublinCoreBuilder);
@@ -239,65 +233,74 @@ public class RecordListDelivererDC extends RecordListDelivererAbstract {
   /**
    * @param hit
    * @param responseWorkValues
+   * @return
    */
-  public DublinCoreBuilder putContentIntoDCFieldLists(SearchHit hit, GetResponse responseWorkValues) {
-	  
-	DublinCoreBuilder result = new DublinCoreBuilder();
-	
-	result.setContributor(DublinCoreFieldLoader.setContributor(responseWorkValues, this.contributorList));
-	result.setCoverage(DublinCoreFieldLoader.setCoverage(responseWorkValues, this.coverageList));
+  public DublinCoreBuilder putContentIntoDCFieldLists(SearchHit hit,
+      GetResponse responseWorkValues) {
+
+    DublinCoreBuilder result = new DublinCoreBuilder();
+
+    result.setContributor(
+        DublinCoreFieldLoader.setContributor(responseWorkValues, this.contributorList));
+    result.setCoverage(DublinCoreFieldLoader.setCoverage(responseWorkValues, this.coverageList));
     result.setCreator(DublinCoreFieldLoader.setCreator(responseWorkValues, this.creatorList));
     result.setDate(DublinCoreFieldLoader.setDate(responseWorkValues, this.dateList));
-    result.setDescription(DublinCoreFieldLoader.setDescription(responseWorkValues, this.descriptionList));
+    result.setDescription(
+        DublinCoreFieldLoader.setDescription(responseWorkValues, this.descriptionList));
     result.setFormat(DublinCoreFieldLoader.setFormat(hit, this.formatList));
     result.setIdentifier(DublinCoreFieldLoader.setIdentifier(hit, this.identifierList));
     result.setLanguage(DublinCoreFieldLoader.setLanguage(hit, this.languageList));
     result.setPublisher(DublinCoreFieldLoader.setPublisher(hit, this.publisherList));
     result.setRelation(DublinCoreFieldLoader.setRelation(hit, this.relationList));
-    result.setRelation(DublinCoreFieldLoader.setRelationForWork(responseWorkValues, this.relationForWorkList));
+    result.setRelation(
+        DublinCoreFieldLoader.setRelationForWork(responseWorkValues, this.relationForWorkList));
     result.setRights(DublinCoreFieldLoader.setRights(hit, this.rightList));
     result.setSource(DublinCoreFieldLoader.setSources(hit, this.sourceList));
     result.setSubject(DublinCoreFieldLoader.setSubject(hit, this.subjectList));
     result.setTitle(DublinCoreFieldLoader.setTitle(hit, this.titleList));
     result.setType(DublinCoreFieldLoader.setType(responseWorkValues, this.typeList));
-    
+
     return result;
   }
 
   /**
    * @param hit
    * @param responseWorkValues
+   * @return
    */
-  public DublinCoreBuilder putContentIntoDCFieldLists2(SearchHit hit, GetResponse responseWorkValues) {
-	  
-	DublinCoreBuilder result = new DublinCoreBuilder();
-	
-	result.setContributor(DublinCoreFieldLoader.setContributor(hit, this.contributorList));
-	result.setCoverage(DublinCoreFieldLoader.setCoverage(hit, this.coverageList));
-	result.setCreator(DublinCoreFieldLoader.setCreator(hit, this.creatorList));
-	result.setDate(DublinCoreFieldLoader.setDate(hit, this.dateList));
-	result.setDescription(DublinCoreFieldLoader.setDescription(hit, this.descriptionList));
-	result.setFormat(DublinCoreFieldLoader.setFormat(hit, this.formatList));
-	result.setIdentifier(DublinCoreFieldLoader.setIdentifier(hit, this.identifierList));
-	result.setLanguage(DublinCoreFieldLoader.setLanguage(hit, this.languageList));
-	result.setPublisher(DublinCoreFieldLoader.setPublisher(hit, this.publisherList));
-	result.setRelation(DublinCoreFieldLoader.setRelation(hit, this.relationList));
-	result.setRights(DublinCoreFieldLoader.setRights(hit, this.rightList));
-	result.setSource(DublinCoreFieldLoader.setSources(hit, this.sourceList));
-	result.setSubject(DublinCoreFieldLoader.setSources(hit, this.subjectList));
-	result.setTitle(DublinCoreFieldLoader.setTitle(hit, this.titleList));
-	result.setType(DublinCoreFieldLoader.setType(hit, this.typeList));
-	
-	return result;
+  public DublinCoreBuilder putContentIntoDCFieldLists2(SearchHit hit,
+      GetResponse responseWorkValues) {
+
+    DublinCoreBuilder result = new DublinCoreBuilder();
+
+    result.setContributor(DublinCoreFieldLoader.setContributor(hit, this.contributorList));
+    result.setCoverage(DublinCoreFieldLoader.setCoverage(hit, this.coverageList));
+    result.setCreator(DublinCoreFieldLoader.setCreator(hit, this.creatorList));
+    result.setDate(DublinCoreFieldLoader.setDate(hit, this.dateList));
+    result.setDescription(DublinCoreFieldLoader.setDescription(hit, this.descriptionList));
+    result.setFormat(DublinCoreFieldLoader.setFormat(hit, this.formatList));
+    result.setIdentifier(DublinCoreFieldLoader.setIdentifier(hit, this.identifierList));
+    result.setLanguage(DublinCoreFieldLoader.setLanguage(hit, this.languageList));
+    result.setPublisher(DublinCoreFieldLoader.setPublisher(hit, this.publisherList));
+    result.setRelation(DublinCoreFieldLoader.setRelation(hit, this.relationList));
+    result.setRights(DublinCoreFieldLoader.setRights(hit, this.rightList));
+    result.setSource(DublinCoreFieldLoader.setSources(hit, this.sourceList));
+    result.setSubject(DublinCoreFieldLoader.setSources(hit, this.subjectList));
+    result.setTitle(DublinCoreFieldLoader.setTitle(hit, this.titleList));
+    result.setType(DublinCoreFieldLoader.setType(hit, this.typeList));
+
+    return result;
   }
 
   /**
    * @param recordList
    * @param set
    * @param headerIdentifier
+   * @param dublinCoreBuilder
    * @return
    */
-  public RecordType buildRecord(ListRecordsType recordList, String set, String headerIdentifier, DublinCoreBuilder dublinCoreBuilder) {
+  public RecordType buildRecord(ListRecordsType recordList, String set, String headerIdentifier,
+      DublinCoreBuilder dublinCoreBuilder) {
 
     MetadataType metadata = new MetadataType();
     RecordType record = new RecordType();
@@ -310,12 +313,11 @@ public class RecordListDelivererDC extends RecordListDelivererAbstract {
     return record;
   }
 
-  /**
-   * @param from
-   * @param to
-   * @param set
-   * @param resumptionToken
-   * @return
+  /*
+   * (non-Javadoc)
+   * 
+   * @see info.textgrid.middleware.RecordListDelivererInterface#getRecords(java.lang.String,
+   * java.lang.String, java.lang.String, java.lang.String)
    */
   public ListRecordsType getRecords(String from, String to, String set, String resumptionToken) {
 
diff --git a/oaipmh-core/src/main/java/info/textgrid/middleware/RecordListDelivererIDIOM.java b/oaipmh-core/src/main/java/info/textgrid/middleware/RecordListDelivererIDIOM.java
index a5950d92fedaa60c205cfb6e7c49a2f425618536..4eacaf08c7cb0c0444db87991807a9180fefc5e7 100644
--- a/oaipmh-core/src/main/java/info/textgrid/middleware/RecordListDelivererIDIOM.java
+++ b/oaipmh-core/src/main/java/info/textgrid/middleware/RecordListDelivererIDIOM.java
@@ -28,17 +28,14 @@ public class RecordListDelivererIDIOM extends RecordListDelivererAbstract {
    */
   public RecordListDelivererIDIOM(boolean textgrid, boolean dariah) {
     super(textgrid, dariah);
-    // TODO Auto-generated constructor stub
   }
 
-  /*
-   * (non-Javadoc)
-   * 
-   * @see
-   * info.textgrid.middleware.RecordListDelivererInterface#buildRecord(info.textgrid.middleware.
-   * oaipmh.ListRecordsType, java.lang.String, java.lang.String)
+  /**
+   * @param recordList
+   * @param set
+   * @param headerIdentifier
+   * @return
    */
-  //@Override
   public RecordType buildRecord(ListRecordsType recordList, String set, String headerIdentifier) {
 
     MetadataType metadata = new MetadataType();
@@ -74,8 +71,6 @@ public class RecordListDelivererIDIOM extends RecordListDelivererAbstract {
       // because we are using a hash map for counting the calls).
       resTokenValue = UUID.randomUUID().toString();
     } else {
-      // FIXME @Max: Hier gibt's eine NPE, wenn ein resumptionToken für oai_dc existiert. Komisch?
-
       // Use given resumption token here.
       artefactURIs = queries.getArtefactList(cursorCollector.get(resumptionToken));
     }
@@ -108,7 +103,6 @@ public class RecordListDelivererIDIOM extends RecordListDelivererAbstract {
    */
   @Override
   public HeaderType setHeader(String set, String headerIdentifier) {
-    // TODO Auto-generated method stub
     return null;
   }
 
diff --git a/oaipmh-core/src/main/java/info/textgrid/middleware/RecordListDelivererInterface.java b/oaipmh-core/src/main/java/info/textgrid/middleware/RecordListDelivererInterface.java
index 8fa99ea2eb121ded5452d98c4936d06d43d34742..1dd1f5832b436c2cbb48e67d84ade5af662ca634 100644
--- a/oaipmh-core/src/main/java/info/textgrid/middleware/RecordListDelivererInterface.java
+++ b/oaipmh-core/src/main/java/info/textgrid/middleware/RecordListDelivererInterface.java
@@ -3,9 +3,25 @@ package info.textgrid.middleware;
 import info.textgrid.middleware.oaipmh.HeaderType;
 import info.textgrid.middleware.oaipmh.ListRecordsType;
 
+/**
+ *
+ */
 public interface RecordListDelivererInterface {
-	
-	 public ListRecordsType getRecords(String from, String to, String set, String resumptionToken);
-	 public HeaderType setHeader(String set, String headerIdentifier);
+
+  /**
+   * @param from
+   * @param to
+   * @param set
+   * @param resumptionToken
+   * @return
+   */
+  public ListRecordsType getRecords(String from, String to, String set, String resumptionToken);
+
+  /**
+   * @param set
+   * @param headerIdentifier
+   * @return
+   */
+  public HeaderType setHeader(String set, String headerIdentifier);
 
 }
diff --git a/oaipmh-core/src/main/java/info/textgrid/middleware/Rest.java b/oaipmh-core/src/main/java/info/textgrid/middleware/Rest.java
index 6ca40e02a4be5d6878f3b138faf077f89ba93e1d..391f12fa45aaf1f306a98938bdb6db976282f857 100644
--- a/oaipmh-core/src/main/java/info/textgrid/middleware/Rest.java
+++ b/oaipmh-core/src/main/java/info/textgrid/middleware/Rest.java
@@ -1,18 +1,15 @@
 package info.textgrid.middleware;
 
-import info.textgrid.utils.httpclient.TGHttpConnection;
-
 import java.io.IOException;
 import java.io.InputStream;
 import java.util.Properties;
-
 import javax.ws.rs.GET;
 import javax.ws.rs.Path;
 import javax.ws.rs.Produces;
 import javax.ws.rs.core.Response;
-
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+import info.textgrid.utils.httpclient.TGHttpConnection;
 
 /**
  *
diff --git a/oaipmh-core/src/test/java/info/textgrid/middleware/OaiPmhTextgridOnlineTests.java b/oaipmh-core/src/test/java/info/textgrid/middleware/OaiPmhTextgridOnlineTests.java
index 3e03336ceb4ea49c8c37a113487dcb3ca49d00b2..fc636837280db849529fe44b50cc5d8d361d7374 100644
--- a/oaipmh-core/src/test/java/info/textgrid/middleware/OaiPmhTextgridOnlineTests.java
+++ b/oaipmh-core/src/test/java/info/textgrid/middleware/OaiPmhTextgridOnlineTests.java
@@ -56,7 +56,7 @@ public class OaiPmhTextgridOnlineTests {
   // private static String host = "http://localhost:8080/oaipmh-webapp/";
 
   // Time to wait between the single queries using resumption tokens in milliseconds.
-  private static final Long TIME = 250l;
+  private static final Long TIME = 50l;
 
   // **
   // PREPARATIONS
@@ -483,6 +483,30 @@ public class OaiPmhTextgridOnlineTests {
     System.out.println(OK + ": [A1]=" + f1.get() + ", [A2]=" + f2.get() + ", [A3]=" + f3.get());
   }
 
+  /**
+   * @throws InterruptedException
+   * @throws ExecutionException
+   */
+  @Test
+  public void testRestokConcurrentlyListIdentifiersDCAndIDIOMMets()
+      throws InterruptedException, ExecutionException {
+
+    System.out.println(TESTING + "testRestokConcurrentlyListIdentifiersDCAndIDIOMMets()");
+
+    ExecutorService executor = Executors.newFixedThreadPool(3);
+
+    Future<Boolean> f1 = executor.submit(new OaiPmhResumptionTokenTestThread(VERB_LIST_IDENTIFIERS,
+        NO_SET, OAI_DC_PREFIX, 201, 100, "[DC1]"));
+    Future<Boolean> f2 = executor.submit(new OaiPmhResumptionTokenTestThread(VERB_LIST_IDENTIFIERS,
+        NO_SET, OAI_DC_PREFIX, 199, 100, "[DC2]"));
+    Future<Boolean> f3 = executor.submit(new OaiPmhResumptionTokenTestThread(VERB_LIST_IDENTIFIERS,
+        NO_SET, OAI_IDIOMMETS_PREFIX, 3, 30, "[IDIOM3]"));
+
+    executor.shutdown();
+
+    System.out.println(OK + ": [A1]=" + f1.get() + ", [A2]=" + f2.get() + ", [A3]=" + f3.get());
+  }
+
   /**
    * @throws IOException
    * @throws InterruptedException
@@ -507,6 +531,31 @@ public class OaiPmhTextgridOnlineTests {
     System.out.println(OK + ": [B1]=" + f1.get() + ", [B2]=" + f2.get() + ", [B3]=" + f3.get());
   }
 
+  /**
+   * @throws InterruptedException
+   * @throws ExecutionException
+   */
+  @Test
+  public void testRestokConcurrentlyListRecordsDCAndIDIOMMets()
+      throws InterruptedException, ExecutionException {
+
+    System.out.println(TESTING + "testRestokConcurrentlyListRecordsAndIDIOMMets()");
+
+    ExecutorService executor = Executors.newFixedThreadPool(3);
+
+    Future<Boolean> f1 = executor.submit(new OaiPmhResumptionTokenTestThread(VERB_LIST_RECORDS,
+        NO_SET, OAI_DC_PREFIX, 66, 100, "[DC1]"));
+    Future<Boolean> f2 = executor.submit(new OaiPmhResumptionTokenTestThread(VERB_LIST_RECORDS,
+        NO_SET, OAI_DC_PREFIX, 77, 100, "[DC2]"));
+    Future<Boolean> f3 = executor.submit(new OaiPmhResumptionTokenTestThread(VERB_LIST_RECORDS,
+        NO_SET, OAI_IDIOMMETS_PREFIX, 3, 30, "[IDIOM1]"));
+
+    executor.shutdown();
+
+    System.out
+        .println(OK + ": [DC1]=" + f1.get() + ", [DC2]=" + f2.get() + ", [IOIOM1]=" + f3.get());
+  }
+
   /**
    * @throws IOException
    * @throws InterruptedException
diff --git a/pom.xml b/pom.xml
index 80d1dc9c3cba7c46c9d088213e056f227b276130..cdf19ed3ce4c9dfee6aed8e08095e94e99bb8182 100644
--- a/pom.xml
+++ b/pom.xml
@@ -8,7 +8,7 @@
 	<packaging>pom</packaging>
 	<name>DARIAHDE :: OAI-PMH DataProvider</name>
 	<properties>
-		<tgcrud.version>9.7.1-TG</tgcrud.version>
+		<tgcrud.version>9.8.2-DH</tgcrud.version>
 		<tghttpclients.version>3.3.1</tghttpclients.version>
 		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
 		<cxf.version>3.2.8</cxf.version>