diff --git a/atdb/taskdatabase/services/activities.py b/atdb/taskdatabase/services/activities.py
index 198a103b2532d79ccfb921776e52b16e6688e5e4..e46653feb426961fbe657913121e46ca16c3030d 100644
--- a/atdb/taskdatabase/services/activities.py
+++ b/atdb/taskdatabase/services/activities.py
@@ -41,7 +41,7 @@ def calculate_ingested_fraction(this_task):
     return result
 
 
-def associate_activity(task):
+def associate_activity(task, save_task=True):
 
     if not task.activity:
 
@@ -60,8 +60,10 @@ def associate_activity(task):
             activity.save()
 
         task.activity = activity
-        task.save()
+        if save_task:
+            task.save()
 
+    return task.activity
 
 def update_activity(task):
     """
@@ -77,24 +79,9 @@ def update_activity(task):
     """
     logger.info(f'update_activity for task {task.id} with sas_id {task.sas_id} and status {task.status}')
 
-    try:
-        activity = Activity.objects.get(sas_id=task.sas_id)
-    except:
-        # no activity exists yet, create it
-        logger.info(f'create new activity for sas_id {task.sas_id}')
-
-        activity = Activity(sas_id=task.sas_id,
-                            workflow=task.workflow,
-                            project=task.project,
-                            filter=task.filter,
-                            priority=task.priority,
-                            archive=task.archive)
-        activity.save()
-
-    # associate an activity to this tasks
-    if not task.activity:
-        activity = Activity.objects.get(sas_id=task.sas_id)
-        task.activity = activity
+    # do not save the task,
+    # because this function is called from signals where the task.save is delayed on purpose to avoid recursion
+    activity = associate_activity(task, save_task=False)
 
     # depending on the status transition, perform calculations
     if task.status == State.STORED.value:
diff --git a/atdb/taskdatabase/services/signals.py b/atdb/taskdatabase/services/signals.py
index 05d0c9c5ee4bd03a5c282d9b879080d621248411..027b738559de818cc5c39aaf891687ed62c21f1c 100644
--- a/atdb/taskdatabase/services/signals.py
+++ b/atdb/taskdatabase/services/signals.py
@@ -69,7 +69,7 @@ def handle_post_save(sender, **kwargs):
     """
     task = kwargs.get('instance')
 
-    # temporarily disconnect to avoid recursion.
+    # temporarily disconnect and save later, to avoid recursion.
     update_activity(task)
 
     disconnect_signals()
diff --git a/atdb/taskdatabase/templates/taskdatabase/ingest/tasks.html b/atdb/taskdatabase/templates/taskdatabase/ingest/tasks.html
index f7ba1aa9101378cbc143a46c57d3ae607bb88d1f..7f4a80d15cae42bc7ec64826d74106c4628d1407 100644
--- a/atdb/taskdatabase/templates/taskdatabase/ingest/tasks.html
+++ b/atdb/taskdatabase/templates/taskdatabase/ingest/tasks.html
@@ -24,12 +24,12 @@
                 {% endif %}
                 </td>
                 <td>{{ task.activity.ingestq_status }}</td>
-                <td>{{ task.sasid_ingested_fraction.completion }}%</td>
+                <td>{{ task.activity.ingested_fraction }}%</td>
                 <td>
-                    {% if task.sas_id_has_archived != None %}
+                    {% if task.activity.has_archived != None %}
                       <a href={{ task.sasid_path_to_lta }} target="_blank">
                           <img src="{% static 'taskdatabase/ldvlogo_small.png' %}" height="20" alt="link to LTA">
-                          {{ task.sas_id_has_archived }}
+                          {{ task.activity.has_archived }}
                       </a>&nbsp;
                     {% else %}
                     -
diff --git a/atdb/taskdatabase/views.py b/atdb/taskdatabase/views.py
index 1ab90aecae8534b1d7743272ccc5ee3fd1941ae4..32e416248a1e82d694d50771c0be24b72ae1d52e 100644
--- a/atdb/taskdatabase/views.py
+++ b/atdb/taskdatabase/views.py
@@ -1717,4 +1717,4 @@ def AssociateActivities(request):
         activities.associate_activity(task)
         logger.info(f'{task.id} => {task.sas_id}')
 
-
+    return redirect('index')
\ No newline at end of file