diff --git a/greg/management/commands/import_sponsors_from_cerebrum.py b/greg/management/commands/import_sponsors_from_cerebrum.py
index 45e9e8d1e689ae78ac558f7d6a77670c30a260c7..0ff3e1b03f9fc3e398167a94a0859cc0d5980c3f 100644
--- a/greg/management/commands/import_sponsors_from_cerebrum.py
+++ b/greg/management/commands/import_sponsors_from_cerebrum.py
@@ -40,18 +40,31 @@ class Command(BaseCommand):
 
     def _upsert_sponsor_unit_link(self, sponsor: Sponsor, unit: OrganizationalUnit):
         """Ensure a link between sponsor and unit."""
-        sunit, created = SponsorOrganizationalUnit.objects.get_or_create(
-            sponsor=sponsor,
-            organizational_unit=unit,
-            source=self.CEREBRUM_SOURCE,
-            automatic=True,
-            defaults={"hierarchical_access": settings.CEREBRUM_HIERARCHICAL_ACCESS},
-        )
+        try:
+            sunit = SponsorOrganizationalUnit.objects.get(
+                sponsor=sponsor,
+                organizational_unit=unit,
+            )
+            created = False
+        except SponsorOrganizationalUnit.DoesNotExist:
+            sunit = SponsorOrganizationalUnit.objects.create(
+                sponsor=sponsor,
+                organizational_unit=unit,
+                source=self.CEREBRUM_SOURCE,
+                automatic=True,
+                hierarchical_access=settings.CEREBRUM_HIERARCHICAL_ACCESS,
+            )
+            created = True
         if created:
             logger.info("sponsor_ou_link_create", sponsor=sponsor.id, sunit=sunit.id)
         else:
             logger.info("sponsor_ou_link_found", sponsor=sponsor.id, sunit=sunit.id)
+            sunit.source = self.CEREBRUM_SOURCE
+            sunit.automatic = True
             sunit.hierarchical_access = settings.CEREBRUM_HIERARCHICAL_ACCESS
+            changes = sunit.get_dirty_fields(check_relationship=True, verbose=True)
+            if changes:
+                logger.info("sponsor_ou_link_changed", changes=changes)
             sunit.save()
 
         return SponsorOrganizationalUnit.objects.get(id=sunit.id)
diff --git a/greg/tests/management/test_import_sponsors_from_cerebrum.py b/greg/tests/management/test_import_sponsors_from_cerebrum.py
index f548a7ea789b0e50ccbf3693c9ff5191fe83e4bd..54afca68d02476da92e91395f34a13f26b3c298a 100644
--- a/greg/tests/management/test_import_sponsors_from_cerebrum.py
+++ b/greg/tests/management/test_import_sponsors_from_cerebrum.py
@@ -150,3 +150,20 @@ def test_import_sponsors_from_cerebrum(
     # One excluded from unit with stedkode in manual list
     assert Sponsor.objects.all().count() == 2
     assert SponsorOrganizationalUnit.objects.count() == 2
+
+    # when a SponsorOrganizationalUnit with source != 'cerebrum'
+    # and automatic = False exists, replace it with an automatic one
+    sunit_lookup = dict(
+        organizational_unit__identifiers__name="legacy_stedkode",
+        organizational_unit__identifiers__value="234567",
+    )
+    sunit = SponsorOrganizationalUnit.objects.filter(**sunit_lookup).first()
+    assert isinstance(sunit, SponsorOrganizationalUnit)
+    sunit.source = "manual"
+    sunit.automatic = False
+    sunit.save()
+    call_command("import_sponsors_from_cerebrum")
+    sunit = SponsorOrganizationalUnit.objects.filter(**sunit_lookup).first()
+    assert isinstance(sunit, SponsorOrganizationalUnit)
+    assert sunit.source == "cerebrum"
+    assert sunit.automatic