diff --git a/opentech/apply/determinations/views.py b/opentech/apply/determinations/views.py
index 1ddde512d082ccd864f048d8b87691fc35a76dd8..2df3255cd1028443dcdc97855a94502219b8a7a9 100644
--- a/opentech/apply/determinations/views.py
+++ b/opentech/apply/determinations/views.py
@@ -5,6 +5,7 @@ from django.shortcuts import get_object_or_404
 from django.urls import reverse_lazy
 from django.utils.decorators import method_decorator
 from django.views.generic import DetailView
+from django_fsm import can_proceed
 
 from opentech.apply.funds.models import ApplicationSubmission
 from opentech.apply.utils.views import CreateOrUpdateView
@@ -82,11 +83,12 @@ class DeterminationCreateOrUpdateView(CreateOrUpdateView):
         return self.progress_stage(self.submission) or response
 
     def progress_stage(self, instance):
-        try:
-            instance.perform_transition('draft_proposal', self.request.user)
-        except PermissionDenied:
-            pass
-        else:
+        # TODO update post-revisions work
+        proposal_transition = instance.get_transition('draft_proposal')
+        if proposal_transition:
+            if can_proceed(proposal_transition):
+                proposal_transition(by=self.request.user)
+                instance.save()
             return HttpResponseRedirect(instance.get_absolute_url())
 
     def get_action_name_from_determination(self, determination):