diff --git a/mo/imports.py b/mo/imports.py
index 926308a9d9783360e695b21ff8d14edf1ab9dead..73ec1a6f85476dc4e84cfea8260d50812aa3638f 100644
--- a/mo/imports.py
+++ b/mo/imports.py
@@ -21,8 +21,7 @@ from mo.util_format import format_decimal
 
 class ImportType(db.MOEnum):
     participants = auto()
-    proctors = auto()
-    judges = auto()
+    orgs = auto()
     points = auto()
 
     def friendly_name(self) -> str:
@@ -31,8 +30,7 @@ class ImportType(db.MOEnum):
 
 import_type_names = {
     ImportType.participants.name: 'účastníci',
-    ImportType.proctors.name: 'dozor',
-    ImportType.judges.name: 'opravovatelé',
+    ImportType.orgs.name: 'organizátoři',
     ImportType.points.name: 'body',
 }
 
@@ -150,6 +148,12 @@ class Import:
         self.place_cache[kod] = place
         return place
 
+    def parse_role(self, name):
+        if name not in db.RoleType.__members__:
+            return self.error(f"Role {name} neexistuje. Podívejte se do manuálu na existující role.")
+
+        return db.RoleType[name]
+
     def parse_school(self, kod: str) -> Optional[db.Place]:
         if kod in self.school_place_cache:
             return self.school_place_cache[kod]
@@ -479,84 +483,49 @@ class ContestImport(Import):
 
 
 @dataclass
-class ProctorImportRow(mo.csv.Row):
-    email: str = ""
-    krestni: str = ""
-    prijmeni: str = ""
-    kod_mista: str = ""
-
-
-class ProctorImport(Import):
-    row_class = ProctorImportRow
-    row_example = ProctorImportRow(
-        email='nekdo@example.org',
-        krestni='Pokusný',
-        prijmeni='Králík',
-        kod_mista='#3333',
-    )
-    log_msg_prefix = 'Dozor'
-    log_details = {'action': 'import-proctors'}
-    template_basename = 'sablona-dozor'
-
-    def setup(self):
-        assert self.round is not None
-
-    def import_row(self, r: mo.csv.Row):
-        assert isinstance(r, ProctorImportRow)
-        num_prev_errs = len(self.errors)
-        email = self.parse_email(r.email)
-        krestni = self.parse_name(r.krestni)
-        prijmeni = self.parse_name(r.prijmeni)
-        misto = self.parse_opt_place(r.kod_mista, 'místo')
-
-        if misto is None:
-            return self.error('Kód místa je povinné uvést')
-
-        if (len(self.errors) > num_prev_errs
-                or email is None
-                or krestni is None
-                or prijmeni is None):
-            return
-
-        user = self.find_or_create_user(email, krestni, prijmeni, is_org=True)
-        if user is None:
-            return
-
-        self.add_role(user, misto, db.RoleType.dozor)
-
-
-@dataclass
-class JudgeImportRow(mo.csv.Row):
+class OrgsImportRow(mo.csv.Row):
     email: str = ""
     krestni: str = ""
     prijmeni: str = ""
     kod_oblasti: str = ""
+    role: str = ""
 
 
-class JudgeImport(Import):
-    row_class = JudgeImportRow
-    row_example = JudgeImportRow(
+class OrgsImport(Import):
+    row_class = OrgsImportRow
+    row_example = OrgsImportRow(
         email='nekdo@example.org',
         krestni='Pokusný',
         prijmeni='Králík',
-        kod_oblasti='B',
+        kod_oblasti='#3333',
+        role='dozor',
     )
-    log_msg_prefix = 'Opravovatelé'
-    log_details = {'action': 'import-judges'}
-    template_basename = 'sablona-oprav'
-    root_place: db.Place
+    log_msg_prefix = 'Organizátoři'
+    log_details = {'action': 'import-orgs'}
+    template_basename = 'sablona-organizatori'
 
     def setup(self):
         assert self.round is not None
         self.root_place = db.get_root_place()
 
     def import_row(self, r: mo.csv.Row):
-        assert isinstance(r, JudgeImportRow)
+        assert isinstance(r, OrgsImportRow)
         num_prev_errs = len(self.errors)
         email = self.parse_email(r.email)
         krestni = self.parse_name(r.krestni)
         prijmeni = self.parse_name(r.prijmeni)
         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
+            if not self.check_rights(place):
+                return self.error(f'Nemáte práva na správu soutěže {place.name_locative()}')
 
         if (len(self.errors) > num_prev_errs
                 or email is None
@@ -568,12 +537,7 @@ class JudgeImport(Import):
         if user is None:
             return
 
-        contest = self.obtain_contest(oblast, allow_none=True)
-        place = contest.place if contest else self.root_place
-        if not self.check_rights(place):
-            return self.error(f'Nemáte práva na správu soutěže {place.name_locative()}')
-
-        self.add_role(user, place, db.RoleType.opravovatel)
+        self.add_role(user, oblast, role)
 
 
 @dataclass
@@ -737,10 +701,8 @@ def create_import(user: db.User,
     imp: Import
     if type == ImportType.participants:
         imp = ContestImport()
-    elif type == ImportType.proctors:
-        imp = ProctorImport()
-    elif type == ImportType.judges:
-        imp = JudgeImport()
+    elif type == ImportType.orgs:
+        imp = OrgsImport()
     elif type == ImportType.points:
         imp = PointsImport()
     else:
diff --git a/mo/web/org_contest.py b/mo/web/org_contest.py
index a68bd79a44bb5417931c6efb4075cec51cc8f003..f2524acc0ac046ea583a0581111373d6e8f4ff80 100644
--- a/mo/web/org_contest.py
+++ b/mo/web/org_contest.py
@@ -417,7 +417,7 @@ class ImportForm(FlaskForm):
     file = flask_wtf.file.FileField("Soubor", render_kw={'autofocus': True})
     typ = wtforms.SelectField(
         "Typ dat",
-        choices=[(x.name, x.friendly_name()) for x in (ImportType.participants, ImportType.proctors, ImportType.judges)],
+        choices=[(x.name, x.friendly_name()) for x in (ImportType.participants, ImportType.orgs)],
         coerce=ImportType.coerce,
         default=ImportType.participants,
     )