diff --git a/journals/views.py b/journals/views.py
index ff585961693be45bbf3f648e8ae21be434f68006..5169628d3b5b865e26adf5528aa052ec71a70c80 100644
--- a/journals/views.py
+++ b/journals/views.py
@@ -786,12 +786,11 @@ def allocate_orgpubfractions(request, doi_label):
               request.user.has_perm('scipost.can_publish_accepted_submission')):
         raise Http404
 
-    if not publication.pubfractions.all().exists():
-        # Create new OrgPubFraction objects from existing data, spreading weight evenly
-        for org in publication.get_organizations():
-            pubfrac = OrgPubFraction(publication=publication,
-                                     organization=org, fraction=0)
-            pubfrac.save()
+    # Create OrgPubFraction objects from existing organization links
+    for org in publication.get_organizations():
+        pubfrac, created = OrgPubFraction.objects.get_or_create(
+            publication=publication, organization=org)
+
     formset = OrgPubFractionsFormSet(request.POST or None,
                                      queryset=publication.pubfractions.all())
     if formset.is_valid():