diff --git a/oaipmh-core/src/main/java/info/textgrid/middleware/SetDeliverer.java b/oaipmh-core/src/main/java/info/textgrid/middleware/SetDeliverer.java
index 5b8f3b83493318b5b2d2efac87d651a8b370f152..d13006aef904eb92e03c757ae17ace6b00cdbb49 100644
--- a/oaipmh-core/src/main/java/info/textgrid/middleware/SetDeliverer.java
+++ b/oaipmh-core/src/main/java/info/textgrid/middleware/SetDeliverer.java
@@ -39,6 +39,9 @@ public class SetDeliverer {
   private static final int DH_SIZE = 100000;
   private static final int TG_SIZE = 1000;
 
+  private static final String DH_COLLECTION_FILTER_NAME = "collectionFilter";
+  private static final String DH_COLLECTION_FILTER_TERM_NAME = "collectionFilterTerm";
+
   // private static Map<String, String> setSet = new Hashtable<String, String>();
 
   private Set<String> identifier = new LinkedHashSet<String>();
@@ -124,19 +127,22 @@ public class SetDeliverer {
 
       Script collectionID = new Script("doc['administrativeMetadata.dcterms:identifier']");
 
-      AggregationBuilder filterCollections = AggregationBuilders.filter("collectionFilter",
+      // Do filter all collections (via descriptiveMetadata.dc:format) AND
+      // get out all the child objects and collections (NO descriptiveMetadata.dc:relation),
+      // so we get exactly one set per root collection only!
+      AggregationBuilder collectionFilter = AggregationBuilders.filter(DH_COLLECTION_FILTER_NAME,
           QueryBuilders.boolQuery()
               .mustNot(QueryBuilders.existsQuery("descriptiveMetadata.dc:relation"))
               .must(QueryBuilders.matchPhraseQuery("descriptiveMetadata.dc:format",
                   TextGridMimetypes.DARIAH_COLLECTION)));
 
-      AggregationBuilder filterTerm = AggregationBuilders.terms("collectionTerm")
-          .script(collectionID)
-          .size(DH_SIZE);
-
-      filterCollections.subAggregation(filterTerm);
+      AggregationBuilder collectionFilterTerm =
+          AggregationBuilders.terms(DH_COLLECTION_FILTER_TERM_NAME)
+              .script(collectionID)
+              .size(DH_SIZE);
 
-      searchSourceBuilder.aggregation(filterCollections);
+      collectionFilter.subAggregation(collectionFilterTerm);
+      searchSourceBuilder.aggregation(collectionFilter);
     }
 
     // FIXME Where do we need THIS?
@@ -222,14 +228,16 @@ public class SetDeliverer {
 
           System.out.println("  ##  entry key  -->  " + entry.getKey());
 
-          if (name.equals("collectionFilter")) {
-            // Filter trytry = getRecordListItems.getAggregations().get("projectsPublic");
-            // Terms trytry2 = trytry.getAggregations().get("projects");
-            Filter filterCollection = getRecordListItems.getAggregations().get("collectionFilter");
-            Terms collectionTerms = filterCollection.getAggregations().get("collectionTerm");
+          if (name.equals(DH_COLLECTION_FILTER_NAME)) {
+            Filter filterCollection =
+                getRecordListItems.getAggregations().get(DH_COLLECTION_FILTER_NAME);
+            Terms collectionTerms =
+                filterCollection.getAggregations().get(DH_COLLECTION_FILTER_TERM_NAME);
             for (Bucket b : collectionTerms.getBuckets()) {
 
-              System.out.println("  ##  ID  -->  " + b.getKeyAsString());
+              System.out.println("  ##  key  -->  " + b.getKey().toString());
+              System.out.println("  ##  kas  -->  " + b.getKeyAsString());
+              System.out.println("  ##  map  -->  " + b.getAggregations().getAsMap());
 
               SetType newSet = new SetType();
               newSet.setSetSpec(b.getKeyAsString());