diff --git a/opentech/apply/activity/messaging.py b/opentech/apply/activity/messaging.py
index 5e0f88023248b4f876e43ef348fd58617c47e7dc..580b98fa1305d3d115a95a491dd3c55c11c82281 100644
--- a/opentech/apply/activity/messaging.py
+++ b/opentech/apply/activity/messaging.py
@@ -40,6 +40,14 @@ class AdapterBase:
         raise NotImplementedError()
 
 
+class MessageAdapter(AdapterBase):
+    messages = {
+        enum: enum.value
+        for enum in MESSAGES.__members__.values()
+    }
+
+    def send_message(self, message, **kwargs):
+        messages.add_message(kwargs['request'], messages.INFO, message)
 
 
 class ActivityAdapter(AdapterBase):
@@ -75,10 +83,13 @@ class ActivityAdapter(AdapterBase):
 
 
 class MessengerBackend:
-    adapters = [ActivityAdapter()]
+    adapters = [
+        ActivityAdapter(),
+        MessageAdapter(),
+    ]
 
-    def __call__(self, message_type, user, submission, **kwargs):
-        return self.send(message_type, user=user, submission=submission, **kwargs)
+    def __call__(self, message_type, request, user, submission, **kwargs):
+        return self.send(message_type, request=request, user=user, submission=submission, **kwargs)
 
     def send(self, message_type, **kwargs):
         for adapter in self.adapters:
diff --git a/opentech/apply/funds/views.py b/opentech/apply/funds/views.py
index 07eff41865a58de26b4f907377310e14f2519d48..41c970d7b71e8cb9488554d80effac363b129e44 100644
--- a/opentech/apply/funds/views.py
+++ b/opentech/apply/funds/views.py
@@ -100,6 +100,7 @@ class UpdateLeadView(DelegatedViewMixin, UpdateView):
         response = super().form_valid(form)
         messenger(
             MESSAGES.UPDATE_LEAD,
+            request=self.request,
             user=self.request.user,
             submission=form.instance,
             old=old,
diff --git a/opentech/static_src/src/sass/apply/components/_messages.scss b/opentech/static_src/src/sass/apply/components/_messages.scss
new file mode 100644
index 0000000000000000000000000000000000000000..d4432782ccd458501c5cbc6b4c9e0f29cdb3502b
--- /dev/null
+++ b/opentech/static_src/src/sass/apply/components/_messages.scss
@@ -0,0 +1,11 @@
+.messages {
+
+    &__text {
+        padding: 10px;
+
+        &-info {
+            background: $color--pastel-green;
+            border: solid 1px darken($color--pastel-green, 20%);
+        }
+    }
+}
diff --git a/opentech/static_src/src/sass/apply/main.scss b/opentech/static_src/src/sass/apply/main.scss
index 3f122dd07cd6dfbe816c097559da8ee0477f5b99..ee6fea8b3633d4363fad6d7ec2fc1d48b345d23b 100755
--- a/opentech/static_src/src/sass/apply/main.scss
+++ b/opentech/static_src/src/sass/apply/main.scss
@@ -44,6 +44,7 @@
 @import 'components/traffic-light';
 @import 'components/wrapper';
 @import 'components/revisions';
+@import 'components/messages';
 
 // Layout
 @import 'layout/header';
diff --git a/opentech/templates/base-apply.html b/opentech/templates/base-apply.html
index a2f3f51fd446a68913a1a0179c18c48479be3af9..4fabf4f6896c544cb7afc4a59db64b94b33d86c2 100644
--- a/opentech/templates/base-apply.html
+++ b/opentech/templates/base-apply.html
@@ -33,6 +33,14 @@
     <body class="{% block body_class %}light-grey-bg template-{{ page.get_verbose_name|slugify }}{% endblock %}">
         {% hijack_notification %}
 
+        {% if messages %}
+            <ul class="messages">
+                {% for message in messages %}
+                    <li class="messages__text{% if message.tags %} messages__text-{{ message.tags }}"{% endif %}>{{ message }}</li>
+                {% endfor %}
+            </ul>
+        {% endif %}
+
         {% if GOOGLE_TAG_MANAGER_ID %}
             {# To enable GTM code you need to specify GOOGLE_TAG_MANAGER_ID in production.py or in local.py #}
             <!-- Google Tag Manager (noscript) -->