diff --git a/arkindex/documents/serializers/elements.py b/arkindex/documents/serializers/elements.py
index f9ed4b96ca0ba727b2186f234c0fff6487e9ec6b..9f5a1ed044bedf5ff2afd49961421ef08ff9d03b 100644
--- a/arkindex/documents/serializers/elements.py
+++ b/arkindex/documents/serializers/elements.py
@@ -2,6 +2,7 @@ from collections import defaultdict
 from uuid import UUID
 
 from django.contrib.gis.geos import LinearRing
+from django.db import transaction
 from django.utils.functional import cached_property
 from rest_framework import serializers
 from rest_framework.exceptions import ValidationError
@@ -123,6 +124,7 @@ class CorpusSerializer(serializers.ModelSerializer):
             raise ValidationError(['Only admin users are allowed to edit the public attribute on a corpus.'])
         return public
 
+    @transaction.atomic
     def create(self, validated_data):
         corpus = Corpus.objects.create(**validated_data)
         corpus.memberships.create(
@@ -130,6 +132,9 @@ class CorpusSerializer(serializers.ModelSerializer):
             level=Role.Admin.value
         )
         corpus.create_default_types()
+        # Cheat annotating corpus to avoid a stale read when serializing it
+        corpus.access_level = Role.Admin.value
+        corpus.authorized_users = 1
         return corpus