diff --git a/opentech/apply/funds/views.py b/opentech/apply/funds/views.py
index 67d504a0ff2eb369940586ed130e7571d769bc8f..804c49e417d08d138bf2645674826ecea6d3ccf8 100644
--- a/opentech/apply/funds/views.py
+++ b/opentech/apply/funds/views.py
@@ -494,14 +494,17 @@ class ApplicantSubmissionEditView(BaseSubmissionEditView):
             )
 
         action = set(self.request.POST.keys()) & set(self.transitions.keys())
-        transition = self.transitions[action.pop()]
-
-        self.object.perform_transition(
-            transition.target,
-            self.request.user,
-            request=self.request,
-            notify=not (revision or submitting_proposal),  # Use the other notification
-        )
+        try:
+            transition = self.transitions[action.pop()]
+        except KeyError:
+            pass
+        else:
+            self.object.perform_transition(
+                transition.target,
+                self.request.user,
+                request=self.request,
+                notify=not (revision or submitting_proposal),  # Use the other notification
+            )
 
         return HttpResponseRedirect(self.get_success_url())
 
diff --git a/opentech/apply/funds/workflow.py b/opentech/apply/funds/workflow.py
index d73bc300e5da1572428ddfc92e2ad306602ca66b..c3d5e450efdd2e344a1e07753dd40b75fa47c876 100644
--- a/opentech/apply/funds/workflow.py
+++ b/opentech/apply/funds/workflow.py
@@ -160,6 +160,8 @@ reviewer_review_permissions = make_permissions(edit=[staff_can], review=[staff_c
 
 applicant_edit_permissions = make_permissions(edit=[applicant_can], review=[staff_can])
 
+staff_applicant_edit_permissions = make_permissions(edit=[staff_can, applicant_can])
+
 staff_edit_permissions = make_permissions(edit=[staff_can])
 
 
@@ -260,7 +262,7 @@ SingleStageDefinition = [
             'display': 'Accepted',
             'future': 'Application Outcome',
             'stage': Request,
-            'permissions': staff_edit_permissions,
+            'permissions': staff_applicant_edit_permissions,
         },
         'rejected': {
             'display': 'Dismissed',
@@ -384,7 +386,7 @@ SingleStageExternalDefinition = [
             'display': 'Accepted',
             'future': 'Application Outcome',
             'stage': RequestExt,
-            'permissions': staff_edit_permissions,
+            'permissions': staff_applicant_edit_permissions,
         },
         'ext_rejected': {
             'display': 'Dismissed',
@@ -626,7 +628,7 @@ DoubleStageDefinition = [
             'display': 'Accepted',
             'future': 'Final Determination',
             'stage': Proposal,
-            'permissions': staff_edit_permissions,
+            'permissions': staff_applicant_edit_permissions,
         },
         'proposal_rejected': {
             'display': 'Dismissed',