diff --git a/addressfield/fields.py b/addressfield/fields.py
index 0f60152791094287929b4b9b3301d2e055fc9767..32c0c725bf7f41eaae170749de44c675a94f3fd2 100644
--- a/addressfield/fields.py
+++ b/addressfield/fields.py
@@ -28,6 +28,10 @@ def flatten_data(data):
 
 
 class AddressField(forms.CharField):
+    """
+    The field stores the address in a flattened form,
+    so the locality components are on the same level as country or premise
+    """
     widget = AddressWidget
     data = VALIDATION_DATA
 
diff --git a/opentech/apply/funds/management/commands/migrate_rr_applications.py b/opentech/apply/funds/management/commands/migrate_rr_applications.py
new file mode 100644
index 0000000000000000000000000000000000000000..9cea0fc6068af26d02ce81c4efda4a75503908b5
--- /dev/null
+++ b/opentech/apply/funds/management/commands/migrate_rr_applications.py
@@ -0,0 +1,372 @@
+import argparse
+import json
+
+from datetime import datetime, timezone
+
+from django.contrib.auth import get_user_model
+from django.core.management.base import BaseCommand
+from django.db import transaction
+from django.db.utils import IntegrityError
+
+from opentech.apply.categories.models import Category, Option
+from opentech.apply.categories.categories_seed import CATEGORIES
+from opentech.apply.funds.models import ApplicationSubmission, FundType, Round, RoundForm
+
+User = get_user_model()
+
+STREAMFIELD_MAP = {
+    "title": {
+        "id": "title",
+        "type": "direct",
+    },
+    "field_application_name": {
+        "id": "full_name",
+        "type": "value",
+        # If no Drupal value key is specified, we default to 'value'
+        "key": "safe_value",
+    },
+    "field_application_mail": {
+        "id": "email",
+        "type": "value",
+        "key": "email",
+    },
+    "field_application_preapplied": {
+        "id": "49a0f5f4-e8e9-4dfc-8575-205ee9675032",
+        "type": "map",
+        "map": {
+            "0": "No",
+            "1": "Yes",
+        },
+    },
+    "field_application_apply_for": {
+        "id": "c1277029-1718-40e3-8bf5-d80ece7fd343",
+        "type": "map",
+        "map": {
+            "direct": "Direct funding",
+            "receive": "Requesting to receive services",
+            "provide": "Requesting to provide services",
+        },
+    },
+    "field_application_amount": {
+        "id": "value",
+        "type": "value",
+    },
+    "field_application_amount_text": {
+        "id": "value",
+        "type": "value",
+    },
+    "field_application_service": {
+        "id": "ebdf9a22-58c7-4bd6-a58d-e71363357470",
+        "type": "map",
+        "map": {
+            "audit": "Audit of presumably compromised websites",
+            "ddos": "DDoS response and mitigation",
+            "hosting": "Secure web hosting",
+            "hostingevents": "Secure hosting for monitoring and resiliency of websites during special events (elections, campaigns etc.)",
+            "vpn": "VPN connections",
+            "isp": "Safe internet connections",
+            "analysis": "Forensic analysis of digital attacks",
+            "recovery": "Recovery of compromised websites",
+            "malware": "Malware analysis",
+            "equipment": "Equipment replacements (unavailable)",
+            "legalhelp": "Finding legal representation (unavailable)",
+            "legalfees": "Payment of legal fees (unavailable)",
+        },
+    },
+    "field_application_service_other": {
+        "id": "c8c329c7-78e4-4cbf-a3b1-77a1324e92ff",
+        "type": "value",
+        "key": "safe_value",
+    },
+    "field_application_duration3": {
+        "id": "806d401c-b52c-46f7-9e96-f36fa70f53d8",
+        "type": "map",
+        "map": {
+            "1": "1 month",
+            "2": "2 months",
+            "3": "3 months",
+            "4": "4 months",
+            "5": "5 months",
+            "6": "6 months",
+        },
+    },
+    "field_application_who": {
+        "id": "1ec16cdc-7a68-40be-b17b-9a218def4260",
+        "type": "value",
+        "key": "safe_value",
+    },
+    "field_application_how": {
+        "id": "4fa2ac11-d1cd-4d23-8082-93a14c8f99c8",
+        "type": "value",
+        "key": "safe_value",
+    },
+    "field_application_sustainability": {
+        "id": "3cde39ae-b687-4c4f-b58b-849396c2fdb8",
+        "type": "value",
+        "key": "safe_value",
+    },
+    "field_application_dates": {
+        "id": "0b2a4653-b390-44a6-b92e-fae4647e7ec4",
+        "type": "value",
+        "key": "safe_value",
+    },
+    "field_application_why": {
+        "id": "6d75e412-cf53-4833-9f1d-3e0126512fb9",
+        "type": "value",
+        "key": "safe_value",
+    },
+    "field_application_why_rapiid": {
+        "id": "1b181d1e-ef91-41af-b9c1-d096a991314b",
+        "type": "value",
+        "key": "safe_value",
+    },
+    "field_application_focus": {
+        "id": "efd91eaf-378f-4aab-96cb-c5601155cbee",
+        "type": "category",
+        "key": "tid",
+    },
+    "field_application_objectives": {
+        "id": "4be0c7bd-231d-4d9f-bd47-8589fc005f54",
+        "type": "category",
+        "key": "tid",
+    },
+    "field_application_beneficiaries": {
+        "id": "6e0293ee-218e-4c3b-b82d-5bf91fdb21c9",
+        "type": "category",
+        "key": "tid",
+    },
+    "field_term_region": {
+        "id": "6ff029c6-c6d1-4c37-a49a-46181b1cd33d",
+        "type": "category",
+        "key": "tid",
+    },
+    "field_application_problems": {
+        "id": "7fb1001e-d458-414f-a5bb-006db6f89baf",
+        "type": "category",
+        "key": "tid",
+    },
+    "field_application_budget": {
+        "id": "45d7d38a-9c9d-4c43-98df-bb95d4a1dd77",
+        "type": "value",
+        "key": "safe_value",
+    },
+    "field_application_legal_name": {
+        "id": "632065c5-860f-4751-9b31-52914d7c6448",
+        "type": "value",
+        "key": "safe_value",
+    },
+    "field_application_contact": {
+        "id": "13bb0d64-65f3-4340-8e7e-e5da80d706d5",
+        "type": "value",
+        "key": "safe_value",
+    },
+    "field_application_phone": {
+        "id": "2cb9fe4b-df45-4181-80e5-14382f853081",
+        "type": "value",
+        "key": "safe_value",
+    },
+    "field_application_address": {
+        "id": "bd29eb88-9754-4305-9b2d-406a875ec56a",
+        "type": "address",
+        "map": {
+            "administrative_area": "administrative_area",
+            "country": "country",
+            "locality": "locality_name",
+            "postal_code": "postal_code",
+            "thoroughfare": "thoroughfare",
+            "premise": "premise",
+        }
+    },
+    "field_application_otf_mission": {
+        "id": "e695f0d7-4c74-4cc6-853f-bd62ecd19d3d",
+        "type": "boolean",
+    },
+    "field_application_otf_tos": {
+        "id": "f40d1acc-d802-4cc6-b0e9-fff78dc54223",
+        "type": "boolean",
+    },
+    "field_application_otf_represent": {
+        "id": "0b3c0827-38e2-439b-bca5-735835af1019",
+        "type": "boolean",
+    },
+    "field_application_otf_license": {
+        "id": "bc9c960e-a6f4-4bc2-b626-efb5bc5552c6",
+        "type": "boolean",
+    },
+    "field_application_otf_complete": {
+        "id": "5812b66d-630e-4ca2-8bea-819084278f55",
+        "type": "boolean",
+    },
+    "field_application_otf_deadline": {
+        "id": "97d3746c-cf0f-449a-b3a3-7a9cdd45cc6d",
+        "type": "boolean",
+    },
+    "field_application_otf_list": {
+        "id": "fc3d2a87-1151-418b-b1cd-9289f00bde35",
+        "type": "boolean",
+    },
+    "field_application_otf_newsletter": {
+        "id": "83ecc69a-f47c-495e-bc8f-326e55aed67a",
+        "type": "boolean",
+    },
+    "field_concept_upload": {
+        "id": "607daeba-1f33-4ad0-b135-eda743ba8e3a",
+        "type": "file",
+        # TODO: finish mapping
+    },
+}
+
+FUND = FundType.objects.get(title='Rapid Response')
+ROUND = Round.objects.get(title='Rapid Response open round')
+FORM = RoundForm.objects.get(round=ROUND)
+
+
+class Command(BaseCommand):
+    help = "Rapid response migration script. Requires a source JSON file."
+    data = []
+    terms = {}
+
+    def add_arguments(self, parser):
+        parser.add_argument('source', type=argparse.FileType('r'), help='Migration source JSON file')
+
+    @transaction.atomic
+    def handle(self, *args, **options):
+        # Prepare the list of categories.
+        for item in CATEGORIES:
+            category, _ = Category.objects.get_or_create(name=item['category'])
+            option, _ = Option.objects.get_or_create(value=item['name'], category=category)
+            self.terms[item['tid']] = option
+
+        with options['source'] as json_data:
+            self.data = json.load(json_data)
+
+            for id in self.data:
+                self.process(id)
+
+    def process(self, id):
+        node = self.data[id]
+
+        try:
+            submission = ApplicationSubmission.objects.get(drupal_id=node['nid'])
+        except ApplicationSubmission.DoesNotExist:
+            submission = ApplicationSubmission(drupal_id=node['nid'])
+
+        # TODO timezone?
+        submission.submit_time = datetime.fromtimestamp(int(node['created']), timezone.utc)
+        submission.user = self.get_user(node['uid'])
+
+        submission.page = FUND
+        submission.round = ROUND
+        submission.form_fields = FORM.form.form_fields
+
+        submission.status = self.get_workflow_state(node)
+
+        form_data = {
+            'skip_account_creation_notification': True,
+        }
+
+        # Only allow one of application amount or application amount text
+        if not node['field_application_amount']:
+            node.pop('field_application_amount', None)
+
+        for field in node:
+            if field in STREAMFIELD_MAP:
+                try:
+                    id = STREAMFIELD_MAP[field]['id']
+                    form_data[id] = self.get_field_value(field, node)
+                except TypeError:
+                    pass
+
+        submission.form_data = form_data
+
+        try:
+            submission.save()
+            self.stdout.write(f"Processed \"{node['title']}\" ({node['nid']})")
+        except IntegrityError:
+            pass
+
+    def get_user(self, uid):
+        try:
+            return User.objects.get(drupal_id=uid)
+        finally:
+            return None
+
+    def get_field_value(self, field, node):
+        """
+        Handles the following formats:
+        field: {(safe_)value: VALUE}
+        field: {target_id: ID} -- Drupal ForeignKey. Reference to other node or user entities.
+        field: {tid: ID} -- or term ID. fk to Categories
+        field: []
+        field: [{value|target_id|tid: VALUE},]
+        """
+        mapping = STREAMFIELD_MAP[field]
+        mapping_type = mapping['type']
+        key = mapping.get('key', 'value')
+        source_value = node[field]
+        value = None
+
+        if mapping_type == "direct":
+            value = source_value
+        elif mapping_type == 'value':
+            value = self.nl2br(source_value[key]) if source_value else ''
+        elif mapping_type == 'map' and 'map' in 'mapping':
+            value = mapping['map'].get(source_value[key])
+        elif mapping_type == 'address' and 'map' in mapping:
+            try:
+                value_map = mapping['map']
+                value = {}
+                for item in value_map:
+                    value[value_map[item]] = source_value[item]
+            except TypeError:
+                value = {}
+        elif mapping_type == 'boolean':
+            value = source_value[key] == '1' if source_value else False
+        elif mapping_type == 'category':
+            if not source_value:
+                value = []
+            else:
+                if isinstance(source_value, dict):
+                    option = self.get_referenced_term(source_value[key])
+                    value = [option] if option else []
+                else:
+                    value = []
+                    for item in source_value:
+                        option = self.get_referenced_term(item[key])
+                        if option:
+                            value.append(option)
+        elif mapping_type == 'file':
+            # TODO finish mapping. Requires access to the files.
+            value = {}
+
+        return value
+
+    def get_referenced_term(self, tid):
+        try:
+            term = self.terms[tid]
+            return term.id
+        except KeyError:
+            return None
+
+    def get_referenced_node(self, nid):
+        pass
+
+    def get_workflow_state(self, node):
+        """
+        workbench_moderation: {'current': {'state': STATE, 'timestamp': TS}}
+        """
+        states = {
+            "draft": "Request__internal-review__0",
+            "in_discussion": "Request__under-discussion__2",
+            "dropped": "Request__rejected__3",
+            "dropped_concept_note": "Request__rejected__3",
+            "dropped_without_review": "Request__rejected__3",
+            "published": "Request__accepted__3",
+            "invited_for_proposal": "Request__accepted__3",
+            "in_contract": "Request__accepted__3"
+        }
+
+        return states.get(node['workbench_moderation']['current']['state'], "Internal Review")
+
+    def nl2br(self, value):
+        return value.replace('\r\n', '<br>\n')
diff --git a/opentech/apply/funds/management/commands/seed_rapid_response.py b/opentech/apply/funds/management/commands/seed_rapid_response.py
index 07d9fdeda90c274052fa325c5ecb216fc00d852e..a872207d68a0f90490a932d98a4fbfeaa3054100 100644
--- a/opentech/apply/funds/management/commands/seed_rapid_response.py
+++ b/opentech/apply/funds/management/commands/seed_rapid_response.py
@@ -37,48 +37,48 @@ class Command(BaseCommand):
         addressed_id = Category.objects.get(name='Addressed problems').id
 
         data = [
-            {"type": "text_markup", "value": "<h3>Basic information</h3>"},
-            {"type": "title", "value": {"field_label": "What is your project name?", "help_text": "", "info": None}},
-            {"type": "full_name", "value": {"field_label": "Your name", "help_text": "", "info": None}},
-            {"type": "email", "value": {"field_label": "E-mail", "help_text": "", "info": None}},
-            {"type": "dropdown", "value": {"field_label": "Have you ever applied to or received funding as an OTF project or fellow?", "help_text": "", "required": "true", "choices": ["Yes", "No"]}},
-            {"type": "text_markup", "value": "<h3>More information about your project</h3>"},
-            {"type": "radios", "value": {"field_label": "What are you applying for?", "help_text": "", "required": "true", "choices": ["Direct funding", "Requesting to receive services", "Requesting to provide services"]}},
-            {"type": "value", "value": {"field_label": "If you are applying for direct funding, how much do you need?", "help_text": "Amount requested should be less than 50000 USD.", "info": None}},
-            {"type": "dropdown", "value": {"field_label": "If you are requesting to receive or provide a service, what is it?", "help_text": "", "required": "false", "choices": ["Audit of presumably compromised websites", "DDoS response and mitigation", "Secure web hosting", "monitoring and resiliency of websites during special events (elections, campaigns etc.)", "VPN connections", "Safe internet connections", "Forensic analysis of digital attacks", "Recovery of compromised websites", "Malware analysis", "Equipment replacements", "Finding legal representation", "Payment of legal fees"]}},
-            {"type": "rich_text", "value": {"field_label": "If not listed above, what other services do you want to provide or receive?", "help_text": "", "required": "false", "default_value": ""}},
-            {"type": "dropdown", "value": {"field_label": "How long will it take?", "help_text": "", "required": "true", "choices": ["1 month", "2 months", "3 months", "4 months", "5 months", "6 months"]}},
-            {"type": "rich_text", "value": {"field_label": "What is the challenge you are trying to address and who will it help?", "help_text": "Please briefly provide contextual or background information regarding the problem you would like to address and the target groups/communities you are trying to help.", "required": "true", "default_value": ""}},
-            {"type": "rich_text", "value": {"field_label": "What are you proposing to do and how will you accomplish it?", "help_text": "In other words, please describe your project\\\\u2019s overall goal as well as specific objectives. What activities are you going to carry out in order to achieve your objectives?", "required": "true", "default_value": ""}},
-            {"type": "rich_text", "value": {"field_label": "Anticipated outputs and outcomes", "help_text": "", "required": "true", "default_value": ""}},
-            {"type": "rich_text", "value": {"field_label": "Timeline", "help_text": "", "required": "true", "default_value": ""}},
-            {"type": "rich_text", "value": {"field_label": "How does this project fit into OTF’s Rapid Response remit?", "help_text": "", "required": "true", "default_value": ""}},
-            {"type": "text_markup", "value": "<a href=\"\/requests\/rapid-response-fund\">Open the Rapid Response Fund remit in a new window.</a>"},
-            {"type": "rich_text", "value": {"field_label": "Why does it have to happen immediately or within the next few months?", "help_text": "", "required": "true", "default_value": ""}},
-            {"type": "category", "value": {"field_label": "Focus", "help_text": "", "required": "false", "category": focus_id, "multi": "true"}},
-            {"type": "category", "value": {"field_label": "Objectives", "help_text": "", "required": "true", "category": objectives_id, "multi": "true"}},
-            {"type": "category", "value": {"field_label": "Beneficiaries", "help_text": "", "required": "true", "category": beneficiaries_id, "multi": "true"}},
-            {"type": "category", "value": {"field_label": "Regions", "help_text": "", "required": "true", "category": regions_id, "multi": "true"}},
-            {"type": "category", "value": {"field_label": "Addressed problems", "help_text": "", "required": "true", "category": addressed_id, "multi": "true"}},
-            {"type": "rich_text", "value": {"field_label": "Budget", "help_text": "", "required": "true", "default_value": ""}},
-            {"type": "text_markup", "value": "<h3>Legal information for the contract</h3>"},
-            {"type": "char", "value": {"field_label": "Legal name", "help_text": "", "required": "false", "format": "", "default_value": ""}},
-            {"type": "char", "value": {"field_label": "Primary point of contact", "help_text": "", "required": "false", "format": "", "default_value": ""}},
-            {"type": "char", "value": {"field_label": "Phone", "help_text": "", "required": "false", "format": "", "default_value": ""}},
-            {"type": "address", "value": {"field_label": "Address", "help_text": "", "info": None}},
-            {"type": "multi_file", "value": {"field_label": "Upload", "help_text": "", "required": "false"}},
-            {"type": "text_markup", "value": "<h3>I acknowledge</h3>"},
-            {"type": "checkbox", "value": {"field_label": "My application will be dismissed if it does not fit within OTF\'s mission, values, principles statements.", "help_text": "", "default_value": "true"}},
-            {"type": "text_markup", "value": "Read our <a href=\"\/about/program\">mission, values, and principles</a>."},
-            {"type": "checkbox", "value": {"field_label": "I have read and understand OTF\'s Terms and Privacy policy.", "help_text": "", "default_value": "true"}},
-            {"type": "text_markup", "value": "Read the <a href=\"\/tos\">Terms and Privacy policy</a>."},
-            {"type": "checkbox", "value": {"field_label": "I am legally able to sign contracts or represent an organization that can.", "help_text": "", "default_value": "true"}},
-            {"type": "checkbox", "value": {"field_label": "I understand that all intellectual property created with support for this application must be openly licensed.", "help_text": "", "default_value": "true"}},
-            {"type": "checkbox", "value": {"field_label": "I understand that if my application is incomplete in any way, it will be dismissed.", "help_text": "", "default_value": "true"}},
-            {"type": "checkbox", "value": {"field_label": "I understand that if my application is after a deadline, it will not be reviewed until after the next deadline.", "help_text": "", "default_value": "true"}},
-            {"type": "text_markup", "value": "<h3>I would like to</h3>"},
-            {"type": "checkbox", "value": {"field_label": "Sign up to the OTF-Announce list, low traffic (funding opportunities, major alerts, etc)", "help_text": "", "default_value": "false"}},
-            {"type": "checkbox", "value": {"field_label": "Sign up for OTF\'s daily newsletter (collection of news related to global internet freedom).", "help_text": "", "default_value": "false"}}
+            {"type": "text_markup", "value": "<h3>Basic information</h3>", "id": "a96e8d83-edfc-42d2-a02a-c4f72cb94b84"},
+            {"type": "title", "value": {"field_label": "What is your project name?", "help_text": "", "info": None}, "id": "09d320bc-9c20-4795-8823-54cab9cc6eaf"},
+            {"type": "full_name", "value": {"field_label": "Your name", "help_text": "", "info": None}, "id": "a3580ace-11c4-4b79-bc5d-2445414782b7"},
+            {"type": "email", "value": {"field_label": "E-mail", "help_text": "", "info": None}, "id": "14cda1f7-4553-43c6-9f09-944285246fbf"},
+            {"type": "dropdown", "value": {"field_label": "Have you ever applied to or received funding as an OTF project or fellow?", "help_text": "", "required": "true", "choices": ["Yes", "No"]}, "id": "49a0f5f4-e8e9-4dfc-8575-205ee9675032"},
+            {"type": "text_markup", "value": "<h3>More information about your project</h3>", "id": "37657bd3-04b0-4dbb-af2d-63065c349f82"},
+            {"type": "radios", "value": {"field_label": "What are you applying for?", "help_text": "", "required": "true", "choices": ["Direct funding", "Requesting to receive services", "Requesting to provide services"]}, "id": "c1277029-1718-40e3-8bf5-d80ece7fd343"},
+            {"type": "value", "value": {"field_label": "If you are applying for direct funding, how much do you need?", "help_text": "Amount requested should be less than 50000 USD.", "info": None}, "id": "cfae89dc-f327-45f4-80e9-f267c3bd1ec7"},
+            {"type": "dropdown", "value": {"field_label": "If you are requesting to receive or provide a service, what is it?", "help_text": "", "required": "false", "choices": ["Audit of presumably compromised websites", "DDoS response and mitigation", "Secure web hosting", "monitoring and resiliency of websites during special events (elections, campaigns etc.)", "VPN connections", "Safe internet connections", "Forensic analysis of digital attacks", "Recovery of compromised websites", "Malware analysis", "Equipment replacements", "Finding legal representation", "Payment of legal fees"]}, "id": "ebdf9a22-58c7-4bd6-a58d-e71363357470"},
+            {"type": "rich_text", "value": {"field_label": "If not listed above, what other services do you want to provide or receive?", "help_text": "", "required": "false", "default_value": ""}, "id": "c8c329c7-78e4-4cbf-a3b1-77a1324e92ff"},
+            {"type": "dropdown", "value": {"field_label": "How long will it take?", "help_text": "", "required": "true", "choices": ["1 month", "2 months", "3 months", "4 months", "5 months", "6 months"]}, "id": "806d401c-b52c-46f7-9e96-f36fa70f53d8"},
+            {"type": "rich_text", "value": {"field_label": "What is the challenge you are trying to address and who will it help?", "help_text": "Please briefly provide contextual or background information regarding the problem you would like to address and the target groups/communities you are trying to help.", "required": "true", "default_value": ""}, "id": "1ec16cdc-7a68-40be-b17b-9a218def4260"},
+            {"type": "rich_text", "value": {"field_label": "What are you proposing to do and how will you accomplish it?", "help_text": "In other words, please describe your project\u2019s overall goal as well as specific objectives. What activities are you going to carry out in order to achieve your objectives?", "required": "true", "default_value": ""}, "id": "4fa2ac11-d1cd-4d23-8082-93a14c8f99c8"},
+            {"type": "rich_text", "value": {"field_label": "Anticipated outputs and outcomes", "help_text": "", "required": "true", "default_value": ""}, "id": "3cde39ae-b687-4c4f-b58b-849396c2fdb8"},
+            {"type": "rich_text", "value": {"field_label": "Timeline", "help_text": "", "required": "true", "default_value": ""}, "id": "0b2a4653-b390-44a6-b92e-fae4647e7ec4"},
+            {"type": "rich_text", "value": {"field_label": "How does this project fit into OTF\u2019s Rapid Response remit?", "help_text": "", "required": "true", "default_value": ""}, "id": "6d75e412-cf53-4833-9f1d-3e0126512fb9"},
+            {"type": "text_markup", "value": "<a href=\"\/requests\/rapid-response-fund\">Open the Rapid Response Fund remit in a new window.</a>", "id": "85d6c115-8d06-4a52-95cf-0e9096633bf0"},
+            {"type": "rich_text", "value": {"field_label": "Why does it have to happen immediately or within the next few months?", "help_text": "", "required": "true", "default_value": ""}, "id": "1b181d1e-ef91-41af-b9c1-d096a991314b"},
+            {"type": "category", "value": {"field_label": "Focus", "help_text": "", "required": "false", "category": focus_id, "multi": "true"}, "id": "efd91eaf-378f-4aab-96cb-c5601155cbee"},
+            {"type": "category", "value": {"field_label": "Objectives", "help_text": "", "required": "true", "category": objectives_id, "multi": "true"}, "id": "4be0c7bd-231d-4d9f-bd47-8589fc005f54"},
+            {"type": "category", "value": {"field_label": "Beneficiaries", "help_text": "", "required": "true", "category": beneficiaries_id, "multi": "true"}, "id": "6e0293ee-218e-4c3b-b82d-5bf91fdb21c9"},
+            {"type": "category", "value": {"field_label": "Regions", "help_text": "", "required": "true", "category": regions_id, "multi": "true"}, "id": "6ff029c6-c6d1-4c37-a49a-46181b1cd33d"},
+            {"type": "category", "value": {"field_label": "Addressed problems", "help_text": "", "required": "true", "category": addressed_id, "multi": "true"}, "id": "7fb1001e-d458-414f-a5bb-006db6f89baf"},
+            {"type": "rich_text", "value": {"field_label": "Budget", "help_text": "", "required": "true", "default_value": ""}, "id": "45d7d38a-9c9d-4c43-98df-bb95d4a1dd77"},
+            {"type": "text_markup", "value": "<h3>Legal information for the contract</h3>", "id": "29432dd7-d5d8-42e7-8d54-3b45c576dd7d"},
+            {"type": "char", "value": {"field_label": "Legal name", "help_text": "", "required": "false", "format": "", "default_value": ""}, "id": "632065c5-860f-4751-9b31-52914d7c6448"},
+            {"type": "char", "value": {"field_label": "Primary point of contact", "help_text": "", "required": "false", "format": "", "default_value": ""}, "id": "13bb0d64-65f3-4340-8e7e-e5da80d706d5"},
+            {"type": "char", "value": {"field_label": "Phone", "help_text": "", "required": "false", "format": "", "default_value": ""}, "id": "2cb9fe4b-df45-4181-80e5-14382f853081"},
+            {"type": "address", "value": {"field_label": "Address", "help_text": "", "info": None}, "id": "bd29eb88-9754-4305-9b2d-406a875ec56a"},
+            {"type": "multi_file", "value": {"field_label": "Upload", "help_text": "", "required": "false"}, "id": "607daeba-1f33-4ad0-b135-eda743ba8e3a"},
+            {"type": "text_markup", "value": "<h3>I acknowledge</h3>", "id": "5688ddc7-0397-41e7-9e6b-2c0fe44f42aa"},
+            {"type": "checkbox", "value": {"field_label": "My application will be dismissed if it does not fit within OTF\'s mission, values, principles statements.", "help_text": "", "default_value": "true"}, "id": "e695f0d7-4c74-4cc6-853f-bd62ecd19d3d"},
+            {"type": "text_markup", "value": "Read our <a href=\"\/about/program\">mission, values, and principles</a>.", "id": "051be067-d45a-4bc3-8016-a09dadd734f5"},
+            {"type": "checkbox", "value": {"field_label": "I have read and understand OTF\'s Terms and Privacy policy.", "help_text": "", "default_value": "true"}, "id": "f40d1acc-d802-4cc6-b0e9-fff78dc54223"},
+            {"type": "text_markup", "value": "Read the <a href=\"\/tos\">Terms and Privacy policy</a>.", "id": "bcf64886-df76-41d2-9a22-fb7e49a7718c"},
+            {"type": "checkbox", "value": {"field_label": "I am legally able to sign contracts or represent an organization that can.", "help_text": "", "default_value": "true"}, "id": "0b3c0827-38e2-439b-bca5-735835af1019"},
+            {"type": "checkbox", "value": {"field_label": "I understand that all intellectual property created with support for this application must be openly licensed.", "help_text": "", "default_value": "true"}, "id": "bc9c960e-a6f4-4bc2-b626-efb5bc5552c6"},
+            {"type": "checkbox", "value": {"field_label": "I understand that if my application is incomplete in any way, it will be dismissed.", "help_text": "", "default_value": "true"}, "id": "5812b66d-630e-4ca2-8bea-819084278f55"},
+            {"type": "checkbox", "value": {"field_label": "I understand that if my application is after a deadline, it will not be reviewed until after the next deadline.", "help_text": "", "default_value": "true"}, "id": "97d3746c-cf0f-449a-b3a3-7a9cdd45cc6d"},
+            {"type": "text_markup", "value": "<h3>I would like to</h3>", "id": "e99c9dbe-f788-4eb2-813d-1787c0871210"},
+            {"type": "checkbox", "value": {"field_label": "Sign up to the OTF-Announce list, low traffic (funding opportunities, major alerts, etc)", "help_text": "", "default_value": "false"}, "id": "fc3d2a87-1151-418b-b1cd-9289f00bde35"},
+            {"type": "checkbox", "value": {"field_label": "Sign up for OTF\'s daily newsletter (collection of news related to global internet freedom).", "help_text": "", "default_value": "false"}, "id": "83ecc69a-f47c-495e-bc8f-326e55aed67a"}
         ]
 
         application_form, _ = ApplicationForm.objects.get_or_create(name='Rapid response', defaults={'form_fields': json.dumps(data)})
