diff --git a/oaipmh-core/src/main/java/info/textgrid/middleware/IDIOMImages.java b/oaipmh-core/src/main/java/info/textgrid/middleware/IDIOMImages.java
index ba9f5d66657f9ce9808f60c6fd2923618c1e875f..b85b02d56ccd72fdad9d044dc37bf1cf7eec331c 100644
--- a/oaipmh-core/src/main/java/info/textgrid/middleware/IDIOMImages.java
+++ b/oaipmh-core/src/main/java/info/textgrid/middleware/IDIOMImages.java
@@ -39,6 +39,7 @@ import info.textgrid.middleware.oaipmh.ResumptionTokenType;
 /**
  *
  */
+// FIXME Why do we have to implement three classes??
 public class IDIOMImages implements RecordDelivererInterface, RecordListDelivererInterface,
     IdentifierListDelivererInterface {
 
@@ -48,7 +49,8 @@ public class IDIOMImages implements RecordDelivererInterface, RecordListDelivere
   private String perPage;
   private String pageNumber;
   private int totalHits;
-  private String rbacSessionID;
+  private String idiomRbacSessionID;
+  private String idiomTGCrudEndpoint;
 
   private static Map<String, Integer> cursorCollector = new Hashtable<String, Integer>();
   private static Map<String, String> fromUntilCollector = new Hashtable<String, String>();
@@ -170,7 +172,8 @@ public class IDIOMImages implements RecordDelivererInterface, RecordListDelivere
    *
    */
   @Override
-  public GetRecordType getRecordById(String id) throws JSONException, IOException, ParseException {
+  public GetRecordType getRecordById(final String id)
+      throws JSONException, IOException, ParseException {
 
     GetRecordType singleImageMetsMods = new GetRecordType();
     RecordType conedaKorRecord = new RecordType();
@@ -181,31 +184,33 @@ public class IDIOMImages implements RecordDelivererInterface, RecordListDelivere
 
     ImageMetsMods immByTGURI = null;
 
+    String changedID = id;
     if (!id.startsWith("textgrid:")) {
-      id = "textgrid:" + id;
+      changedID = "textgrid:" + id;
     }
 
-    log.fine("processing id: " + id);
+    log.fine("processing id: " + changedID);
 
     try {
-      immByTGURI = new ImageMetsMods(new TextGridUri(id), this.rbacSessionID);
+      immByTGURI = new ImageMetsMods(this.idiomTGCrudEndpoint, this.idiomRbacSessionID,
+          new TextGridUri(changedID));
 
       log.fine("image id/title: " + immByTGURI.getID() + " / " + immByTGURI.getTitle());
 
       builder = factory.newDocumentBuilder();
 
-      log.fine("immByTGURI: " + (immByTGURI != null ? immByTGURI.getXML() : "NULL"));
+      log.fine("immByTGURI: " + immByTGURI.getXML());
 
       Document doc = builder.parse(new InputSource(new StringReader(immByTGURI.getXML())));
       metadataMets.setAny(doc.getDocumentElement());
       conedaKorRecord.setMetadata(metadataMets);
-      if (id.contains(".")) {
+      if (changedID.contains(".")) {
         conedaKorRecord.setHeader(buildOAIPMH_RecordHeader(
             OAIPMHUtilities.datestampAsString(immByTGURI.getCreationDate()),
-            id.substring(0, id.indexOf("."))));
+            changedID.substring(0, changedID.indexOf("."))));
       } else {
         conedaKorRecord.setHeader(buildOAIPMH_RecordHeader(
-            OAIPMHUtilities.datestampAsString(immByTGURI.getCreationDate()), id));
+            OAIPMHUtilities.datestampAsString(immByTGURI.getCreationDate()), changedID));
       }
 
       singleImageMetsMods.setRecord(conedaKorRecord);
@@ -405,15 +410,29 @@ public class IDIOMImages implements RecordDelivererInterface, RecordListDelivere
   /**
    * @return
    */
-  public String getRbacSessionID() {
-    return this.rbacSessionID;
+  public String getIdiomRbacSessionID() {
+    return this.idiomRbacSessionID;
+  }
+
+  /**
+   * @param idiomRbacSessionID
+   */
+  public void setIdiomRbacSessionID(String idiomRbacSessionID) {
+    this.idiomRbacSessionID = idiomRbacSessionID;
+  }
+
+  /**
+   * @return
+   */
+  public String getIdiomTGCrudEndpoint() {
+    return this.idiomTGCrudEndpoint;
   }
 
   /**
-   * @param rbacSessionID
+   * @param idiomTGCrudEndpoint
    */
-  public void setRbacSessionID(String rbacSessionID) {
-    this.rbacSessionID = rbacSessionID;
+  public void setIdiomTGCrudEndpoint(String idiomTGCrudEndpoint) {
+    this.idiomTGCrudEndpoint = idiomTGCrudEndpoint;
   }
 
   /**
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 8d2466ee1ca8a46cb67a234b0cb34f178f932fe2..bbe1aad3bb625385905a5b7d3660060780b7495b 100644
--- a/oaipmh-core/src/main/java/info/textgrid/middleware/IdentifierListDelivererAbstract.java
+++ b/oaipmh-core/src/main/java/info/textgrid/middleware/IdentifierListDelivererAbstract.java
@@ -25,17 +25,16 @@ import info.textgrid.middleware.oaipmh.ResumptionTokenType;
 public abstract class IdentifierListDelivererAbstract implements IdentifierListDelivererInterface {
 
   // **
-  // FINALS
+  // STATIC
   // **
 
-  protected static final int lifeTimeResToken = 100;
+  private static Logger log = Logger.getLogger(IdentifierListDelivererAbstract.class.getName());
 
   // **
-  // STATIC
+  // FINALS
   // **
 
-  // FIXME Why is a global logger defined here?
-  private static Logger log = Logger.getGlobal();
+  protected static final int lifeTimeResToken = 100;
 
   // **
   // CLASS
@@ -173,11 +172,11 @@ public abstract class IdentifierListDelivererAbstract implements IdentifierListD
     }
 
     // Check the need for a resumption token!
-    ResumptionTokenType resTokenForResponse = OAIPMHUtilities.getResumptionToken(
+    ResumptionTokenType responseToken = OAIPMHUtilities.getResumptionToken(
         listFurtherValues.getHits().getTotalHits(), resumptionToken, cursorCollector,
         listFurtherValues.getScrollId(), this.searchResponseSize, i);
-    if (resTokenForResponse != null) {
-      lit.setResumptionToken(resTokenForResponse);
+    if (responseToken != null) {
+      lit.setResumptionToken(responseToken);
     }
 
     return listFurtherValues;
diff --git a/oaipmh-core/src/main/java/info/textgrid/middleware/IdentifierListDelivererIDIOM.java b/oaipmh-core/src/main/java/info/textgrid/middleware/IdentifierListDelivererIDIOM.java
index cfab7f61852a489e004f898b5be4511eb5407f61..1ac7ea379871cbcc151e8d0cf83604448b5ed553 100644
--- a/oaipmh-core/src/main/java/info/textgrid/middleware/IdentifierListDelivererIDIOM.java
+++ b/oaipmh-core/src/main/java/info/textgrid/middleware/IdentifierListDelivererIDIOM.java
@@ -4,6 +4,7 @@ import java.io.IOException;
 import java.text.ParseException;
 import java.util.Hashtable;
 import java.util.Map;
+import java.util.logging.Logger;
 import org.elasticsearch.action.search.SearchRequest;
 import org.elasticsearch.action.search.SearchResponse;
 import org.elasticsearch.action.search.SearchScrollRequest;
@@ -19,7 +20,9 @@ import info.textgrid.middleware.oaipmh.ListIdentifiersType;
 import info.textgrid.middleware.oaipmh.ResumptionTokenType;
 
 /**
- *
+ * @author Max Brodhun, SUB Göttingen
+ * @author Stefan E. Funk, SUB Göttingen
+ * @version 2022-09-13
  */
 public class IdentifierListDelivererIDIOM extends IdentifierListDelivererAbstract {
 
@@ -27,6 +30,8 @@ public class IdentifierListDelivererIDIOM extends IdentifierListDelivererAbstrac
   // STATICS
   // **
 
+  private static Logger log = Logger.getLogger(IdentifierListDelivererIDIOM.class.getName());
+
   private static Map<String, Integer> cursorCollector = new Hashtable<String, Integer>();
 
   // **
@@ -44,41 +49,30 @@ public class IdentifierListDelivererIDIOM extends IdentifierListDelivererAbstrac
     super(textgrid, dariah);
   }
 
-  /*
-   * (non-Javadoc)
-   * 
-   * @see info.textgrid.middleware.IdentifierListDelivererAbstract#processIdentifierList(java.lang.
-   * String, java.lang.String, java.lang.String, java.lang.String)
+  /**
+   *
    */
   @Override
   public ListIdentifiersType processIdentifierList(final String from, final String to,
       final String set, final String resumptionToken) throws ParseException, IOException {
 
     ListIdentifiersType identifierList = new ListIdentifiersType();
-
     BoolQueryBuilder recordFilterForClassicMayan;
-
-    BoolQueryBuilder both;
-
     RangeQueryBuilder rangeQuery = QueryBuilders.rangeQuery("lastModified").from(from).to(to);
 
-    BoolQueryBuilder test = QueryBuilders.boolQuery().must(
+    BoolQueryBuilder projectQuery = QueryBuilders.boolQuery().must(
         QueryBuilders.matchPhraseQuery("project.id", "TGPR-0e926f53-1aba-d415-ecf6-539edcd8a318"));
-
-    BoolQueryBuilder artefact = QueryBuilders.boolQuery()
+    BoolQueryBuilder artefactQuery = QueryBuilders.boolQuery()
         .must(QueryBuilders.matchPhraseQuery("format", "text/tg.inputform+rdf+xml"))
         .must(QueryBuilders.matchPhraseQuery("notes", "ARTEFACT"));
-
-    BoolQueryBuilder conedakor = QueryBuilders.boolQuery()
+    BoolQueryBuilder conedakorQuery = QueryBuilders.boolQuery()
         .must(QueryBuilders.matchPhraseQuery("format", "application/json"))
         .must(QueryBuilders.matchPhraseQuery("notes", "ConedaKorMediumData"));
 
+    BoolQueryBuilder both = QueryBuilders.boolQuery().should(artefactQuery).should(conedakorQuery);
 
-    both = QueryBuilders.boolQuery().should(artefact).should(conedakor);
-
-    BoolQueryBuilder bla = QueryBuilders.boolQuery().must(rangeQuery)
-        .must(test.filter(both));
-
+    BoolQueryBuilder bla =
+        QueryBuilders.boolQuery().must(rangeQuery).must(projectQuery.filter(both));
     recordFilterForClassicMayan = bla;
 
     SearchResponse scrollResp;
@@ -92,6 +86,9 @@ public class IdentifierListDelivererIDIOM extends IdentifierListDelivererAbstrac
     searchSourceBuilder.size(this.idiomResponseSize);
     searchRequest.source(searchSourceBuilder);
 
+    log.fine("es elient/index: " + (this.oaiEsClient == null ? "null" : this.oaiEsClient) + "/"
+        + (this.oaiEsClient == null ? "null" : this.oaiEsClient.getEsIndex()));
+
     if (resumptionToken != null) {
       SearchScrollRequest scrollRequest = new SearchScrollRequest(resumptionToken);
       scrollRequest.scroll(TimeValue.timeValueHours(24L));
@@ -111,15 +108,11 @@ public class IdentifierListDelivererIDIOM extends IdentifierListDelivererAbstrac
         // TODO Auto-generated catch block
         e.printStackTrace();
       }
-      // scrollResp = OAI_ESClient.getEsClient().prepareSearchScroll(resumptionToken)
-      // .setScroll(TimeValue.timeValueHours(24L)).execute().actionGet();
     }
 
     String scrollID = scrollResp.getScrollId();
 
     long completeListSize = scrollResp.getHits().totalHits;
-
-    // long listSize = Queries.getAmountOfArtefacts();
     if (completeListSize > 0) {
       setFoundItems(true);
       int i = 0;
@@ -130,17 +123,21 @@ public class IdentifierListDelivererIDIOM extends IdentifierListDelivererAbstrac
             OAIPMHUtilities.fieldLoader(new JSONObject(hit.getSourceAsMap()), "textgridUri");
 
         RecordDelivererIDIOM idiomRecord = new RecordDelivererIDIOM(true, false);
-
+        // IF we really do need the RecordDelivererIDIOM object here, we have to set the
+        // elasticsearch client!
+        idiomRecord.setOaiEsClient(this.oaiEsClient);
+        // FIXME BTW: We only need ID and DATESTAMP for ListIdentifiers, WHY do we get every
+        // complete RECORD??
         identifierList.getHeader()
             .add(idiomRecord.getRecordById(textgridURI.replace(".0", "")).getRecord().getHeader());
       }
 
       // Check the need for a resumption token!
-      ResumptionTokenType resTokenForResponse = OAIPMHUtilities.getResumptionToken(completeListSize,
+      ResumptionTokenType responseToken = OAIPMHUtilities.getResumptionToken(completeListSize,
           resumptionToken, cursorCollector, scrollID, this.idiomResponseSize, i);
 
-      if (resTokenForResponse != null) {
-        identifierList.setResumptionToken(resTokenForResponse);
+      if (responseToken != null) {
+        identifierList.setResumptionToken(responseToken);
       }
     } else {
       setFoundItems(false);
diff --git a/oaipmh-core/src/main/java/info/textgrid/middleware/MetadataFormatListDelivererAbs.java b/oaipmh-core/src/main/java/info/textgrid/middleware/MetadataFormatListDelivererAbstract.java
similarity index 95%
rename from oaipmh-core/src/main/java/info/textgrid/middleware/MetadataFormatListDelivererAbs.java
rename to oaipmh-core/src/main/java/info/textgrid/middleware/MetadataFormatListDelivererAbstract.java
index 841f32dca5cd552953d78c6e339ed2ad8488e1fb..81dfae0452d75e74d33b8557a31250e8d5a45737 100644
--- a/oaipmh-core/src/main/java/info/textgrid/middleware/MetadataFormatListDelivererAbs.java
+++ b/oaipmh-core/src/main/java/info/textgrid/middleware/MetadataFormatListDelivererAbstract.java
@@ -7,7 +7,7 @@ import info.textgrid.middleware.oaipmh.RequestType;
 /**
  *
  */
-public abstract class MetadataFormatListDelivererAbs
+public abstract class MetadataFormatListDelivererAbstract
     implements MetadataFormatListDelivererInterface {
 
   //
@@ -22,7 +22,7 @@ public abstract class MetadataFormatListDelivererAbs
    * @param textgrid
    * @param dariah
    */
-  public MetadataFormatListDelivererAbs() {
+  public MetadataFormatListDelivererAbstract() {
     //
   }
 
diff --git a/oaipmh-core/src/main/java/info/textgrid/middleware/MetadataFormatListDelivererDH.java b/oaipmh-core/src/main/java/info/textgrid/middleware/MetadataFormatListDelivererDH.java
index eb6424f58936129071cbb4e38e2e19b08a9de3ed..38ac270b2d45cd9715da22c98373cdf7df13d103 100644
--- a/oaipmh-core/src/main/java/info/textgrid/middleware/MetadataFormatListDelivererDH.java
+++ b/oaipmh-core/src/main/java/info/textgrid/middleware/MetadataFormatListDelivererDH.java
@@ -5,7 +5,7 @@ import info.textgrid.middleware.oaipmh.ListMetadataFormatsType;
 /**
  *
  */
-public class MetadataFormatListDelivererDH extends MetadataFormatListDelivererAbs {
+public class MetadataFormatListDelivererDH extends MetadataFormatListDelivererAbstract {
 
   /**
    * @param textgrid
diff --git a/oaipmh-core/src/main/java/info/textgrid/middleware/MetadataFormatListDelivererTG.java b/oaipmh-core/src/main/java/info/textgrid/middleware/MetadataFormatListDelivererTG.java
index e7628670d27edef265f54408895b5df0de91aff4..0e003c06fb8580fc7cb51dcf3ea96d5b67cd1b9b 100644
--- a/oaipmh-core/src/main/java/info/textgrid/middleware/MetadataFormatListDelivererTG.java
+++ b/oaipmh-core/src/main/java/info/textgrid/middleware/MetadataFormatListDelivererTG.java
@@ -12,7 +12,7 @@ import info.textgrid.middleware.oaipmh.MetadataFormatType;
 /**
  *
  */
-public class MetadataFormatListDelivererTG extends MetadataFormatListDelivererAbs {
+public class MetadataFormatListDelivererTG extends MetadataFormatListDelivererAbstract {
 
   /**
    * 
diff --git a/oaipmh-core/src/main/java/info/textgrid/middleware/RecordDelivererDATACITE.java b/oaipmh-core/src/main/java/info/textgrid/middleware/RecordDelivererDATACITE.java
index e4ca5b39826fb9357cec13bb0239a57f9838358a..74f10c0b9e912345774726c396393c0aa04e11ca 100644
--- a/oaipmh-core/src/main/java/info/textgrid/middleware/RecordDelivererDATACITE.java
+++ b/oaipmh-core/src/main/java/info/textgrid/middleware/RecordDelivererDATACITE.java
@@ -1,11 +1,8 @@
 package info.textgrid.middleware;
 
-import java.io.FileInputStream;
 import java.io.IOException;
-import java.io.InputStream;
 import java.text.ParseException;
 import java.util.List;
-import java.util.Properties;
 import java.util.logging.Logger;
 import javax.xml.datatype.DatatypeConfigurationException;
 import org.elasticsearch.common.Strings;
diff --git a/oaipmh-core/src/main/java/info/textgrid/middleware/RecordDelivererIDIOM.java b/oaipmh-core/src/main/java/info/textgrid/middleware/RecordDelivererIDIOM.java
index 5d2f9b620c7abc4402228eb01bc73314ef3f9ae4..c14907b472c8a5dbfcce0acd8ed814c4a30bb048 100644
--- a/oaipmh-core/src/main/java/info/textgrid/middleware/RecordDelivererIDIOM.java
+++ b/oaipmh-core/src/main/java/info/textgrid/middleware/RecordDelivererIDIOM.java
@@ -24,7 +24,7 @@ import info.textgrid.middleware.oaipmh.RecordType;
 /**
  * @author Maximilian Brodhun, SUB Göttingen
  * @author Stefan E. Funk, SUB Göttingen
- * @version 2022-09-09
+ * @version 2022-09-19
  * @since 2019-03-12
  */
 @Component
@@ -67,6 +67,8 @@ public class RecordDelivererIDIOM extends RecordDelivererAbstract {
       changedId = changedId + ".0";
     }
 
+    log.fine("changedId: " + changedId);
+
     JSONObject json = new JSONObject();
     String[] fields = {TGConstants.CREATED, TGConstants.MODIFIED_FIELD, "notes"};
 
@@ -135,6 +137,7 @@ public class RecordDelivererIDIOM extends RecordDelivererAbstract {
         e.printStackTrace();
       }
     } else if (this.getObjectType().startsWith("ConedaKorMediumData")) {
+
       GetRecordType idi = new IDIOMImages().getRecordById(id);
       // Fixes #64
       if (idi != null) {
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 66442f05bc953272b70015e091fe8c723e698f9c..97523e4a4e6596eb901287b7efa1485c5c247fa2 100644
--- a/oaipmh-core/src/main/java/info/textgrid/middleware/RecordListDelivererIDIOM.java
+++ b/oaipmh-core/src/main/java/info/textgrid/middleware/RecordListDelivererIDIOM.java
@@ -23,7 +23,7 @@ import info.textgrid.middleware.oaipmh.ResumptionTokenType;
 /**
  * @author Maximilian Brodhun, SUB Göttingen
  * @author Stefan E. Funk, SUB Göttingen
- * @version 2022-09-07
+ * @version 2022-09-19
  * @since
  */
 public class RecordListDelivererIDIOM extends RecordListDelivererAbstract {
@@ -33,11 +33,13 @@ public class RecordListDelivererIDIOM extends RecordListDelivererAbstract {
   // **
 
   private static Logger log = Logger.getLogger(RecordListDelivererIDIOM.class.getName());
-
   private static Map<String, Integer> cursorCollector = new Hashtable<String, Integer>();
 
-  private RecordDelivererIDIOM idiomRecord;
+  // **
+  // CLASS
+  // **
 
+  private RecordDelivererIDIOM idiomRecord;
   // Set default to 30, can be changed in oaipmh.properties.
   private int idiomResponseSize = 30;
 
@@ -60,21 +62,21 @@ public class RecordListDelivererIDIOM extends RecordListDelivererAbstract {
 
     RangeQueryBuilder rangeQuery = QueryBuilders.rangeQuery("lastModified").from(from).to(to);
 
-    BoolQueryBuilder test = QueryBuilders.boolQuery().must(
+    BoolQueryBuilder projectQuery = QueryBuilders.boolQuery().must(
         QueryBuilders.matchPhraseQuery("project.id", "TGPR-0e926f53-1aba-d415-ecf6-539edcd8a318"));
 
-    BoolQueryBuilder artefact = QueryBuilders.boolQuery()
+    BoolQueryBuilder artefactQuery = QueryBuilders.boolQuery()
         .must(QueryBuilders.matchPhraseQuery("format", "text/tg.inputform+rdf+xml"))
         .must(QueryBuilders.matchPhraseQuery("notes", "ARTEFACT"));
 
-    BoolQueryBuilder conedakor = QueryBuilders.boolQuery()
+    BoolQueryBuilder conedakorQuery = QueryBuilders.boolQuery()
         .must(QueryBuilders.matchPhraseQuery("format", "application/json"))
         .must(QueryBuilders.matchPhraseQuery("notes", "ConedaKorMediumData"));
 
-    BoolQueryBuilder both = QueryBuilders.boolQuery().should(artefact).should(conedakor);
+    BoolQueryBuilder both = QueryBuilders.boolQuery().should(artefactQuery).should(conedakorQuery);
 
     BoolQueryBuilder queryBuilder =
-        QueryBuilders.boolQuery().must(rangeQuery).must(test.filter(both));
+        QueryBuilders.boolQuery().must(rangeQuery).must(projectQuery.filter(both));
     BoolQueryBuilder recordFilterForClassicMayan = queryBuilder;
     // QueryBuilders.boolQuery().must(rangeQuery).should(recordFilteroClassicMayanARTEFACT).should(recordFilterForClassicMayanCONEDAKOR);
 
diff --git a/oaipmh-core/src/test/java/info/textgrid/middleware/test/online/tg/OAIPMHUtilitiesOnline.java b/oaipmh-core/src/test/java/info/textgrid/middleware/test/online/tg/OAIPMHUtilitiesOnline.java
deleted file mode 100644
index bf1aaa4e732ee5bf053b872e1565ecbd0225ac4e..0000000000000000000000000000000000000000
--- a/oaipmh-core/src/test/java/info/textgrid/middleware/test/online/tg/OAIPMHUtilitiesOnline.java
+++ /dev/null
@@ -1,703 +0,0 @@
-package info.textgrid.middleware.test.online;
-
-import static org.junit.Assert.assertTrue;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.URISyntaxException;
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Properties;
-import javax.ws.rs.core.Response;
-import org.apache.cxf.helpers.IOUtils;
-import org.apache.cxf.jaxrs.client.Client;
-import org.apache.cxf.jaxrs.client.JAXRSClientFactory;
-import org.apache.cxf.jaxrs.client.WebClient;
-import org.apache.cxf.transport.http.HTTPConduit;
-import org.apache.cxf.transports.http.configuration.HTTPClientPolicy;
-import org.apache.http.HttpStatus;
-import info.textgrid.middleware.OAIPMHProducer;
-
-/**
- * <p>
- * Some online tests for the TextGrid OAIMPH service.
- * </p>
- * 
- * @author Stefan E. Funk, SUB Göttingen
- */
-public class OAIPMHUtilitiesOnline {
-
-  // **
-  // FINALS
-  // **
-
-  protected static final String OAI_DC_PREFIX = "oai_dc";
-  protected static final String OAI_DATACITE_PREFIX = "oai_datacite";
-  protected static final String OAI_IDIOMMETS_PREFIX = "oai_idiom_mets";
-
-  protected static final String EXPECTED_OAIDC_FORMAT_CONTENT = "<oai_dc:dc>";
-  protected static final String EXPECTED_IDIOMMETS_FORMAT_CONTENT = "<mets ";
-  protected static final String EXPECTED_DATACITE_FORMAT_CONTENT = "<datacite:resource>";
-
-  protected static final String NO_SET = null;
-  protected static final String ERROR = " >>> ERROR";
-  protected static final String OK = " >>> OKIDOKI";
-  protected static final String TESTING = "\n >>> TESTING ";
-  protected static final String NO_THREAD_NAME = "";
-  protected static final String NOT_TESTED = " >>> NOT_TESTED";
-  protected static final String NO_TOKEN = "-1";
-
-  protected static final String VERB_LIST_IDENTIFIERS = "ListIdentifiers";
-  protected static final String VERB_LIST_RECORDS = "ListRecords";
-  protected static final String VERB_GET_RECORD = "GetRecord";
-  protected static final String VERB_IDENTIFY = "Identify";
-  protected static final String VERB_LIST_METADATA_FORMATS = "ListMetadataFormats";
-  protected static final String VERB_LIST_SETS = "ListSets";
-  protected static final boolean NO_METADATA_FORMAT_WITH_RESTOK = false;
-  protected static final boolean METADATA_FORMAT_WITH_RESTOK = true;
-  protected static final String NO_FROM = null;
-  protected static final String NO_UNTIL = null;
-  // Time to wait between the single queries using resumption tokens in milliseconds.
-  protected static final Long TIME = 275l;
-
-  protected static final String HDL_PREFIX = "hdl:";
-  protected static final String STAR_PREFIX = "***";
-
-  protected static final long OAIPMH_CLIENT_TIMEOUT = 120000;
-
-  /**
-   * @param theClient
-   * @param thePath
-   * @return
-   * @throws IOException
-   */
-  protected static Response getHttpResponse(Client theClient, String thePath) throws IOException {
-    return getHttpResponse(theClient, thePath, "");
-  }
-
-  /**
-   * @param theClient
-   * @param thePath
-   * @param theThreadName
-   * @return
-   * @throws IOException
-   */
-  protected static Response getHttpResponse(Client theClient, String thePath, String theThreadName)
-      throws IOException {
-
-    Response result;
-
-    try {
-      Thread.sleep(TIME);
-    } catch (InterruptedException e) {
-      // Nothing interrupts here!
-    }
-
-    WebClient w = WebClient.fromClient(theClient).replaceQuery(thePath);
-
-    System.out.println("\t" + theThreadName + "HTTP GET " + w.getCurrentURI());
-
-    result = w.get();
-
-    // Check HTTP status.
-    int status = result.getStatus();
-
-    if (status != HttpStatus.SC_OK) {
-      System.err.println("\t" + theThreadName + "status: " + status);
-      System.err.println(ERROR);
-      assertTrue(false);
-    } else {
-      System.out.println("\t" + theThreadName + "status: " + status);
-    }
-
-    return result;
-  }
-
-  /**
-   * @param theMillis
-   * @return
-   */
-  public static String getDurationInSecs(long theMillis) {
-
-    int SECS_IN_MILLIS = 1000;
-    int secs = SECS_IN_MILLIS;
-
-    return theMillis / secs + " second" + ((theMillis / secs) != 1 ? "s" : "");
-  }
-
-  /**
-   * <p>
-   * Loads a resource.
-   * </p>
-   * 
-   * TODO Put together with the method in TGCrudServiceUtilities! Maybe create a first build maven
-   * module for utility things.
-   * 
-   * @param {@link String} The resource to search for.
-   * @return {@link File} The resource.
-   * @throws IOException
-   */
-  protected static File getResource(String resPart) throws IOException {
-
-    File res;
-
-    // If we have an absolute resPart, just return the file.
-    if (resPart.startsWith(File.separator)) {
-      return new File(resPart);
-    }
-
-    URL url = ClassLoader.getSystemClassLoader().getResource(resPart);
-    if (url == null) {
-      throw new IOException("Resource '" + resPart + "' not found");
-    }
-    try {
-      res = new File(url.toURI());
-    } catch (URISyntaxException ue) {
-      res = new File(url.getPath());
-    }
-
-    return res;
-  }
-
-  /**
-   * @param theProperty
-   * @return
-   */
-  protected static List<String> getListFromProperties(String theProperty) {
-
-    List<String> result = new ArrayList<String>();
-
-    String parts[] = theProperty.split(",");
-    for (String part : parts) {
-      result.add(part.trim());
-    }
-
-    return result;
-  }
-
-  /**
-   * @return
-   * @throws IOException
-   * @throws FileNotFoundException
-   */
-  protected static Properties getPropertiesFromFile(String theConfigFile)
-      throws FileNotFoundException, IOException {
-
-    Properties result = null;
-
-    // Load properties file.
-    result = new Properties();
-    result.load(new FileInputStream(getResource(theConfigFile)));
-
-    System.out.println("Properties file: " + theConfigFile);
-    result.list(System.out);
-
-    return result;
-  }
-
-  /**
-   * @param theEndpoint
-   * @return
-   */
-  protected static Client getOAIPMHWEebClient(String theEndpoint) {
-
-    Client result = null;
-
-    // Get OAI-PMH REST endpoint and HTTP client.
-    System.out.println("Getting OAI-PMH HTTP client --> " + theEndpoint + " <--");
-
-    // Get proxy first, set policy.
-    OAIPMHProducer JAXRSClient = JAXRSClientFactory.create(theEndpoint, OAIPMHProducer.class);
-    HTTPConduit conduit = WebClient.getConfig(JAXRSClient).getHttpConduit();
-    HTTPClientPolicy policy = new HTTPClientPolicy();
-    policy.setReceiveTimeout(OAIPMHUtilitiesOnline.OAIPMH_CLIENT_TIMEOUT);
-    conduit.setClient(policy);
-
-    // Create Web Client from Web Proxy.
-    result = WebClient.client(JAXRSClient);
-
-    return result;
-  }
-
-  // **
-  // PRIVATE METHODS
-  // **
-
-  /**
-   * TODO Generalise in OaiPmhTestUtilities!
-   * 
-   * @param theClient
-   * @param theVerb
-   * @param theSet
-   * @param theMetadataPrefix
-   * @param maxNumberOfPagesToTest
-   * @param recordsExpectedPerRequest
-   * @param theThreadName
-   * @param from
-   * @param until
-   * @param resumptionTokenANDMetadataPrefix
-   * @throws IOException
-   */
-  protected static void testList(Client theClient, final String theVerb, final String theSet,
-      final String theMetadataPrefix, final int maxNumberOfPagesToTest,
-      final int recordsExpectedPerRequest, final String theThreadName, final String from,
-      final String until, final boolean resumptionTokenANDMetadataPrefix) throws IOException {
-
-    String threadName = tn(theThreadName);
-
-    long startTime = System.currentTimeMillis();
-
-    String testOccurance = "header";
-    if (theVerb.equals(OAIPMHUtilitiesOnline.VERB_LIST_RECORDS)) {
-      testOccurance = "record";
-    }
-
-    String path = "verb=" + theVerb + "&metadataPrefix=" + theMetadataPrefix;
-
-    if (theSet != null) {
-      path += "&set=" + theSet;
-    }
-
-    if (from != null && until != null) {
-      path += "&from=" + from + "&until=" + until;
-    }
-
-    Response httpResponse = OAIPMHUtilitiesOnline.getHttpResponse(theClient, path, threadName);
-    int status = httpResponse.getStatus();
-
-    int loopCount = 1;
-    long timeRunning = System.currentTimeMillis() - startTime;
-    System.out.println("\t" + threadName + "time: "
-        + OAIPMHUtilitiesOnline.getDurationInSecs(timeRunning) + " (loop " + loopCount
-        + (maxNumberOfPagesToTest != 0 ? "/" + maxNumberOfPagesToTest : "") + ")");
-
-    String responseString = IOUtils.readStringFromStream((InputStream) httpResponse.getEntity());
-
-    // Test resumption token tags.
-    String restok =
-        examineResumptionTokenTag(responseString, testOccurance, OAIPMHUtilitiesOnline.NO_TOKEN,
-            recordsExpectedPerRequest, loopCount, threadName, theMetadataPrefix);
-
-    // Test general metadata content (if verb is listRecords!), must go conform with the metadata
-    // prefix setting.
-    if (theVerb.equals(OAIPMHUtilitiesOnline.VERB_LIST_RECORDS)) {
-      examineContent(responseString, theMetadataPrefix);
-    }
-
-    while (status == HttpStatus.SC_OK && !restok.equals(OAIPMHUtilitiesOnline.NO_TOKEN)) {
-      loopCount += 1;
-      synchronized (threadName) {
-        if (maxNumberOfPagesToTest > 0 && loopCount > maxNumberOfPagesToTest) {
-          System.out
-              .println("\t" + threadName + "TESTING ONLY " + maxNumberOfPagesToTest + " pages!");
-          break;
-        }
-        path = "verb=" + theVerb + "&resumptionToken=" + restok;
-        if (resumptionTokenANDMetadataPrefix) {
-          path += "&metadataPrefix=" + theMetadataPrefix;
-        }
-        httpResponse = OAIPMHUtilitiesOnline.getHttpResponse(theClient, path, threadName);
-        timeRunning = System.currentTimeMillis() - startTime;
-        System.out.println("\t" + threadName + "time: "
-            + OAIPMHUtilitiesOnline.getDurationInSecs(timeRunning) + " (loop " + loopCount
-            + (maxNumberOfPagesToTest != 0 ? "/" + maxNumberOfPagesToTest : "") + ")");
-
-        // Test resumption token tags.
-        responseString = IOUtils.readStringFromStream((InputStream) httpResponse.getEntity());
-        restok = examineResumptionTokenTag(responseString, testOccurance, restok,
-            recordsExpectedPerRequest, loopCount, threadName, theMetadataPrefix);
-
-        // Test general metadata content (if verb is listRecords!), must go conform with the
-        // metadata // prefix setting.
-        if (theVerb.equals(OAIPMHUtilitiesOnline.VERB_LIST_RECORDS)) {
-          examineContent(responseString, theMetadataPrefix);
-        }
-      }
-    }
-
-    // Only check for max loops, if we do have less loops and no resumption token, it will be fine,
-    // too!
-    if (!restok.equals(OAIPMHUtilitiesOnline.NO_TOKEN) && loopCount < maxNumberOfPagesToTest) {
-      System.out.println(threadName + OAIPMHUtilitiesOnline.ERROR + ": Must have done "
-          + maxNumberOfPagesToTest + " loops, but did only " + loopCount);
-      assertTrue(false);
-    }
-
-    // Check for single loop, we need MORE!
-    if (loopCount == 1) {
-      System.out
-          .println(threadName + OAIPMHUtilitiesOnline.ERROR + ": Must have more than one loop!");
-      assertTrue(false);
-    }
-
-    System.out.println("\t" + threadName + OAIPMHUtilitiesOnline.OK);
-  }
-
-  /**
-   * @param theResponseString
-   * @param recordOrHeader
-   * @param oldtok
-   * @param recordsExpectedPerRequest
-   * @param loopCount
-   * @param theThreadName
-   * @param theMetadataPrefix
-   * @return Resumption token string, if existing, -1 if either no <resumptionToken> tag is
-   *         existing, tag is existing and has no token value.
-   * @throws IOException
-   */
-  protected static String examineResumptionTokenTag(final String theResponseString,
-      final String recordOrHeader, final String oldtok, final int recordsExpectedPerRequest,
-      final int loopCount, final String theThreadName, final String theMetadataPrefix)
-      throws IOException {
-
-    // Test for OAIPMH errors.
-    if (theResponseString.contains("<error code=\"badArgument\">")) {
-      String message =
-          theThreadName + OAIPMHUtilitiesOnline.ERROR + " IN OAIPMH RESPONSE: "
-              + theResponseString;
-      System.out.println(message);
-      throw new IOException(message);
-    }
-
-    // Count response objects at first.
-    int recordCount = 0;
-    int i = theResponseString.indexOf("<" + recordOrHeader + ">", 0);
-    while (i != -1) {
-      recordCount++;
-      i++;
-      i = theResponseString.indexOf("<" + recordOrHeader + ">", i);
-    }
-
-    System.out.println("\t" + theThreadName + recordOrHeader + "s: " + recordCount);
-
-    // Check if token tag is existing.
-    int tokStart = theResponseString.indexOf("<resumptionToken");
-    int tokEnd = theResponseString.indexOf("</resumptionToken");
-
-    if (tokStart == -1 && tokEnd == -1) {
-      System.out.println("\t" + theThreadName + "token: no token");
-
-      return OAIPMHUtilitiesOnline.NO_TOKEN;
-    }
-
-    String restokTmp = theResponseString.substring(tokStart, tokEnd);
-    // Get token tag.
-    String toktag = restokTmp.substring(0, restokTmp.indexOf(">") + 1).trim();
-    System.out.println("\t" + theThreadName + "tokentag: " + toktag);
-
-    // Get token.
-    String restok = restokTmp.substring(restokTmp.indexOf(">") + 1).trim();
-    System.out.println("\t" + theThreadName + "token: " + restok);
-
-    // Check if old and new token are equal or not.
-    boolean tokchanged = !oldtok.equals(restok);
-    System.out.println("\t" + theThreadName + "tokchngd: " + tokchanged);
-
-    // Get completeListSize and cursor.
-    String sizeStr = toktag.substring(toktag.indexOf("completeListSize=\"") + 18);
-    int size = Integer.parseInt(sizeStr.substring(0, sizeStr.indexOf("\"")));
-    String cursorStr = toktag.substring(toktag.indexOf("cursor=\"") + 8);
-    int cursor = Integer.parseInt(cursorStr.substring(0, cursorStr.indexOf("\"")));
-    System.out.println("\t" + theThreadName + "size: " + size + " / " + cursor);
-
-    // If token is provided, test cursor and element count!
-    if (!restok.isEmpty()) {
-      synchronized (TestGetRecordOnline.class) {
-        // Check <record> or <header> count, must be recordsExpectedPerRequest!
-        if (recordCount != recordsExpectedPerRequest) {
-          String message =
-              OAIPMHUtilitiesOnline.ERROR + ": " + recordOrHeader + " count mismatch, must be "
-                  + recordsExpectedPerRequest + " if token is provided, but is " + recordCount;
-          assertTrue(message, false);
-        }
-        if (size <= recordsExpectedPerRequest) {
-          String message =
-              OAIPMHUtilitiesOnline.ERROR + ": completeListSize count mismatch, must be > "
-                  + recordsExpectedPerRequest + " if token is provided, but is " + size;
-          assertTrue(message, false);
-        }
-        if (cursor != recordsExpectedPerRequest * loopCount) {
-          String message = OAIPMHUtilitiesOnline.ERROR + ": cursor must be "
-              + (loopCount * recordsExpectedPerRequest) + " in loop " + loopCount + ", but is "
-              + cursor;
-          assertTrue(message, false);
-        }
-      }
-    }
-
-    // If no token is provided, stop querying.
-    else {
-      // Check <record> count, must be completeListSize % recordsExpectedPerRequest.
-      if (recordCount != size % recordsExpectedPerRequest) {
-        System.err.println(theThreadName + OAIPMHUtilitiesOnline.ERROR + ": " + recordOrHeader
-            + " count mismatch, should be " + size % recordsExpectedPerRequest + ", but is "
-            + recordCount);
-        assertTrue(false);
-      }
-
-      // No resumption token available in response.
-      return OAIPMHUtilitiesOnline.NO_TOKEN;
-    }
-
-    return restok;
-  }
-
-  /**
-   * @param theThreadName
-   * @return
-   */
-  protected static String tn(String theThreadName) {
-
-    String result = theThreadName;
-
-    if (theThreadName != null && !theThreadName.equals("") && !theThreadName.endsWith(" ")) {
-      result = "[" + theThreadName + "] ";
-    }
-
-    return result;
-  }
-
-  /**
-   * @param theResponseString
-   * @param theMetadataFormat
-   */
-  protected static void examineContent(String theResponseString, String theMetadataFormat) {
-
-    // Check for correct metadata content according to metadata prefix.
-    if (theMetadataFormat.equals(OAIPMHUtilitiesOnline.OAI_DC_PREFIX)
-        && !theResponseString
-            .contains("metadataPrefix=\"" + OAIPMHUtilitiesOnline.OAI_DC_PREFIX + "\"")
-        && !theResponseString.contains(OAIPMHUtilitiesOnline.EXPECTED_OAIDC_FORMAT_CONTENT)) {
-      System.out
-          .println(OAIPMHUtilitiesOnline.OAI_DC_PREFIX + " needs to deliver content with schema: "
-              + OAIPMHUtilitiesOnline.EXPECTED_OAIDC_FORMAT_CONTENT + "!");
-
-      System.out.println("ERROR:\n" + theResponseString);
-
-      assertTrue(false);
-    } else if (theMetadataFormat.equals(OAIPMHUtilitiesOnline.OAI_IDIOMMETS_PREFIX)
-        && !theResponseString.contains(
-            "metadataPrefix=\"" + OAIPMHUtilitiesOnline.EXPECTED_IDIOMMETS_FORMAT_CONTENT
-                + "\"")
-        && !theResponseString
-            .contains(OAIPMHUtilitiesOnline.EXPECTED_IDIOMMETS_FORMAT_CONTENT)) {
-      System.out.println(
-          OAIPMHUtilitiesOnline.OAI_IDIOMMETS_PREFIX + " needs to deliver content with schema: "
-              + OAIPMHUtilitiesOnline.EXPECTED_IDIOMMETS_FORMAT_CONTENT + "!");
-
-      System.out.println("ERROR:\n" + theResponseString);
-
-      assertTrue(false);
-    } else if (theMetadataFormat.equals(OAIPMHUtilitiesOnline.OAI_DATACITE_PREFIX)
-        && !theResponseString
-            .contains("metadataPrefix=\"" + OAIPMHUtilitiesOnline.OAI_DATACITE_PREFIX + "\"")
-        && !theResponseString.contains(OAIPMHUtilitiesOnline.EXPECTED_DATACITE_FORMAT_CONTENT)) {
-      System.out.println(
-          OAIPMHUtilitiesOnline.OAI_DATACITE_PREFIX + " needs to deliver content with schema: "
-              + OAIPMHUtilitiesOnline.EXPECTED_DATACITE_FORMAT_CONTENT + "!");
-
-      System.out.println("ERROR:\n" + theResponseString);
-
-      assertTrue(false);
-    } else {
-      System.out.println(theResponseString);
-    }
-  }
-
-  /**
-   * @param theResponseString
-   * @param recordOrHeader
-   * @param oldtok
-   * @param theMetadataPrefix
-   * @return Resumption token string, if existing, -1 if either no <resumptionToken> tag is
-   *         existing, tag is existing and has no token value.
-   * @throws IOException
-   */
-  protected static String examineResumptionTokenTag(String theResponseString, String recordOrHeader,
-      String oldtok, String theMetadataPrefix) throws IOException {
-
-    // Default entries per page are 100 (IDIOM: 30).
-    // momentarily.
-    int expectedCount = 100;
-    if (theMetadataPrefix.equals(OAIPMHUtilitiesOnline.OAI_IDIOMMETS_PREFIX)) {
-      expectedCount = 30;
-    }
-
-    // Test for OAIPMH errors.
-    if (theResponseString.contains("<error code=\"badArgument\">")) {
-      System.err.println(OAIPMHUtilitiesOnline.ERROR + " IN OAIPMH RESPONSE: " + theResponseString);
-      assertTrue(false);
-    }
-
-    // Count response objects at first.
-    int recordCount = 0;
-    int i = theResponseString.indexOf("<" + recordOrHeader + ">", 0);
-    while (i != -1) {
-      recordCount++;
-      i++;
-      i = theResponseString.indexOf("<" + recordOrHeader + ">", i);
-    }
-
-    System.out.println("\t" + recordOrHeader + "s: " + recordCount);
-
-    // Check if token tag is existing.
-    int tokStart = theResponseString.indexOf("<resumptionToken");
-    int tokEnd = theResponseString.indexOf("</resumptionToken");
-
-    if (tokStart == -1 && tokEnd == -1) {
-      System.out.println("\ttoken: no token");
-
-      return "-1";
-    }
-
-    String restokTmp = theResponseString.substring(tokStart, tokEnd);
-    // Get token tag.
-    String toktag = restokTmp.substring(0, restokTmp.indexOf(">") + 1)
-        .trim();
-    System.out.println("\ttokentag: " + toktag);
-
-    // Get token.
-    String restok = restokTmp.substring(restokTmp.indexOf(">") + 1).trim();
-    System.out.println("\ttoken: " + restok);
-
-    // Check if old and new token are equal or not.
-    boolean tokchanged = !oldtok.equals(restok);
-    System.out.println("\ttokchngd: " + tokchanged);
-
-    // Get completeListSize and cursor.
-    String sizeStr = toktag
-        .substring(toktag.indexOf("completeListSize=\"") + 18);
-    int size = Integer
-        .parseInt(sizeStr.substring(0, sizeStr.indexOf("\"")));
-    String cursorStr = toktag.substring(toktag.indexOf("cursor=\"") + 8);
-    int cursor = Integer
-        .parseInt(cursorStr.substring(0, cursorStr.indexOf("\"")));
-    System.out.println("\tsize: " + size + " / " + cursor);
-
-    // If token is provided, and we have less than 100 (IDIOM: 30) elements: mekkern!
-    if (!restok.isEmpty()) {
-      synchronized (TestDHOAIPMHOnline.class) {
-        // Check <record> or <header> count, must be 100 (IDIOM: 30)!
-        if (recordCount != expectedCount) {
-          System.err.println(
-              OAIPMHUtilitiesOnline.ERROR + ": " + recordOrHeader + " count mismatch, must be "
-                  + expectedCount + " if token is provided, but is " + recordCount);
-        }
-        if (size <= expectedCount) {
-          System.err
-              .println(OAIPMHUtilitiesOnline.ERROR + ": completeListSize count mismatch, must be > "
-                  + expectedCount + " if token is provided, but is " + size);
-        }
-        if (recordCount != expectedCount || size <= expectedCount) {
-          assertTrue(false);
-        }
-      }
-    }
-
-    // If no token is provided, stop querying.
-    else {
-      // Check <record> count, must be completeListSize % 100 (IDIOM: 30).
-      if (recordCount != size % expectedCount) {
-        System.err.println(OAIPMHUtilitiesOnline.ERROR + ": " + recordOrHeader
-            + " count mismatch, should be " + size % expectedCount + ", but is " + recordCount);
-        assertTrue(false);
-      }
-
-      // No resumption token available in response.
-      return "-1";
-    }
-
-    return restok;
-  }
-
-  /**
-   * @param theWebClient
-   * @param theVerb
-   * @param theMetadataPrefix
-   * @param theSet
-   * @return
-   * @throws IOException
-   */
-  protected static int testList(Client theWebClient, String theVerb, String theMetadataPrefix,
-      String theSet) throws IOException {
-    return testList(theWebClient, theVerb, theMetadataPrefix, theSet, OAIPMHUtilitiesOnline.NO_FROM,
-        OAIPMHUtilitiesOnline.NO_UNTIL);
-  }
-
-  /**
-   * @param theWebClient
-   * @param theVerb
-   * @param theMetadataPrefix
-   * @param theSet
-   * @param from
-   * @param until
-   * @return How many pages were delivered
-   * @throws IOException
-   */
-  protected static int testList(Client theWebClient, String theVerb, String theMetadataPrefix,
-      String theSet, String from, String until) throws IOException {
-
-    int result;
-
-    long startTime = System.currentTimeMillis();
-
-    String testOccurance = "header";
-    if (theVerb.equals(OAIPMHUtilitiesOnline.VERB_LIST_RECORDS)) {
-      testOccurance = "record";
-    }
-
-    String path = "verb=" + theVerb + "&metadataPrefix=" + theMetadataPrefix;
-
-    if (theSet != null && !theSet.isEmpty()) {
-      path += "&set=" + theSet;
-    }
-
-    if (from != null && until != null) {
-      path += "&from=" + from + "&until=" + until;
-    }
-
-    Response response = OAIPMHUtilitiesOnline.getHttpResponse(theWebClient, path);
-    String responseString = IOUtils.readStringFromStream((InputStream) response.getEntity());
-    int status = response.getStatus();
-
-    long timeRunning = System.currentTimeMillis() - startTime;
-    System.out.println("\ttime: " + OAIPMHUtilitiesOnline.getDurationInSecs(timeRunning));
-
-    String restok = examineResumptionTokenTag(responseString, testOccurance, "", theMetadataPrefix);
-    examineIdentifiers(responseString);
-
-    result = 1;
-    while (status == HttpStatus.SC_OK && !restok.equals("-1")) {
-      path = "verb=" + theVerb + "&resumptionToken=" + restok;
-      response = OAIPMHUtilitiesOnline.getHttpResponse(theWebClient, path);
-      responseString = IOUtils.readStringFromStream((InputStream) response.getEntity());
-      timeRunning = System.currentTimeMillis() - startTime;
-      System.out.println("\ttime: " + OAIPMHUtilitiesOnline.getDurationInSecs(timeRunning));
-      restok = examineResumptionTokenTag(responseString, testOccurance, restok, theMetadataPrefix);
-      examineIdentifiers(responseString);
-      result++;
-    }
-
-    System.out.println("\tpage amount: " + result);
-    System.out.println(OAIPMHUtilitiesOnline.OK);
-
-    return result;
-  }
-
-  /**
-   * @param theResponseString
-   * @return
-   * @throws IOException
-   */
-  protected static void examineIdentifiers(String theResponseString) throws IOException {
-    if (theResponseString.contains("<identifier>hdl:21</identifier>")) {
-      System.err.println(OAIPMHUtilitiesOnline.ERROR
-          + " IN OAIPMH RESPONSE: identifier tag is corrupt!" + theResponseString);
-      assertTrue(false);
-    }
-  }
-
-}
diff --git a/oaipmh-core/src/test/java/info/textgrid/middleware/test/online/tg/TGOAIPMHResumptionTokenThread.java b/oaipmh-core/src/test/java/info/textgrid/middleware/test/online/tg/TGOAIPMHResumptionTokenThread.java
index 701a97005dc7d8f6fb2966fa69b749d9db2339f6..3cbbf1c06ea464038bcbbcc313e0847d3f291765 100644
--- a/oaipmh-core/src/test/java/info/textgrid/middleware/test/online/tg/TGOAIPMHResumptionTokenThread.java
+++ b/oaipmh-core/src/test/java/info/textgrid/middleware/test/online/tg/TGOAIPMHResumptionTokenThread.java
@@ -1,8 +1,9 @@
-package info.textgrid.middleware.test.online;
+package info.textgrid.middleware.test.online.tg;
 
 import java.io.IOException;
 import java.util.concurrent.Callable;
 import org.apache.cxf.jaxrs.client.Client;
+import info.textgrid.middleware.test.online.OAIPMHUtilitiesOnline;
 
 
 
diff --git a/oaipmh-core/src/test/java/info/textgrid/middleware/test/TestClassicMayanOnline.java b/oaipmh-core/src/test/java/info/textgrid/middleware/test/online/tg/TestClassicMayanOnline.java
similarity index 93%
rename from oaipmh-core/src/test/java/info/textgrid/middleware/test/TestClassicMayanOnline.java
rename to oaipmh-core/src/test/java/info/textgrid/middleware/test/online/tg/TestClassicMayanOnline.java
index 9eb7966b77ff906792f310bf44a2adf6f86a92fd..542d6ab9543e1f359d0ea7e1074c1bb30c1c598e 100644
--- a/oaipmh-core/src/test/java/info/textgrid/middleware/test/TestClassicMayanOnline.java
+++ b/oaipmh-core/src/test/java/info/textgrid/middleware/test/online/tg/TestClassicMayanOnline.java
@@ -1,4 +1,4 @@
-package info.textgrid.middleware.test;
+package info.textgrid.middleware.test.online.tg;
 
 import java.io.IOException;
 import java.text.ParseException;
@@ -21,6 +21,8 @@ import info.textgrid.middleware.IDIOMImages;
 @Ignore
 public class TestClassicMayanOnline {
 
+  // FIXME Check ignored tests!! Do they make any sense??
+
   /**
    * @throws JSONException
    * @throws IOException
@@ -30,10 +32,13 @@ public class TestClassicMayanOnline {
    * @throws TransformerException
    */
   @Test
+  @Ignore
   public void testGetRecord() throws JSONException, IOException, SAXException, ParseException,
       TransformerFactoryConfigurationError, TransformerException {
 
     IDIOMImages imageList = new IDIOMImages();
+    // Set session ID here?
+    // imageList.setIdiomRbacSessionID("***");
     Document document;
 
     try {
@@ -55,6 +60,7 @@ public class TestClassicMayanOnline {
    * @throws TransformerException
    */
   @Test
+  @Ignore
   public void testGetMediaList() throws JSONException, IOException, ParseException, SAXException,
       TransformerFactoryConfigurationError, TransformerException {
 
@@ -84,6 +90,7 @@ public class TestClassicMayanOnline {
    * @throws TransformerException
    */
   @Test
+  @Ignore
   public void testOAIPMHRequest() throws JSONException, IOException, ParseException, SAXException,
       TransformerFactoryConfigurationError, TransformerException {
 
diff --git a/oaipmh-core/src/test/java/info/textgrid/middleware/test/online/tg/TestDHOAIPMHOnline.java b/oaipmh-core/src/test/java/info/textgrid/middleware/test/online/tg/TestDHOAIPMHOnline.java
deleted file mode 100644
index 96468b5edcc367ae4a1ddf0e040806e08d897591..0000000000000000000000000000000000000000
--- a/oaipmh-core/src/test/java/info/textgrid/middleware/test/online/tg/TestDHOAIPMHOnline.java
+++ /dev/null
@@ -1,437 +0,0 @@
-package info.textgrid.middleware.test.online;
-
-import static org.junit.Assert.assertTrue;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.Properties;
-import javax.ws.rs.core.Response;
-import org.apache.cxf.helpers.IOUtils;
-import org.apache.cxf.jaxrs.client.Client;
-import org.apache.cxf.jaxrs.client.JAXRSClientFactory;
-import org.apache.cxf.jaxrs.client.WebClient;
-import org.apache.cxf.transport.http.HTTPConduit;
-import org.apache.cxf.transports.http.configuration.HTTPClientPolicy;
-import org.apache.http.HttpStatus;
-import org.junit.After;
-import org.junit.AfterClass;
-import org.junit.Before;
-import org.junit.BeforeClass;
-import org.junit.Ignore;
-import org.junit.Test;
-import info.textgrid.middleware.OAIPMHProducer;
-
-/**
- * <p>
- * Some online tests for the DARIAH-DE Repository OAIMPH service.
- * </p>
- * 
- * @author Stefan E. Funk, SUB Göttingen
- */
-@Ignore
-public class TestDHOAIPMHOnline {
-
-  // **
-  // FINALS
-  // **
-
-  private static final String PROPERTIES_FILE = "oaipmh.test.repository-de-dariah-eu.properties";
-  // private static final String PROPERTIES_FILE = "oaipmh.test.trep-de-dariah-eu.properties";
-
-  // **
-  // STATICS
-  // **
-
-  // Some JAXRS things.
-  private static String oaipmhEndpoint;
-  private static OAIPMHProducer JAXRSClient;
-  private static Client oaipmhWebClient;
-
-  // Properties
-  private static String expectedListSets;
-  private static String checkListIdentifiersSet;
-  private static Integer checkListIdentifiersSetExpectedPages;
-
-  // **
-  // PREPARATIONS
-  // **
-
-  /**
-   * @throws Exception
-   */
-  @BeforeClass
-  public static void setUpBeforeClass() throws Exception {
-
-    // Load properties file.
-    Properties p = new Properties();
-    p.load(new FileInputStream(
-        OAIPMHUtilitiesOnline.getResource(PROPERTIES_FILE)));
-
-    System.out.println("Properties file: " + PROPERTIES_FILE);
-    p.list(System.out);
-
-    // Get other needed properties.
-    oaipmhEndpoint = p.getProperty("oaipmhEndpoint");
-    expectedListSets = p.getProperty("expectedListSets");
-    checkListIdentifiersSet = p.getProperty("checkListIdentifiersSet");
-    checkListIdentifiersSetExpectedPages =
-        Integer.parseInt(p.getProperty("checkListIdentifiersSetExpectedPages").trim());
-
-    // Get OAI-PMH REST endpoint and HTTP client.
-    System.out.println(
-        "Getting OAI-PMH HTTP client --> " + oaipmhEndpoint + " <--");
-
-    // Get proxy first, set policy.
-    JAXRSClient = JAXRSClientFactory.create(oaipmhEndpoint,
-        OAIPMHProducer.class);
-    HTTPConduit conduit = WebClient.getConfig(JAXRSClient).getHttpConduit();
-    HTTPClientPolicy policy = new HTTPClientPolicy();
-    policy.setReceiveTimeout(OAIPMHUtilitiesOnline.OAIPMH_CLIENT_TIMEOUT);
-    conduit.setClient(policy);
-
-    // Create Web Client from Web Proxy.
-    oaipmhWebClient = WebClient.client(JAXRSClient);
-  }
-
-  /**
-   * @throws Exception
-   */
-  @AfterClass
-  public static void tearDownAfterClass() throws Exception {
-    //
-  }
-
-  /**
-   * @throws Exception
-   */
-  @Before
-  public void setUp() throws Exception {
-    //
-  }
-
-  /**
-   * @throws Exception
-   */
-  @After
-  public void tearDown() throws Exception {
-    //
-  }
-
-  // **
-  // TESTS
-  // **
-
-  /**
-   * @throws IOException
-   */
-  @Test
-  public void testGetVersion() throws IOException {
-
-    String shouldStartWith = "oaipmh-core";
-
-    System.out.println(OAIPMHUtilitiesOnline.TESTING + "#GETVERSION for '"
-        + shouldStartWith + "'");
-
-    String versionString = JAXRSClient.getVersion();
-
-    if (!versionString.startsWith(shouldStartWith)) {
-      System.err.println(OAIPMHUtilitiesOnline.ERROR
-          + ": response should start with '" + shouldStartWith + "'");
-      assertTrue(false);
-    }
-
-    System.out.println("\tresponse: " + versionString);
-    System.out.println(OAIPMHUtilitiesOnline.OK);
-  }
-
-  /**
-   * @throws IOException
-   */
-  @Test
-  public void testRootWithSlash() throws IOException {
-
-    String url = "oai/";
-    String shouldContain = "DARIAH-DE Repository";
-
-    testRootURL(url, shouldContain);
-  }
-
-  /**
-   * @throws IOException
-   */
-  @Test
-  public void testRootWithoutSlash() throws IOException {
-
-    String url = "oai";
-    String shouldContain = "DARIAH-DE Repository";
-
-    testRootURL(url, shouldContain);
-  }
-
-  /**
-   * @throws IOException
-   */
-  @Test
-  public void testBlubbVerb() throws IOException {
-
-    String url = "verb=BLUBB";
-    String shouldContain = "Illegal OAI verb";
-
-    testRootURL(url, shouldContain);
-  }
-
-  /**
-   * @throws IOException
-   */
-  @Test
-  public void testIdentify() throws IOException {
-
-    String verb = "Identify";
-    String shouldContain = "DARIAH-DE Repository";
-
-    System.out.println(OAIPMHUtilitiesOnline.TESTING + "#IDENTIFY");
-
-    Response response = OAIPMHUtilitiesOnline.getHttpResponse(oaipmhWebClient,
-        "verb=" + verb);
-    int status = response.getStatus();
-
-    String responseString = IOUtils
-        .readStringFromStream((InputStream) response.getEntity());
-
-    if (status != HttpStatus.SC_OK
-        || !responseString.contains(shouldContain)) {
-      System.err.println("\tstatus: " + status);
-      System.err.println(OAIPMHUtilitiesOnline.ERROR
-          + ": response should contain '" + shouldContain + "'");
-      assertTrue(false);
-    }
-
-    System.out.println("\tresponse: " + responseString);
-    System.out.println(OAIPMHUtilitiesOnline.OK);
-  }
-
-  /**
-   * @throws IOException
-   */
-  @Test
-  public void testListSets() throws IOException {
-    testListSet(expectedListSets, expectedListSets);
-  }
-
-  /**
-   * @throws IOException
-   */
-  @Test
-  public void testListRecordsDC() throws IOException {
-
-    System.out.println(OAIPMHUtilitiesOnline.TESTING + "#LISTRECORDS");
-
-    OAIPMHUtilitiesOnline.testList(oaipmhWebClient, "ListRecords", "oai_dc",
-        OAIPMHUtilitiesOnline.NO_SET);
-  }
-
-
-  /**
-   * @throws IOException
-   */
-  @Test
-  @Ignore
-  public void testGetRecordDC() throws IOException {
-
-    System.out.println(OAIPMHUtilitiesOnline.TESTING + "#GETRECORD");
-
-    String identifier = "";
-    String shouldContain = "";
-
-    String path = "verb=GetRecord&identifier=" + identifier
-        + "&metadataPrefix=oai_dc";
-
-    // FIXME Complete test!
-  }
-
-  /**
-   * @throws IOException
-   */
-  @Test
-  @Ignore
-  public void testGetRecordDATASITE() throws IOException {
-
-    System.out.println(OAIPMHUtilitiesOnline.TESTING + "#GETRECORD");
-
-    String identifier = "";
-    String shouldContain = "";
-
-    String path = "verb=GetRecord&identifier=" + identifier
-        + "&metadataPrefix=oai_datacite";
-
-    // FIXME Complete test!
-  }
-
-  /**
-   * @throws IOException
-   */
-  @Test
-  public void testListIdentifiersDC() throws IOException {
-
-    System.out.println(OAIPMHUtilitiesOnline.TESTING + "#LISTIDENTIFIERS");
-
-    OAIPMHUtilitiesOnline.testList(oaipmhWebClient, "ListIdentifiers", "oai_dc",
-        OAIPMHUtilitiesOnline.NO_SET);
-  }
-
-  /**
-   * @throws IOException
-   */
-  @Test
-  public void testListIdentifiersSetDC() throws IOException {
-
-    System.out.println(OAIPMHUtilitiesOnline.TESTING + "#LISTIDENTIFIERS");
-
-    int pages =
-        OAIPMHUtilitiesOnline.testList(oaipmhWebClient, "ListIdentifiers", "oai_dc",
-            checkListIdentifiersSet);
-
-    if (pages != checkListIdentifiersSetExpectedPages) {
-      assertTrue(pages + " != " + checkListIdentifiersSetExpectedPages, false);
-    }
-  }
-
-  /**
-   * @throws IOException
-   */
-  @Test
-  public void testListIdentifiersSetDCDifferentPrefixes() throws IOException {
-
-    String uri = checkListIdentifiersSet;
-
-    System.out.println(OAIPMHUtilitiesOnline.TESTING + "#LISTIDENTIFIERS - HDL PREFIX");
-
-    if (!uri.startsWith(OAIPMHUtilitiesOnline.HDL_PREFIX)) {
-      assertTrue("missing '" + OAIPMHUtilitiesOnline.HDL_PREFIX + "' prefix!", false);
-    }
-    System.out.println("uri: " + uri);
-    int pages1 = OAIPMHUtilitiesOnline.testList(oaipmhWebClient, "ListIdentifiers", "oai_dc", uri);
-    if (pages1 != checkListIdentifiersSetExpectedPages) {
-      System.out.println(pages1 + " != " + checkListIdentifiersSetExpectedPages);
-    }
-
-    System.out.println(OAIPMHUtilitiesOnline.TESTING + "#LISTIDENTIFIERS - NO PREFIX");
-
-    if (checkListIdentifiersSet.startsWith(OAIPMHUtilitiesOnline.HDL_PREFIX)) {
-      uri = checkListIdentifiersSet.substring(4);
-    }
-    System.out.println("uri: " + uri);
-    int pages2 = OAIPMHUtilitiesOnline.testList(oaipmhWebClient, "ListIdentifiers", "oai_dc", uri);
-    if (pages2 != checkListIdentifiersSetExpectedPages) {
-      System.out.println(pages2 + " != " + checkListIdentifiersSetExpectedPages);
-    }
-
-    // Check pages count.
-    if (pages1 != checkListIdentifiersSetExpectedPages
-        || pages2 != checkListIdentifiersSetExpectedPages) {
-      assertTrue("pages count does not match", false);
-    }
-  }
-
-
-  /**
-   * @throws IOException
-   */
-  @Test
-  @Ignore
-  public void testListIdentifiersSetDCStarPrefixe() throws IOException {
-
-    // TODO Un-ignore if identifier check is implemented!
-
-    System.out.println(OAIPMHUtilitiesOnline.TESTING + "#LISTIDENTIFIERS - STAR PREFIX");
-
-    if (checkListIdentifiersSet.startsWith(OAIPMHUtilitiesOnline.HDL_PREFIX)) {
-      checkListIdentifiersSet =
-          OAIPMHUtilitiesOnline.STAR_PREFIX + checkListIdentifiersSet.substring(4);
-    }
-    System.out.println("uri: " + checkListIdentifiersSet);
-    int pages3 =
-        OAIPMHUtilitiesOnline.testList(oaipmhWebClient, "ListIdentifiers", "oai_dc",
-            checkListIdentifiersSet);
-    if (pages3 != checkListIdentifiersSetExpectedPages) {
-      System.out.println(pages3 + " != " + checkListIdentifiersSetExpectedPages);
-    }
-  }
-
-  /**
-   * @throws IOException
-   */
-  @Test
-  public void testListIdentifiersDATASITE() throws IOException {
-
-    System.out.println(OAIPMHUtilitiesOnline.TESTING + "#LISTIDENTIFIERS");
-
-    OAIPMHUtilitiesOnline.testList(oaipmhWebClient, "ListIdentifiers", "oai_datacite",
-        OAIPMHUtilitiesOnline.NO_SET);
-  }
-
-  // **
-  // PRIVATE METHODS
-  // **
-
-  /**
-   * @param theSet
-   * @throws IOException
-   */
-  private static void testListSet(String theSet, String theExpectedResponse)
-      throws IOException {
-
-    String verb = "ListSets";
-
-    System.out.println(OAIPMHUtilitiesOnline.TESTING + "#LISTSETS");
-
-    Response response = OAIPMHUtilitiesOnline.getHttpResponse(oaipmhWebClient,
-        "verb=" + verb);
-    int status = response.getStatus();
-
-    String responseString = IOUtils
-        .readStringFromStream((InputStream) response.getEntity());
-
-    if (status != HttpStatus.SC_OK
-        || !responseString.contains(theExpectedResponse)) {
-      System.err.println("\tstatus: " + status);
-      System.err.println(
-          OAIPMHUtilitiesOnline.ERROR + ": response should contain '" + theExpectedResponse + "'");
-      System.err.println(responseString);
-      assertTrue(false);
-    }
-
-    System.out.println("\tresponse: " + responseString);
-    System.out.println(OAIPMHUtilitiesOnline.OK);
-  }
-
-  /**
-   * @param theURL
-   * @param shouldContain
-   * @throws IOException
-   */
-  private static void testRootURL(String theURL, String shouldContain)
-      throws IOException {
-
-    System.out.println(OAIPMHUtilitiesOnline.TESTING + "#ROOTURL");
-
-    Response response = OAIPMHUtilitiesOnline.getHttpResponse(oaipmhWebClient,
-        theURL);
-    int status = response.getStatus();
-
-    String responseString = IOUtils
-        .readStringFromStream((InputStream) response.getEntity());
-
-    if (status != HttpStatus.SC_OK || !responseString.contains(shouldContain)) {
-      System.err.println("\tstatus: " + status);
-      System.err
-          .println(
-              OAIPMHUtilitiesOnline.ERROR + ": response should contain '" + shouldContain + "'");
-      assertTrue(false);
-    }
-
-    System.out.println("\tresponse: " + responseString);
-    System.out.println(OAIPMHUtilitiesOnline.OK);
-  }
-
-}
diff --git a/oaipmh-core/src/test/java/info/textgrid/middleware/test/online/tg/TestTGBasicsOnline.java b/oaipmh-core/src/test/java/info/textgrid/middleware/test/online/tg/TestTGBasicsOnline.java
index 7786a65d5c9c45f4d593cc51c467a36f69f0374d..a59f218b9a3e3143322b63a08661dd0502f06490 100644
--- a/oaipmh-core/src/test/java/info/textgrid/middleware/test/online/tg/TestTGBasicsOnline.java
+++ b/oaipmh-core/src/test/java/info/textgrid/middleware/test/online/tg/TestTGBasicsOnline.java
@@ -1,24 +1,12 @@
-package info.textgrid.middleware.test.online;
+package info.textgrid.middleware.test.online.tg;
 
 import static org.junit.Assert.assertTrue;
-import java.io.FileInputStream;
 import java.io.IOException;
 import java.io.InputStream;
-import java.util.ArrayList;
-import java.util.List;
 import java.util.Properties;
-import java.util.concurrent.Callable;
-import java.util.concurrent.ExecutionException;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
-import java.util.concurrent.Future;
 import javax.ws.rs.core.Response;
 import org.apache.cxf.helpers.IOUtils;
 import org.apache.cxf.jaxrs.client.Client;
-import org.apache.cxf.jaxrs.client.JAXRSClientFactory;
-import org.apache.cxf.jaxrs.client.WebClient;
-import org.apache.cxf.transport.http.HTTPConduit;
-import org.apache.cxf.transports.http.configuration.HTTPClientPolicy;
 import org.apache.http.HttpStatus;
 import org.junit.After;
 import org.junit.AfterClass;
@@ -26,17 +14,17 @@ import org.junit.Before;
 import org.junit.BeforeClass;
 import org.junit.Ignore;
 import org.junit.Test;
-import info.textgrid.middleware.OAIPMHProducer;
+import info.textgrid.middleware.test.online.OAIPMHUtilitiesOnline;
 
 /**
  * <p>
- * Some online tests for the TextGrid OAIMPH service.
+ * Some basic online tests for the TextGrid OAIMPH service.
  * </p>
  * 
  * @author Stefan E. Funk, SUB Göttingen
  */
 @Ignore
-public class TestTGOAIPMHOnline {
+public class TestTGBasicsOnline {
 
   // **
   // FINALS
@@ -53,30 +41,10 @@ public class TestTGOAIPMHOnline {
 
   // Some JAXRS things.
   private static String oaipmhEndpoint;
-  private static OAIPMHProducer JAXRSClient;
   static Client oaipmhWebClient;
 
   // Properties
   private static String expectedListSets;
-  private static String checkGetRecordDC;
-  private static String expectedGetRecordDC;
-  private static String checkGetRecordIDIOM;
-  private static String checkGetRecordIDIOM_Images;
-  private static String expectedGetRecordIDIOM_Images;
-  private static String expectedGetRecordIDIOM;
-  private static String checkGetRecordDATACITE;
-  private static String expectedGetRecordDATACITE;
-  private static String checkListRecordsDC;
-  private static String checkListRecordsDCFrom;
-  private static String checkListRecordsDCUntil;
-  private static String checkListRecordsIDIOMFrom;
-  private static String checkListRecordsIDIOMUntil;
-  private static String checkListRecordsDATACITEFrom;
-  private static String checkListRecordsDATACITEUntil;
-  private static String checkListIdentifiersSet;
-  private static int checkListIdentifiersPagesToTestIDIOM;
-  private static int checkListIdentifiersRecordsPerPageIDIOM;
-  private static List<String> checkGetRecordIDList = new ArrayList<String>();
 
   // **
   // PREPARATIONS
@@ -88,51 +56,19 @@ public class TestTGOAIPMHOnline {
   @BeforeClass
   public static void setUpBeforeClass() throws Exception {
 
-    // Load properties file.
-    Properties p = new Properties();
-    p.load(new FileInputStream(OAIPMHUtilitiesOnline.getResource(PROPERTIES_FILE)));
+    // Get properties.
+    Properties p = OAIPMHUtilitiesOnline.getPropertiesFromFile(PROPERTIES_FILE);
 
-    System.out.println("Properties file: " + PROPERTIES_FILE);
-    p.list(System.out);
-
-    // Get other needed properties.
+    // Set properties.
     oaipmhEndpoint = p.getProperty("oaipmhEndpoint");
+
     expectedListSets = p.getProperty("expectedListSets");
-    checkGetRecordDC = p.getProperty("checkGetRecordDC");
-    expectedGetRecordDC = p.getProperty("expectedGetRecordDC");
-    checkGetRecordIDIOM = p.getProperty("checkGetRecordIDIOM");
-    checkGetRecordIDIOM_Images = p.getProperty("checkGetRecordIDIOM_Images");
-    expectedGetRecordIDIOM_Images = p.getProperty("expectedGetRecordIDIOM_Images");
-    expectedGetRecordIDIOM = p.getProperty("expectedGetRecordIDIOM");
-    checkGetRecordDATACITE = p.getProperty("checkGetRecordDATACITE");
-    expectedGetRecordDATACITE = p.getProperty("expectedGetRecordDATACITE");
-    checkListRecordsDC = p.getProperty("checkListRecordsDC");
-    checkListRecordsDCFrom = p.getProperty("checkListRecordsDCFrom");
-    checkListRecordsDCUntil = p.getProperty("checkListRecordsDCUntil");
-    checkListRecordsIDIOMFrom = p.getProperty("checkListRecordsIDIOMFrom");
-    checkListRecordsIDIOMUntil = p.getProperty("checkListRecordsIDIOMUntil");
-    checkListRecordsDATACITEFrom = p.getProperty("checkListRecordsDATACITEFrom");
-    checkListRecordsDATACITEUntil = p.getProperty("checkListRecordsDATACITEUntil");
-    checkListIdentifiersSet = p.getProperty("checkListIdentifiersSet");
-    checkListIdentifiersPagesToTestIDIOM =
-        Integer.parseInt(p.getProperty("checkListIdentifiersPagesToTestIDIOM"));
-    checkListIdentifiersRecordsPerPageIDIOM =
-        Integer.parseInt(p.getProperty("checkListIdentifiersRecordsPerPageIDIOM"));
-    checkGetRecordIDList =
-        OAIPMHUtilitiesOnline.getListFromProperties((String) p.get("checkGetRecordIDList"));
 
     // Get OAI-PMH REST endpoint and HTTP client.
     System.out.println("Getting OAI-PMH HTTP client --> " + oaipmhEndpoint + " <--");
 
-    // Get proxy first, set policy.
-    JAXRSClient = JAXRSClientFactory.create(oaipmhEndpoint, OAIPMHProducer.class);
-    HTTPConduit conduit = WebClient.getConfig(JAXRSClient).getHttpConduit();
-    HTTPClientPolicy policy = new HTTPClientPolicy();
-    policy.setReceiveTimeout(OAIPMHUtilitiesOnline.OAIPMH_CLIENT_TIMEOUT);
-    conduit.setClient(policy);
-
-    // Create Web Client from Web Proxy.
-    oaipmhWebClient = WebClient.client(JAXRSClient);
+    // Get web client from endpoint.
+    oaipmhWebClient = OAIPMHUtilitiesOnline.getOAIPMHWEebClient(oaipmhEndpoint);
   }
 
   /**
@@ -173,16 +109,17 @@ public class TestTGOAIPMHOnline {
 
     System.out.println(OAIPMHUtilitiesOnline.TESTING + "testGetVersion()");
 
-    String versionString = JAXRSClient.getVersion();
+    Response httpResponse = OAIPMHUtilitiesOnline.getVersionHttpResponse(oaipmhWebClient);
+    int status = httpResponse.getStatus();
+
+    String response = IOUtils.readStringFromStream((InputStream) httpResponse.getEntity());
 
-    if (!versionString.startsWith(shouldStartWith)) {
-      System.err.println(
-          OAIPMHUtilitiesOnline.ERROR + ": response should start with '" + shouldStartWith
-              + "'");
-      assertTrue(false);
+    if (status != HttpStatus.SC_OK || !response.startsWith(shouldStartWith)) {
+      String message = "response should start with '" + shouldStartWith + "'";
+      assertTrue(message, false);
     }
 
-    System.out.println("\tresponse: " + versionString);
+    System.out.println("\tresponse: " + response);
     System.out.println(OAIPMHUtilitiesOnline.OK);
   }
 
@@ -194,21 +131,17 @@ public class TestTGOAIPMHOnline {
 
     System.out.println(OAIPMHUtilitiesOnline.TESTING + "testRootUrl()");
 
-    // Still hard coded in OAIPMH service!
+    // TODO Still hard coded in OAIPMH service!
     String shouldContain = "textgridrep.org";
 
-    Response httpResponse = OAIPMHUtilitiesOnline.getHttpResponse(oaipmhWebClient, "oai",
-        OAIPMHUtilitiesOnline.NO_THREAD_NAME);
+    Response httpResponse = OAIPMHUtilitiesOnline.getOAIHttpResponse(oaipmhWebClient, "/");
     int status = httpResponse.getStatus();
 
     String response = IOUtils.readStringFromStream((InputStream) httpResponse.getEntity());
 
     if (status != HttpStatus.SC_OK || !response.contains(shouldContain)) {
-      System.err.println("\tstatus: " + status);
-      System.err
-          .println(OAIPMHUtilitiesOnline.ERROR + ": response should contain '" + shouldContain
-              + "'");
-      assertTrue(false);
+      String message = "[" + status + "] response should contain '" + shouldContain + "'";
+      assertTrue(message, false);
     }
 
     System.out.println("\tresponse: " + response);
@@ -223,22 +156,18 @@ public class TestTGOAIPMHOnline {
 
     System.out.println(OAIPMHUtilitiesOnline.TESTING + "testIdentify()");
 
-    // Still hard coded in OAIPMH service!
+    // TODO Still hard coded in OAIPMH service!
     String shouldContain = "textgridrep.org";
 
-    Response httpResponse = OAIPMHUtilitiesOnline.getHttpResponse(oaipmhWebClient,
-        "verb=" + OAIPMHUtilitiesOnline.VERB_IDENTIFY,
-        OAIPMHUtilitiesOnline.NO_THREAD_NAME);
+    Response httpResponse = OAIPMHUtilitiesOnline.getOAIHttpResponse(oaipmhWebClient,
+        "verb=" + OAIPMHUtilitiesOnline.VERB_IDENTIFY);
     int status = httpResponse.getStatus();
 
     String response = IOUtils.readStringFromStream((InputStream) httpResponse.getEntity());
 
     if (status != HttpStatus.SC_OK || !response.contains(shouldContain)) {
-      System.err.println("\tstatus: " + status);
-      System.err
-          .println(OAIPMHUtilitiesOnline.ERROR + ": response should contain '" + shouldContain
-              + "'");
-      assertTrue(false);
+      String message = "[" + status + "] response should contain '" + shouldContain + "'";
+      assertTrue(message, false);
     }
 
     System.out.println("\tresponse: " + response);
@@ -257,20 +186,17 @@ public class TestTGOAIPMHOnline {
     String shouldContainIDIOM = OAIPMHUtilitiesOnline.OAI_IDIOMMETS_PREFIX;
     String shouldContainDATACITE = OAIPMHUtilitiesOnline.OAI_DATACITE_PREFIX;
 
-    Response httpResponse = OAIPMHUtilitiesOnline.getHttpResponse(oaipmhWebClient,
-        "verb=" + OAIPMHUtilitiesOnline.VERB_LIST_METADATA_FORMATS,
-        OAIPMHUtilitiesOnline.NO_THREAD_NAME);
-    int status = httpResponse.getStatus();
+    Response httpResponse = OAIPMHUtilitiesOnline.getOAIHttpResponse(oaipmhWebClient,
+        "verb=" + OAIPMHUtilitiesOnline.VERB_LIST_METADATA_FORMATS);
 
+    int status = httpResponse.getStatus();
     String response = IOUtils.readStringFromStream((InputStream) httpResponse.getEntity());
 
     if (status != HttpStatus.SC_OK || !response.contains(shouldContainDC)
         || !response.contains(shouldContainIDIOM) || !response.contains(shouldContainDATACITE)) {
-      System.err.println("\tstatus: " + status);
-      System.err
-          .println(OAIPMHUtilitiesOnline.ERROR + ": response should contain '" + shouldContainDC
-              + "' and '" + shouldContainIDIOM + "' and '" + shouldContainDATACITE + "'");
-      assertTrue(false);
+      String message = "[" + status + "] response should contain '" + shouldContainDC + "' and '"
+          + shouldContainIDIOM + "' and '" + shouldContainDATACITE + "'";
+      assertTrue(message, false);
     }
 
     System.out.println("\tresponse: " + response);
@@ -285,1338 +211,19 @@ public class TestTGOAIPMHOnline {
 
     System.out.println(OAIPMHUtilitiesOnline.TESTING + "testListSets()");
 
-    Response httpResponse = OAIPMHUtilitiesOnline.getHttpResponse(oaipmhWebClient,
-        "verb=" + OAIPMHUtilitiesOnline.VERB_LIST_SETS,
-        OAIPMHUtilitiesOnline.NO_THREAD_NAME);
+    Response httpResponse = OAIPMHUtilitiesOnline.getOAIHttpResponse(oaipmhWebClient,
+        "verb=" + OAIPMHUtilitiesOnline.VERB_LIST_SETS);
     int status = httpResponse.getStatus();
 
     String response = IOUtils.readStringFromStream((InputStream) httpResponse.getEntity());
 
     if (status != HttpStatus.SC_OK || !response.contains(expectedListSets)) {
-      System.err.println("\tstatus: " + status);
-      System.err.println(OAIPMHUtilitiesOnline.ERROR + ": response should contain '"
-          + expectedListSets + "'");
-      System.err.println(response);
-      assertTrue(false);
-    }
-
-    System.out.println("\tresponse: " + response);
-    System.out.println(OAIPMHUtilitiesOnline.OK);
-  }
-
-  /**
-   * @throws IOException
-   */
-  @Test
-  public void testGetRecordOAIDC() throws IOException {
-
-    System.out.println(OAIPMHUtilitiesOnline.TESTING + "testGetRecordOAIDC()");
-
-    String path = "verb=" + OAIPMHUtilitiesOnline.VERB_GET_RECORD + "&identifier="
-        + checkGetRecordDC + "&metadataPrefix="
-        + OAIPMHUtilitiesOnline.OAI_DC_PREFIX;
-
-    Response httpResponse = OAIPMHUtilitiesOnline.getHttpResponse(oaipmhWebClient, path,
-        OAIPMHUtilitiesOnline.NO_THREAD_NAME);
-    int status = httpResponse.getStatus();
-
-    String response = IOUtils.readStringFromStream((InputStream) httpResponse.getEntity());
-
-    if (status != HttpStatus.SC_OK
-        || !response.contains(expectedGetRecordDC)) {
-      System.err.println("\tstatus: " + status);
-      System.err.println(OAIPMHUtilitiesOnline.ERROR + ": response should contain '"
-          + expectedGetRecordDC + "'");
-      System.err.println(response);
-      assertTrue(false);
-    }
-
-    System.out.println("\tresponse: " + response);
-    System.out.println(OAIPMHUtilitiesOnline.OK);
-  }
-
-  /**
-   * @throws IOException
-   */
-  @Test
-  public void testGetRecordOAIDCNoPrefix() throws IOException {
-
-    System.out.println(OAIPMHUtilitiesOnline.TESTING + "testGetRecordOAIDCNoPrefix()");
-
-    String path = "verb=" + OAIPMHUtilitiesOnline.VERB_GET_RECORD + "&identifier="
-        + checkGetRecordDC + "&metadataPrefix="
-        + OAIPMHUtilitiesOnline.OAI_DC_PREFIX;
-
-    Response httpResponse = OAIPMHUtilitiesOnline.getHttpResponse(oaipmhWebClient, path,
-        OAIPMHUtilitiesOnline.NO_THREAD_NAME);
-    int status = httpResponse.getStatus();
-
-    String response = IOUtils.readStringFromStream((InputStream) httpResponse.getEntity());
-
-    if (status != HttpStatus.SC_OK
-        || !response.contains(expectedGetRecordDC)) {
-      System.err.println("\tstatus: " + status);
-      System.err.println(
-          OAIPMHUtilitiesOnline.ERROR + ": response should contain '"
-              + checkGetRecordDC + "'");
-      System.err.println(response);
-      assertTrue(false);
-    }
-
-    System.out.println("\tresponse: " + response);
-    System.out.println(OAIPMHUtilitiesOnline.OK);
-  }
-
-  /**
-   * @throws IOException
-   */
-  @Test
-  public void testGetRecordIDIOMMETS() throws IOException {
-
-    System.out.println(OAIPMHUtilitiesOnline.TESTING + "testGetRecordIDIOMMETS()");
-
-    String path = "verb=" + OAIPMHUtilitiesOnline.VERB_GET_RECORD + "&identifier="
-        + checkGetRecordIDIOM + "&metadataPrefix="
-        + OAIPMHUtilitiesOnline.OAI_IDIOMMETS_PREFIX;
-
-    Response httpResponse = OAIPMHUtilitiesOnline.getHttpResponse(oaipmhWebClient, path,
-        OAIPMHUtilitiesOnline.NO_THREAD_NAME);
-    int status = httpResponse.getStatus();
-
-    String response = IOUtils.readStringFromStream((InputStream) httpResponse.getEntity());
-
-    if (status != HttpStatus.SC_OK
-        || !response.contains(expectedGetRecordIDIOM)) {
-      System.err.println("\tstatus: " + status);
-      System.err.println(OAIPMHUtilitiesOnline.ERROR + ": response should contain '"
-          + expectedGetRecordIDIOM + "'");
-      System.err.println(response);
-      assertTrue(false);
-    }
-
-    System.out.println("\tresponse: " + response);
-    System.out.println(OAIPMHUtilitiesOnline.OK);
-  }
-
-  /**
-   * @throws IOException
-   */
-  @Test
-  public void testGetRecordIDIOMMETS_Image() throws IOException {
-
-    System.out.println(OAIPMHUtilitiesOnline.TESTING + "testGetRecordIDIOMMETS_Image()");
-
-    String path =
-        "verb=" + OAIPMHUtilitiesOnline.VERB_GET_RECORD + "&identifier="
-            + checkGetRecordIDIOM_Images
-            + "&metadataPrefix=" + OAIPMHUtilitiesOnline.OAI_IDIOMMETS_PREFIX;
-
-    Response httpResponse = OAIPMHUtilitiesOnline.getHttpResponse(oaipmhWebClient, path,
-        OAIPMHUtilitiesOnline.NO_THREAD_NAME);
-    int status = httpResponse.getStatus();
-
-    String response = IOUtils.readStringFromStream((InputStream) httpResponse.getEntity());
-
-    if (status != HttpStatus.SC_OK
-        || !response.contains(expectedGetRecordIDIOM_Images)) {
-      System.err.println("\tstatus: " + status);
-      System.err.println(OAIPMHUtilitiesOnline.ERROR + ": response should contain '"
-          + expectedGetRecordIDIOM_Images + "'");
-      System.err.println(response);
-      assertTrue(false);
-    }
-
-    System.out.println("\tresponse: " + response);
-    System.out.println(OAIPMHUtilitiesOnline.OK);
-  }
-
-  /**
-   * @throws IOException
-   */
-  @Test
-  public void testGetRecordIDIOMMETSNoPrefix() throws IOException {
-
-    System.out.println(OAIPMHUtilitiesOnline.TESTING + "testGetRecordIDIOMMETSNoPrefix()");
-
-    String path = "verb=" + OAIPMHUtilitiesOnline.VERB_GET_RECORD + "&identifier="
-        + checkGetRecordIDIOM + "&metadataPrefix="
-        + OAIPMHUtilitiesOnline.OAI_IDIOMMETS_PREFIX;
-
-    Response httpResponse = OAIPMHUtilitiesOnline.getHttpResponse(oaipmhWebClient, path,
-        OAIPMHUtilitiesOnline.NO_THREAD_NAME);
-    int status = httpResponse.getStatus();
-
-    String response = IOUtils.readStringFromStream((InputStream) httpResponse.getEntity());
-
-    if (status != HttpStatus.SC_OK
-        || !response.contains(expectedGetRecordIDIOM)) {
-      System.err.println("\tstatus: " + status);
-      System.err.println(OAIPMHUtilitiesOnline.ERROR + ": response should contain '"
-          + expectedGetRecordIDIOM + "'");
-      System.err.println(response);
-      assertTrue(false);
-    }
-
-    System.out.println("\tresponse: " + response);
-    System.out.println(OAIPMHUtilitiesOnline.OK);
-  }
-
-  /**
-   * @throws IOException
-   */
-  @Test
-  public void testGetRecordDATACITE() throws IOException {
-
-    System.out.println(OAIPMHUtilitiesOnline.TESTING + "testGetRecordDATACITE()");
-
-    String path = "verb=" + OAIPMHUtilitiesOnline.VERB_GET_RECORD + "&identifier="
-        + checkGetRecordDATACITE + "&metadataPrefix="
-        + OAIPMHUtilitiesOnline.OAI_DATACITE_PREFIX;
-
-    Response httpResponse = OAIPMHUtilitiesOnline.getHttpResponse(oaipmhWebClient, path,
-        OAIPMHUtilitiesOnline.NO_THREAD_NAME);
-    int status = httpResponse.getStatus();
-
-    String response = IOUtils.readStringFromStream((InputStream) httpResponse.getEntity());
-
-    if (status != HttpStatus.SC_OK
-        || !response.contains(expectedGetRecordDATACITE)) {
-      System.err.println("\tstatus: " + status);
-      System.err.println(OAIPMHUtilitiesOnline.ERROR + ": response should contain '"
-          + expectedGetRecordDATACITE + "'");
-      System.err.println(response);
-      assertTrue(false);
-    }
-
-    System.out.println("\tresponse: " + response);
-    System.out.println(OAIPMHUtilitiesOnline.OK);
-  }
-
-  /**
-   * @throws IOException
-   */
-  @Test
-  public void testGetRecordDATACITENoPrefix() throws IOException {
-
-    System.out.println(OAIPMHUtilitiesOnline.TESTING + "testGetRecordDATACITENoPrefix()");
-
-    String path =
-        "verb=" + OAIPMHUtilitiesOnline.VERB_GET_RECORD + "&identifier="
-            + checkGetRecordDATACITE
-            + "&metadataPrefix=" + OAIPMHUtilitiesOnline.OAI_DATACITE_PREFIX;
-
-    Response httpResponse = OAIPMHUtilitiesOnline.getHttpResponse(oaipmhWebClient, path,
-        OAIPMHUtilitiesOnline.NO_THREAD_NAME);
-    int status = httpResponse.getStatus();
-    String response = IOUtils.readStringFromStream((InputStream) httpResponse.getEntity());
-
-    if (status != HttpStatus.SC_OK
-        || !response.contains(expectedGetRecordDATACITE)) {
-      System.err.println("\tstatus: " + status);
-      System.err.println(OAIPMHUtilitiesOnline.ERROR + ": response should contain '"
-          + expectedGetRecordDATACITE + "'");
-      System.err.println(response);
-      assertTrue(false);
+      String message = "[" + status + "] response should contain '" + expectedListSets + "'";
+      assertTrue(message, false);
     }
 
     System.out.println("\tresponse: " + response);
     System.out.println(OAIPMHUtilitiesOnline.OK);
   }
 
-  /**
-   * @throws IOException
-   */
-  @Test
-  public void testListRecordsOAIDCMorePages() throws IOException {
-
-    System.out.println(OAIPMHUtilitiesOnline.TESTING + "testListRecordsOAIDCMorePages()");
-
-    testList(oaipmhWebClient, OAIPMHUtilitiesOnline.VERB_LIST_RECORDS, checkListRecordsDC,
-        OAIPMHUtilitiesOnline.OAI_DC_PREFIX, 20, 100, OAIPMHUtilitiesOnline.NO_THREAD_NAME,
-        OAIPMHUtilitiesOnline.NO_FROM, OAIPMHUtilitiesOnline.NO_UNTIL,
-        OAIPMHUtilitiesOnline.NO_METADATA_FORMAT_WITH_RESTOK);
-
-    System.out.println(OAIPMHUtilitiesOnline.OK);
-  }
-
-  /**
-   * @throws IOException
-   */
-  @Test
-  public void testListRecordsOAIDCMorePagesFromUntil() throws IOException {
-
-    System.out
-        .println(OAIPMHUtilitiesOnline.TESTING + "testListRecordsOAIDCMorePagesFromUntil()");
-
-    testList(oaipmhWebClient, OAIPMHUtilitiesOnline.VERB_LIST_RECORDS, checkListRecordsDC,
-        OAIPMHUtilitiesOnline.OAI_DC_PREFIX, 0, 100, OAIPMHUtilitiesOnline.NO_THREAD_NAME,
-        checkListRecordsDCFrom, checkListRecordsDCUntil,
-        OAIPMHUtilitiesOnline.NO_METADATA_FORMAT_WITH_RESTOK);
-
-    System.out.println(OAIPMHUtilitiesOnline.OK);
-  }
-
-  /**
-   * @throws IOException
-   */
-  @Test(expected = IOException.class)
-  public void testListRecordsIDIOMMETSSomePagesAndMetadataFormatWithRestok() throws IOException {
-
-    System.out.println(OAIPMHUtilitiesOnline.TESTING
-        + "testListRecordsIDIOMMETSSomePagesAndMetadataFormatWithRestok()");
-
-    testList(oaipmhWebClient, OAIPMHUtilitiesOnline.VERB_LIST_RECORDS,
-        OAIPMHUtilitiesOnline.NO_SET,
-        OAIPMHUtilitiesOnline.OAI_IDIOMMETS_PREFIX, 3, 30,
-        OAIPMHUtilitiesOnline.NO_THREAD_NAME,
-        OAIPMHUtilitiesOnline.NO_FROM, OAIPMHUtilitiesOnline.NO_UNTIL,
-        OAIPMHUtilitiesOnline.METADATA_FORMAT_WITH_RESTOK);
-
-    System.out.println(OAIPMHUtilitiesOnline.OK);
-  }
-
-  /**
-   * @throws IOException
-   */
-  @Test
-  // @Ignore
-  public void testListRecordsIDIOMMETSAllPages() throws IOException {
-
-    System.out.println(OAIPMHUtilitiesOnline.TESTING + "testListRecordsIDIOMMETSAllPages()");
-
-    testList(oaipmhWebClient, OAIPMHUtilitiesOnline.VERB_LIST_RECORDS,
-        OAIPMHUtilitiesOnline.NO_SET,
-        OAIPMHUtilitiesOnline.OAI_IDIOMMETS_PREFIX, 0, 30,
-        OAIPMHUtilitiesOnline.NO_THREAD_NAME,
-        OAIPMHUtilitiesOnline.NO_FROM, OAIPMHUtilitiesOnline.NO_UNTIL,
-        OAIPMHUtilitiesOnline.NO_METADATA_FORMAT_WITH_RESTOK);
-
-    System.out.println(OAIPMHUtilitiesOnline.OK);
-  }
-
-  /**
-   * NOTE The amount of records will change due to changes on the data! Please check from and until
-   * values before!
-   *
-   * @throws IOException
-   */
-  @Test
-  @Ignore
-  public void testListRecordsIDIOMMETSMorePagesFromUntil() throws IOException {
-
-    System.out
-        .println(
-            OAIPMHUtilitiesOnline.TESTING + "testListRecordsIDIOMMETSMorePagesFromUntil()");
-
-    testList(oaipmhWebClient, OAIPMHUtilitiesOnline.VERB_LIST_RECORDS,
-        OAIPMHUtilitiesOnline.NO_SET,
-        OAIPMHUtilitiesOnline.OAI_IDIOMMETS_PREFIX, 6, 30,
-        OAIPMHUtilitiesOnline.NO_THREAD_NAME,
-        checkListRecordsIDIOMFrom,
-        checkListRecordsIDIOMUntil,
-        OAIPMHUtilitiesOnline.NO_METADATA_FORMAT_WITH_RESTOK);
-
-    System.out.println(OAIPMHUtilitiesOnline.OK);
-  }
-
-  /**
-   * @throws IOException
-   */
-  @Test
-  public void testListRecordsIDIOMMETSMorePages() throws IOException {
-
-    System.out
-        .println(OAIPMHUtilitiesOnline.TESTING + "testListRecordsIDIOMMETSMorePages()");
-
-    testList(oaipmhWebClient, OAIPMHUtilitiesOnline.VERB_LIST_RECORDS,
-        OAIPMHUtilitiesOnline.NO_SET,
-        OAIPMHUtilitiesOnline.OAI_IDIOMMETS_PREFIX, 6, 30,
-        OAIPMHUtilitiesOnline.NO_THREAD_NAME,
-        OAIPMHUtilitiesOnline.NO_FROM, OAIPMHUtilitiesOnline.NO_UNTIL,
-        OAIPMHUtilitiesOnline.NO_METADATA_FORMAT_WITH_RESTOK);
-
-    System.out.println(OAIPMHUtilitiesOnline.OK);
-  }
-
-  /**
-   * @throws IOException
-   */
-  @Test
-  public void testListRecordsDATACITEMorePages() throws IOException {
-
-    System.out.println(OAIPMHUtilitiesOnline.TESTING + "testListRecordsDATACITEMorePages()");
-
-    testList(oaipmhWebClient, OAIPMHUtilitiesOnline.VERB_LIST_RECORDS,
-        OAIPMHUtilitiesOnline.NO_SET,
-        OAIPMHUtilitiesOnline.OAI_DATACITE_PREFIX, 15, 100,
-        OAIPMHUtilitiesOnline.NO_THREAD_NAME,
-        OAIPMHUtilitiesOnline.NO_FROM, OAIPMHUtilitiesOnline.NO_UNTIL,
-        OAIPMHUtilitiesOnline.NO_METADATA_FORMAT_WITH_RESTOK);
-
-    System.out.println(OAIPMHUtilitiesOnline.OK);
-  }
-
-  /**
-   * @throws IOException
-   */
-  @Test
-  // @Ignore
-  public void testListRecordsDATACITEAllPages() throws IOException {
-
-    System.out.println(OAIPMHUtilitiesOnline.TESTING + "testListRecordsDATACITEAllPages()");
-
-    testList(oaipmhWebClient, OAIPMHUtilitiesOnline.VERB_LIST_RECORDS,
-        OAIPMHUtilitiesOnline.NO_SET,
-        OAIPMHUtilitiesOnline.OAI_DATACITE_PREFIX, 0, 100,
-        OAIPMHUtilitiesOnline.NO_THREAD_NAME,
-        OAIPMHUtilitiesOnline.NO_FROM, OAIPMHUtilitiesOnline.NO_UNTIL,
-        OAIPMHUtilitiesOnline.NO_METADATA_FORMAT_WITH_RESTOK);
-
-    System.out.println(OAIPMHUtilitiesOnline.OK);
-  }
-
-  /**
-   * @throws IOException
-   */
-  @Test
-  public void testListRecordsDATACITEMorePagesFromUntil() throws IOException {
-
-    System.out
-        .println(OAIPMHUtilitiesOnline.TESTING + "testListRecordsDATACITEMorePagesFromUntil()");
-
-    testList(oaipmhWebClient, OAIPMHUtilitiesOnline.VERB_LIST_RECORDS,
-        OAIPMHUtilitiesOnline.NO_SET,
-        OAIPMHUtilitiesOnline.OAI_DATACITE_PREFIX, 15, 100,
-        OAIPMHUtilitiesOnline.NO_THREAD_NAME,
-        checkListRecordsDATACITEFrom,
-        checkListRecordsDATACITEUntil,
-        OAIPMHUtilitiesOnline.NO_METADATA_FORMAT_WITH_RESTOK);
-
-    System.out.println(OAIPMHUtilitiesOnline.OK);
-  }
-
-  /**
-   * @throws IOException
-   */
-  @Test
-  public void testListIdentifiersOAIDCMorePages() throws IOException {
-
-    System.out.println(OAIPMHUtilitiesOnline.TESTING + "testListIdentifiersOAIDCMorePages()");
-
-    testList(oaipmhWebClient, OAIPMHUtilitiesOnline.VERB_LIST_IDENTIFIERS,
-        checkListIdentifiersSet, OAIPMHUtilitiesOnline.OAI_DC_PREFIX, 30,
-        100,
-        OAIPMHUtilitiesOnline.NO_THREAD_NAME, OAIPMHUtilitiesOnline.NO_FROM,
-        OAIPMHUtilitiesOnline.NO_UNTIL,
-        OAIPMHUtilitiesOnline.NO_METADATA_FORMAT_WITH_RESTOK);
-
-    System.out.println(OAIPMHUtilitiesOnline.OK);
-  }
-
-  /**
-   * @throws IOException
-   */
-  @Test(expected = IOException.class)
-  public void testListIdentifiersOAIDCMorePagesAndMetadataFormatWithRestok() throws IOException {
-
-    System.out.println(OAIPMHUtilitiesOnline.TESTING
-        + "testListIdentifiersOAIDCMorePagesAndMetadataFormatWithRestok()");
-
-    testList(oaipmhWebClient, OAIPMHUtilitiesOnline.VERB_LIST_IDENTIFIERS,
-        checkListIdentifiersSet, OAIPMHUtilitiesOnline.OAI_DC_PREFIX, 30,
-        100,
-        OAIPMHUtilitiesOnline.NO_THREAD_NAME, OAIPMHUtilitiesOnline.NO_FROM,
-        OAIPMHUtilitiesOnline.NO_UNTIL, OAIPMHUtilitiesOnline.METADATA_FORMAT_WITH_RESTOK);
-
-    System.out.println(OAIPMHUtilitiesOnline.OK);
-  }
-
-  /**
-   * @throws IOException
-   */
-  @Test
-  @Ignore
-  public void testListIdentifiersIDIOMMETSAllPages() throws IOException {
-
-    System.out
-        .println(OAIPMHUtilitiesOnline.TESTING + "testListIdentifiersIDIOMMETSAllPages()");
-
-    testList(oaipmhWebClient, OAIPMHUtilitiesOnline.VERB_LIST_IDENTIFIERS,
-        OAIPMHUtilitiesOnline.NO_SET, OAIPMHUtilitiesOnline.OAI_IDIOMMETS_PREFIX, 0, 30,
-        OAIPMHUtilitiesOnline.NO_THREAD_NAME, OAIPMHUtilitiesOnline.NO_FROM,
-        OAIPMHUtilitiesOnline.NO_UNTIL,
-        OAIPMHUtilitiesOnline.NO_METADATA_FORMAT_WITH_RESTOK);
-
-    System.out.println(OAIPMHUtilitiesOnline.OK);
-  }
-
-  /**
-   * @throws IOException
-   */
-  @Test
-  public void testListIdentifiersIDIOMMETSMorePages() throws IOException {
-
-    System.out
-        .println(OAIPMHUtilitiesOnline.TESTING + "testListIdentifiersIDIOMMETSMorePages()");
-
-    testList(oaipmhWebClient, OAIPMHUtilitiesOnline.VERB_LIST_IDENTIFIERS,
-        OAIPMHUtilitiesOnline.NO_SET, OAIPMHUtilitiesOnline.OAI_IDIOMMETS_PREFIX, 6, 30,
-        OAIPMHUtilitiesOnline.NO_THREAD_NAME, OAIPMHUtilitiesOnline.NO_FROM,
-        OAIPMHUtilitiesOnline.NO_UNTIL,
-        OAIPMHUtilitiesOnline.NO_METADATA_FORMAT_WITH_RESTOK);
-
-    System.out.println(OAIPMHUtilitiesOnline.OK);
-  }
-
-  /**
-   * @throws IOException
-   */
-  @Test(expected = IOException.class)
-  public void testListIdentifiersIDIOMMETSSomePagesAndMetadataFormatWithRestok()
-      throws IOException {
-
-    System.out.println(OAIPMHUtilitiesOnline.TESTING
-        + "testListIdentifiersIDIOMMETSSomePagesAndMetadataFormatWithRestok()");
-
-    testList(oaipmhWebClient, OAIPMHUtilitiesOnline.VERB_LIST_IDENTIFIERS,
-        OAIPMHUtilitiesOnline.NO_SET, OAIPMHUtilitiesOnline.OAI_IDIOMMETS_PREFIX, 3, 30,
-        OAIPMHUtilitiesOnline.NO_THREAD_NAME, OAIPMHUtilitiesOnline.NO_FROM,
-        OAIPMHUtilitiesOnline.NO_UNTIL, OAIPMHUtilitiesOnline.METADATA_FORMAT_WITH_RESTOK);
-
-    System.out.println(OAIPMHUtilitiesOnline.OK);
-  }
-
-  /**
-   * @throws IOException
-   */
-  @Test
-  public void testListIdentifiersDATACITEMorePages() throws IOException {
-
-    System.out
-        .println(OAIPMHUtilitiesOnline.TESTING + "testListIdentifiersDATACITEMorePages()");
-
-    testList(oaipmhWebClient, OAIPMHUtilitiesOnline.VERB_LIST_IDENTIFIERS,
-        OAIPMHUtilitiesOnline.NO_SET, OAIPMHUtilitiesOnline.OAI_DATACITE_PREFIX, 22, 100,
-        OAIPMHUtilitiesOnline.NO_THREAD_NAME, OAIPMHUtilitiesOnline.NO_FROM,
-        OAIPMHUtilitiesOnline.NO_UNTIL,
-        OAIPMHUtilitiesOnline.NO_METADATA_FORMAT_WITH_RESTOK);
-
-    System.out.println(OAIPMHUtilitiesOnline.OK);
-  }
-
-  /**
-   * @throws IOException
-   * @throws ExecutionException
-   * @throws InterruptedException
-   */
-  @Test
-  public void testListIdentifiersConcurrentlyIDIOMMETSMorePages()
-      throws IOException, InterruptedException, ExecutionException {
-
-    System.out.println(
-        OAIPMHUtilitiesOnline.TESTING + "testListIdentifiersConcurrentlyIDIOMMETSMorePages()");
-
-    ExecutorService executor = Executors.newFixedThreadPool(3);
-
-    Future<Boolean> f1 = executor
-        .submit(new OaiPmhResumptionTokenTestThread(OAIPMHUtilitiesOnline.VERB_LIST_IDENTIFIERS,
-            OAIPMHUtilitiesOnline.NO_SET, OAIPMHUtilitiesOnline.OAI_IDIOMMETS_PREFIX, 3, 30,
-            "C1"));
-    Future<Boolean> f2 = executor
-        .submit(new OaiPmhResumptionTokenTestThread(OAIPMHUtilitiesOnline.VERB_LIST_IDENTIFIERS,
-            OAIPMHUtilitiesOnline.NO_SET, OAIPMHUtilitiesOnline.OAI_IDIOMMETS_PREFIX, 5, 30,
-            "C2"));
-    Future<Boolean> f3 = executor
-        .submit(new OaiPmhResumptionTokenTestThread(OAIPMHUtilitiesOnline.VERB_LIST_IDENTIFIERS,
-            OAIPMHUtilitiesOnline.NO_SET, OAIPMHUtilitiesOnline.OAI_IDIOMMETS_PREFIX, 8, 30,
-            "C2"));
-
-    executor.shutdown();
-
-    System.out.println(OAIPMHUtilitiesOnline.OK + ": [C1]=" + f1.get() + ", [C2]=" + f2.get()
-        + ", [C3]=" + f3.get());
-  }
-
-  /**
-   * @throws IOException
-   * @throws ExecutionException
-   * @throws InterruptedException
-   */
-  @Test
-  public void testListRecordsConcurrentlyIDIOMMETSMorePages()
-      throws IOException, InterruptedException, ExecutionException {
-
-    System.out
-        .println(
-            OAIPMHUtilitiesOnline.TESTING + "testListRecordsConcurrentlyIDIOMMETSMorePages()");
-
-    ExecutorService executor = Executors.newFixedThreadPool(3);
-
-    Future<Boolean> f1 =
-        executor
-            .submit(new OaiPmhResumptionTokenTestThread(OAIPMHUtilitiesOnline.VERB_LIST_RECORDS,
-                OAIPMHUtilitiesOnline.NO_SET, OAIPMHUtilitiesOnline.OAI_IDIOMMETS_PREFIX, 2,
-                30, "D1"));
-    Future<Boolean> f2 =
-        executor
-            .submit(new OaiPmhResumptionTokenTestThread(OAIPMHUtilitiesOnline.VERB_LIST_RECORDS,
-                OAIPMHUtilitiesOnline.NO_SET, OAIPMHUtilitiesOnline.OAI_IDIOMMETS_PREFIX, 3,
-                30, "D2"));
-    Future<Boolean> f3 =
-        executor
-            .submit(new OaiPmhResumptionTokenTestThread(OAIPMHUtilitiesOnline.VERB_LIST_RECORDS,
-                OAIPMHUtilitiesOnline.NO_SET, OAIPMHUtilitiesOnline.OAI_IDIOMMETS_PREFIX, 4,
-                30, "D3"));
-
-    executor.shutdown();
-
-    System.out.println(OAIPMHUtilitiesOnline.OK + ": [D1]=" + f1.get() + ", [D2]=" + f2.get()
-        + ", [D3]=" + f3.get());
-  }
-
-  /**
-   * @throws IOException
-   * @throws InterruptedException
-   * @throws ExecutionException
-   */
-  @Test
-  public void testRestokConcurrentlyListIdentifiersDC()
-      throws InterruptedException, ExecutionException {
-
-    System.out
-        .println(OAIPMHUtilitiesOnline.TESTING + "testRestokConcurrentlyListIdentifiersDC()");
-
-    ExecutorService executor = Executors.newFixedThreadPool(3);
-
-    Future<Boolean> f1 = executor
-        .submit(new OaiPmhResumptionTokenTestThread(OAIPMHUtilitiesOnline.VERB_LIST_IDENTIFIERS,
-            OAIPMHUtilitiesOnline.NO_SET, OAIPMHUtilitiesOnline.OAI_DC_PREFIX, 36, 100,
-            "A1"));
-    Future<Boolean> f2 = executor
-        .submit(new OaiPmhResumptionTokenTestThread(OAIPMHUtilitiesOnline.VERB_LIST_IDENTIFIERS,
-            OAIPMHUtilitiesOnline.NO_SET, OAIPMHUtilitiesOnline.OAI_DC_PREFIX, 27, 100,
-            "A2"));
-    Future<Boolean> f3 = executor
-        .submit(new OaiPmhResumptionTokenTestThread(OAIPMHUtilitiesOnline.VERB_LIST_IDENTIFIERS,
-            OAIPMHUtilitiesOnline.NO_SET, OAIPMHUtilitiesOnline.OAI_DC_PREFIX, 19, 100,
-            "A3"));
-
-    executor.shutdown();
-
-    System.out.println(OAIPMHUtilitiesOnline.OK + ": [A1]=" + f1.get() + ", [A2]=" + f2.get()
-        + ", [A3]=" + f3.get());
-  }
-
-  /**
-   * @throws IOException
-   * @throws InterruptedException
-   * @throws ExecutionException
-   */
-  @Test
-  public void testRestokConcurrentlyListIdentifiersIDIOMMETS()
-      throws InterruptedException, ExecutionException {
-
-    System.out
-        .println(
-            OAIPMHUtilitiesOnline.TESTING + "testRestokConcurrentlyListIdentifiersIDIOM()");
-
-    ExecutorService executor = Executors.newFixedThreadPool(3);
-
-    Future<Boolean> f1 = executor
-        .submit(new OaiPmhResumptionTokenTestThread(OAIPMHUtilitiesOnline.VERB_LIST_IDENTIFIERS,
-            OAIPMHUtilitiesOnline.NO_SET, OAIPMHUtilitiesOnline.OAI_IDIOMMETS_PREFIX, 13,
-            30, "A1"));
-    Future<Boolean> f2 = executor
-        .submit(new OaiPmhResumptionTokenTestThread(OAIPMHUtilitiesOnline.VERB_LIST_IDENTIFIERS,
-            OAIPMHUtilitiesOnline.NO_SET, OAIPMHUtilitiesOnline.OAI_IDIOMMETS_PREFIX, 35,
-            30, "A2"));
-    Future<Boolean> f3 = executor
-        .submit(new OaiPmhResumptionTokenTestThread(OAIPMHUtilitiesOnline.VERB_LIST_IDENTIFIERS,
-            OAIPMHUtilitiesOnline.NO_SET, OAIPMHUtilitiesOnline.OAI_IDIOMMETS_PREFIX, 11,
-            30, "A3"));
-
-    executor.shutdown();
-
-    System.out.println(OAIPMHUtilitiesOnline.OK + ": [A1]=" + f1.get() + ", [A2]=" + f2.get()
-        + ", [A3]=" + f3.get());
-  }
-
-  /**
-   * @throws IOException
-   * @throws InterruptedException
-   * @throws ExecutionException
-   */
-  @Test
-  public void testRestokConcurrentlyListIdentifiersDATACITE()
-      throws InterruptedException, ExecutionException {
-
-    System.out
-        .println(
-            OAIPMHUtilitiesOnline.TESTING + "testRestokConcurrentlyListIdentifiersDATACITE()");
-
-    ExecutorService executor = Executors.newFixedThreadPool(3);
-
-    Future<Boolean> f1 = executor
-        .submit(new OaiPmhResumptionTokenTestThread(OAIPMHUtilitiesOnline.VERB_LIST_IDENTIFIERS,
-            OAIPMHUtilitiesOnline.NO_SET, OAIPMHUtilitiesOnline.OAI_DATACITE_PREFIX, 13,
-            100, "A1"));
-    Future<Boolean> f2 = executor
-        .submit(new OaiPmhResumptionTokenTestThread(OAIPMHUtilitiesOnline.VERB_LIST_IDENTIFIERS,
-            OAIPMHUtilitiesOnline.NO_SET, OAIPMHUtilitiesOnline.OAI_DATACITE_PREFIX, 20,
-            100, "A2"));
-    Future<Boolean> f3 = executor
-        .submit(new OaiPmhResumptionTokenTestThread(OAIPMHUtilitiesOnline.VERB_LIST_IDENTIFIERS,
-            OAIPMHUtilitiesOnline.NO_SET, OAIPMHUtilitiesOnline.OAI_DATACITE_PREFIX, 8, 100,
-            "A3"));
-
-    executor.shutdown();
-
-    System.out.println(OAIPMHUtilitiesOnline.OK + ": [A1]=" + f1.get() + ", [A2]=" + f2.get()
-        + ", [A3]=" + f3.get());
-  }
-
-  /**
-   * @throws InterruptedException
-   * @throws ExecutionException
-   */
-  @Test
-  public void testRestokConcurrentlyListIdentifiersDCAndIDIOMMETS()
-      throws InterruptedException, ExecutionException {
-
-    System.out.println(
-        OAIPMHUtilitiesOnline.TESTING
-            + "testRestokConcurrentlyListIdentifiersDCAndIDIOMMets()");
-
-    ExecutorService executor = Executors.newFixedThreadPool(3);
-
-    Future<Boolean> f1 = executor
-        .submit(new OaiPmhResumptionTokenTestThread(OAIPMHUtilitiesOnline.VERB_LIST_IDENTIFIERS,
-            OAIPMHUtilitiesOnline.NO_SET, OAIPMHUtilitiesOnline.OAI_DC_PREFIX, 53, 100,
-            "DC1"));
-    Future<Boolean> f2 = executor
-        .submit(new OaiPmhResumptionTokenTestThread(OAIPMHUtilitiesOnline.VERB_LIST_IDENTIFIERS,
-            OAIPMHUtilitiesOnline.NO_SET, OAIPMHUtilitiesOnline.OAI_DC_PREFIX, 28, 100,
-            "DC2"));
-    Future<Boolean> f3 = executor
-        .submit(new OaiPmhResumptionTokenTestThread(OAIPMHUtilitiesOnline.VERB_LIST_IDENTIFIERS,
-            OAIPMHUtilitiesOnline.NO_SET, OAIPMHUtilitiesOnline.OAI_IDIOMMETS_PREFIX,
-            checkListIdentifiersPagesToTestIDIOM,
-            checkListIdentifiersRecordsPerPageIDIOM,
-            "IDIOM"));
-
-    executor.shutdown();
-
-    System.out.println(OAIPMHUtilitiesOnline.OK + ": [DC1]=" + f1.get() + ", [DC2]=" + f2.get()
-        + ", [IDIOM]=" + f3.get());
-  }
-
-  /**
-   * @throws InterruptedException
-   * @throws ExecutionException
-   */
-  @Test
-  public void testRestokConcurrentlyListRecordsDC()
-      throws InterruptedException, ExecutionException {
-
-    System.out.println(OAIPMHUtilitiesOnline.TESTING + "testRestokConcurrentlyListRecordsDC()");
-
-    ExecutorService executor = Executors.newFixedThreadPool(4);
-
-    Future<Boolean> f1 =
-        executor
-            .submit(new OaiPmhResumptionTokenTestThread(OAIPMHUtilitiesOnline.VERB_LIST_RECORDS,
-                OAIPMHUtilitiesOnline.NO_SET, OAIPMHUtilitiesOnline.OAI_DC_PREFIX, 44, 100,
-                "DC1"));
-    Future<Boolean> f2 =
-        executor
-            .submit(new OaiPmhResumptionTokenTestThread(OAIPMHUtilitiesOnline.VERB_LIST_RECORDS,
-                OAIPMHUtilitiesOnline.NO_SET, OAIPMHUtilitiesOnline.OAI_DC_PREFIX, 33, 100,
-                "DC2"));
-    Future<Boolean> f3 =
-        executor
-            .submit(new OaiPmhResumptionTokenTestThread(OAIPMHUtilitiesOnline.VERB_LIST_RECORDS,
-                OAIPMHUtilitiesOnline.NO_SET, OAIPMHUtilitiesOnline.OAI_DC_PREFIX, 66, 100,
-                "DC3"));
-    Future<Boolean> f4 =
-        executor
-            .submit(new OaiPmhResumptionTokenTestThread(OAIPMHUtilitiesOnline.VERB_LIST_RECORDS,
-                OAIPMHUtilitiesOnline.NO_SET, OAIPMHUtilitiesOnline.OAI_DC_PREFIX, 28, 100,
-                "DC4"));
-
-    executor.shutdown();
-
-    System.out.println(
-        OAIPMHUtilitiesOnline.OK + ": [DC1]=" + f1.get() + ", [DC2]=" + f2.get() + ", [DC3]="
-            + f3.get() + ", [DC4]=" + f4.get());
-  }
-
-  /**
-   * @throws IOException
-   * @throws InterruptedException
-   * @throws ExecutionException
-   */
-  @Test
-  public void testRestokConcurrentlyListRecords() throws InterruptedException, ExecutionException {
-
-    System.out.println(OAIPMHUtilitiesOnline.TESTING + "testRestokConcurrentlyListRecords()");
-
-    ExecutorService executor = Executors.newFixedThreadPool(3);
-
-    Future<Boolean> f1 =
-        executor
-            .submit(new OaiPmhResumptionTokenTestThread(OAIPMHUtilitiesOnline.VERB_LIST_RECORDS,
-                OAIPMHUtilitiesOnline.NO_SET, OAIPMHUtilitiesOnline.OAI_DC_PREFIX, 6, 100,
-                "B1"));
-    Future<Boolean> f2 =
-        executor
-            .submit(new OaiPmhResumptionTokenTestThread(OAIPMHUtilitiesOnline.VERB_LIST_RECORDS,
-                OAIPMHUtilitiesOnline.NO_SET, OAIPMHUtilitiesOnline.OAI_DC_PREFIX, 7, 100,
-                "B2"));
-    Future<Boolean> f3 =
-        executor
-            .submit(new OaiPmhResumptionTokenTestThread(OAIPMHUtilitiesOnline.VERB_LIST_RECORDS,
-                OAIPMHUtilitiesOnline.NO_SET, OAIPMHUtilitiesOnline.OAI_DC_PREFIX, 8, 100,
-                "B3"));
-    Future<Boolean> f4 =
-        executor
-            .submit(new OaiPmhResumptionTokenTestThread(OAIPMHUtilitiesOnline.VERB_LIST_RECORDS,
-                OAIPMHUtilitiesOnline.NO_SET, OAIPMHUtilitiesOnline.OAI_DC_PREFIX, 9, 100,
-                "B4"));
-
-    executor.shutdown();
-
-    System.out.println(
-        OAIPMHUtilitiesOnline.OK + ": [B1]=" + f1.get() + ", [B2]=" + f2.get() + ", [B3]="
-            + f3.get()
-            + ", [B4]=" + f4.get());
-  }
-
-  /**
-   * @throws InterruptedException
-   * @throws ExecutionException
-   */
-  @Test
-  public void testListRecordsRestokConcurrentlyDCAndIDIOMMETS()
-      throws InterruptedException, ExecutionException {
-
-    System.out
-        .println(OAIPMHUtilitiesOnline.TESTING
-            + "testListRecordsRestokConcurrentlyDCAndIDIOMMets()");
-
-    ExecutorService executor = Executors.newFixedThreadPool(3);
-
-    Future<Boolean> f1 =
-        executor
-            .submit(new OaiPmhResumptionTokenTestThread(OAIPMHUtilitiesOnline.VERB_LIST_RECORDS,
-                OAIPMHUtilitiesOnline.NO_SET, OAIPMHUtilitiesOnline.OAI_DC_PREFIX, 34, 100,
-                "DC1"));
-    Future<Boolean> f2 =
-        executor
-            .submit(new OaiPmhResumptionTokenTestThread(OAIPMHUtilitiesOnline.VERB_LIST_RECORDS,
-                OAIPMHUtilitiesOnline.NO_SET, OAIPMHUtilitiesOnline.OAI_DC_PREFIX, 27, 100,
-                "DC2"));
-    Future<Boolean> f3 =
-        executor
-            .submit(new OaiPmhResumptionTokenTestThread(OAIPMHUtilitiesOnline.VERB_LIST_RECORDS,
-                OAIPMHUtilitiesOnline.NO_SET, OAIPMHUtilitiesOnline.OAI_IDIOMMETS_PREFIX,
-                checkListIdentifiersPagesToTestIDIOM,
-                checkListIdentifiersRecordsPerPageIDIOM,
-                "IDIOM"));
-
-    executor.shutdown();
-
-    System.out.println(OAIPMHUtilitiesOnline.OK + ": [DC1]=" + f1.get() + ", [DC2]=" + f2.get()
-        + ", [IOIOM]=" + f3.get());
-  }
-
-  /**
-   * @throws IOException
-   * @throws InterruptedException
-   * @throws ExecutionException
-   */
-  @Test
-  public void testConcurrentlyOAIDCGetRecord() throws InterruptedException, ExecutionException {
-
-    System.out.println(OAIPMHUtilitiesOnline.TESTING + "testConcurrentlyOAIDCGetRecord()");
-
-    ExecutorService executor = Executors.newFixedThreadPool(18);
-
-    Future<Boolean> f1 = executor
-        .submit(new OaiPmhGetRecordTestThread(OAIPMHUtilitiesOnline.VERB_GET_RECORD,
-            checkGetRecordIDList.get(0),
-            OAIPMHUtilitiesOnline.OAI_DC_PREFIX,
-            "GR[" + checkGetRecordIDList.get(0) + "]"));
-    Future<Boolean> f2 = executor
-        .submit(new OaiPmhGetRecordTestThread(OAIPMHUtilitiesOnline.VERB_GET_RECORD,
-            checkGetRecordIDList.get(1),
-            OAIPMHUtilitiesOnline.OAI_DC_PREFIX,
-            "GR[" + checkGetRecordIDList.get(0) + "]"));
-    Future<Boolean> f3 = executor
-        .submit(new OaiPmhGetRecordTestThread(OAIPMHUtilitiesOnline.VERB_GET_RECORD,
-            checkGetRecordIDList.get(2),
-            OAIPMHUtilitiesOnline.OAI_DC_PREFIX,
-            "GR[" + checkGetRecordIDList.get(0) + "]"));
-    Future<Boolean> f4 = executor
-        .submit(new OaiPmhGetRecordTestThread(OAIPMHUtilitiesOnline.VERB_GET_RECORD,
-            checkGetRecordIDList.get(3),
-            OAIPMHUtilitiesOnline.OAI_DC_PREFIX,
-            "GR[" + checkGetRecordIDList.get(0) + "]"));
-    Future<Boolean> f5 = executor
-        .submit(new OaiPmhGetRecordTestThread(OAIPMHUtilitiesOnline.VERB_GET_RECORD,
-            checkGetRecordIDList.get(4),
-            OAIPMHUtilitiesOnline.OAI_DC_PREFIX,
-            "GR[" + checkGetRecordIDList.get(0) + "]"));
-    Future<Boolean> f6 = executor
-        .submit(new OaiPmhGetRecordTestThread(OAIPMHUtilitiesOnline.VERB_GET_RECORD,
-            checkGetRecordIDList.get(5),
-            OAIPMHUtilitiesOnline.OAI_DC_PREFIX,
-            "GR[" + checkGetRecordIDList.get(0) + "]"));
-    Future<Boolean> f7 = executor
-        .submit(new OaiPmhGetRecordTestThread(OAIPMHUtilitiesOnline.VERB_GET_RECORD,
-            checkGetRecordIDList.get(6),
-            OAIPMHUtilitiesOnline.OAI_DC_PREFIX,
-            "GR[" + checkGetRecordIDList.get(0) + "]"));
-    Future<Boolean> f8 = executor
-        .submit(new OaiPmhGetRecordTestThread(OAIPMHUtilitiesOnline.VERB_GET_RECORD,
-            checkGetRecordIDList.get(7),
-            OAIPMHUtilitiesOnline.OAI_DC_PREFIX,
-            "GR[" + checkGetRecordIDList.get(0) + "]"));
-    Future<Boolean> f9 = executor
-        .submit(new OaiPmhGetRecordTestThread(OAIPMHUtilitiesOnline.VERB_GET_RECORD,
-            checkGetRecordIDList.get(8),
-            OAIPMHUtilitiesOnline.OAI_DC_PREFIX,
-            "GR[" + checkGetRecordIDList.get(0) + "]"));
-    Future<Boolean> f10 = executor
-        .submit(new OaiPmhGetRecordTestThread(OAIPMHUtilitiesOnline.VERB_GET_RECORD,
-            checkGetRecordIDList.get(9),
-            OAIPMHUtilitiesOnline.OAI_DC_PREFIX,
-            "GR[" + checkGetRecordIDList.get(0) + "]"));
-    Future<Boolean> f11 = executor
-        .submit(new OaiPmhGetRecordTestThread(OAIPMHUtilitiesOnline.VERB_GET_RECORD,
-            checkGetRecordIDList.get(10),
-            OAIPMHUtilitiesOnline.OAI_DC_PREFIX,
-            "GR[" + checkGetRecordIDList.get(0) + "]"));
-    Future<Boolean> f12 = executor
-        .submit(new OaiPmhGetRecordTestThread(OAIPMHUtilitiesOnline.VERB_GET_RECORD,
-            checkGetRecordIDList.get(11),
-            OAIPMHUtilitiesOnline.OAI_DC_PREFIX,
-            "GR[" + checkGetRecordIDList.get(0) + "]"));
-    Future<Boolean> f13 = executor
-        .submit(new OaiPmhGetRecordTestThread(OAIPMHUtilitiesOnline.VERB_GET_RECORD,
-            checkGetRecordIDList.get(12),
-            OAIPMHUtilitiesOnline.OAI_DC_PREFIX,
-            "GR[" + checkGetRecordIDList.get(0) + "]"));
-    Future<Boolean> f14 = executor
-        .submit(new OaiPmhGetRecordTestThread(OAIPMHUtilitiesOnline.VERB_GET_RECORD,
-            checkGetRecordIDList.get(13),
-            OAIPMHUtilitiesOnline.OAI_DC_PREFIX,
-            "GR[" + checkGetRecordIDList.get(0) + "]"));
-    Future<Boolean> f15 = executor
-        .submit(new OaiPmhGetRecordTestThread(OAIPMHUtilitiesOnline.VERB_GET_RECORD,
-            checkGetRecordIDList.get(14),
-            OAIPMHUtilitiesOnline.OAI_DC_PREFIX,
-            "GR[" + checkGetRecordIDList.get(0) + "]"));
-    Future<Boolean> f16 = executor
-        .submit(new OaiPmhGetRecordTestThread(OAIPMHUtilitiesOnline.VERB_GET_RECORD,
-            checkGetRecordIDList.get(15),
-            OAIPMHUtilitiesOnline.OAI_DC_PREFIX,
-            "GR[" + checkGetRecordIDList.get(0) + "]"));
-    Future<Boolean> f17 = executor
-        .submit(new OaiPmhGetRecordTestThread(OAIPMHUtilitiesOnline.VERB_GET_RECORD,
-            checkGetRecordIDList.get(16),
-            OAIPMHUtilitiesOnline.OAI_DC_PREFIX,
-            "GR[" + checkGetRecordIDList.get(0) + "]"));
-    Future<Boolean> f18 = executor
-        .submit(new OaiPmhGetRecordTestThread(OAIPMHUtilitiesOnline.VERB_GET_RECORD,
-            checkGetRecordIDList.get(17),
-            OAIPMHUtilitiesOnline.OAI_DC_PREFIX,
-            "GR[" + checkGetRecordIDList.get(0) + "]"));
-
-    executor.shutdown();
-
-    System.out.println(OAIPMHUtilitiesOnline.OK + "[GR1]=" + f1.get() + ", [GR2]=" + f2.get()
-        + ", [GR3]=" + f3.get() + ", [GR4]=" + f4.get() + ", [GR5]=" + f5.get() + ", [GR6]="
-        + f6.get() + ", [GR7]=" + f7.get() + ", [GR8]=" + f8.get() + ", [GR9]=" + f9.get()
-        + ", [GR10]=" + f10.get() + ", [GR11]=" + f11.get() + ", [GR12]=" + f12.get()
-        + ", [GR13]=" + f13.get() + ", [GR14]=" + f14.get() + ", [GR15]=" + f15.get()
-        + ", [GR16]=" + f16.get() + ", [GR17]=" + f17.get() + ", [GR18]=" + f18.get());
-  }
-
-  /**
-   * <p>
-   * Starts a new OAI-PMH thread.
-   * </p>
-   */
-
-  private class OaiPmhResumptionTokenTestThread implements Callable<Boolean> {
-
-    protected String verb;
-    protected String set;
-    protected String metadataPrefix;
-    protected int numberOfPagesToTest;
-    protected int recordsExpectedPerRequest;
-    protected String threadName;
-
-    /**
-     * @param theVerb
-     * @param theSet
-     * @param theMetadataPrefix
-     * @param numberOfPagesToTest
-     * @param recordsExpectedPerRequest
-     */
-    public OaiPmhResumptionTokenTestThread(String theVerb, String theSet, String theMetadataPrefix,
-        int numberOfPagesToTest, int recordsExpectedPerRequest, String theThreadName) {
-      this.verb = theVerb;
-      this.set = theSet;
-      this.metadataPrefix = theMetadataPrefix;
-      this.numberOfPagesToTest = numberOfPagesToTest;
-      this.recordsExpectedPerRequest = recordsExpectedPerRequest;
-      this.threadName = theThreadName;
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see java.lang.Thread#run()
-     */
-    @Override
-    public Boolean call() throws IOException {
-      testList(oaipmhWebClient, this.verb, this.set, this.metadataPrefix,
-          this.numberOfPagesToTest, this.recordsExpectedPerRequest, this.threadName,
-          OAIPMHUtilitiesOnline.NO_FROM, OAIPMHUtilitiesOnline.NO_UNTIL,
-          OAIPMHUtilitiesOnline.NO_METADATA_FORMAT_WITH_RESTOK);
-      return true;
-    }
-  }
-
-  /**
-   * <p>
-   * Starts a new OAI-PMH thread.
-   * </p>
-   */
-
-  private class OaiPmhGetRecordTestThread implements Callable<Boolean> {
-
-    protected String verb;
-    protected String identifier;
-    protected String metadataPrefix;
-    protected String threadName;
-
-    /**
-     * @param theVerb
-     * @param theIdentifier
-     * @param theMetadataPrefix
-     * @param theThreadName
-     */
-    public OaiPmhGetRecordTestThread(String theVerb, String theIdentifier, String theMetadataPrefix,
-        String theThreadName) {
-      this.verb = theVerb;
-      this.identifier = theIdentifier;
-      this.metadataPrefix = theMetadataPrefix;
-      this.threadName = theThreadName;
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see java.util.concurrent.Callable#call()
-     */
-    @Override
-    public Boolean call() throws IOException {
-
-      String url = "verb=" + this.verb + "&identifier=" + this.identifier + "&metadataPrefix="
-          + this.metadataPrefix;
-      OAIPMHUtilitiesOnline.getHttpResponse(oaipmhWebClient, url, this.threadName);
-
-      return true;
-    }
-  }
-
-  // **
-  // PRIVATE METHODS
-  // **
-
-  /**
-   * TODO Generalise in OaiPmhTestUtilities!
-   * 
-   * @param theClient
-   * @param theVerb
-   * @param theSet
-   * @param theMetadataPrefix
-   * @param maxNumberOfPagesToTest
-   * @param recordsExpectedPerRequest
-   * @param theThreadName
-   * @param from
-   * @param until
-   * @param resumptionTokenANDMetadataPrefix
-   * @throws IOException
-   */
-  protected static void testList(Client theClient, final String theVerb, final String theSet,
-      final String theMetadataPrefix, final int maxNumberOfPagesToTest,
-      final int recordsExpectedPerRequest, final String theThreadName, final String from,
-      final String until, final boolean resumptionTokenANDMetadataPrefix) throws IOException {
-
-    String threadName = tn(theThreadName);
-
-    long startTime = System.currentTimeMillis();
-
-    String testOccurance = "header";
-    if (theVerb.equals(OAIPMHUtilitiesOnline.VERB_LIST_RECORDS)) {
-      testOccurance = "record";
-    }
-
-    String path = "verb=" + theVerb + "&metadataPrefix=" + theMetadataPrefix;
-
-    if (theSet != null) {
-      path += "&set=" + theSet;
-    }
-
-    if (from != null && until != null) {
-      path += "&from=" + from + "&until=" + until;
-    }
-
-    Response httpResponse = OAIPMHUtilitiesOnline.getHttpResponse(theClient, path, threadName);
-    int status = httpResponse.getStatus();
-
-    int loopCount = 1;
-    long timeRunning = System.currentTimeMillis() - startTime;
-    System.out.println("\t" + threadName + "time: "
-        + OAIPMHUtilitiesOnline.getDurationInSecs(timeRunning) + " (loop " + loopCount
-        + (maxNumberOfPagesToTest != 0 ? "/" + maxNumberOfPagesToTest : "") + ")");
-
-    String responseString = IOUtils.readStringFromStream((InputStream) httpResponse.getEntity());
-
-    // Test resumption token tags.
-    String restok = examineResumptionTokenTag(responseString, testOccurance,
-        OAIPMHUtilitiesOnline.NO_TOKEN, recordsExpectedPerRequest, loopCount, threadName);
-
-    // Test general metadata content (if verb is listRecords!), must go conform with the metadata
-    // prefix setting.
-    if (theVerb.equals(OAIPMHUtilitiesOnline.VERB_LIST_RECORDS)) {
-      examineContent(responseString, theMetadataPrefix);
-    }
-
-    while (status == HttpStatus.SC_OK && !restok.equals(OAIPMHUtilitiesOnline.NO_TOKEN)) {
-      loopCount += 1;
-      synchronized (threadName) {
-        if (maxNumberOfPagesToTest > 0 && loopCount > maxNumberOfPagesToTest) {
-          System.out
-              .println("\t" + threadName + "TESTING ONLY " + maxNumberOfPagesToTest + " pages!");
-          break;
-        }
-        path = "verb=" + theVerb + "&resumptionToken=" + restok;
-        if (resumptionTokenANDMetadataPrefix) {
-          path += "&metadataPrefix=" + theMetadataPrefix;
-        }
-        httpResponse = OAIPMHUtilitiesOnline.getHttpResponse(theClient, path, threadName);
-        timeRunning = System.currentTimeMillis() - startTime;
-        System.out.println("\t" + threadName + "time: "
-            + OAIPMHUtilitiesOnline.getDurationInSecs(timeRunning) + " (loop " + loopCount
-            + (maxNumberOfPagesToTest != 0 ? "/" + maxNumberOfPagesToTest : "") + ")");
-
-        // Test resumption token tags.
-        responseString = IOUtils.readStringFromStream((InputStream) httpResponse.getEntity());
-        restok = examineResumptionTokenTag(responseString, testOccurance, restok,
-            recordsExpectedPerRequest, loopCount, threadName);
-
-        // Test general metadata content (if verb is listRecords!), must go conform with the
-        // metadata // prefix setting.
-        if (theVerb.equals(OAIPMHUtilitiesOnline.VERB_LIST_RECORDS)) {
-          examineContent(responseString, theMetadataPrefix);
-        }
-      }
-    }
-
-    // Only check for max loops, if we do have less loops and no resumption token, it will be fine,
-    // too!
-    if (!restok.equals(OAIPMHUtilitiesOnline.NO_TOKEN) && loopCount < maxNumberOfPagesToTest) {
-      System.out.println(threadName + OAIPMHUtilitiesOnline.ERROR + ": Must have done "
-          + maxNumberOfPagesToTest + " loops, but did only " + loopCount);
-      assertTrue(false);
-    }
-
-    // Check for single loop, we need MORE!
-    if (loopCount == 1) {
-      System.out
-          .println(
-              threadName + OAIPMHUtilitiesOnline.ERROR + ": Must have more than one loop!");
-      assertTrue(false);
-    }
-
-    System.out.println("\t" + threadName + OAIPMHUtilitiesOnline.OK);
-  }
-
-  /**
-   * TODO Generalise in OaiPmhTestUtilities!
-   * 
-   * @param theResponse
-   * @param recordOrHeader
-   * @param oldtok
-   * @param recordsExpectedPerRequest
-   * @param loopCount
-   * @param theThreadName
-   * @return Resumption token string, if existing, -1 if either no <resumptionToken> tag is
-   *         existing, tag is existing and has no token value.
-   * @throws IOException
-   */
-  public static String examineResumptionTokenTag(final String theResponseString,
-      final String recordOrHeader, final String oldtok, final int recordsExpectedPerRequest,
-      final int loopCount, final String theThreadName) throws IOException {
-
-    // Test for OAIPMH errors.
-    if (theResponseString.contains("<error code=\"badArgument\">")) {
-      String message =
-          theThreadName + OAIPMHUtilitiesOnline.ERROR + " IN OAIPMH RESPONSE: "
-              + theResponseString;
-      System.out.println(message);
-      throw new IOException(message);
-    }
-
-    // Count response objects at first.
-    int recordCount = 0;
-    int i = theResponseString.indexOf("<" + recordOrHeader + ">", 0);
-    while (i != -1) {
-      recordCount++;
-      i++;
-      i = theResponseString.indexOf("<" + recordOrHeader + ">", i);
-    }
-
-    System.out.println("\t" + theThreadName + recordOrHeader + "s: " + recordCount);
-
-    // Check if token tag is existing.
-    int tokStart = theResponseString.indexOf("<resumptionToken");
-    int tokEnd = theResponseString.indexOf("</resumptionToken");
-
-    if (tokStart == -1 && tokEnd == -1) {
-      System.out.println("\t" + theThreadName + "token: no token");
-
-      return OAIPMHUtilitiesOnline.NO_TOKEN;
-    }
-
-    String restokTmp = theResponseString.substring(tokStart, tokEnd);
-    // Get token tag.
-    String toktag = restokTmp.substring(0, restokTmp.indexOf(">") + 1).trim();
-    System.out.println("\t" + theThreadName + "tokentag: " + toktag);
-
-    // Get token.
-    String restok = restokTmp.substring(restokTmp.indexOf(">") + 1).trim();
-    System.out.println("\t" + theThreadName + "token: " + restok);
-
-    // Check if old and new token are equal or not.
-    boolean tokchanged = !oldtok.equals(restok);
-    System.out.println("\t" + theThreadName + "tokchngd: " + tokchanged);
-
-    // Get completeListSize and cursor.
-    String sizeStr = toktag.substring(toktag.indexOf("completeListSize=\"") + 18);
-    int size = Integer.parseInt(sizeStr.substring(0, sizeStr.indexOf("\"")));
-    String cursorStr = toktag.substring(toktag.indexOf("cursor=\"") + 8);
-    int cursor = Integer.parseInt(cursorStr.substring(0, cursorStr.indexOf("\"")));
-    System.out.println("\t" + theThreadName + "size: " + size + " / " + cursor);
-
-    // If token is provided, test cursor and element count!
-    if (!restok.isEmpty()) {
-      synchronized (TestTGOAIPMHOnline.class) {
-        // Check <record> or <header> count, must be recordsExpectedPerRequest!
-        if (recordCount != recordsExpectedPerRequest) {
-          String message =
-              OAIPMHUtilitiesOnline.ERROR + ": " + recordOrHeader + " count mismatch, must be "
-                  + recordsExpectedPerRequest + " if token is provided, but is " + recordCount;
-          assertTrue(message, false);
-        }
-        if (size <= recordsExpectedPerRequest) {
-          String message =
-              OAIPMHUtilitiesOnline.ERROR + ": completeListSize count mismatch, must be > "
-                  + recordsExpectedPerRequest + " if token is provided, but is " + size;
-          assertTrue(message, false);
-        }
-        if (cursor != recordsExpectedPerRequest * loopCount) {
-          String message = OAIPMHUtilitiesOnline.ERROR + ": cursor must be "
-              + (loopCount * recordsExpectedPerRequest) + " in loop " + loopCount + ", but is "
-              + cursor;
-          assertTrue(message, false);
-        }
-      }
-    }
-
-    // If no token is provided, stop querying.
-    else {
-      // Check <record> count, must be completeListSize % recordsExpectedPerRequest.
-      if (recordCount != size % recordsExpectedPerRequest) {
-        System.err.println(theThreadName + OAIPMHUtilitiesOnline.ERROR + ": " + recordOrHeader
-            + " count mismatch, should be " + size % recordsExpectedPerRequest + ", but is "
-            + recordCount);
-        assertTrue(false);
-      }
-
-      // No resumption token available in response.
-      return OAIPMHUtilitiesOnline.NO_TOKEN;
-    }
-
-    return restok;
-  }
-
-  /**
-   * @param theThreadName
-   * @return
-   */
-  private static String tn(String theThreadName) {
-
-    String result = theThreadName;
-
-    if (theThreadName != null && !theThreadName.equals("") && !theThreadName.endsWith(" ")) {
-      result = "[" + theThreadName + "] ";
-    }
-
-    return result;
-  }
-
-  /**
-   * @param theResponseString
-   * @param theMetadataFormat
-   */
-  private static void examineContent(String theResponseString, String theMetadataFormat) {
-
-    // Check for correct metadata content according to metadata prefix.
-    if (theMetadataFormat.equals(OAIPMHUtilitiesOnline.OAI_DC_PREFIX)
-        && !theResponseString
-            .contains("metadataPrefix=\"" + OAIPMHUtilitiesOnline.OAI_DC_PREFIX + "\"")
-        && !theResponseString.contains(OAIPMHUtilitiesOnline.EXPECTED_OAIDC_FORMAT_CONTENT)) {
-      System.out
-          .println(
-              OAIPMHUtilitiesOnline.OAI_DC_PREFIX + " needs to deliver content with schema: "
-                  + OAIPMHUtilitiesOnline.EXPECTED_OAIDC_FORMAT_CONTENT + "!");
-
-      System.out.println("ERROR:\n" + theResponseString);
-
-      assertTrue(false);
-    } else if (theMetadataFormat.equals(OAIPMHUtilitiesOnline.OAI_IDIOMMETS_PREFIX)
-        && !theResponseString.contains(
-            "metadataPrefix=\"" + OAIPMHUtilitiesOnline.EXPECTED_IDIOMMETS_FORMAT_CONTENT
-                + "\"")
-        && !theResponseString
-            .contains(OAIPMHUtilitiesOnline.EXPECTED_IDIOMMETS_FORMAT_CONTENT)) {
-      System.out.println(
-          OAIPMHUtilitiesOnline.OAI_IDIOMMETS_PREFIX + " needs to deliver content with schema: "
-              + OAIPMHUtilitiesOnline.EXPECTED_IDIOMMETS_FORMAT_CONTENT + "!");
-
-      System.out.println("ERROR:\n" + theResponseString);
-
-      assertTrue(false);
-    } else if (theMetadataFormat.equals(OAIPMHUtilitiesOnline.OAI_DATACITE_PREFIX)
-        && !theResponseString
-            .contains("metadataPrefix=\"" + OAIPMHUtilitiesOnline.OAI_DATACITE_PREFIX + "\"")
-        && !theResponseString
-            .contains(OAIPMHUtilitiesOnline.EXPECTED_DATACITE_FORMAT_CONTENT)) {
-      System.out.println(
-          OAIPMHUtilitiesOnline.OAI_DATACITE_PREFIX + " needs to deliver content with schema: "
-              + OAIPMHUtilitiesOnline.EXPECTED_DATACITE_FORMAT_CONTENT + "!");
-
-      System.out.println("ERROR:\n" + theResponseString);
-
-      assertTrue(false);
-    } else {
-      System.out.println(theResponseString);
-    }
-  }
-
 }
diff --git a/oaipmh-core/src/test/java/info/textgrid/middleware/test/online/tg/TestTGGetRecordOnline.java b/oaipmh-core/src/test/java/info/textgrid/middleware/test/online/tg/TestTGGetRecordOnline.java
index e7f3cfedb2fbe430b483ead4da07be65421fef4d..08bbad7df9b35ca783b6c45c2af6b975442a3623 100644
--- a/oaipmh-core/src/test/java/info/textgrid/middleware/test/online/tg/TestTGGetRecordOnline.java
+++ b/oaipmh-core/src/test/java/info/textgrid/middleware/test/online/tg/TestTGGetRecordOnline.java
@@ -1,4 +1,4 @@
-package info.textgrid.middleware.test.online;
+package info.textgrid.middleware.test.online.tg;
 
 import static org.junit.Assert.assertTrue;
 import java.io.IOException;
@@ -21,6 +21,7 @@ import org.junit.Before;
 import org.junit.BeforeClass;
 import org.junit.Ignore;
 import org.junit.Test;
+import info.textgrid.middleware.test.online.OAIPMHUtilitiesOnline;
 
 /**
  * <p>
@@ -28,11 +29,11 @@ import org.junit.Test;
  * </p>
  * 
  * @author Stefan E. Funk, SUB Göttingen
- * @version 2022-09-12
+ * @version 2022-09-19
  * @since 2022-09-08
  */
-@Ignore
-public class TestGetRecordOnline {
+// @Ignore
+public class TestTGGetRecordOnline {
 
   // **
   // FINALS
@@ -43,8 +44,6 @@ public class TestGetRecordOnline {
   // IDIOM tests will fail!
   protected static final String PROPERTIES_FILE = "oaipmh.test.dev-textgridlab-org.properties";
 
-  private static final String VERB = OAIPMHUtilitiesOnline.VERB_GET_RECORD;
-
   // **
   // STATICS
   // **
@@ -56,19 +55,15 @@ public class TestGetRecordOnline {
   // Properties
   private static String checkGetRecordDC;
   private static String expectedGetRecordDC;
-  private static String expectedGetRecordDCNoPrefix;
 
   private static String checkGetRecordDATACITE;
   private static String expectedGetRecordDATACITE;
-  private static String expectedGetRecordDATACITENoPrefix;
 
   private static String checkGetRecordIDIOM;
   private static String expectedGetRecordIDIOM;
-  private static String expectedGetRecordIDIOMNoPrefix;
 
   private static String checkGetRecordIDIOMImage;
   private static String expectedGetRecordIDIOMImage;
-  private static String expectedGetRecordIDIOMImageNoPrefix;
 
   private static List<String> checkGetRecordIDList = new ArrayList<String>();
 
@@ -90,19 +85,15 @@ public class TestGetRecordOnline {
 
     checkGetRecordDC = p.getProperty("checkGetRecordDC");
     expectedGetRecordDC = p.getProperty("expectedGetRecordDC");
-    expectedGetRecordDCNoPrefix = p.getProperty("expectedGetRecordDCNoPrefix");
 
     checkGetRecordDATACITE = p.getProperty("checkGetRecordDATACITE");
     expectedGetRecordDATACITE = p.getProperty("expectedGetRecordDATACITE");
-    expectedGetRecordDATACITENoPrefix = p.getProperty("expectedGetRecordDATACITENoPrefix");
 
     checkGetRecordIDIOM = p.getProperty("checkGetRecordIDIOM");
     expectedGetRecordIDIOM = p.getProperty("expectedGetRecordIDIOM");
-    expectedGetRecordIDIOMNoPrefix = p.getProperty("expectedGetRecordIDIOMNoPrefix");
 
     checkGetRecordIDIOMImage = p.getProperty("checkGetRecordIDIOMImage");
     expectedGetRecordIDIOMImage = p.getProperty("expectedGetRecordIDIOMImage");
-    expectedGetRecordIDIOMImageNoPrefix = p.getProperty("expectedGetRecordIDIOMImageNoPrefix");
 
     checkGetRecordIDList =
         OAIPMHUtilitiesOnline.getListFromProperties((String) p.get("checkGetRecordIDList"));
@@ -147,51 +138,17 @@ public class TestGetRecordOnline {
 
     System.out.println(OAIPMHUtilitiesOnline.TESTING + "testGetRecordOAIDC()");
 
-    String path = "verb=" + OAIPMHUtilitiesOnline.VERB_GET_RECORD + "&identifier="
+    String query = "verb=" + OAIPMHUtilitiesOnline.VERB_GET_RECORD + "&identifier="
         + checkGetRecordDC + "&metadataPrefix=" + OAIPMHUtilitiesOnline.OAI_DC_PREFIX;
 
-    Response httpResponse = OAIPMHUtilitiesOnline.getHttpResponse(oaipmhWebClient, path,
-        OAIPMHUtilitiesOnline.NO_THREAD_NAME);
+    Response httpResponse = OAIPMHUtilitiesOnline.getOAIHttpResponse(oaipmhWebClient, query);
     int status = httpResponse.getStatus();
 
     String response = IOUtils.readStringFromStream((InputStream) httpResponse.getEntity());
 
     if (status != HttpStatus.SC_OK || !response.contains(expectedGetRecordDC)) {
-      System.err.println("\tstatus: " + status);
-      System.err.println(OAIPMHUtilitiesOnline.ERROR + ": response should contain '"
-          + expectedGetRecordDC + "'");
-      System.err.println(response);
-      assertTrue(false);
-    }
-
-    System.out.println("\tresponse: " + response);
-    System.out.println(OAIPMHUtilitiesOnline.OK);
-  }
-
-  /**
-   * @throws IOException
-   */
-  @Test
-  public void testGetRecordOAIDCNoPrefix() throws IOException {
-
-    System.out.println(OAIPMHUtilitiesOnline.TESTING + "testGetRecordOAIDCNoPrefix()");
-
-    String path =
-        "verb=" + OAIPMHUtilitiesOnline.VERB_GET_RECORD + "&identifier=" + checkGetRecordDC;
-
-    Response httpResponse = OAIPMHUtilitiesOnline.getHttpResponse(oaipmhWebClient, path,
-        OAIPMHUtilitiesOnline.NO_THREAD_NAME);
-    int status = httpResponse.getStatus();
-
-    String response = IOUtils.readStringFromStream((InputStream) httpResponse.getEntity());
-
-    if (status != HttpStatus.SC_OK || !response.contains(expectedGetRecordDCNoPrefix)) {
-      System.err.println("\tstatus: " + status);
-      System.err.println(
-          OAIPMHUtilitiesOnline.ERROR + ": response should contain '" + expectedGetRecordDCNoPrefix
-              + "'");
-      System.err.println(response);
-      assertTrue(false);
+      String message = "[" + status + "] response should contain '" + expectedGetRecordDC + "'";
+      assertTrue(message, false);
     }
 
     System.out.println("\tresponse: " + response);
@@ -202,54 +159,22 @@ public class TestGetRecordOnline {
    * @throws IOException
    */
   @Test
-  public void testGetRecordIDIOM() throws IOException {
+  public void testGetRecordIDIOMMETS() throws IOException {
 
-    System.out.println(OAIPMHUtilitiesOnline.TESTING + "testGetRecordIDIOM()");
+    System.out.println(OAIPMHUtilitiesOnline.TESTING + "testGetRecordIDIOMMETS()");
 
-    String path = "verb=" + OAIPMHUtilitiesOnline.VERB_GET_RECORD + "&identifier="
+    String query = "verb=" + OAIPMHUtilitiesOnline.VERB_GET_RECORD + "&identifier="
         + checkGetRecordIDIOM + "&metadataPrefix=" + OAIPMHUtilitiesOnline.OAI_IDIOMMETS_PREFIX;
 
-    Response httpResponse = OAIPMHUtilitiesOnline.getHttpResponse(oaipmhWebClient, path,
-        OAIPMHUtilitiesOnline.NO_THREAD_NAME);
+    Response httpResponse = OAIPMHUtilitiesOnline.getOAIHttpResponse(oaipmhWebClient,
+        query);
     int status = httpResponse.getStatus();
 
     String response = IOUtils.readStringFromStream((InputStream) httpResponse.getEntity());
 
     if (status != HttpStatus.SC_OK || !response.contains(expectedGetRecordIDIOM)) {
-      System.err.println("\tstatus: " + status);
-      System.err.println(OAIPMHUtilitiesOnline.ERROR + ": response should contain '"
-          + expectedGetRecordIDIOM + "'");
-      System.err.println(response);
-      assertTrue(false);
-    }
-
-    System.out.println("\tresponse: " + response);
-    System.out.println(OAIPMHUtilitiesOnline.OK);
-  }
-
-  /**
-   * @throws IOException
-   */
-  @Test
-  public void testGetRecordIDIOMNoPrefix() throws IOException {
-
-    System.out.println(OAIPMHUtilitiesOnline.TESTING + "testGetRecordIDIOMNoPrefix()");
-
-    String path = "verb=" + OAIPMHUtilitiesOnline.VERB_GET_RECORD + "&identifier="
-        + checkGetRecordIDIOM;
-
-    Response httpResponse = OAIPMHUtilitiesOnline.getHttpResponse(oaipmhWebClient, path,
-        OAIPMHUtilitiesOnline.NO_THREAD_NAME);
-    int status = httpResponse.getStatus();
-
-    String response = IOUtils.readStringFromStream((InputStream) httpResponse.getEntity());
-
-    if (status != HttpStatus.SC_OK || !response.contains(expectedGetRecordIDIOMNoPrefix)) {
-      System.err.println("\tstatus: " + status);
-      System.err.println(OAIPMHUtilitiesOnline.ERROR + ": response should contain '"
-          + expectedGetRecordIDIOMNoPrefix + "'");
-      System.err.println(response);
-      assertTrue(false);
+      String message = "[" + status + "] response should contain '" + expectedGetRecordIDIOM + "'";
+      assertTrue(message, false);
     }
 
     System.out.println("\tresponse: " + response);
@@ -260,55 +185,24 @@ public class TestGetRecordOnline {
    * @throws IOException
    */
   @Test
-  public void testGetRecordIDIOMImage() throws IOException {
+  public void testGetRecordIDIOMMETSImage() throws IOException {
 
-    System.out.println(OAIPMHUtilitiesOnline.TESTING + "testGetRecordIDIOMImage()");
+    System.out.println(OAIPMHUtilitiesOnline.TESTING + "testGetRecordIDIOMMETS_Image()");
 
-    String path =
+    String query =
         "verb=" + OAIPMHUtilitiesOnline.VERB_GET_RECORD + "&identifier=" + checkGetRecordIDIOMImage
             + "&metadataPrefix=" + OAIPMHUtilitiesOnline.OAI_IDIOMMETS_PREFIX;
 
-    Response httpResponse = OAIPMHUtilitiesOnline.getHttpResponse(oaipmhWebClient, path,
-        OAIPMHUtilitiesOnline.NO_THREAD_NAME);
+    Response httpResponse = OAIPMHUtilitiesOnline.getOAIHttpResponse(oaipmhWebClient,
+        query);
     int status = httpResponse.getStatus();
 
     String response = IOUtils.readStringFromStream((InputStream) httpResponse.getEntity());
 
     if (status != HttpStatus.SC_OK || !response.contains(expectedGetRecordIDIOMImage)) {
-      System.err.println("\tstatus: " + status);
-      System.err.println(OAIPMHUtilitiesOnline.ERROR + ": response should contain '"
-          + expectedGetRecordIDIOMImage + "'");
-      System.err.println(response);
-      assertTrue(false);
-    }
-
-    System.out.println("\tresponse: " + response);
-    System.out.println(OAIPMHUtilitiesOnline.OK);
-  }
-
-  /**
-   * @throws IOException
-   */
-  @Test
-  public void testGetRecordIDIOMImageNoPrefix() throws IOException {
-
-    System.out.println(OAIPMHUtilitiesOnline.TESTING + "testGetRecordIDIOMImageNoPrefix()");
-
-    String path = "verb=" + OAIPMHUtilitiesOnline.VERB_GET_RECORD + "&identifier="
-        + checkGetRecordIDIOMImage;
-
-    Response httpResponse = OAIPMHUtilitiesOnline.getHttpResponse(oaipmhWebClient, path,
-        OAIPMHUtilitiesOnline.NO_THREAD_NAME);
-    int status = httpResponse.getStatus();
-
-    String response = IOUtils.readStringFromStream((InputStream) httpResponse.getEntity());
-
-    if (status != HttpStatus.SC_OK || !response.contains(expectedGetRecordIDIOMImageNoPrefix)) {
-      System.err.println("\tstatus: " + status);
-      System.err.println(OAIPMHUtilitiesOnline.ERROR + ": response should contain '"
-          + expectedGetRecordIDIOMImageNoPrefix + "'");
-      System.err.println(response);
-      assertTrue(false);
+      String message =
+          "[" + status + "] response should contain '" + expectedGetRecordIDIOMImage + "'";
+      assertTrue(message, false);
     }
 
     System.out.println("\tresponse: " + response);
@@ -323,49 +217,19 @@ public class TestGetRecordOnline {
 
     System.out.println(OAIPMHUtilitiesOnline.TESTING + "testGetRecordDATACITE()");
 
-    String path = "verb=" + OAIPMHUtilitiesOnline.VERB_GET_RECORD + "&identifier="
+    String query = "verb=" + OAIPMHUtilitiesOnline.VERB_GET_RECORD + "&identifier="
         + checkGetRecordDATACITE + "&metadataPrefix=" + OAIPMHUtilitiesOnline.OAI_DATACITE_PREFIX;
 
-    Response httpResponse = OAIPMHUtilitiesOnline.getHttpResponse(oaipmhWebClient, path,
-        OAIPMHUtilitiesOnline.NO_THREAD_NAME);
+    Response httpResponse = OAIPMHUtilitiesOnline.getOAIHttpResponse(oaipmhWebClient,
+        query);
     int status = httpResponse.getStatus();
 
     String response = IOUtils.readStringFromStream((InputStream) httpResponse.getEntity());
 
     if (status != HttpStatus.SC_OK || !response.contains(expectedGetRecordDATACITE)) {
-      System.err.println("\tstatus: " + status);
-      System.err.println(OAIPMHUtilitiesOnline.ERROR + ": response should contain '"
-          + expectedGetRecordDATACITE + "'");
-      System.err.println(response);
-      assertTrue(false);
-    }
-
-    System.out.println("\tresponse: " + response);
-    System.out.println(OAIPMHUtilitiesOnline.OK);
-  }
-
-  /**
-   * @throws IOException
-   */
-  @Test
-  public void testGetRecordDATACITENoPrefix() throws IOException {
-
-    System.out.println(OAIPMHUtilitiesOnline.TESTING + "testGetRecordDATACITENoPrefix()");
-
-    String path = "verb=" + OAIPMHUtilitiesOnline.VERB_GET_RECORD + "&identifier="
-        + checkGetRecordDATACITE;
-
-    Response httpResponse = OAIPMHUtilitiesOnline.getHttpResponse(oaipmhWebClient, path,
-        OAIPMHUtilitiesOnline.NO_THREAD_NAME);
-    int status = httpResponse.getStatus();
-    String response = IOUtils.readStringFromStream((InputStream) httpResponse.getEntity());
-
-    if (status != HttpStatus.SC_OK || !response.contains(expectedGetRecordDATACITENoPrefix)) {
-      System.err.println("\tstatus: " + status);
-      System.err.println(OAIPMHUtilitiesOnline.ERROR + ": response should contain '"
-          + expectedGetRecordDATACITENoPrefix + "'");
-      System.err.println(response);
-      assertTrue(false);
+      String message =
+          "[" + status + "] response should contain '" + expectedGetRecordDATACITE + "'";
+      assertTrue(message, false);
     }
 
     System.out.println("\tresponse: " + response);
@@ -511,9 +375,9 @@ public class TestGetRecordOnline {
     @Override
     public Boolean call() throws IOException {
 
-      String url = "verb=" + this.verb + "&identifier=" + this.identifier + "&metadataPrefix="
+      String query = "verb=" + this.verb + "&identifier=" + this.identifier + "&metadataPrefix="
           + this.metadataPrefix;
-      OAIPMHUtilitiesOnline.getHttpResponse(oaipmhWebClient, url, this.threadName);
+      OAIPMHUtilitiesOnline.getOAIHttpResponse(oaipmhWebClient, this.threadName, query);
 
       return true;
     }
diff --git a/oaipmh-core/src/test/java/info/textgrid/middleware/test/online/tg/TestTGListIdentifiersOnline.java b/oaipmh-core/src/test/java/info/textgrid/middleware/test/online/tg/TestTGListIdentifiersOnline.java
index cae8392182e228349adcbf9bc0efaecc94249483..c60b982a1237c37a473515d85d2f1637ec11f755 100644
--- a/oaipmh-core/src/test/java/info/textgrid/middleware/test/online/tg/TestTGListIdentifiersOnline.java
+++ b/oaipmh-core/src/test/java/info/textgrid/middleware/test/online/tg/TestTGListIdentifiersOnline.java
@@ -1,4 +1,4 @@
-package info.textgrid.middleware.test.online;
+package info.textgrid.middleware.test.online.tg;
 
 import java.io.IOException;
 import java.util.Properties;
@@ -13,6 +13,7 @@ import org.junit.Before;
 import org.junit.BeforeClass;
 import org.junit.Ignore;
 import org.junit.Test;
+import info.textgrid.middleware.test.online.OAIPMHUtilitiesOnline;
 
 /**
  * <p>
@@ -20,11 +21,11 @@ import org.junit.Test;
  * </p>
  * 
  * @author Stefan E. Funk, SUB Göttingen
- * @version 2022-09-13
+ * @version 2022-09-19
  * @since 2022-09-12
  */
 @Ignore
-public class TestListIdentifiersOnline {
+public class TestTGListIdentifiersOnline {
 
   // **
   // FINALS
@@ -249,21 +250,21 @@ public class TestListIdentifiersOnline {
     ExecutorService executor = Executors.newFixedThreadPool(3);
 
     Future<Boolean> f1 = executor
-        .submit(new OAIPMHResumptionTokenThread(oaipmhWebClient,
+        .submit(new TGOAIPMHResumptionTokenThread(oaipmhWebClient,
             OAIPMHUtilitiesOnline.VERB_LIST_IDENTIFIERS,
             OAIPMHUtilitiesOnline.NO_SET,
             OAIPMHUtilitiesOnline.OAI_IDIOMMETS_PREFIX,
             3, 30,
             "C1"));
     Future<Boolean> f2 = executor.submit(
-        new OAIPMHResumptionTokenThread(oaipmhWebClient,
+        new TGOAIPMHResumptionTokenThread(oaipmhWebClient,
             OAIPMHUtilitiesOnline.VERB_LIST_IDENTIFIERS,
             OAIPMHUtilitiesOnline.NO_SET,
             OAIPMHUtilitiesOnline.OAI_IDIOMMETS_PREFIX,
             5, 30,
             "C2"));
     Future<Boolean> f3 = executor.submit(
-        new OAIPMHResumptionTokenThread(oaipmhWebClient,
+        new TGOAIPMHResumptionTokenThread(oaipmhWebClient,
             OAIPMHUtilitiesOnline.VERB_LIST_IDENTIFIERS,
             OAIPMHUtilitiesOnline.NO_SET,
             OAIPMHUtilitiesOnline.OAI_IDIOMMETS_PREFIX,
@@ -291,21 +292,21 @@ public class TestListIdentifiersOnline {
     ExecutorService executor = Executors.newFixedThreadPool(3);
 
     Future<Boolean> f1 = executor.submit(
-        new OAIPMHResumptionTokenThread(oaipmhWebClient,
+        new TGOAIPMHResumptionTokenThread(oaipmhWebClient,
             OAIPMHUtilitiesOnline.VERB_LIST_IDENTIFIERS,
             OAIPMHUtilitiesOnline.NO_SET,
             OAIPMHUtilitiesOnline.OAI_DC_PREFIX,
             36, 100,
             "A1"));
     Future<Boolean> f2 = executor.submit(
-        new OAIPMHResumptionTokenThread(oaipmhWebClient,
+        new TGOAIPMHResumptionTokenThread(oaipmhWebClient,
             OAIPMHUtilitiesOnline.VERB_LIST_IDENTIFIERS,
             OAIPMHUtilitiesOnline.NO_SET,
             OAIPMHUtilitiesOnline.OAI_DC_PREFIX,
             27, 100,
             "A2"));
     Future<Boolean> f3 = executor.submit(
-        new OAIPMHResumptionTokenThread(oaipmhWebClient,
+        new TGOAIPMHResumptionTokenThread(oaipmhWebClient,
             OAIPMHUtilitiesOnline.VERB_LIST_IDENTIFIERS,
             OAIPMHUtilitiesOnline.NO_SET,
             OAIPMHUtilitiesOnline.OAI_DC_PREFIX,
@@ -334,21 +335,21 @@ public class TestListIdentifiersOnline {
     ExecutorService executor = Executors.newFixedThreadPool(3);
 
     Future<Boolean> f1 = executor.submit(
-        new OAIPMHResumptionTokenThread(oaipmhWebClient,
+        new TGOAIPMHResumptionTokenThread(oaipmhWebClient,
             OAIPMHUtilitiesOnline.VERB_LIST_IDENTIFIERS,
             OAIPMHUtilitiesOnline.NO_SET,
             OAIPMHUtilitiesOnline.OAI_IDIOMMETS_PREFIX,
             13, 30,
             "A1"));
     Future<Boolean> f2 = executor.submit(
-        new OAIPMHResumptionTokenThread(oaipmhWebClient,
+        new TGOAIPMHResumptionTokenThread(oaipmhWebClient,
             OAIPMHUtilitiesOnline.VERB_LIST_IDENTIFIERS,
             OAIPMHUtilitiesOnline.NO_SET,
             OAIPMHUtilitiesOnline.OAI_IDIOMMETS_PREFIX,
             35, 30,
             "A2"));
     Future<Boolean> f3 = executor.submit(
-        new OAIPMHResumptionTokenThread(oaipmhWebClient,
+        new TGOAIPMHResumptionTokenThread(oaipmhWebClient,
             OAIPMHUtilitiesOnline.VERB_LIST_IDENTIFIERS,
             OAIPMHUtilitiesOnline.NO_SET,
             OAIPMHUtilitiesOnline.OAI_IDIOMMETS_PREFIX,
@@ -377,21 +378,21 @@ public class TestListIdentifiersOnline {
     ExecutorService executor = Executors.newFixedThreadPool(3);
 
     Future<Boolean> f1 = executor.submit(
-        new OAIPMHResumptionTokenThread(oaipmhWebClient,
+        new TGOAIPMHResumptionTokenThread(oaipmhWebClient,
             OAIPMHUtilitiesOnline.VERB_LIST_IDENTIFIERS,
             OAIPMHUtilitiesOnline.NO_SET,
             OAIPMHUtilitiesOnline.OAI_DATACITE_PREFIX,
             13, 100,
             "A1"));
     Future<Boolean> f2 = executor.submit(
-        new OAIPMHResumptionTokenThread(oaipmhWebClient,
+        new TGOAIPMHResumptionTokenThread(oaipmhWebClient,
             OAIPMHUtilitiesOnline.VERB_LIST_IDENTIFIERS,
             OAIPMHUtilitiesOnline.NO_SET,
             OAIPMHUtilitiesOnline.OAI_DATACITE_PREFIX,
             20, 100,
             "A2"));
     Future<Boolean> f3 = executor.submit(
-        new OAIPMHResumptionTokenThread(oaipmhWebClient,
+        new TGOAIPMHResumptionTokenThread(oaipmhWebClient,
             OAIPMHUtilitiesOnline.VERB_LIST_IDENTIFIERS,
             OAIPMHUtilitiesOnline.NO_SET,
             OAIPMHUtilitiesOnline.OAI_DATACITE_PREFIX,
@@ -419,21 +420,21 @@ public class TestListIdentifiersOnline {
     ExecutorService executor = Executors.newFixedThreadPool(3);
 
     Future<Boolean> f1 = executor.submit(
-        new OAIPMHResumptionTokenThread(oaipmhWebClient,
+        new TGOAIPMHResumptionTokenThread(oaipmhWebClient,
             OAIPMHUtilitiesOnline.VERB_LIST_IDENTIFIERS,
             OAIPMHUtilitiesOnline.NO_SET,
             OAIPMHUtilitiesOnline.OAI_DC_PREFIX,
             53, 100,
             "DC1"));
     Future<Boolean> f2 = executor.submit(
-        new OAIPMHResumptionTokenThread(oaipmhWebClient,
+        new TGOAIPMHResumptionTokenThread(oaipmhWebClient,
             OAIPMHUtilitiesOnline.VERB_LIST_IDENTIFIERS,
             OAIPMHUtilitiesOnline.NO_SET,
             OAIPMHUtilitiesOnline.OAI_DC_PREFIX,
             28, 100,
             "DC2"));
     Future<Boolean> f3 = executor.submit(
-        new OAIPMHResumptionTokenThread(oaipmhWebClient,
+        new TGOAIPMHResumptionTokenThread(oaipmhWebClient,
             OAIPMHUtilitiesOnline.VERB_LIST_IDENTIFIERS,
             OAIPMHUtilitiesOnline.NO_SET,
             OAIPMHUtilitiesOnline.OAI_IDIOMMETS_PREFIX,
diff --git a/oaipmh-core/src/test/java/info/textgrid/middleware/test/online/tg/TestTGListRecordsOnline.java b/oaipmh-core/src/test/java/info/textgrid/middleware/test/online/tg/TestTGListRecordsOnline.java
index 10aa9b7a14cd19dc31f787b9f79bfa722192ab4f..24b88bf366a69785f359b9524246c235f2c77362 100644
--- a/oaipmh-core/src/test/java/info/textgrid/middleware/test/online/tg/TestTGListRecordsOnline.java
+++ b/oaipmh-core/src/test/java/info/textgrid/middleware/test/online/tg/TestTGListRecordsOnline.java
@@ -1,8 +1,11 @@
-package info.textgrid.middleware.test.online;
+package info.textgrid.middleware.test.online.tg;
 
-import static org.junit.Assert.assertTrue;
 import java.io.IOException;
 import java.util.Properties;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.Future;
 import org.apache.cxf.jaxrs.client.Client;
 import org.junit.After;
 import org.junit.AfterClass;
@@ -10,6 +13,7 @@ import org.junit.Before;
 import org.junit.BeforeClass;
 import org.junit.Ignore;
 import org.junit.Test;
+import info.textgrid.middleware.test.online.OAIPMHUtilitiesOnline;
 
 /**
  * <p>
@@ -17,11 +21,11 @@ import org.junit.Test;
  * </p>
  * 
  * @author Stefan E. Funk, SUB Göttingen
- * @version 2022-09-12
+ * @version 2022-09-19
  * @since 2022-09-12
  */
-@Ignore
-public class TestListRecordsOnline {
+// @Ignore
+public class TestTGListRecordsOnline {
 
   // **
   // FINALS
@@ -41,13 +45,15 @@ public class TestListRecordsOnline {
   static Client oaipmhWebClient;
 
   // Properties
+  private static String checkListRecordsDCSet;
   private static String checkListRecordsDCFrom;
   private static String checkListRecordsDCUntil;
   private static String checkListRecordsDATACITEFrom;
   private static String checkListRecordsDATACITEUntil;
-  private static String checkListRecordsSet;
-  private static Integer checkListRecordsSetExpectedPages;
-  private static Integer checkListRecordsSetExpectedPagesIDIOM;
+  private static String checkListRecordsIDIOMFrom;
+  private static String checkListRecordsIDIOMUntil;
+  private static int checkListIdentifiersPagesToTestIDIOM;
+  private static int checkListIdentifiersRecordsPerPageIDIOM;
 
   // **
   // PREPARATIONS
@@ -65,15 +71,15 @@ public class TestListRecordsOnline {
     // Set properties.
     oaipmhEndpoint = p.getProperty("oaipmhEndpoint");
 
+    checkListRecordsDCSet = p.getProperty("checkListRecordsDCSet");
     checkListRecordsDCFrom = p.getProperty("checkListRecordsDCFrom");
     checkListRecordsDCUntil = p.getProperty("checkListRecordsDCUntil");
+
     checkListRecordsDATACITEFrom = p.getProperty("checkListRecordsDATACITEFrom");
     checkListRecordsDATACITEUntil = p.getProperty("checkListRecordsDATACITEUntil");
-    checkListRecordsSet = p.getProperty("checkListRecordsSet");
-    checkListRecordsSetExpectedPages =
-        Integer.parseInt(p.getProperty("checkListRecordsSetExpectedPages").trim());
-    checkListRecordsSetExpectedPagesIDIOM =
-        Integer.parseInt(p.getProperty("checkListRecordsSetExpectedPagesIDIOM").trim());
+
+    checkListRecordsIDIOMFrom = p.getProperty("checkListRecordsIDIOMFrom");
+    checkListRecordsIDIOMUntil = p.getProperty("checkListRecordsIDIOMUntil");
 
     // Get web client from endpoint.
     oaipmhWebClient = OAIPMHUtilitiesOnline.getOAIPMHWEebClient(oaipmhEndpoint);
@@ -111,180 +117,380 @@ public class TestListRecordsOnline {
    * @throws IOException
    */
   @Test
-  public void testListRecordsSetDC() throws IOException {
+  public void testListRecordsOAIDCMorePages() throws IOException {
 
-    System.out.println(OAIPMHUtilitiesOnline.TESTING + "#LISTRECORDS");
+    System.out.println(OAIPMHUtilitiesOnline.TESTING + "testListRecordsOAIDCMorePages()");
 
-    int pages =
-        OAIPMHUtilitiesOnline.testList(oaipmhWebClient, OAIPMHUtilitiesOnline.VERB_LIST_RECORDS,
-            OAIPMHUtilitiesOnline.OAI_DC_PREFIX, checkListRecordsSet);
+    OAIPMHUtilitiesOnline.examineTGList(oaipmhWebClient,
+        OAIPMHUtilitiesOnline.VERB_LIST_RECORDS,
+        OAIPMHUtilitiesOnline.NO_SET,
+        OAIPMHUtilitiesOnline.OAI_DC_PREFIX,
+        18, 100,
+        OAIPMHUtilitiesOnline.NO_THREAD_NAME,
+        OAIPMHUtilitiesOnline.NO_FROM,
+        OAIPMHUtilitiesOnline.NO_UNTIL,
+        OAIPMHUtilitiesOnline.NO_METADATA_FORMAT_WITH_RESTOK);
 
-    if (pages != checkListRecordsSetExpectedPages) {
-      assertTrue(pages + " != " + checkListRecordsSetExpectedPages, false);
-    }
+    System.out.println(OAIPMHUtilitiesOnline.OK);
   }
 
   /**
    * @throws IOException
    */
   @Test
-  public void testListRecordsSetDATACITE() throws IOException {
+  public void testListRecordsOAIDCSetMorePages() throws IOException {
 
-    System.out.println(OAIPMHUtilitiesOnline.TESTING + "testListRecordsSetDATACITE()");
+    System.out.println(OAIPMHUtilitiesOnline.TESTING + "testListRecordsOAIDCSetMorePages()");
 
-    int pages =
-        OAIPMHUtilitiesOnline.testList(oaipmhWebClient, OAIPMHUtilitiesOnline.VERB_LIST_RECORDS,
-            OAIPMHUtilitiesOnline.OAI_DATACITE_PREFIX, checkListRecordsSet);
+    OAIPMHUtilitiesOnline.examineTGList(oaipmhWebClient,
+        OAIPMHUtilitiesOnline.VERB_LIST_RECORDS,
+        checkListRecordsDCSet,
+        OAIPMHUtilitiesOnline.OAI_DC_PREFIX,
+        20, 100,
+        OAIPMHUtilitiesOnline.NO_THREAD_NAME,
+        OAIPMHUtilitiesOnline.NO_FROM,
+        OAIPMHUtilitiesOnline.NO_UNTIL,
+        OAIPMHUtilitiesOnline.NO_METADATA_FORMAT_WITH_RESTOK);
 
-    if (pages != checkListRecordsSetExpectedPages) {
-      assertTrue(pages + " != " + checkListRecordsSetExpectedPages, false);
-    }
+    System.out.println(OAIPMHUtilitiesOnline.OK);
   }
 
   /**
-   * <p>
-   * Sets are not implemented in IDIOM requests, we always only ask for ONE project here!
-   * </p>
-   * 
    * @throws IOException
    */
   @Test
   @Ignore
-  public void testListRecordsSetIDIOM() throws IOException {
+  public void testListRecordsOAIDCAllPages() throws IOException {
 
-    System.out.println(OAIPMHUtilitiesOnline.TESTING + "testListRecordsSetIDIOM()");
+    System.out.println(OAIPMHUtilitiesOnline.TESTING + "testListRecordsOAIDCAllPages()");
 
-    int pages =
-        OAIPMHUtilitiesOnline.testList(oaipmhWebClient, OAIPMHUtilitiesOnline.VERB_LIST_RECORDS,
-            OAIPMHUtilitiesOnline.OAI_IDIOMMETS_PREFIX, checkListRecordsSet);
+    OAIPMHUtilitiesOnline.examineTGList(oaipmhWebClient,
+        OAIPMHUtilitiesOnline.VERB_LIST_RECORDS,
+        OAIPMHUtilitiesOnline.NO_SET,
+        OAIPMHUtilitiesOnline.OAI_DC_PREFIX,
+        0, 100,
+        OAIPMHUtilitiesOnline.NO_THREAD_NAME,
+        OAIPMHUtilitiesOnline.NO_FROM,
+        OAIPMHUtilitiesOnline.NO_UNTIL,
+        OAIPMHUtilitiesOnline.NO_METADATA_FORMAT_WITH_RESTOK);
 
-    if (pages != checkListRecordsSetExpectedPagesIDIOM) {
-      assertTrue(pages + " != " + checkListRecordsSetExpectedPagesIDIOM, false);
-    }
+    System.out.println(OAIPMHUtilitiesOnline.OK);
   }
 
   /**
-   * FIXME I don't understand this test. We do not have hdl: prefixes in TextGrid OAI-PMH, do we?
-   * 
    * @throws IOException
    */
   @Test
-  @Ignore
-  public void testListRecordsSetDCDifferentPrefixes() throws IOException {
-
-    String uri = checkListRecordsSet;
-
-    System.out.println(OAIPMHUtilitiesOnline.TESTING + "#LISTRECORDS - HDL PREFIX");
-
-    if (!uri.startsWith(OAIPMHUtilitiesOnline.HDL_PREFIX)) {
-      assertTrue("missing '" + OAIPMHUtilitiesOnline.HDL_PREFIX + "' prefix!", false);
-    }
-    int pages1 = OAIPMHUtilitiesOnline.testList(oaipmhWebClient,
-        OAIPMHUtilitiesOnline.VERB_LIST_RECORDS, OAIPMHUtilitiesOnline.OAI_DC_PREFIX, uri);
-    if (pages1 != checkListRecordsSetExpectedPages) {
-      System.out.println(pages1 + " != " + checkListRecordsSetExpectedPages);
-    }
-
-    System.out.println(OAIPMHUtilitiesOnline.TESTING + "#LISTRECORDS - NO PREFIX");
-
-    if (checkListRecordsSet.startsWith(OAIPMHUtilitiesOnline.HDL_PREFIX)) {
-      uri = checkListRecordsSet.substring(4);
-    }
-    int pages2 = OAIPMHUtilitiesOnline.testList(oaipmhWebClient,
-        OAIPMHUtilitiesOnline.VERB_LIST_RECORDS, OAIPMHUtilitiesOnline.OAI_DC_PREFIX, uri);
-    if (pages2 != checkListRecordsSetExpectedPages) {
-      System.out.println(pages2 + " != " + checkListRecordsSetExpectedPages);
-    }
-
-    // Check pages count.
-    if (pages1 != checkListRecordsSetExpectedPages || pages2 != checkListRecordsSetExpectedPages) {
-      assertTrue("pages count does not match", false);
-    }
+  public void testListRecordsOAIDCMorePagesFromUntil() throws IOException {
+
+    System.out.println(OAIPMHUtilitiesOnline.TESTING + "testListRecordsOAIDCMorePagesFromUntil()");
+
+    OAIPMHUtilitiesOnline.examineTGList(oaipmhWebClient,
+        OAIPMHUtilitiesOnline.VERB_LIST_RECORDS,
+        checkListRecordsDCSet,
+        OAIPMHUtilitiesOnline.OAI_DC_PREFIX,
+        0, 100,
+        OAIPMHUtilitiesOnline.NO_THREAD_NAME,
+        checkListRecordsDCFrom,
+        checkListRecordsDCUntil,
+        OAIPMHUtilitiesOnline.NO_METADATA_FORMAT_WITH_RESTOK);
+
+    System.out.println(OAIPMHUtilitiesOnline.OK);
+  }
+
+  /**
+   * @throws IOException
+   */
+  @Test(expected = IOException.class)
+  public void testListRecordsIDIOMMETSSomePagesAndMetadataFormatWithRestok() throws IOException {
+
+    System.out.println(OAIPMHUtilitiesOnline.TESTING
+        + "testListRecordsIDIOMMETSSomePagesAndMetadataFormatWithRestok()");
+
+    OAIPMHUtilitiesOnline.examineTGList(oaipmhWebClient,
+        OAIPMHUtilitiesOnline.VERB_LIST_RECORDS,
+        OAIPMHUtilitiesOnline.NO_SET,
+        OAIPMHUtilitiesOnline.OAI_IDIOMMETS_PREFIX,
+        3, 30,
+        OAIPMHUtilitiesOnline.NO_THREAD_NAME,
+        OAIPMHUtilitiesOnline.NO_FROM,
+        OAIPMHUtilitiesOnline.NO_UNTIL,
+        OAIPMHUtilitiesOnline.METADATA_FORMAT_WITH_RESTOK);
+
+    System.out.println(OAIPMHUtilitiesOnline.OK);
   }
 
   /**
-   * TODO Un-ignore if identifier check is implemented!
-   * 
    * @throws IOException
    */
   @Test
   @Ignore
-  public void testListRecordsSetDCStarPrefix() throws IOException {
+  public void testListRecordsIDIOMMETSAllPages() throws IOException {
 
-    System.out.println(OAIPMHUtilitiesOnline.TESTING + "#LISTRECORDS - STAR PREFIX");
+    // FIXME
 
-    if (checkListRecordsSet.startsWith(OAIPMHUtilitiesOnline.HDL_PREFIX)) {
-      checkListRecordsSet = OAIPMHUtilitiesOnline.STAR_PREFIX + checkListRecordsSet.substring(4);
-    }
+    System.out.println(OAIPMHUtilitiesOnline.TESTING + "testListRecordsIDIOMMETSAllPages()");
 
-    int pages3 =
-        OAIPMHUtilitiesOnline.testList(oaipmhWebClient, OAIPMHUtilitiesOnline.VERB_LIST_RECORDS,
-            OAIPMHUtilitiesOnline.OAI_DC_PREFIX, checkListRecordsSet);
-    if (pages3 != 1) {
-      System.out.println(pages3 + " != " + 1);
-    }
+    OAIPMHUtilitiesOnline.examineTGList(oaipmhWebClient,
+        OAIPMHUtilitiesOnline.VERB_LIST_RECORDS,
+        OAIPMHUtilitiesOnline.NO_SET,
+        OAIPMHUtilitiesOnline.OAI_IDIOMMETS_PREFIX,
+        0, 30,
+        OAIPMHUtilitiesOnline.NO_THREAD_NAME,
+        OAIPMHUtilitiesOnline.NO_FROM,
+        OAIPMHUtilitiesOnline.NO_UNTIL,
+        OAIPMHUtilitiesOnline.NO_METADATA_FORMAT_WITH_RESTOK);
+
+    System.out.println(OAIPMHUtilitiesOnline.OK);
   }
 
   /**
+   * NOTE The amount of records will change due to changes on the data! Please check from and until
+   * values before!
+   *
    * @throws IOException
    */
   @Test
-  public void testListRecordsDCFromUntil() throws IOException {
-
-    System.out.println(OAIPMHUtilitiesOnline.TESTING + "#LISTRECORDS");
+  public void testListRecordsIDIOMMETSMorePagesFromUntil() throws IOException {
+
+    System.out
+        .println(OAIPMHUtilitiesOnline.TESTING + "testListRecordsIDIOMMETSMorePagesFromUntil()");
+
+    OAIPMHUtilitiesOnline.examineTGList(oaipmhWebClient,
+        OAIPMHUtilitiesOnline.VERB_LIST_RECORDS,
+        OAIPMHUtilitiesOnline.NO_SET,
+        OAIPMHUtilitiesOnline.OAI_IDIOMMETS_PREFIX,
+        6, 30,
+        OAIPMHUtilitiesOnline.NO_THREAD_NAME,
+        checkListRecordsIDIOMFrom,
+        checkListRecordsIDIOMUntil,
+        OAIPMHUtilitiesOnline.NO_METADATA_FORMAT_WITH_RESTOK);
+
+    System.out.println(OAIPMHUtilitiesOnline.OK);
+  }
 
-    OAIPMHUtilitiesOnline.testList(oaipmhWebClient, OAIPMHUtilitiesOnline.VERB_LIST_RECORDS,
-        OAIPMHUtilitiesOnline.OAI_DC_PREFIX, OAIPMHUtilitiesOnline.NO_SET, checkListRecordsDCFrom,
-        checkListRecordsDCUntil);
+  /**
+   * @throws IOException
+   */
+  @Test
+  public void testListRecordsIDIOMMETSMorePages() throws IOException {
+
+    System.out
+        .println(OAIPMHUtilitiesOnline.TESTING + "testListRecordsIDIOMMETSMorePages()");
+
+    OAIPMHUtilitiesOnline.examineTGList(oaipmhWebClient,
+        OAIPMHUtilitiesOnline.VERB_LIST_RECORDS,
+        OAIPMHUtilitiesOnline.NO_SET,
+        OAIPMHUtilitiesOnline.OAI_IDIOMMETS_PREFIX,
+        6, 30,
+        OAIPMHUtilitiesOnline.NO_THREAD_NAME,
+        OAIPMHUtilitiesOnline.NO_FROM,
+        OAIPMHUtilitiesOnline.NO_UNTIL,
+        OAIPMHUtilitiesOnline.NO_METADATA_FORMAT_WITH_RESTOK);
+
+    System.out.println(OAIPMHUtilitiesOnline.OK);
   }
 
   /**
    * @throws IOException
    */
   @Test
-  public void testListRecordsDATASITE() throws IOException {
+  public void testListRecordsDATACITEMorePages() throws IOException {
+
+    System.out.println(OAIPMHUtilitiesOnline.TESTING + "testListRecordsDATACITEMorePages()");
 
-    System.out.println(OAIPMHUtilitiesOnline.TESTING + "testListRecordsDATASITE()");
+    OAIPMHUtilitiesOnline.examineTGList(oaipmhWebClient,
+        OAIPMHUtilitiesOnline.VERB_LIST_RECORDS,
+        OAIPMHUtilitiesOnline.NO_SET,
+        OAIPMHUtilitiesOnline.OAI_DATACITE_PREFIX,
+        15, 100,
+        OAIPMHUtilitiesOnline.NO_THREAD_NAME,
+        OAIPMHUtilitiesOnline.NO_FROM,
+        OAIPMHUtilitiesOnline.NO_UNTIL,
+        OAIPMHUtilitiesOnline.NO_METADATA_FORMAT_WITH_RESTOK);
 
-    OAIPMHUtilitiesOnline.testList(oaipmhWebClient, OAIPMHUtilitiesOnline.VERB_LIST_RECORDS,
-        OAIPMHUtilitiesOnline.OAI_DATACITE_PREFIX, OAIPMHUtilitiesOnline.NO_SET);
+    System.out.println(OAIPMHUtilitiesOnline.OK);
   }
 
   /**
    * @throws IOException
    */
   @Test
-  public void testListRecordsIDIOM() throws IOException {
+  @Ignore
+  public void testListRecordsDATACITEAllPages() throws IOException {
+
+    System.out.println(OAIPMHUtilitiesOnline.TESTING + "testListRecordsDATACITEAllPages()");
+
+    OAIPMHUtilitiesOnline.examineTGList(oaipmhWebClient,
+        OAIPMHUtilitiesOnline.VERB_LIST_RECORDS,
+        OAIPMHUtilitiesOnline.NO_SET,
+        OAIPMHUtilitiesOnline.OAI_DATACITE_PREFIX,
+        0, 100,
+        OAIPMHUtilitiesOnline.NO_THREAD_NAME,
+        OAIPMHUtilitiesOnline.NO_FROM,
+        OAIPMHUtilitiesOnline.NO_UNTIL,
+        OAIPMHUtilitiesOnline.NO_METADATA_FORMAT_WITH_RESTOK);
 
-    System.out.println(OAIPMHUtilitiesOnline.TESTING + "testListRecordsIDIOM()");
+    System.out.println(OAIPMHUtilitiesOnline.OK);
+  }
 
-    OAIPMHUtilitiesOnline.testList(oaipmhWebClient, OAIPMHUtilitiesOnline.VERB_LIST_RECORDS,
-        OAIPMHUtilitiesOnline.OAI_IDIOMMETS_PREFIX, OAIPMHUtilitiesOnline.NO_SET);
+  /**
+   * @throws IOException
+   */
+  @Test
+  public void testListRecordsDATACITEMorePagesFromUntil() throws IOException {
+
+    System.out
+        .println(OAIPMHUtilitiesOnline.TESTING + "testListRecordsDATACITEMorePagesFromUntil()");
+
+    OAIPMHUtilitiesOnline.examineTGList(oaipmhWebClient,
+        OAIPMHUtilitiesOnline.VERB_LIST_RECORDS,
+        OAIPMHUtilitiesOnline.NO_SET,
+        OAIPMHUtilitiesOnline.OAI_DATACITE_PREFIX,
+        15, 100,
+        OAIPMHUtilitiesOnline.NO_THREAD_NAME,
+        checkListRecordsDATACITEFrom,
+        checkListRecordsDATACITEUntil,
+        OAIPMHUtilitiesOnline.NO_METADATA_FORMAT_WITH_RESTOK);
+
+    System.out.println(OAIPMHUtilitiesOnline.OK);
   }
 
   /**
    * @throws IOException
+   * @throws ExecutionException
+   * @throws InterruptedException
    */
   @Test
-  public void testListRecordsDC() throws IOException {
+  public void testListRecordsConcurrentlyIDIOMMETSMorePages()
+      throws IOException, InterruptedException, ExecutionException {
+
+    System.out
+        .println(
+            OAIPMHUtilitiesOnline.TESTING + "testListRecordsConcurrentlyIDIOMMETSMorePages()");
+
+    ExecutorService executor = Executors.newFixedThreadPool(3);
+
+    Future<Boolean> f1 = executor.submit(
+        new TGOAIPMHResumptionTokenThread(oaipmhWebClient, OAIPMHUtilitiesOnline.VERB_LIST_RECORDS,
+            OAIPMHUtilitiesOnline.NO_SET, OAIPMHUtilitiesOnline.OAI_IDIOMMETS_PREFIX, 2, 30, "D1"));
+    Future<Boolean> f2 = executor.submit(
+        new TGOAIPMHResumptionTokenThread(oaipmhWebClient, OAIPMHUtilitiesOnline.VERB_LIST_RECORDS,
+            OAIPMHUtilitiesOnline.NO_SET, OAIPMHUtilitiesOnline.OAI_IDIOMMETS_PREFIX, 3, 30, "D2"));
+    Future<Boolean> f3 = executor.submit(
+        new TGOAIPMHResumptionTokenThread(oaipmhWebClient, OAIPMHUtilitiesOnline.VERB_LIST_RECORDS,
+            OAIPMHUtilitiesOnline.NO_SET, OAIPMHUtilitiesOnline.OAI_IDIOMMETS_PREFIX, 4, 30, "D3"));
+
+    executor.shutdown();
+
+    System.out.println(OAIPMHUtilitiesOnline.OK + ": [D1]=" + f1.get() + ", [D2]=" + f2.get()
+        + ", [D3]=" + f3.get());
+  }
 
-    System.out.println(OAIPMHUtilitiesOnline.TESTING + "testListRecordsDC()");
 
-    OAIPMHUtilitiesOnline.testList(oaipmhWebClient, OAIPMHUtilitiesOnline.VERB_LIST_RECORDS,
-        OAIPMHUtilitiesOnline.OAI_DC_PREFIX, OAIPMHUtilitiesOnline.NO_SET);
+  /**
+   * @throws InterruptedException
+   * @throws ExecutionException
+   */
+  @Test
+  public void testRestokConcurrentlyListRecordsDC()
+      throws InterruptedException, ExecutionException {
+
+    System.out.println(OAIPMHUtilitiesOnline.TESTING + "testRestokConcurrentlyListRecordsDC()");
+
+    ExecutorService executor = Executors.newFixedThreadPool(4);
+
+    Future<Boolean> f1 = executor.submit(
+        new TGOAIPMHResumptionTokenThread(oaipmhWebClient, OAIPMHUtilitiesOnline.VERB_LIST_RECORDS,
+            OAIPMHUtilitiesOnline.NO_SET, OAIPMHUtilitiesOnline.OAI_DC_PREFIX, 44, 100, "DC1"));
+    Future<Boolean> f2 = executor.submit(
+        new TGOAIPMHResumptionTokenThread(oaipmhWebClient, OAIPMHUtilitiesOnline.VERB_LIST_RECORDS,
+            OAIPMHUtilitiesOnline.NO_SET, OAIPMHUtilitiesOnline.OAI_DC_PREFIX, 33, 100, "DC2"));
+    Future<Boolean> f3 = executor.submit(
+        new TGOAIPMHResumptionTokenThread(oaipmhWebClient, OAIPMHUtilitiesOnline.VERB_LIST_RECORDS,
+            OAIPMHUtilitiesOnline.NO_SET, OAIPMHUtilitiesOnline.OAI_DC_PREFIX, 66, 100, "DC3"));
+    Future<Boolean> f4 = executor.submit(
+        new TGOAIPMHResumptionTokenThread(oaipmhWebClient, OAIPMHUtilitiesOnline.VERB_LIST_RECORDS,
+            OAIPMHUtilitiesOnline.NO_SET, OAIPMHUtilitiesOnline.OAI_DC_PREFIX, 28, 100, "DC4"));
+
+    executor.shutdown();
+
+    System.out.println(
+        OAIPMHUtilitiesOnline.OK + ": [DC1]=" + f1.get() + ", [DC2]=" + f2.get() + ", [DC3]="
+            + f3.get() + ", [DC4]=" + f4.get());
   }
 
   /**
    * @throws IOException
+   * @throws InterruptedException
+   * @throws ExecutionException
    */
   @Test
-  public void testListRecordsDATASITEFromUntil() throws IOException {
+  public void testRestokConcurrentlyListRecords() throws InterruptedException, ExecutionException {
+
+    System.out.println(OAIPMHUtilitiesOnline.TESTING + "testRestokConcurrentlyListRecords()");
+
+    ExecutorService executor = Executors.newFixedThreadPool(3);
+
+    Future<Boolean> f1 = executor.submit(
+        new TGOAIPMHResumptionTokenThread(oaipmhWebClient, OAIPMHUtilitiesOnline.VERB_LIST_RECORDS,
+            OAIPMHUtilitiesOnline.NO_SET, OAIPMHUtilitiesOnline.OAI_DC_PREFIX, 6, 100, "B1"));
+    Future<Boolean> f2 = executor.submit(
+        new TGOAIPMHResumptionTokenThread(oaipmhWebClient, OAIPMHUtilitiesOnline.VERB_LIST_RECORDS,
+            OAIPMHUtilitiesOnline.NO_SET, OAIPMHUtilitiesOnline.OAI_DC_PREFIX, 7, 100, "B2"));
+    Future<Boolean> f3 = executor.submit(
+        new TGOAIPMHResumptionTokenThread(oaipmhWebClient, OAIPMHUtilitiesOnline.VERB_LIST_RECORDS,
+            OAIPMHUtilitiesOnline.NO_SET, OAIPMHUtilitiesOnline.OAI_DC_PREFIX, 8, 100, "B3"));
+    Future<Boolean> f4 = executor.submit(
+        new TGOAIPMHResumptionTokenThread(oaipmhWebClient, OAIPMHUtilitiesOnline.VERB_LIST_RECORDS,
+            OAIPMHUtilitiesOnline.NO_SET, OAIPMHUtilitiesOnline.OAI_DC_PREFIX, 9, 100, "B4"));
 
-    System.out.println(OAIPMHUtilitiesOnline.TESTING + "#LISTRECORDS");
+    executor.shutdown();
 
-    OAIPMHUtilitiesOnline.testList(oaipmhWebClient, OAIPMHUtilitiesOnline.VERB_LIST_RECORDS,
-        OAIPMHUtilitiesOnline.OAI_DATACITE_PREFIX, OAIPMHUtilitiesOnline.NO_SET,
-        checkListRecordsDATACITEFrom, checkListRecordsDATACITEUntil);
+    System.out.println(OAIPMHUtilitiesOnline.OK + ": [B1]=" + f1.get() + ", [B2]=" + f2.get()
+        + ", [B3]=" + f3.get() + ", [B4]=" + f4.get());
+  }
+
+  /**
+   * @throws InterruptedException
+   * @throws ExecutionException
+   */
+  @Test
+  public void testListRecordsRestokConcurrentlyDCAndIDIOMMETS()
+      throws InterruptedException, ExecutionException {
+
+    System.out.println(
+        OAIPMHUtilitiesOnline.TESTING + "testListRecordsRestokConcurrentlyDCAndIDIOMMets()");
+
+    ExecutorService executor = Executors.newFixedThreadPool(3);
+
+    Future<Boolean> f1 = executor.submit(
+        new TGOAIPMHResumptionTokenThread(oaipmhWebClient,
+            OAIPMHUtilitiesOnline.VERB_LIST_RECORDS,
+            OAIPMHUtilitiesOnline.NO_SET,
+            OAIPMHUtilitiesOnline.OAI_DC_PREFIX,
+            34, 100,
+            "DC1"));
+    Future<Boolean> f2 = executor.submit(
+        new TGOAIPMHResumptionTokenThread(oaipmhWebClient,
+            OAIPMHUtilitiesOnline.VERB_LIST_RECORDS,
+            OAIPMHUtilitiesOnline.NO_SET,
+            OAIPMHUtilitiesOnline.OAI_DC_PREFIX,
+            27, 100,
+            "DC2"));
+    Future<Boolean> f3 = executor.submit(
+        new TGOAIPMHResumptionTokenThread(oaipmhWebClient,
+            OAIPMHUtilitiesOnline.VERB_LIST_RECORDS,
+            OAIPMHUtilitiesOnline.NO_SET,
+            OAIPMHUtilitiesOnline.OAI_IDIOMMETS_PREFIX,
+            checkListIdentifiersPagesToTestIDIOM,
+            checkListIdentifiersRecordsPerPageIDIOM,
+            "IDIOM"));
+
+    executor.shutdown();
+
+    System.out.println(OAIPMHUtilitiesOnline.OK + ": [DC1]=" + f1.get() + ", [DC2]=" + f2.get()
+        + ", [IOIOM]=" + f3.get());
   }
 
 }
diff --git a/oaipmh-core/src/test/resources/oaipmh.test.dev-textgridlab-org.properties b/oaipmh-core/src/test/resources/oaipmh.test.dev-textgridlab-org.properties
index a8cc168f4379f32d1c0fd5906d7cff8572495b1e..82d1854c75508a6c406b11782f64b01bcb1ecda7 100644
--- a/oaipmh-core/src/test/resources/oaipmh.test.dev-textgridlab-org.properties
+++ b/oaipmh-core/src/test/resources/oaipmh.test.dev-textgridlab-org.properties
@@ -1,32 +1,33 @@
 # OAI-PMH host
-oaipmhEndpoint = https://dev.textgridlab.org/1.0/tgoaipmh/oai
+oaipmhEndpoint = https://dev.textgridlab.org/1.0/tgoaipmh
 
 # GetRecord --> TestGetRecordONLINE.class
 checkGetRecordDC = textgrid:vqn0.0
 expectedGetRecordDC = Heidi
-expectedGetRecordDCNoPrefix = The request includes illegal arguments or is missing required arguments: [metadataPrefix]
+
 checkGetRecordDATACITE = textgrid:mq05.0
 expectedGetRecordDATACITE = Weise Klugredenn
-expectedGetRecordDATACITENoPrefix = The request includes illegal arguments or is missing required arguments: [metadataPrefix]
+
 checkGetRecordIDIOM = textgrid:2sg18.0
 expectedGetRecordIDIOM = Aguateca
-expectedGetRecordIDIOMNoPrefix = The request includes illegal arguments or is missing required arguments: [metadataPrefix]
+
+#checkGetRecordIDIOMImage = textgrid:3vcgs.0
+#expectedGetRecordIDIOMImage = Tikal, Miscellaneous Stone 13
 checkGetRecordIDIOMImage = textgrid:407sf.0
 expectedGetRecordIDIOMImage = Aguateca, Miscellaneous Text 11
-expectedGetRecordIDIOMImageNoPrefix = The request includes illegal arguments or is missing required arguments: [metadataPrefix]
+
 checkGetRecordIDList = textgrid:mq05.0, textgrid:jgv6.0, textgrid:w7rz.0, textgrid:w36b.0, textgrid:mcdv.0, textgrid:v0qx.0, textgrid:xkck.0, textgrid:t3m1.0, textgrid:10rsq.0, textgrid:mq05.0, textgrid:jgv6.0, textgrid:w7rz.0, textgrid:w36b.0, textgrid:mcdv.0, textgrid:v0qx.0, textgrid:xkck.0, textgrid:t3m1.0, textgrid:10rsq.0
 
 # ListRecords
-checkListRecordsDC = project:TGPR-372fe6dc-57f2-6cd4-01b5-2c4bbefcfd3c
+checkListRecordsDCSet = project:TGPR-372fe6dc-57f2-6cd4-01b5-2c4bbefcfd3c
 checkListRecordsDCFrom = 2012-01-04T01:00:00
 checkListRecordsDCUntil = 2012-01-04T12:00:00
+
 checkListRecordsIDIOMFrom = 2012-01-04T01:00:00
 checkListRecordsIDIOMUntil = 2012-01-04T12:00:00
+
 checkListRecordsDATACITEFrom = 2012-01-04T01:00:00
 checkListRecordsDATACITEUntil = 2012-01-04T12:00:00
-checkListRecordsSet = project:TGPR-59722e29-efcb-330f-b9b4-5ef2fb08edab
-checkListRecordsSetExpectedPages = 2
-checkListRecordsSetExpectedPagesIDIOM = 1
 
 # ListIdentifiers
 checkListIdentifiersSet = project:TGPR-59722e29-efcb-330f-b9b4-5ef2fb08edab
diff --git a/oaipmh-webapp/src/main/webapp/WEB-INF/beans.xml b/oaipmh-webapp/src/main/webapp/WEB-INF/beans.xml
index b79fcbea2cedb146c47ad94ac97cd0e9c73e98b5..c0c077e42da1c24b26a761aa46056221a16bb844 100644
--- a/oaipmh-webapp/src/main/webapp/WEB-INF/beans.xml
+++ b/oaipmh-webapp/src/main/webapp/WEB-INF/beans.xml
@@ -90,7 +90,10 @@
 
 	<bean id="IDIOMImages"
 		class="info.textgrid.middleware.IDIOMImages">
-		<property name="rbacSessionID" value="${rbacSessionID}" />
+		<property name="idiomRbacSessionID"
+			value="${idiomRbacSessionID}" />
+		<property name="idiomTgcrudEndpoint"
+			value="${idiomTgcrudEndpoint}" />
 	</bean>
 
 	<!-- Bean for verb=Identify -->
diff --git a/oaipmh-webapp/src/main/webapp/WEB-INF/oaipmh.textgrid.properties b/oaipmh-webapp/src/main/webapp/WEB-INF/oaipmh.textgrid.properties
index 432fd8a3a5a3e65bfaa577725da8145fc26c78c8..8a189fce5665601539f598823d7185dbefb6fff5 100644
--- a/oaipmh-webapp/src/main/webapp/WEB-INF/oaipmh.textgrid.properties
+++ b/oaipmh-webapp/src/main/webapp/WEB-INF/oaipmh.textgrid.properties
@@ -11,8 +11,6 @@ RS_ENDPOINT = https://dev.textgridlab.org/1.0/tgoaipmh
 elasticSearch.url = 127.0.0.1
 elasticSearch.ports = 9202, 9203
 elasticSearch.index = ***
-# NONPUBLIC index only TextGrid IDIOM queries!
-elasticSearch.nonpublicIndex = ***
 elasticSearch.type = metadata
 elasticSearch.itemLimit = 100
 
@@ -119,5 +117,8 @@ specFieldPrefix = project:
 ########################################
 
 idiomResponseSize = 30
-# We do need a TextGrid RBAC Session ID for accessing unpublished image objects from TG-crud.
-rbacSessionID = ***
+# NONPUBLIC index only TextGrid IDIOM queries!
+elasticSearch.nonpublicIndex = ***
+# We do need a TG-crud endpoint and a TextGrid RBAC Session ID for accessing unpublished image objects from TG-crud.
+idiomTgcrudEndpoint = ***
+idiomRbacSessionID = ***
diff --git a/pom.xml b/pom.xml
index 4d0e525026e25e3d00f5b8b60336ffcd32e0437a..4fd43e1d996aac08d68bd94214a530d01c2f6dbe 100644
--- a/pom.xml
+++ b/pom.xml
@@ -132,4 +132,4 @@
 			<url>https://nexus.gwdg.de/repository/maven-dariah-public/</url>
 		</repository>
 	</distributionManagement>
-</project>
\ No newline at end of file
+</project>