diff --git a/mo/imports.py b/mo/imports.py
index 927539ffa74edce5e1ab6211b7ef9a2fbd47214c..4e80e51577071f16bf0ed4f3bea7cc19c2bbf5f1 100644
--- a/mo/imports.py
+++ b/mo/imports.py
@@ -47,6 +47,7 @@ class Import:
     cnt_set_points: int = 0
     cnt_add_sols: int = 0
     cnt_del_sols: int = 0
+    cnt_change_user_to_org: int = 0  # pro Import orgů: Počet provedených/požadovaných změn účastnka na orga
 
     # Veřejné vlastnosti importu
     template_basename: str = "sablona"
@@ -58,6 +59,7 @@ class Import:
     only_region: Optional[db.Place]
     task: Optional[db.Task]         # pro Import bodů
     allow_add_del: bool             # pro Import bodů: je povoleno zakládat/mazat řešení
+    allow_change_user_to_org: bool = False # pro Import orgů: je povoleno vyrobit orga z účastníka
     fmt: FileFormat
     row_class: Type[mo.csv.Row]
     row_example: mo.csv.Row
@@ -195,7 +197,12 @@ class Import:
 
     def find_or_create_user(self, email: str, krestni: Optional[str], prijmeni: Optional[str], is_org: bool) -> Optional[db.User]:
         try:
-            user, is_new, is_change_user_to_org = mo.users.find_or_create_user(email, krestni, prijmeni, is_org, reason='import')
+            try:
+                user, is_new, is_user_to_org = mo.users.find_or_create_user(email, krestni, prijmeni, is_org, allow_change_user_to_org=self.allow_change_user_to_org, reason='import')
+                self.cnt_change_user_to_org += is_user_to_org
+            except mo.users.CheckErrorOrgIsUser as e:
+                self.cnt_change_user_to_org += 1
+                raise mo.CheckError(str(e) + " Změnu můžete povolit ve formuláři.")
         except mo.CheckError as e:
             return self.error(str(e))
         if is_new:
@@ -276,6 +283,10 @@ class Import:
             ur = db.UserRole(user=user, place=place, role=role,
                              category=round.category, year=round.year, seq=round.seq,
                              assigned_by_user=self.user)
+
+            if not self.gatekeeper.can_set_role(ur):
+                return self.error('Roli "{new_role}" nelze přidělit, není podmnožinou žádné vaší role')
+
             sess.add(ur)
             sess.flush()
             logger.info(f'Import: {role.name.title()} user=#{user.user_id} place=#{place.place_id} user_role=#{ur.user_role_id}')
@@ -517,10 +528,6 @@ class OrgsImport(Import):
         oblast = self.parse_opt_place(r.kod_oblasti, 'oblast')
         role = self.parse_role(r.role)
 
-        if role == db.RoleType.opravovatel:
-            if oblast is None:
-                return self.error('Kód místa je povinné uvést')
-
         if role != db.RoleType.opravovatel:
             contest = self.obtain_contest(oblast, allow_none=True)
             place = contest.place if contest else self.root_place
@@ -697,12 +704,14 @@ def create_import(user: db.User,
                   contest: Optional[db.Contest] = None,
                   only_region: Optional[db.Place] = None,
                   task: Optional[db.Task] = None,
-                  allow_add_del: bool = False):
+                  allow_add_del: bool = False,
+                  allow_change_user_to_org: bool = False):
     imp: Import
     if type == ImportType.participants:
         imp = ContestImport()
     elif type == ImportType.orgs:
         imp = OrgsImport()
+        imp.allow_change_user_to_org = allow_change_user_to_org
     elif type == ImportType.points:
         imp = PointsImport()
     else: