diff --git a/atdb/logs/atdb.log b/atdb/logs/atdb.log
index 87f2820ef84552f80f63083c1a0147bba0d60a39..06ea631700c580a41acd0b847a83c52ebef045a9 100644
--- a/atdb/logs/atdb.log
+++ b/atdb/logs/atdb.log
@@ -42,3 +42,15 @@ logging[14/Apr/2023 14:17:24,827] unsupported operand type(s) for +=: 'NoneType'
 [01/May/2023 17:07:47,382] task 25485 - (regular) - 146233 has no plots, skipped.
 [01/May/2023 17:07:48,568] unsupported operand type(s) for &: 'bool' and 'str'
 [01/May/2023 17:07:48,569] task 25485 - (regular) - 146233 has no plots, skipped.
+[04/May/2023 14:35:18,946] 'NoneType' object is not subscriptable
+[04/May/2023 14:35:18,946] task 25378 - (regular) - 116876 has no plots, skipped.
+[04/May/2023 14:35:21,861] 'NoneType' object is not subscriptable
+[04/May/2023 14:35:21,861] task 25378 - (regular) - 116876 has no plots, skipped.
+[04/May/2023 14:35:52,010] 'NoneType' object is not subscriptable
+[04/May/2023 14:35:52,010] task 25378 - (regular) - 116876 has no plots, skipped.
+[04/May/2023 14:35:52,100] 'NoneType' object is not subscriptable
+[04/May/2023 14:35:52,100] task 25378 - (regular) - 116876 has no plots, skipped.
+[04/May/2023 14:35:52,193] 'NoneType' object is not subscriptable
+[04/May/2023 14:35:52,193] task 25378 - (regular) - 116876 has no plots, skipped.
+[04/May/2023 14:35:52,294] 'NoneType' object is not subscriptable
+[04/May/2023 14:35:52,294] task 25378 - (regular) - 116876 has no plots, skipped.
diff --git a/atdb/taskdatabase/templates/taskdatabase/discarded/headers.html b/atdb/taskdatabase/templates/taskdatabase/discarded/headers.html
index 765c5664d54b4df4e72ab6e4be7df8cec6141aa1..cb27d6cc9006a2bf1680706790282391b9ccffd3 100644
--- a/atdb/taskdatabase/templates/taskdatabase/discarded/headers.html
+++ b/atdb/taskdatabase/templates/taskdatabase/discarded/headers.html
@@ -26,5 +26,5 @@
         <a href="{% url 'sort-tasks' 'filter' 'discarded' %}" class="btn btn-light btn-sm" role="button"><i class="fas fa-sort-down"></i></a>
     </th>
     <th>Cleanup Policy</th>
-    <th>Remarks</th>
+    <th>Reason</th>
 </tr>
\ No newline at end of file
diff --git a/atdb/taskdatabase/templates/taskdatabase/discarded/tasks.html b/atdb/taskdatabase/templates/taskdatabase/discarded/tasks.html
index 7dce28399612329adc74422498d626f0749facea..ab93845beb36597730d7519419715bf5da19c47c 100644
--- a/atdb/taskdatabase/templates/taskdatabase/discarded/tasks.html
+++ b/atdb/taskdatabase/templates/taskdatabase/discarded/tasks.html
@@ -37,7 +37,7 @@
 
                 <td>{{ task.filter }} </td>
                 <td>{{ task.cleanup_policy }} </td>
-                <td>{{ task.remarks }} </td>
+                <td>{{ task.remarks.discard_reason }} </td>
                 </tr>
             </div>
         {% endif %}
diff --git a/atdb/taskdatabase/templates/taskdatabase/failures/tasks.html b/atdb/taskdatabase/templates/taskdatabase/failures/tasks.html
index 3d167b86877a4f427f6595eea4bd35814d25e0cc..09c33c875749551bcac92051cfc7a0365828a451 100644
--- a/atdb/taskdatabase/templates/taskdatabase/failures/tasks.html
+++ b/atdb/taskdatabase/templates/taskdatabase/failures/tasks.html
@@ -41,7 +41,6 @@
                 <td>
                     {% include "taskdatabase/failures/retry_buttons.html" %}
                     <a href="{% url 'task-discard-view' task.pk 'discarded' my_tasks.number %}" class="btn btn-danger btn-sm" role="button"><i class="fas fa-trash-alt"></i> Discard</a>
-
                 </td>
 
                 </tr>
diff --git a/atdb/taskdatabase/templates/taskdatabase/validation/confirm_discard.html b/atdb/taskdatabase/templates/taskdatabase/validation/confirm_discard.html
new file mode 100644
index 0000000000000000000000000000000000000000..add183b0b428bdb6fd6e8fc139d66cdf4fd6ca99
--- /dev/null
+++ b/atdb/taskdatabase/templates/taskdatabase/validation/confirm_discard.html
@@ -0,0 +1,31 @@
+{% extends 'taskdatabase/base.html' %}
+
+{% block myBlock %}
+<div class="container-fluid details-container">
+
+
+  <div class="card">
+       <div class="card-body">
+
+            <form action="./{{ page }}" method="POST">{% csrf_token %}
+                <div class="text-center">
+
+                <h5> Are you sure you want to discard all ({{ count }}) tasks with SAS_ID {{ sas_id }}?</h5>
+                    Enter a reason for discarding (optional)
+                    {% csrf_token %}
+
+                <div>
+                    {{ my_form }}
+                </div>
+
+                <p>
+                    <button class="btn btn-success btn-sm" type="submit"><i class="fas fa-check"></i> OK</button>
+                    <a href="{% url 'validation' %}" class="btn btn-warning btn-sm" role="button"><i class="fas fa-times-circle"></i> Cancel</a>&nbsp
+                </p>
+                </div>
+            </form>
+
+       </div>
+  </div>
+</div>
+{% endblock %}
\ No newline at end of file
diff --git a/atdb/taskdatabase/templates/taskdatabase/validation/headers.html b/atdb/taskdatabase/templates/taskdatabase/validation/headers.html
index 7eba892199d051f15e51caa196417972e2f589aa..9cd3a073b39d0ad794b25d34a6467e172c84f693 100644
--- a/atdb/taskdatabase/templates/taskdatabase/validation/headers.html
+++ b/atdb/taskdatabase/templates/taskdatabase/validation/headers.html
@@ -22,4 +22,5 @@
     <th>Annotate</th>
     <th>Quality</th>
     <th>Validate (choose a Q)</th>
