diff --git a/mo/web/org_contest.py b/mo/web/org_contest.py
index 228469b61c3189f250d433cfdf6608621291559b..60f7c92f80e72d1eb9ad6048f5f69035fce70b16 100644
--- a/mo/web/org_contest.py
+++ b/mo/web/org_contest.py
@@ -1398,8 +1398,8 @@ def org_contest_advance(ct_id: int):
     def redirect_back():
         return redirect(ctx.url_for('org_contest'))
 
-    if round.state != db.RoundState.preparing:
-        flash('Aktuální kolo není ve stavu přípravy', 'danger')
+    if contest.state != db.RoundState.preparing:
+        flash('Tato soutěž není ve stavu přípravy', 'danger')
         return redirect_back()
 
     prev_round = sess.query(db.Round).filter_by(
@@ -1408,10 +1408,6 @@ def org_contest_advance(ct_id: int):
     if prev_round is None:
         flash('Předchozí kolo nenalezeno', 'danger')
         return redirect_back()
-    elif prev_round.state != db.RoundState.closed:
-        # FIXME: Možná kontrolovat stav uzavření všech kol ve skupině kol?
-        flash('Předchozí kolo dosud nebylo ukončeno', 'danger')
-        return redirect_back()
     elif prev_round.level < round.level:
         flash('Předchozí kolo se koná ve vyšší oblasti než toto kolo', 'danger')
         return redirect_back()
@@ -1421,19 +1417,19 @@ def org_contest_advance(ct_id: int):
     reject_by_place_id: Dict[int, int] = {}
     prev_pions_by_place_id: Dict[int, List[Tuple[db.Participation, Optional[decimal.Decimal], bool]]] = {}
 
+    desc_cte = db.place_descendant_cte(contest.place, max_level=prev_round.level)
+    prev_contests = (sess.query(db.Contest)
+                     .filter(db.Contest.round == prev_round)
+                     .filter(db.Contest.place_id.in_(select([desc_cte])))
+                     .options(joinedload(db.Contest.place))
+                     .all())
+    prev_contests.sort(key=lambda c: locale.strxfrm(c.place.name or ""))
+
     form = AdvanceForm()
     if form.validate_on_submit():
         want_select = form.select.data or form.execute_select.data
         want_execute = form.execute.data or form.execute_select.data
 
-        desc_cte = db.place_descendant_cte(contest.place, max_level=prev_round.level)
-        prev_contests = (sess.query(db.Contest)
-                         .filter(db.Contest.round == prev_round)
-                         .filter(db.Contest.place_id.in_(select([desc_cte])))
-                         .options(joinedload(db.Contest.place))
-                         .all())
-        prev_contests.sort(key=lambda c: locale.strxfrm(c.place.name or ""))
-
         accept_by_place_id = {c.place_id: 0 for c in prev_contests}
         reject_by_place_id = {c.place_id: 0 for c in prev_contests}
         prev_pions_by_place_id = {c.place_id: [] for c in prev_contests}
@@ -1528,6 +1524,9 @@ def org_contest_advance(ct_id: int):
     for place_id in prev_pions_by_place_id:
         prev_pions_by_place_id[place_id].sort(key=lambda x: (x[1] or 0, x[0].user.sort_key()), reverse=True)
 
+    if any(pc.state != db.RoundState.closed for pc in prev_contests):
+        flash('Předchozí kolo dosud nebylo ukončeno. Počty bodů nemusí být finální.', 'warning')
+
     return render_template(
         'org_contest_advance.html',
         ctx=ctx,