diff --git a/opentech/apply/funds/migrations/0027_applicationsubmission_drupal_id.py b/opentech/apply/funds/migrations/0027_applicationsubmission_drupal_id.py
new file mode 100644
index 0000000000000000000000000000000000000000..fe885fc83a8a1a9a2a15288318f5bff43158da7e
--- /dev/null
+++ b/opentech/apply/funds/migrations/0027_applicationsubmission_drupal_id.py
@@ -0,0 +1,20 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.11.8 on 2018-03-08 11:02
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('funds', '0026_add_leads_to_submission_and_lab'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='applicationsubmission',
+            name='drupal_id',
+            field=models.IntegerField(blank=True, editable=False, null=True),
+        ),
+    ]
diff --git a/opentech/apply/funds/models.py b/opentech/apply/funds/models.py
index 5cc50910a7f9a84c67ff8ca9367408cbb721404e..6f88e65e2b480965c422dad3fc450c725b468c69 100644
--- a/opentech/apply/funds/models.py
+++ b/opentech/apply/funds/models.py
@@ -464,6 +464,9 @@ class ApplicationSubmission(WorkflowHelpers, AbstractFormSubmission):
     # Workflow inherited from WorkflowHelpers
     status = models.CharField(max_length=254)
 
+    # Meta: used for migration purposes only
+    drupal_id = models.IntegerField(null=True, blank=True, editable=False)
+
     objects = ApplicationSubmissionQueryset.as_manager()
 
     @property
