diff --git a/mo/db.py b/mo/db.py
index 429a930264c8bebe47786fad93eb0185a1671cb6..8e6178285a1850c73eecee5a04740462aba8d54b 100644
--- a/mo/db.py
+++ b/mo/db.py
@@ -123,6 +123,8 @@ class Place(Base):
 
     def name_locative(self):
         name = self.name
+        if self.type == PlaceType.site:
+            return f'v soutěžním místě {name}'
         if self.level == 1:
             name = name.replace("ý kraj", "ém").replace("Kraj ", "")
         return place_levels[self.level].in_name() + " " + name
diff --git a/mo/web/org_contest.py b/mo/web/org_contest.py
index c64aab1b5b516185b1519b0032d7f5150dc14b3b..d43ed413bbcee09d2393ccfa6390583309d1a607 100644
--- a/mo/web/org_contest.py
+++ b/mo/web/org_contest.py
@@ -240,87 +240,22 @@ class ParticipantAddForm(FlaskForm):
     email = wtforms.StringField("E-mail", validators=[validators.Required()])
     first_name = wtforms.StringField("Křestní jméno", validators=[validators.Required()])
     last_name = wtforms.StringField("Příjmení", validators=[validators.Required()])
-    school_code = wtforms.StringField("Kód školy",
-                                      validators=[validators.Required()],
-                                      description="Viz katalog škol na tomto webu")
-    rocnik = wtforms.StringField(
-            "Ročník",
-            description="Pro základní školy je to číslo od 1 do 9, pro <var>k</var>-tý ročník <var>r</var>-leté střední školy má formát <var>k</var>/<var>r</var>.",
-            validators=[validators.Required()])
+    school = wtforms.SelectField("Škola", validators=[validators.Required()], coerce=int)
+    school_code = wtforms.StringField("Kód školy", validators=[validators.Required()])
+    rocnik = wtforms.StringField("Ročník", description="Pro základní školy je to číslo od 1 do 9, pro <var>k</var>-tý ročník <var>r</var>-leté střední školy má formát <var>k</var>/<var>r</var>.",
+                                 validators=[validators.Required()])
     rok_naroz = wtforms.StringField("Rok narození")
-    participation_place = wtforms.HiddenField('Soutěžní místo')
+    participation_place = wtforms.StringField("Kód soutěžního místa")
     save = wtforms.SubmitField("Přidat")
 
     def get_school_code(self) -> str:
-        return self.school_code.data
+        return self.school_code.data if self.school_code else '#'+self.school.data
 
-    def get_participation_place(self) -> str:
-        return '#'+str(self.participation_place.data)
+    def set_descriptions(self, contest: db.Contest):
+        self.school_code.description = 'Kód školy najdete v <a href="' + url_for('org_place', id=contest.place.place_id)+ '">katalogu míst</a>.'
+        self.participation_place.description = 'Pokud účastník soutěží někde jinde než ' + contest.place.name_locative() + ', vyplňte <a href="' + url_for('org_place', id=contest.place.place_id)+ '">kód místa</a>. Dozor na tomto místě pak může za účastníka odevzdávat řešení.'
 
