diff --git a/atdb/taskdatabase/services/activities_handler.py b/atdb/taskdatabase/services/activities_handler.py
index 17834aefe3102cbf6c88e6fbd4418af557e16c8d..14a69f6da5b7340391b5eef697318e918c7b0239 100644
--- a/atdb/taskdatabase/services/activities_handler.py
+++ b/atdb/taskdatabase/services/activities_handler.py
@@ -144,6 +144,22 @@ def reset_activity(task):
         # which is always... except in some simpler unittests
         pass
 
+def create_aggregation_task(task):
+    """
+    create a new aggregation task based on this task
+    """
+    aggregation_task = Task(
+        task_type='aggregation',
+        filter=task.filter,
+        project=task.project,
+        sas_id=task.sas_id,
+        workflow=task.workflow,
+        status=State.IDLE.value,
+        new_status=State.IDLE.value,
+        activity=task.activity)
+
+    aggregation_task.save()
+
 def update_processed_and_aggregate(task):
     """
     Check if the whole SAS_ID (activity) is processed.
@@ -192,6 +208,12 @@ def update_processed_and_aggregate(task):
             if not activity.storage_location:
                 activity.create_storage_location()
 
+            # create a new 'aggregate_task' that is used to collect the aggregated output
+            # this has to be done only once, so this is a good place to do it.
+            aggregation_tasks = Task.objects.filter(sas_id=task.sas_id,task_type='aggregation')
+            if aggregation_tasks.count()==0:
+                create_aggregation_task(task)
+
             # this means that its tasks know that they should copy their H5 files to the storage_location
             # (but the tasks cannot do that, the aggregator service does)
             activity.status = State.COLLECTING_DATA.value
diff --git a/atdb/taskdatabase/services/common.py b/atdb/taskdatabase/services/common.py
index efba7f128473dda0c75831ee50819fa195e7c7ad..444b8364dd129ab4b67ec30b19b5087b8054ada2 100644
--- a/atdb/taskdatabase/services/common.py
+++ b/atdb/taskdatabase/services/common.py
@@ -29,6 +29,7 @@ class State(Enum):
     DISCARDED = "discarded"
     FAILED = "failed"
     COLLECTING_DATA = "collecting_data"
+    IDLE = "idle"
 
 VERIFIED_STATUSSES = [State.STORED.value, State.VALIDATED.value, State.SCRUBBED.value, State.PRE_ARCHIVED.value,
                       State.ARCHIVED.value, State.FINISHED.value, State.SUSPENDED.value, State.DISCARDED.value]
diff --git a/atdb/taskdatabase/templates/taskdatabase/index.html b/atdb/taskdatabase/templates/taskdatabase/index.html
index 1aa3b26ba6397429ba8b606b0607c82fb5107bc0..20043ea404d49f6265c69071675e2cb45fff7d8a 100644
--- a/atdb/taskdatabase/templates/taskdatabase/index.html
+++ b/atdb/taskdatabase/templates/taskdatabase/index.html
@@ -31,7 +31,7 @@
             {% include 'taskdatabase/pagination.html' %}
         </div>
     </div>
-    <p class="footer"> Version 23 Jul 2024
+    <p class="footer"> Version 29 Jul 2024
 </div>
 
 {% include 'taskdatabase/refresh.html' %}
diff --git a/atdb/taskdatabase/templates/taskdatabase/tasks.html b/atdb/taskdatabase/templates/taskdatabase/tasks.html
index ecf378640b5913ef23eeb895a6d0add7f6ab2297..3bc7d44829cc51c670ae40d3fe6a756c1853a0d2 100644
--- a/atdb/taskdatabase/templates/taskdatabase/tasks.html
+++ b/atdb/taskdatabase/templates/taskdatabase/tasks.html
@@ -1,6 +1,6 @@
 {% load static %}
 {% for task in my_tasks %}
-    {% if task.status != "discarded" %}
+    {% if task.status != "discarded" and task.task_type == 'regular' %}
     <div class="row">
         <tr class="{{ task.status }}">
 
@@ -17,7 +17,7 @@
 
                     {% if task.has_quality %}
 
-                       {% if task.is_summary %}
+                       {% if task.is_summary or task.task_type == 'aggregation' %}
                             <a class="open-modal btn btn-secondary btn-sm"
                                href="{% url 'task-quality' task.id my_tasks.number %}"
                                data-popup-url="{% url 'task-quality' task.id my_tasks.number %}"