diff --git a/arkindex/documents/api/entities.py b/arkindex/documents/api/entities.py
index bc94fd03f65369dde228c8a50537854c19a9066c..fc2b546fee97c4004409b1a03f373e0ed9c5e3c9 100644
--- a/arkindex/documents/api/entities.py
+++ b/arkindex/documents/api/entities.py
@@ -224,7 +224,7 @@ class TranscriptionEntityCreate(CreateAPIView):
         tr = Transcription.objects.using('default').filter(
             id=self.kwargs.get('pk'),
             element__corpus__in=Corpus.objects.writable(self.request.user)
-        ).first()
+        ).select_related('element').only('id', 'text', 'element__corpus_id').first()
         return {**context, 'transcription': tr}
 
     def perform_create(self, serializer):
diff --git a/arkindex/documents/models.py b/arkindex/documents/models.py
index 20556a5bf431b25bbb428366e7bc88c7f0221865..565c09cb1cb5d336286e6f8de68d5ec8fee83d5c 100644
--- a/arkindex/documents/models.py
+++ b/arkindex/documents/models.py
@@ -756,7 +756,7 @@ class TranscriptionEntity(models.Model):
         ]
 
     def clean(self):
-        if self.transcription.element.corpus != self.entity.corpus:
+        if self.transcription.element.corpus_id != self.entity.corpus_id:
             raise ValidationError('Transcription and Entity are not in the same corpus')
         if self.offset + self.length > len(self.transcription.text):
             raise ValidationError('Entity position overflows text size')
diff --git a/arkindex/documents/tests/test_entities_api.py b/arkindex/documents/tests/test_entities_api.py
index a3513bec62df12928564f1f74f7524535333a2db..ffc35ce38bab4dc2c227518fd68a91e50db3f8dd 100644
--- a/arkindex/documents/tests/test_entities_api.py
+++ b/arkindex/documents/tests/test_entities_api.py
@@ -441,13 +441,13 @@ class TestEntitiesAPI(FixtureAPITestCase):
 
     def test_create_transcription_entity(self):
         self.client.force_login(self.user)
-        with self.assertNumQueries(11):
+        with self.assertNumQueries(8):
             response = self.client.post(
                 reverse('api:transcription-entity-create', kwargs={'pk': str(self.transcription.id)}),
                 data=self.tr_entities_sample,
                 format='json'
             )
-        self.assertEqual(response.status_code, status.HTTP_201_CREATED)
+            self.assertEqual(response.status_code, status.HTTP_201_CREATED)
         transcription_entity = TranscriptionEntity.objects.get(
             transcription=self.transcription,
             entity=self.entity,
@@ -469,12 +469,13 @@ class TestEntitiesAPI(FixtureAPITestCase):
 
     def test_create_transcription_entity_with_confidence(self):
         self.client.force_login(self.user)
-        response = self.client.post(
-            reverse('api:transcription-entity-create', kwargs={'pk': str(self.transcription.id)}),
-            data=self.tr_entities_confidence_sample,
-            format='json'
-        )
-        self.assertEqual(response.status_code, status.HTTP_201_CREATED)
+        with self.assertNumQueries(8):
+            response = self.client.post(
+                reverse('api:transcription-entity-create', kwargs={'pk': str(self.transcription.id)}),
+                data=self.tr_entities_confidence_sample,
+                format='json'
+            )
+            self.assertEqual(response.status_code, status.HTTP_201_CREATED)
         transcription_entity = TranscriptionEntity.objects.get(
             transcription=self.transcription,
             entity=self.entity,
@@ -505,13 +506,13 @@ class TestEntitiesAPI(FixtureAPITestCase):
 
     def test_create_transcription_entity_worker_version(self):
         self.client.force_login(self.user)
-        with self.assertNumQueries(12):
+        with self.assertNumQueries(9):
             response = self.client.post(
                 reverse('api:transcription-entity-create', kwargs={'pk': str(self.transcription.id)}),
                 data=self.tr_entities_version_sample,
                 format='json'
             )
-        self.assertEqual(response.status_code, status.HTTP_201_CREATED)
+            self.assertEqual(response.status_code, status.HTTP_201_CREATED)
         transcription_entity = TranscriptionEntity.objects.get(
             transcription=self.transcription,
             entity=self.entity,
@@ -522,13 +523,13 @@ class TestEntitiesAPI(FixtureAPITestCase):
 
     def test_create_transcription_entity_worker_version_internal_user(self):
         self.client.force_login(self.internal_user)
-        with self.assertNumQueries(10):
+        with self.assertNumQueries(7):
             response = self.client.post(
                 reverse('api:transcription-entity-create', kwargs={'pk': str(self.transcription.id)}),
                 data=self.tr_entities_version_sample,
                 format='json'
             )
-        self.assertEqual(response.status_code, status.HTTP_201_CREATED)
+            self.assertEqual(response.status_code, status.HTTP_201_CREATED)
         transcription_entity = TranscriptionEntity.objects.get(
             transcription=self.transcription,
             entity=self.entity,
@@ -539,13 +540,13 @@ class TestEntitiesAPI(FixtureAPITestCase):
 
     def test_create_transcription_entity_worker_run(self):
         self.client.force_login(self.user)
-        with self.assertNumQueries(12):
+        with self.assertNumQueries(9):
             response = self.client.post(
                 reverse('api:transcription-entity-create', kwargs={'pk': str(self.transcription.id)}),
                 data=self.tr_entities_run_sample,
                 format='json'
             )
-        self.assertEqual(response.status_code, status.HTTP_201_CREATED)
+            self.assertEqual(response.status_code, status.HTTP_201_CREATED)
         self.assertDictEqual(response.json(), {
             'entity': self.tr_entities_run_sample['entity'],
             'offset': self.tr_entities_run_sample['offset'],