-    def set_site(self, site: db.Place):
-        self.participation_place.data = site.place_id
-
-    def validate_email(form, field):
-        try:
-            field.data = mo.users.normalize_email(field.data)
-        except mo.CheckError as e:
-            raise wtforms.ValidationError(str(e))
-
-
-
-class ParticipantAddFormWithSite(FlaskForm):
-    email = wtforms.StringField("E-mail", validators=[validators.Required()])
-    first_name = wtforms.StringField("Křestní jméno", validators=[validators.Required()])
-    last_name = wtforms.StringField("Příjmení", validators=[validators.Required()])
-    school_code = wtforms.StringField("Kód školy",
-                                      validators=[validators.Required()],
-                                      description="Viz katalog škol na tomto webu")
-    rocnik = wtforms.StringField(
-            "Ročník",
-            description="Pro základní školy je to číslo od 1 do 9, pro <var>k</var>-tý ročník <var>r</var>-leté střední školy má formát <var>k</var>/<var>r</var>.",
-            validators=[validators.Required()])
-    rok_naroz = wtforms.StringField("Rok narození")
-    participation_place = wtforms.StringField('Soutěžní místo')
-    save = wtforms.SubmitField("Přidat")
-
-    def get_school_code(self) -> str:
-        return self.school_code.data
-
-    def get_participation_place(self) -> str:
-        return self.participation_place.data
-
-    def set_contest(self, contest: db.Contest):
-        self.participation_place.description = "Vyplňte, pokud účastník soutěží někde jinde než: "+contest.place.name+". Dozor na soutěžním místě má pak právo odevzdávat za účastníka řešení."
-
-    def validate_email(form, field):
-        try:
-            field.data = mo.users.normalize_email(field.data)
-        except mo.CheckError as e:
-            raise wtforms.ValidationError(str(e))
-
-
-class ParticipantAddFormWithSchoolSelect(FlaskForm):
-    email = wtforms.StringField("E-mail", validators=[validators.Required()])
-    first_name = wtforms.StringField("Křestní jméno", validators=[validators.Required()])
-    last_name = wtforms.StringField("Příjmení", validators=[validators.Required()])
-    school_code = wtforms.SelectField("Škola",
-                                      validators=[validators.Required()],
-                                      coerce=int)
-    rocnik = wtforms.StringField(
-            "Ročník",
-            description="Pro základní školy je to číslo od 1 do 9, pro <var>k</var>-tý ročník <var>r</var>-leté střední školy má formát <var>k</var>/<var>r</var>.",
-            validators=[validators.Required()])
-    rok_naroz = wtforms.StringField("Rok narození")
-    participation_place = wtforms.SelectField('Soutěžní místo', coerce=int)
-    save = wtforms.SubmitField("Přidat")
-
-    def get_school_code(self) -> str:
-        return '#'+str(self.school_code.data)
-
-    def get_participation_place(self) -> str:
-        return '#'+str(self.participation_place.data)
-
-    def set_contest(self, contest: db.Contest, site: db.Place):
+    def fill_schools(self, contest: db.Contest):
         sess = db.get_session()
 
         schools = []
@@ -340,13 +275,13 @@ class ParticipantAddFormWithSchoolSelect(FlaskForm):
         elif contest.place.level == 4:
             schools = [contest.place]
 
-        self.school_code.choices = [(s.place_id, s.name) for s in schools]
+        self.school.choices = [(s.place_id, s.name) for s in schools]
 
-        places = [contest.place] + schools
-        self.participation_place.choices = [(p.place_id, p.name) for p in places]
-        if site:
-            self.participation_place.data = site.place_id
-            self.participation_place.render_kw={'disabled': True}
+    def validate_email(form, field):
+        try:
+            field.data = mo.users.normalize_email(field.data)
+        except mo.CheckError as e:
+            raise wtforms.ValidationError(str(e))
 
 
 def get_contest(id: int) -> Tuple[db.Contest, db.Contest]:
@@ -559,18 +494,16 @@ def org_contest_add_user(id: int, site_id: Optional[int] = None):
     contest, master_contest, site, rr = get_contest_site_rr(id, site_id, right_needed=Right.manage_contest)
 
     errs = None
-    form = None
+    form = ParticipantAddForm()
+    form.set_descriptions(master_contest)
+
     if master_contest.place.level >= 2:
-        form = ParticipantAddFormWithSchoolSelect()
-        form.set_contest(master_contest, site)
-    elif site:
-        form = ParticipantAddForm()
-        form.school_code.description = 'Kód školy najdete v <a href="' + url_for('org_place', id=master_contest.place.place_id)+ '">katalogu míst</a>.'
-        form.set_site(site)
+        del form.school_code
+        form.fill_schools(master_contest)
     else:
-        form = ParticipantAddFormWithSite()
-        form.school_code.description = 'Kód školy najdete v <a href="' + url_for('org_place', id=master_contest.place.place_id)+ '">katalogu míst</a>.'
-        form.set_contest(master_contest)
+        del form.school
+    if site:
+        del form.participation_place
 
     if form.validate_on_submit():
         row = ContestImportRow()
@@ -580,7 +513,8 @@ def org_contest_add_user(id: int, site_id: Optional[int] = None):
         row.kod_skoly = form.get_school_code()
         row.rocnik = form.rocnik.data
         row.rok_naroz = form.rok_naroz.data
-        row.kod_mista = form.get_participation_place()
+        if form.participation_place:
+            row.kod_mista = form.participation_place.data
 
         imp = ContestImport()
         imp.user = g.user