diff --git a/atdb/taskdatabase/templates/taskdatabase/index.html b/atdb/taskdatabase/templates/taskdatabase/index.html
index f4fb3278583426d1aef9b3cb9603ff1be856b9d6..178726d15ce8207e086ef1d47b30a23930ff8195 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 16 Feb 2024 (7:00)
+    <p class="footer"> Version 16 Feb 2024 (11:00)
 </div>
 
 {% include 'taskdatabase/refresh.html' %}
diff --git a/atdb/taskdatabase/templates/taskdatabase/validation/validation_buttons.html b/atdb/taskdatabase/templates/taskdatabase/validation/validation_buttons.html
index e5f633f78d8952acb549ed39924edaaf65fe14c3..8ecf45fde4ac35cf20dfe88abd77fd33d29ab9f1 100644
--- a/atdb/taskdatabase/templates/taskdatabase/validation/validation_buttons.html
+++ b/atdb/taskdatabase/templates/taskdatabase/validation/validation_buttons.html
@@ -1,4 +1,4 @@
-<!-- keep the old mechanism in comments to test/evaluate, remove later when it works -->
+<!-- keep the old mechanism in comments to test/evaluate, remove later when it works
 
  {% if task.sasid_is_verified %}
     <a href="{% url 'task-validate-sasid' task.pk 'poor' 'validated' my_tasks.number %}" class="btn btn-danger btn-sm" role="button"><i class="fas fa-check"></i> P</a>
@@ -16,7 +16,8 @@
     <a href="{% url 'task-validate-sasid' task.pk 'calculated' 'validated' my_tasks.number %}" class="btn btn-success btn-sm" role="button"><i class="fas fa-check"></i> Validate</a>
  {% endif %}
 
-<!-- new activity mechanism, to enable SDC-1188
+-->
+<!-- new activity mechanism, to enable SDC-1188 -->
  {% if task.activity.is_verified %}
     <a href="{% url 'task-validate-sasid' task.pk 'poor' 'validated' my_tasks.number %}" class="btn btn-danger btn-sm" role="button"><i class="fas fa-check"></i> P</a>
  {% endif %}
@@ -32,4 +33,3 @@
  {% if task.activity.is_verified %}
     <a href="{% url 'task-validate-sasid' task.pk 'calculated' 'validated' my_tasks.number %}" class="btn btn-success btn-sm" role="button"><i class="fas fa-check"></i> Validate</a>
  {% endif %}
--->
\ No newline at end of file
diff --git a/atdb/taskdatabase/urls.py b/atdb/taskdatabase/urls.py
index bf8ed0a4087b273b865f695267985371d1a628f7..981c97a99cb6facff7b554a0e51c80a1deed830f 100644
--- a/atdb/taskdatabase/urls.py
+++ b/atdb/taskdatabase/urls.py
@@ -133,6 +133,7 @@ urlpatterns = [
     #some migration and repair endpoints
     path('tasks/repair/associate-activities/', views.AssociateActivities, name='associate-activities'),
     path('tasks/repair/update-all-activities/', views.UpdateAllActivities, name='update-all-activities'),
+    path('tasks/repair/update-activity/<sas_id>', views.UpdateActivitySasId, name='update-activity-sasid'),
     path('tasks/repair/update-failed-tasks/', views.UpdateFailedTasks, name='update-failed-tasks'),
     path('tasks/repair/update-ingestq-tasks/<batch_size>', views.UpdateIngestQTasks, name='update-ingestq-tasks'),
     path('tasks/repair/update-finished-tasks/', views.UpdateFinishedTasks, name='update-finished-tasks'),
diff --git a/atdb/taskdatabase/views.py b/atdb/taskdatabase/views.py
index 44a6189a7dd9f47e7837e34d31ca7984c0a8017b..d049b9e667418700777444a134037aa6f4fdc1bd 100644
--- a/atdb/taskdatabase/views.py
+++ b/atdb/taskdatabase/views.py
@@ -9,6 +9,7 @@ from django.contrib import messages
 
 from rest_framework import generics
 from rest_framework.response import Response
+from django.http import JsonResponse
 
 from django_filters import rest_framework as filters
 from django_filters.views import FilterView
@@ -1728,6 +1729,33 @@ def UpdateAllActivities(request):
 
     return redirect('index')
 
+def UpdateActivitySasId(request, sas_id):
+    # this function is called externally to avoid worker timeouts
+    # http://localhost:8000/atdb/tasks/repair/update-activity/600907
+
+    try:
+        activity = Activity.objects.get(sas_id=sas_id)
+
+        tasks = Task.objects.filter(sas_id=activity.sas_id)
+        total = tasks.count()
+        i = 0
+
+        for task in tasks:
+            i += 1
+            activities_handler.update_activity(task)
+            logger.info(f'{i} of {total} for sas_id = {sas_id}')
+
+        logger.info(f'UpdateActivitySasId {sas_id}')
+    except Exception as error:
+        logger.error(error)
+        return JsonResponse({
+            'error': error
+        })
+
+    return JsonResponse({
+        'total': total
+    })
+
 @staff_member_required
 def UpdateFailedTasks(request):