diff --git a/atdb/taskdatabase/services/algorithms.py b/atdb/taskdatabase/services/algorithms.py
index de2afb9aac74c575b9a92e424921b07d6476d2f1..1039ee574d4f81b1d0747831abd4820aa0bac8a5 100644
--- a/atdb/taskdatabase/services/algorithms.py
+++ b/atdb/taskdatabase/services/algorithms.py
@@ -1127,22 +1127,135 @@ def construct_linc_summary(task):
     return results
 
 
-def construct_summary(task):
+def construct_summary(task, format='html'):
 
     summary_flavour = get_summary_flavour(task)
     logger.info(f'summary_flavour = {summary_flavour}')
 
-    # construct the appropriate summary html
-    if summary_flavour == SummaryFlavour.DEFAULT.value:
-        return construct_default_summary(task)
+    if format=='html':
+        # construct the appropriate summary html
+        if summary_flavour == SummaryFlavour.DEFAULT.value:
+            return construct_default_summary(task)
 
-    elif summary_flavour == SummaryFlavour.IMAGING_COMPRESSION.value:
-        return construct_imaging_summary(task)
+        elif summary_flavour == SummaryFlavour.IMAGING_COMPRESSION.value:
+            return construct_imaging_summary(task)
 
-    elif summary_flavour == SummaryFlavour.LINC_CALIBRATOR.value:
-        return construct_linc_summary(task)
+        elif summary_flavour == SummaryFlavour.LINC_CALIBRATOR.value:
+            return construct_linc_summary(task)
 
-    elif summary_flavour == SummaryFlavour.LINC_TARGET.value:
-        return construct_linc_summary(task)
+        elif summary_flavour == SummaryFlavour.LINC_TARGET.value:
+            return construct_linc_summary(task)
+
+    elif format=='json':
+        if summary_flavour == SummaryFlavour.DEFAULT.value:
+            return construct_default_summary_json(task)
 
     return None
+
+
+def construct_default_summary_json(task):
+
+    total_size_input = 0
+    total_size_output = 0
+    quality_values = {'poor': 0, 'moderate': 0, 'good': 0}
+
+    sas_id = task.sas_id
+    title = f'Summary File for SAS_ID {task.sas_id}'
+    summary_json = {}
+    summary_json['title'] = title
+
+    tasks = Task.objects.filter(sas_id=sas_id)
+    tasks_records = []
+
+    for task in tasks:
+        task_record = {}
+
+        # skip 'suspended' and 'discarded' tasks
+        if task.status in ['suspended', 'discarded']:
+            continue
+
+        task_record['task'] = task.id
+
+        # find the summary in the quality json structure
+        try:
+            summary = task.quality_json["summary"]
+
+            for key in summary:
+                record = summary[key]
+                total_size_input += record['input_size']
+                total_size_output+= record['output_size']
+
+                task_record['file'] = key
+                task_record['input_name'] = record['input_name']
+                task_record['input_size'] = record['input_size']
+                task_record['output_name'] = record['output_name']
+                task_record['output_size'] = record['output_size']
+                task_record['size_ratio'] = str(round(record['size_ratio'],3))
+
+                if 'rfi_percent' in record:
+                    # add RFI percentage (if present)
+                    task_record['rfi_percent'] = str(record['rfi_percent'])
+
+                try:
+                    # add calculated quality (if present)
+                    calculated_qualities = task.calculated_qualities
+                    if calculated_qualities:
+                        task_quality = calculated_qualities['per_task']
+                        task_record['task_quality'] = str(task_quality)
+
+                except:
+                    pass
+
+                try:
+                    task_record['added'] = record['added']
+                except:
+                    pass
+
+                try:
+                    task_record['deleted'] = record['deleted']
+                except:
+                    pass
+
+                try:
+                    key = task.calculated_qualities['per_task']
+                    quality_values[key] = quality_values[key] + 1
+                except:
+                    # ignore the tasks that have no calculated quality.
+                    pass
+
+                tasks_records.append(task_record)
+        except:
+            pass
+
+    # calculate totals
+    totals_record = {}
+
+    try:
+        totals_record['input_size'] = total_size_input
+        totals_record['output_size'] = total_size_output
+        totals_record['ratio'] = round(total_size_output / total_size_input, 3)
+
+        try:
+            # add calculated quality per sasid (if present)
+            if calculated_qualities:
+                sasid_quality = calculated_qualities['per_sasid']
+                totals_record['sasid_quality'] = str(sasid_quality)
+                totals_record['quality_values'] = str(quality_values)
+
+                try:
+                    quality_thresholds = json.loads(Configuration.objects.get(key='quality_thresholds').value)
+                    totals_record['rfi_tresholds'] = quality_thresholds
+
+                except:
+                    pass
+        except:
+            pass
+
+    except:
+        pass
+
+    summary_json['totals'] = totals_record
+    summary_json['tasks'] = tasks_records
+
+    return summary_json
+
diff --git a/atdb/taskdatabase/templates/taskdatabase/failures/retry_buttons.html b/atdb/taskdatabase/templates/taskdatabase/failures/retry_buttons.html
index 09fdec5133ace7fab6db25a3b659d8bfea5c01da..6126d241702fe94b93d4ed964ceeed2fc52a12b3 100644
--- a/atdb/taskdatabase/templates/taskdatabase/failures/retry_buttons.html
+++ b/atdb/taskdatabase/templates/taskdatabase/failures/retry_buttons.html
@@ -17,7 +17,7 @@
                     <a href="{% url 'task-retry-view' task.pk 'scrubbed' my_tasks.number %}" class="btn btn-warning btn-sm" role="button"><b><i class="fas fa-sync-alt"></i> Retry</b></a>
             {% endif %}
             {% if task.status == "archived_failed" %}
-                    (manual) </b></a>
+                    <a href="{% url 'task-retry-view' task.pk 'pre_archived' my_tasks.number %}" class="btn btn-warning btn-sm" role="button"><b><i class="fas fa-sync-alt"></i> Retry</b></a>
             {% endif %}
             {% if task.status == "finished_failed" %}
                     <a href="{% url 'task-retry-view' task.pk 'finishing' my_tasks.number %}" class="btn btn-warning btn-sm" role="button"><b><i class="fas fa-sync-alt"></i> Retry</b></a>
diff --git a/atdb/taskdatabase/views.py b/atdb/taskdatabase/views.py
index bac558c2ef8d49eea882f8f42a7c143b682026ce..14c9ae55140bbba720355c249ec513fad43f9e36 100644
--- a/atdb/taskdatabase/views.py
+++ b/atdb/taskdatabase/views.py
@@ -1796,8 +1796,8 @@ def GetSummaryJson(request, sas_id):
         # use a trick to be able to use the existing task based code
         queryset = Task.objects.filter(sas_id=sas_id)
         task = queryset[0]
-        #summary_json = algorithms.construct_summary_json(task)
-        summary_json = None
+        summary_json = algorithms.construct_summary(task,format='json')
+
         return JsonResponse({
             'summary': summary_json
         })