diff --git a/CHANGELOG.md b/CHANGELOG.md
index 5d9de9e..0aaa26e 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -28,7 +28,9 @@
- Frontend [v1.41.1](https://github.com/lblod/frontend-organization-portal/blob/v1.41.1/CHANGELOG.md) [DL-7438]
- Fix broken lmb mandataris mappin query [OP-3867]
- Add the value politiecollege to the existing dropdown list beslissingsorgaan [DL-7473]
-- Bump construct-organization-relationships [DL-7473]
+- Bump construct-organization-relationships [DL-7473] [OP-3851]
+- fix duplicate van rechtswege/grote helft mandates [OP-3851]
+ - IMPORTANT NOTE: Make sure first the loket migration has completed + data has flown from loket to OP
### Deploy notes
```
diff --git a/config/migrations/2026/20260817100000-consolidate-eredienst-bestuurslid-van-rechtswege-mandaten.sparql b/config/migrations/2026/20260817100000-consolidate-eredienst-bestuurslid-van-rechtswege-mandaten.sparql
new file mode 100644
index 0000000..b1581f6
--- /dev/null
+++ b/config/migrations/2026/20260817100000-consolidate-eredienst-bestuurslid-van-rechtswege-mandaten.sparql
@@ -0,0 +1,45 @@
+# Delete duplicate van rechtswege mandaten per governing body
+# Must be run AFTER the corresponding loket migration
+
+PREFIX ere:
+PREFIX besluit:
+PREFIX org:
+PREFIX mandaat:
+PREFIX generiek:
+
+DELETE {
+ GRAPH {
+ ?orgaanInTime org:hasPost ?mandaat .
+ ?mandaat ?p ?o .
+ }
+}
+INSERT {
+ GRAPH {
+ ?orgaanInTime org:hasPost ?canonicalMandaat .
+ }
+}
+WHERE {
+ GRAPH {
+ ?worshipService a ere:BestuurVanDeEredienst .
+ ?orgaan besluit:bestuurt ?worshipService .
+ ?orgaanInTime generiek:isTijdspecialisatieVan ?orgaan ;
+ org:hasPost ?mandaat .
+ ?mandaat org:role ;
+ ?p ?o .
+
+ FILTER NOT EXISTS { ?holder org:holds ?mandaat . }
+ }
+
+ {
+ SELECT ?orgaan (IRI(MIN(STR(?anyMandaat))) AS ?canonicalMandaat) WHERE {
+ GRAPH {
+ ?anyOrgaanInTime generiek:isTijdspecialisatieVan ?orgaan ;
+ org:hasPost ?anyMandaat .
+ ?anyMandaat org:role .
+ }
+ }
+ GROUP BY ?orgaan
+ }
+
+ FILTER(?mandaat != ?canonicalMandaat)
+}
diff --git a/config/migrations/2026/20260817101500-consolidate-eredienst-bestuurslid-grote-helft-mandaten.sparql b/config/migrations/2026/20260817101500-consolidate-eredienst-bestuurslid-grote-helft-mandaten.sparql
new file mode 100644
index 0000000..8844989
--- /dev/null
+++ b/config/migrations/2026/20260817101500-consolidate-eredienst-bestuurslid-grote-helft-mandaten.sparql
@@ -0,0 +1,65 @@
+# Delete duplicate grote helft mandaten within a single election cycle period
+# Must be run AFTER the corresponding loket migration
+
+PREFIX ere:
+PREFIX besluit:
+PREFIX org:
+PREFIX mandaat:
+PREFIX generiek:
+
+DELETE {
+ GRAPH {
+ ?orgaanInTime org:hasPost ?mandaat .
+ ?mandaat ?p ?o .
+ }
+}
+INSERT {
+ GRAPH {
+ ?orgaanInTime org:hasPost ?canonicalMandaat .
+ }
+}
+WHERE {
+ GRAPH {
+ ?worshipService a ere:BestuurVanDeEredienst .
+ ?orgaan besluit:bestuurt ?worshipService .
+ ?orgaanInTime generiek:isTijdspecialisatieVan ?orgaan ;
+ mandaat:bindingStart ?start ;
+ org:hasPost ?mandaat .
+ ?mandaat org:role ;
+ ?p ?o .
+
+ FILTER NOT EXISTS { ?holder org:holds ?mandaat . }
+ }
+
+ BIND(YEAR(?start) AS ?startYear)
+ VALUES (?startYear ?pairIndex) {
+ (2017 0)
+ (2020 1)
+ (2023 1)
+ (2026 2)
+ (2029 2)
+ }
+
+ {
+ SELECT ?orgaan ?pairIndex (IRI(MIN(STR(?anyMandaat))) AS ?canonicalMandaat) WHERE {
+ GRAPH {
+ ?anyOrgaanInTime generiek:isTijdspecialisatieVan ?orgaan ;
+ mandaat:bindingStart ?anyStart ;
+ org:hasPost ?anyMandaat .
+ ?anyMandaat org:role .
+ }
+
+ BIND(YEAR(?anyStart) AS ?anyStartYear)
+ VALUES (?anyStartYear ?pairIndex) {
+ (2017 0)
+ (2020 1)
+ (2023 1)
+ (2026 2)
+ (2029 2)
+ }
+ }
+ GROUP BY ?orgaan ?pairIndex
+ }
+
+ FILTER(?mandaat != ?canonicalMandaat)
+}