@@ -492,11 +495,18 @@ class ApplicationSubmission(WorkflowHelpers, AbstractFormSubmission):
             full_name = self.form_data.get('full_name')
 
             User = get_user_model()
-            self.user, _ = User.objects.get_or_create_and_notify(
-                email=email,
-                site=self.page.get_site(),
-                defaults={'full_name': full_name}
-            )
+            if 'skip_account_creation_notification' in self.form_data:
+                self.form_data.pop('skip_account_creation_notification', None)
+                self.user, _ = User.objects.get_or_create(
+                    email=email,
+                    defaults={'full_name': full_name}
+                )
+            else:
+                self.user, _ = User.objects.get_or_create_and_notify(
+                    email=email,
+                    site=self.page.get_site(),
+                    defaults={'full_name': full_name}
+                )
 
     def save_path(self, file_name):
         file_path = os.path.join('submissions', 'user', str(self.user.id), file_name)
@@ -585,7 +595,7 @@ class ApplicationSubmission(WorkflowHelpers, AbstractFormSubmission):
 
     def get_data(self):
         # Updated for JSONField
-        form_data = self.form_data
+        form_data = self.form_data.copy()
         form_data.update({
             'submit_time': self.submit_time,
         })
diff --git a/opentech/settings/base.py b/opentech/settings/base.py
index ba29eb1f5f9f281f3d817f25605b5205e051eba6..776267ba938be3adb4842bb3ca7ee12c49fcfe79 100644
--- a/opentech/settings/base.py
+++ b/opentech/settings/base.py
@@ -329,7 +329,7 @@ SOCIAL_AUTH_PIPELINE = (
 )
 
 # Bleach Settings
-BLEACH_ALLOWED_TAGS = ['h2', 'h3', 'p', 'b', 'i', 'em', 'strong', 'a', 'ul', 'ol', 'li']
+BLEACH_ALLOWED_TAGS = ['h2', 'h3', 'p', 'b', 'i', 'em', 'strong', 'a', 'ul', 'ol', 'li', 'br']
 
 BLEACH_ALLOWED_ATTRIBUTES = ['href', 'title', 'style']
 
diff --git a/setup.cfg b/setup.cfg
index 28cc5bb725f3df9aabb06092a3b443d209a4e9c8..f0ffa402ee7b53289e2a773c9e0208844a1cf55a 100644
--- a/setup.cfg
+++ b/setup.cfg
@@ -21,6 +21,10 @@ disallow_untyped_defs = True
 [mypy-*.migrations*]
 ignore_errors = True
 
+# Exclude management commands globally - must be at end
+[mypy-*.management*]
+ignore_errors = True
+
 [flake8]
 ignore = E501,F405
 exclude = migrations,node_modules