diff --git a/opentech/apply/funds/models/applications.py b/opentech/apply/funds/models/applications.py
index ac45115d4a3613888b940884cb8a2f7719472aa1..fccac8966385c609bd0f786aeb07ebbf0756f3f4 100644
--- a/opentech/apply/funds/models/applications.py
+++ b/opentech/apply/funds/models/applications.py
@@ -144,13 +144,6 @@ class RoundBase(WorkflowStreamForm, SubmittableStreamForm):  # type: ignore
         ObjectList(SubmittableStreamForm.promote_panels, heading='Promote'),
     ])
 
-    def __init__(self, *args, **kwargs):
-        super().__init__(*args, **kwargs)
-        # We attached the parent page as part of the before_create_hook
-        if hasattr(self, 'parent_page'):
-            self.workflow_name = self.parent_page.workflow_name
-            self.reviewers = self.parent_page.reviewers.all()
-
     def get_template(self, request, *args, **kwargs):
         # Make sure all children use the shared template
         return 'funds/round.html'
@@ -170,8 +163,9 @@ class RoundBase(WorkflowStreamForm, SubmittableStreamForm):  # type: ignore
     def save(self, *args, **kwargs):
         is_new = not self.id
         if is_new and hasattr(self, 'parent_page'):
-            # Ensure that the workflow hasn't changed
-            self.workflow_name = self.parent_page.workflow_name
+            parent_page = self.parent_page[self.__class__][self.title]
+            self.workflow_name = parent_page.workflow_name
+            self.reviewers = parent_page.reviewers.all()
 
         super().save(*args, **kwargs)
 
@@ -181,7 +175,7 @@ class RoundBase(WorkflowStreamForm, SubmittableStreamForm):  # type: ignore
             self._copy_forms('review_forms')
 
     def _copy_forms(self, field):
-        for form in getattr(self.parent_page, field).all():
+        for form in getattr(self.get_parent().specific, field).all():
             new_form = self._meta.get_field(field).related_model
             self._copy_form(form, new_form)
 
@@ -220,10 +214,10 @@ class RoundBase(WorkflowStreamForm, SubmittableStreamForm):  # type: ignore
                 Q(end_date__gte=self.start_date)
             )
 
-        if hasattr(self, 'parent_page'):
+        if not self.id and hasattr(self, 'parent_page'):
             # Check if the create hook has added the parent page, we aren't an object yet.
             # Ensures we can access related objects during the clean phase instead of save.
-            base_query = RoundBase.objects.child_of(self.parent_page)
+            base_query = RoundBase.objects.child_of(self.parent_page[self.__class__][self.title])
         else:
             # don't need parent page, we are an actual object now.
             base_query = RoundBase.objects.sibling_of(self)
diff --git a/opentech/apply/funds/tests/test_models.py b/opentech/apply/funds/tests/test_models.py
index 10e29363d5bccd2bfc70ba47f2fadb94e7dfe6d8..28842606bac340e3f2aa28d447d4e0e1b0e1227f 100644
--- a/opentech/apply/funds/tests/test_models.py
+++ b/opentech/apply/funds/tests/test_models.py
@@ -138,7 +138,7 @@ class TestRoundModelDates(TestCase):
         new_round = RoundFactory.build(start_date=overlapping_start, end_date=None)
 
         # we add on the parent page which gets included from a pre_create_hook
-        new_round.parent_page = self.fund
+        new_round.parent_page = {new_round.__class__: {new_round.title: self.fund}}
 
         with self.assertRaises(ValidationError):
             new_round.clean()
@@ -153,7 +153,7 @@ class TestRoundModelWorkflowAndForms(TestCase):
         self.round = RoundFactory.build(lead=lead, parent=None)
 
         # Assign parent_page like the init does
-        self.round.parent_page = self.fund
+        self.round.parent_page = {self.round.__class__: {self.round.title: self.fund}}
         self.fund.add_child(instance=self.round)
 
     def test_workflow_is_copied_to_new_rounds(self):
diff --git a/opentech/apply/funds/wagtail_hooks.py b/opentech/apply/funds/wagtail_hooks.py
index 692b5f04af27074b1cf39ab69e1d6c8cbe8484d1..30bf699dd0c286ea7c88906de4e992aa7ac7fa76 100644
--- a/opentech/apply/funds/wagtail_hooks.py
+++ b/opentech/apply/funds/wagtail_hooks.py
@@ -10,6 +10,8 @@ modeladmin_register(ApplyAdminGroup)
 
 @hooks.register('before_create_page')
 def before_create_page(request, parent_page, page_class):
-    if issubclass(page_class, RoundBase):
-        page_class.parent_page = parent_page
+    if issubclass(page_class, RoundBase) and request.POST:
+        if not hasattr(page_class, 'parent_page'):
+            page_class.parent_page = {}
+        page_class.parent_page.setdefault(page_class, {})[request.POST['title']] = parent_page
     return page_class