+    <th>Discard</th>
 </tr>
\ No newline at end of file
diff --git a/atdb/taskdatabase/templates/taskdatabase/validation/tasks.html b/atdb/taskdatabase/templates/taskdatabase/validation/tasks.html
index d89f7fa7d330a4da131128cca864fcccabe19161..284464853668f2c72702244d7d12eb8fab1b803d 100644
--- a/atdb/taskdatabase/templates/taskdatabase/validation/tasks.html
+++ b/atdb/taskdatabase/templates/taskdatabase/validation/tasks.html
@@ -68,7 +68,7 @@
                 </td>
                 <td class="{{ task.quality }}">{{ task.quality|default_if_none:"-" }}</td>
                 <td>{% include "taskdatabase/validation/validation_buttons.html" %}</td>
-
+                <td><a href="{% url 'task-discard-view-sasid' task.pk 'discarded' my_tasks.number %}" class="btn btn-danger btn-sm" role="button"><i class="fas fa-trash-alt"></i></a></td>
             </tr>
         </div>
         {% endif %}
diff --git a/atdb/taskdatabase/urls.py b/atdb/taskdatabase/urls.py
index 636b2f38c48b033a2a3415346d162e7c394f36c8..102fe1aa79bd4e346edb0ddd263b42a48da96056 100644
--- a/atdb/taskdatabase/urls.py
+++ b/atdb/taskdatabase/urls.py
@@ -98,6 +98,7 @@ urlpatterns = [
     path('tasks/<int:pk>/validate/<quality>/<new_status>/<page>', views.TaskValidate, name='task-validate-view'),
     path('tasks/<int:pk>/retry/<new_status>/<page>', views.TaskRetry, name='task-retry-view'),
     path('tasks/<int:pk>/discard/<new_status>/<page>', views.TaskDiscard, name='task-discard-view'),
+    path('tasks/<int:pk>/discard_sasid/<new_status>/<page>', views.TaskDiscardSasId, name='task-discard-view-sasid'),
 
     path('tasks/<int:pk>/change_priority/<priority_change>/<page>', views.ChangePriority, name='task-change-priority'),
     path('tasks/<int:pk>/change_priority/<priority_change>', views.ChangePriority, name='task-change-priority'),
diff --git a/atdb/taskdatabase/views.py b/atdb/taskdatabase/views.py
index e07be8eb2f4e7f13cf21c17549f08175a4d8a1f9..4f687a9cede8c7752e6cd79b36583b3d9c5d2732 100644
--- a/atdb/taskdatabase/views.py
+++ b/atdb/taskdatabase/views.py
@@ -1129,6 +1129,51 @@ def TaskDiscard(request, pk, new_status, page=0):
     return render(request, "taskdatabase/failures/confirm_discard.html", {'task': task, 'page': page})
 
 
+
+def TaskDiscardSasId(request, pk, new_status, page=0):
+    # TODO: when the cleanup service in place,
+    # make a change in this line in failures\tasks.html. Change 'discard' into 'discarded'.
+    # <a href="{% url 'task-discard-view' task.pk 'discarded' my_tasks.number %}"
+
+    task = Task.objects.get(pk=pk)
+    sas_id = task.sas_id
+    tasks = Task.objects.filter(sas_id=sas_id)
+
+    if request.method == "POST":
+        form = QualityAnnotationForm(request.POST)
+
+        for task in tasks:
+            task.cleanup_policy = task.status
+
+            if form.is_valid():
+                try:
+                    task.remarks['discard_reason'] = request.POST.get("annotation", "")
+                except:
+                    task.remarks = {}
+                    task.remarks['discard_reason'] = request.POST.get("annotation", "")
+
+            task.new_status = new_status
+            task.save()
+
+        # return to the validation page
+        return redirect_with_params('validation', '?page=' + page)
+
+    else:
+        # a GET means that the form should be presented to be filled in
+        try:
+            discard_reason = task.remarks['discard_reason']
+        except:
+            discard_reason = ""
+
+        count=tasks.count()
+
+        my_form = QualityAnnotationForm(initial={'annotation': discard_reason, 'return_to_page': page})
+
+        # if not a POST, then render the confirmaton page, which will return to this function with a POST.
+        return render(request, "taskdatabase/validation/confirm_discard.html",
+                      {'task': task, 'my_form': my_form, 'page': page, 'sas_id': sas_id, 'count': count})
+
+
 # set a filter value in the session, used later by the 'get_searched_tasks' mechanism
 def TaskSetFilter(request, filter, redirect_to_page):
     request.session['task_filter'] = filter