diff --git a/hypha/apply/determinations/views.py b/hypha/apply/determinations/views.py
index 07822297438dcdd372b3dc854b69f9c5302b86e4..1d5b3ac3271d352b52e7a751cd92c0c954e1534d 100644
--- a/hypha/apply/determinations/views.py
+++ b/hypha/apply/determinations/views.py
@@ -20,8 +20,9 @@ from hypha.apply.activity.models import Activity
 from hypha.apply.funds.models import ApplicationSubmission
 from hypha.apply.funds.workflow import DETERMINATION_OUTCOMES, Concept
 from hypha.apply.projects.models import Project
+from hypha.apply.review.models import Review
 from hypha.apply.stream_forms.models import BaseStreamForm
-from hypha.apply.todo.options import DETERMINATION_DRAFT
+from hypha.apply.todo.options import DETERMINATION_DRAFT, REVIEW_DRAFT
 from hypha.apply.todo.views import (
     add_task_to_user,
     remove_tasks_for_user,
@@ -481,6 +482,14 @@ class DeterminationCreateOrUpdateView(BaseStreamForm, CreateOrUpdateView):
             code=DETERMINATION_DRAFT, related_obj=self.object
         )
 
+        # remove all review draft tasks for the submission's draft reviews
+        for review in Review.objects.filter(
+            submission=self.object.submission, is_draft=True
+        ):
+            remove_tasks_of_related_obj_for_specific_code(
+                code=REVIEW_DRAFT, related_obj=review
+            )
+
         messenger(
             MESSAGES.DETERMINATION_OUTCOME,
             request=self.request,
diff --git a/hypha/apply/review/views.py b/hypha/apply/review/views.py
index 15e2ff8f758be089f81092901394f9819d67c06d..1b065e392882b51368c885d856db18c97a689293 100644
--- a/hypha/apply/review/views.py
+++ b/hypha/apply/review/views.py
@@ -23,6 +23,8 @@ from hypha.apply.funds.workflow import INITIAL_STATE
 from hypha.apply.review.blocks import RecommendationBlock, RecommendationCommentsBlock
 from hypha.apply.review.forms import ReviewModelForm, ReviewOpinionForm
 from hypha.apply.stream_forms.models import BaseStreamForm
+from hypha.apply.todo.options import REVIEW_DRAFT
+from hypha.apply.todo.views import add_task_to_user, remove_tasks_for_user
 from hypha.apply.users.decorators import staff_required
 from hypha.apply.utils.image import generate_image_tag
 from hypha.apply.utils.views import CreateOrUpdateView
@@ -168,7 +170,17 @@ class ReviewCreateOrUpdateView(BaseStreamForm, CreateOrUpdateView):
 
         response = super().form_valid(form)
 
+        if self.object.is_draft:
+            if self.request.user.is_apply_staff:
+                add_task_to_user(
+                    code=REVIEW_DRAFT, user=self.request.user, related_obj=self.object
+                )
+
         if not self.object.is_draft:
+            if self.request.user.is_apply_staff:
+                remove_tasks_for_user(
+                    code=REVIEW_DRAFT, user=self.request.user, related_obj=self.object
+                )
             messenger(
                 MESSAGES.NEW_REVIEW,
                 request=self.request,
diff --git a/hypha/apply/todo/migrations/0003_alter_task_code.py b/hypha/apply/todo/migrations/0003_alter_task_code.py
new file mode 100644
index 0000000000000000000000000000000000000000..22d3f0f6811158db780a54143811fc128937bcb9
--- /dev/null
+++ b/hypha/apply/todo/migrations/0003_alter_task_code.py
@@ -0,0 +1,42 @@
+# Generated by Django 4.2.11 on 2024-04-24 09:00
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+    dependencies = [
+        ("todo", "0002_alter_task_code"),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name="task",
+            name="code",
+            field=models.CharField(
+                choices=[
+                    ("determination_draft", "Determination draft"),
+                    ("review_draft", "Review Draft"),
+                    ("project_waiting_paf", "Project waiting PAF"),
+                    ("project_submit_paf", "Project submit PAF"),
+                    ("paf_required_changes", "PAF required changes"),
+                    ("paf_waiting_assignee", "PAF waiting assignee"),
+                    ("paf_waiting_approval", "PAF waiting approval"),
+                    ("project_waiting_contract", "Project waiting contract"),
+                    (
+                        "project_waiting_contract_document",
+                        "Project waiting contract document",
+                    ),
+                    (
+                        "project_waiting_contract_review",
+                        "Project waiting contract review",
+                    ),
+                    ("project_waiting_invoice", "Project waiting invoice"),
+                    ("invoice_required_changes", "Invoice required changes"),
+                    ("invoice_waiting_approval", "Invoice waiting approval"),
+                    ("invoice_waiting_paid", "Invoice waiting paid"),
+                    ("report_due", "Report due"),
+                ],
+                max_length=50,
+            ),
+        ),
+    ]
diff --git a/hypha/apply/todo/options.py b/hypha/apply/todo/options.py
index d97d5b077409ad84e85d922b3a90c7f2e0dfcc53..6d754d284acd1eb578b3dab92e3e76b08a05dffc 100644
--- a/hypha/apply/todo/options.py
+++ b/hypha/apply/todo/options.py
@@ -5,6 +5,7 @@ from django.utils.translation import gettext as _
 from hypha.apply.activity.adapters.utils import link_to
 
 DETERMINATION_DRAFT = "determination_draft"
+REVIEW_DRAFT = "review_draft"
 PROJECT_WAITING_PAF = "project_waiting_paf"
 PROJECT_SUBMIT_PAF = "project_submit_paf"
 PAF_REQUIRED_CHANGES = "paf_required_changes"
@@ -21,6 +22,7 @@ REPORT_DUE = "report_due"
 
 TASKS_CODE_CHOICES = (
     (DETERMINATION_DRAFT, "Determination draft"),
+    (REVIEW_DRAFT, "Review Draft"),
     (PROJECT_WAITING_PAF, "Project waiting PAF"),
     (PROJECT_SUBMIT_PAF, "Project submit PAF"),
     (PAF_REQUIRED_CHANGES, "PAF required changes"),
@@ -42,7 +44,15 @@ template_map = {
     # :todo: actions for mupltiple stages of submission
     DETERMINATION_DRAFT: {
         "text": _(
-            'Determination draft for submission [<span class=" truncate inline-block w-32 align-bottom ">{related.submission.title}</span>]({link} "{related.submission.title}") is waiting to be submitted'
+            'Determination draft for submission [<span class=" truncate inline-block max-w-32 align-bottom ">{related.submission.title}</span>]({link} "{related.submission.title}") is waiting to be submitted',
+        ),
+        "icon": "edit-draft",
+        "url": "{link}",
+        "type": _("Draft"),
+    },
+    REVIEW_DRAFT: {
+        "text": _(
+            'Review draft for submission [<span class=" truncate inline-block max-w-32 align-bottom ">{related.submission.title}</span>]({link} "{related.submission.title}") is waiting to be submitted'
         ),
         "icon": "edit-draft",
         "url": "{link}",