diff --git a/opentech/apply/activity/messaging.py b/opentech/apply/activity/messaging.py
index 4b70452923bb21f9b23d318908de04a9fa65c7c2..0561bfeb82e84f91032ed7641e502f9ef4416746 100644
--- a/opentech/apply/activity/messaging.py
+++ b/opentech/apply/activity/messaging.py
@@ -15,6 +15,7 @@ def link_to(target, request):
 
 class MESSAGES(Enum):
     UPDATE_LEAD = 'Update Lead'
+    EDIT = 'Edit'
     NEW_SUBMISSION = 'New Submission'
     TRANSITION = 'Transition'
     DETERMINATION_OUTCOME = 'Determination Outcome'
@@ -107,6 +108,7 @@ class ActivityAdapter(AdapterBase):
     messages = {
         MESSAGES.TRANSITION: 'Progressed from {old_phase.display_name} to {submission.phase}',
         MESSAGES.NEW_SUBMISSION: 'Submitted {submission.title} for {submission.page.title}',
+        MESSAGES.EDIT: '{user} edited',
         MESSAGES.UPDATE_LEAD: 'Lead changed from {old.lead} to {submission.lead}',
         MESSAGES.DETERMINATION_OUTCOME: 'Sent a determination. Outcome: {submission.determination.clean_outcome}',
         MESSAGES.INVITED_TO_PROPOSAL: 'Invited to submit a proposal',
@@ -154,6 +156,7 @@ class SlackAdapter(AdapterBase):
         MESSAGES.NEW_SUBMISSION: 'A new submission has been submitted for {submission.page.title}: <{link}|{submission.title}>',
         MESSAGES.UPDATE_LEAD: 'The lead of <{link}|{submission.title}> has been updated from {old.lead} to {submission.lead} by {user}',
         MESSAGES.COMMENT: 'A new comment has been posted on <{link}|{submission.title}>',
+        MESSAGES.EDIT: '{user} has edited <{link}|{submission.title}>',
         MESSAGES.REVIEWERS_UPDATED: '{user} has updated the reviewers on <{link}|{submission.title}>',
         MESSAGES.TRANSITION: '{user} has updated the status of <{link}|{submission.title}>: {old_phase.display_name} → {submission.phase}',
         MESSAGES.DETERMINATION_OUTCOME: 'A determination for <{link}|{submission.title}> was sent by email. Outcome: {submission.determination.clean_outcome}',
@@ -226,6 +229,7 @@ class EmailAdapter(AdapterBase):
     messages = {
         MESSAGES.NEW_SUBMISSION: 'funds/email/confirmation.html',
         MESSAGES.COMMENT: 'notify_comment',
+        MESSAGES.EDIT: 'messages/email/edit.html',
         MESSAGES.TRANSITION: 'messages/email/transition.html',
         MESSAGES.DETERMINATION_OUTCOME: 'messages/email/determination.html',
         MESSAGES.INVITED_TO_PROPOSAL: 'messages/email/invited_to_proposal.html',
diff --git a/opentech/apply/activity/templates/messages/email/edit.html b/opentech/apply/activity/templates/messages/email/edit.html
new file mode 100644
index 0000000000000000000000000000000000000000..c93d54cbb0b7a119a8cc78296bb8e6ef0e059ec3
--- /dev/null
+++ b/opentech/apply/activity/templates/messages/email/edit.html
@@ -0,0 +1,5 @@
+{% extends "messages/email/applicant_base.html" %}
+
+{% block content %}
+Your submission has been edited by a member of staff.
+{% endblock %}
diff --git a/opentech/apply/funds/templates/funds/applicationsubmission_form.html b/opentech/apply/funds/templates/funds/applicationsubmission_form.html
index bd994fa916fd4bd2b56c267541babcffa7aa3c8f..066afaeba8b8826abc513d8fbfcc937b1749d214 100644
--- a/opentech/apply/funds/templates/funds/applicationsubmission_form.html
+++ b/opentech/apply/funds/templates/funds/applicationsubmission_form.html
@@ -34,8 +34,8 @@
                     {{ field }}
                 {% endif %}
             {% endfor %}
-            {% for button_name, button_value in buttons %}
-                <input class="button button--primary" type="submit" name="{{ button_name }}" value="{{ button_value }}" />
+            {% for button_name, button_type, button_value in buttons %}
+                <input class="button button--{{ button_type }}" type="submit" name="{{ button_name }}" value="{{ button_value }}" />
             {% endfor %}
         </form>
     </div>
diff --git a/opentech/apply/funds/views.py b/opentech/apply/funds/views.py
index 8c0e2f5fc91767a46f2a34a847b4fe47a953f283..22016dd49b89abd4958f9a8ea481cafb3bdd0311 100644
--- a/opentech/apply/funds/views.py
+++ b/opentech/apply/funds/views.py
@@ -271,8 +271,8 @@ class SubmissionEditView(UpdateView):
         }
 
     def buttons(self):
-        yield ('save', 'Save')
-        yield from ((transition, transition.title) for transition in self.transitions)
+        yield ('save', 'white', 'Save')
+        yield ('submit', 'primary', 'Submit')
 
     def get_form_kwargs(self):
         kwargs = super().get_form_kwargs()
@@ -293,13 +293,24 @@ class SubmissionEditView(UpdateView):
             self.object.create_revision(draft=True, by=self.request.user)
             return self.form_invalid(form)
 
-        action = set(self.request.POST.keys()) & set(self.transitions.keys())
+        if 'submit' in self.request.POST and self.request.user.is_staff:
+            self.object.create_revision(by=self.request.user)
+            messenger(
+                MESSAGES.EDIT,
+                request=self.request,
+                user=self.request.user,
+                submission=self.object,
+            )
+        else:
+            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)
+            transition = self.transitions[action.pop()]
+            self.object.perform_transition(transition.target, self.request.user, request=self.request)
 
         return HttpResponseRedirect(self.get_success_url())
 
+    # def get_success_url(self):
+
 
 @method_decorator(staff_required, name='dispatch')
 class RevisionListView(ListView):