diff --git a/CHANGELOG.rst b/CHANGELOG.rst
index 342321d693656c7d0ee0e316de3a0bd54a5b7e25..a5a7900980a2666880932a7a02971765a3444627 100644
--- a/CHANGELOG.rst
+++ b/CHANGELOG.rst
@@ -13,6 +13,7 @@ Changed
 ~~~~~~~
 
 * Wrap all imports in complete revisions to make it possible to undo them completely and to track changes correctly.
+* Group names are now optionally disambiguated on collisions in Untis
 
 Fixed
 ~~~~~
diff --git a/aleksis/apps/untis/preferences.py b/aleksis/apps/untis/preferences.py
index 9b78b2333e0b4b93cde73fe420ea9b4d34bf5776..56dbd3f55a8251535adfe9c418d91700b7738f3e 100644
--- a/aleksis/apps/untis/preferences.py
+++ b/aleksis/apps/untis/preferences.py
@@ -48,6 +48,14 @@ class UpdateGroupsName(BooleanPreference):
     verbose_name = _("Update name of existing groups")
 
 
+@site_preferences_registry.register
+class DisambiguateGroupsName(BooleanPreference):
+    section = untis_mysql
+    name = "disambiguate_groups_name"
+    default = True
+    verbose_name = _("Disambiguate name of new groups")
+
+
 @site_preferences_registry.register
 class OverwriteGroupOwners(BooleanPreference):
     section = untis_mysql
diff --git a/aleksis/apps/untis/util/mysql/importers/common_data.py b/aleksis/apps/untis/util/mysql/importers/common_data.py
index b8d37a0d178070d5a96cc5c1b6cf0a159c9dcc87..f0af41807c1817a877786870580f9d7cbf359208 100644
--- a/aleksis/apps/untis/util/mysql/importers/common_data.py
+++ b/aleksis/apps/untis/util/mysql/importers/common_data.py
@@ -1,4 +1,5 @@
 import logging
+import re
 from datetime import time
 from enum import Enum
 from typing import Dict
@@ -191,6 +192,30 @@ def import_classes(
                 school_term__in=[None, validity_range.school_term],
             )
         except core_models.Group.DoesNotExist:
+            # Determine collisions of long name
+            while core_models.Group.objects.filter(
+                name=name, school_term=validity_range.school_term
+            ).exists():
+                if not get_site_preferences()["untis_mysql__disambiguate_groups_name"]:
+                    # Do not try to disambiguate it not enabled
+                    break
+
+                suffix = f" ({short_name})"
+                if name.endswith(suffix):
+                    # First try, add a counter
+                    name = f"{name} (2)"
+                else:
+                    # Second or more tries, determine last counter, if any
+                    match = re.match(r"^(.*)(\(\d+\))$", name)
+                    if match:
+                        # Counter found, increase
+                        prefix = match.group(1)
+                        counter = int(match.group(2)) + 1
+                        name = f"{prefix}({counter})"
+                    else:
+                        # Counter not found, add one
+                        name = f"{name} (2)"
+
             new_group = core_models.Group.objects.create(
                 short_name=short_name,
                 name=name,