diff --git a/opentech/apply/funds/models/mixins.py b/opentech/apply/funds/models/mixins.py
index 6792c477a71a1e65c31de90fd20a9876396927bc..178a102ae5c71c759a8a58caba1bf0ee11c595aa 100644
--- a/opentech/apply/funds/models/mixins.py
+++ b/opentech/apply/funds/models/mixins.py
@@ -4,7 +4,7 @@ from django.core.files import File
 from django.core.files.storage import get_storage_class
 
 from opentech.apply.stream_forms.blocks import FormFieldBlock
-from opentech.apply.utils.blocks import MustIncludeFieldBlock
+from opentech.apply.utils.blocks import SingleIncludeMixin
 
 from opentech.apply.stream_forms.blocks import UploadableMediaBlock
 from opentech.apply.stream_forms.files import StreamFieldFile
@@ -16,6 +16,10 @@ __all__ = ['AccessFormData']
 submission_storage = get_storage_class(getattr(settings, 'PRIVATE_FILE_STORAGE', None))()
 
 
+class UnusedFieldException(Exception):
+    pass
+
+
 class AccessFormData:
     """Mixin for interacting with form data from streamfields
 
@@ -84,7 +88,10 @@ class AccessFormData:
 
     def field(self, id):
         definitive_id = self.get_definitive_id(id)
-        return self.raw_fields[definitive_id]
+        try:
+            return self.raw_fields[definitive_id]
+        except KeyError:
+            raise UnusedFieldException(id) from None
 
     def data(self, id):
         definitive_id = self.get_definitive_id(id)
@@ -126,7 +133,10 @@ class AccessFormData:
         }
 
     def render_answer(self, field_id, include_question=False):
-        field = self.field(field_id)
+        try:
+            field = self.field(field_id)
+        except UnusedFieldException:
+            return None
         data = self.data(field_id)
         return field.render(context={'data': data, 'include_question': include_question})
 
diff --git a/opentech/apply/funds/tests/test_views.py b/opentech/apply/funds/tests/test_views.py
index b255510b2c94a5d1d2a6da003c99c2d8fc3507c0..62c1c7928e19ee032c3145562016a34399935c98 100644
--- a/opentech/apply/funds/tests/test_views.py
+++ b/opentech/apply/funds/tests/test_views.py
@@ -175,6 +175,11 @@ class TestStaffSubmissionView(BaseSubmissionViewTestCase):
         self.assertEqual(old_status, submission.status)
         self.assertEqual(new_title, submission.title)
 
+    def test_not_included_fields_render(self):
+        submission = ApplicationSubmissionFactory(form_fields__exclude__value=True)
+        response = self.get_page(submission)
+        self.assertNotContains(response, 'Value')
+
 
 class TestReviewersUpdateView(BaseSubmissionViewTestCase):
     user_factory = StaffFactory
diff --git a/opentech/apply/stream_forms/blocks.py b/opentech/apply/stream_forms/blocks.py
index 72ca5028140a6859712f63b90b8038110bc4a0e8..707f480ca598efd6794178635243a2e5332335b6 100644
--- a/opentech/apply/stream_forms/blocks.py
+++ b/opentech/apply/stream_forms/blocks.py
@@ -68,9 +68,6 @@ class FormFieldBlock(StructBlock):
 class OptionalFormFieldBlock(FormFieldBlock):
     required = BooleanBlock(label=_('Required'), required=False)
 
-    def get_searchable_content(self, value, data):
-        return data
-
 
 CHARFIELD_FORMATS = [
     ('email', _('Email')),
diff --git a/opentech/apply/stream_forms/testing/factories.py b/opentech/apply/stream_forms/testing/factories.py
index b60588aef0a00318fc67b126b3e50cedbb2ae843..902ba4ce90239e439023ae722f12e5ca5079e6d1 100644
--- a/opentech/apply/stream_forms/testing/factories.py
+++ b/opentech/apply/stream_forms/testing/factories.py
@@ -56,7 +56,13 @@ class FormDataFactory(factory.Factory, metaclass=AddFormFieldsMetaclass):
 
         form_data = {}
         for name, answer in kwargs.items():
-            form_data[form_definition[name]] = answer
+            try:
+                key = form_definition[name]
+            except KeyError:
+                # We are not using that field - don't add the submission data
+                pass
+            else:
+                form_data[key] = answer
 
         if clean:
             clean_object = for_factory()