diff --git a/mo/web/org_round.py b/mo/web/org_round.py
index c0c698479301cd02961fc08c3b8450ab752e14d6..5966b90ad9fc07c2c1496500da501115f5528dd6 100644
--- a/mo/web/org_round.py
+++ b/mo/web/org_round.py
@@ -416,6 +416,8 @@ class MODateTimeField(wtforms.DateTimeField):
 
 
 class RoundEditForm(FlaskForm):
+    _for_round: Optional[db.Round] = None
+
     name = wtforms.StringField("Název", render_kw={'autofocus': True})
     state = wtforms.SelectField(
         "Stav kola", choices=db.RoundState.choices(), coerce=db.RoundState.coerce,
@@ -445,8 +447,13 @@ class RoundEditForm(FlaskForm):
     submit = wtforms.SubmitField('Uložit')
 
     def validate_state(self, field):
-        if field.data != db.RoundState.preparing and self.ct_tasks_start.data is None:
-            raise ValidationError('Není-li nastaven času začátku soutěže, stav musí být "připravuje se"')
+        if field.data != db.RoundState.preparing:
+            if self.ct_tasks_start.data is None:
+                raise ValidationError('Není-li nastaven času začátku soutěže, stav musí být "připravuje se"')
+            if self._for_round is not None:
+                num_tasks = db.get_session().query(db.Task).filter_by(round=self._for_round).count()
+                if num_tasks == 0:
+                    raise ValidationError('Nejsou-li definovány žádné úlohy, stav musí být "připravuje se"')
 
 
 @app.route('/org/contest/r/<int:id>/edit', methods=('GET', 'POST'))
@@ -455,6 +462,7 @@ def org_round_edit(id: int):
     round, _, rr = get_round_rr(id, Right.manage_round, True)
 
     form = RoundEditForm(obj=round)
+    form._for_round = round
     if round.is_subround():
         # podkolo nemá nastavení výsledkové listiny
         del form.score_mode