diff --git a/mo/web/org_contest.py b/mo/web/org_contest.py
index c642a1ca1219be1114bfa08ef1b29870fab88685..1583d0520eaaa620fb3d0023fbde6b554a0785a0 100644
--- a/mo/web/org_contest.py
+++ b/mo/web/org_contest.py
@@ -190,6 +190,7 @@ class ParticipantsActionForm(FlaskForm):
 
 class DownloadButtonForm(FlaskForm):
     download = wtforms.SubmitField('Stáhnout všechna řešení jako ZIP')
+    download_feedback = wtforms.SubmitField('Stáhnout opravená jako ZIP')
 
 
 def get_contest(id: int) -> db.Contest:
@@ -691,6 +692,23 @@ def get_solutions_query(
     return query
 
 
+def download_solutions(form: DownloadButtonForm, solutions: List[db.Solution], subject: str) -> bool:
+    if not form.validate_on_submit():
+        return False
+
+    if form.download.data:
+        paper_ids = [sol.final_submit for sol in solutions if sol.final_submit is not None]
+        mo.jobs.submit.schedule_download_submits(paper_ids, f'Odevzdaná řešení {subject}', g.user)
+        flash('Příprava odevzdaných řešení ke stažení zahájena.', 'success')
+        return True
+
+    if form.download_feedback.data:
+        paper_ids = [sol.final_feedback or sol.final_submit for sol in solutions if sol.final_submit is not None]
+        mo.jobs.submit.schedule_download_submits(paper_ids, f'Opravená řešení {subject}', g.user)
+        flash('Příprava opravených řešení ke stažení zahájena.', 'success')
+        return True
+
+
 @app.route('/org/contest/c/<int:contest_id>/task/<int:task_id>/', methods=('GET', 'POST'))
 @app.route('/org/contest/c/<int:contest_id>/site/<int:site_id>/task/<int:task_id>/', methods=('GET', 'POST'))
 def org_contest_task_submits(contest_id: int, task_id: int, site_id: Optional[int] = None):
@@ -702,12 +720,8 @@ def org_contest_task_submits(contest_id: int, task_id: int, site_id: Optional[in
     rows.sort(key=lambda r: r[0].user.sort_key())
 
     download_form = DownloadButtonForm()
-    if request.method == 'POST' and download_form.validate_on_submit():
-        if download_form.download.data:
-            paper_ids = [sol.final_submit for pion, sol in rows if sol is not None and sol.final_submit is not None]
-            mo.jobs.submit.schedule_download_submits(paper_ids, f'Odevzdaná řešení úlohy {sc.task.code}', g.user)
-            flash('Příprava řešení ke stažení zahájena.', 'success')
-            return redirect(url_for('org_jobs'))
+    if request.method == 'POST' and download_solutions(download_form, [sol for pion, sol in rows if sol is not None], f'úlohy {sc.task.code}'):
+        return redirect(url_for('org_jobs'))
 
     # Count papers for each solution
     paper_counts = {}
@@ -833,12 +847,8 @@ def org_contest_solutions(id: int, site_id: Optional[int] = None):
         paper_counts[(user_id, task_id, type.name)] = count
 
     download_form = DownloadButtonForm()
-    if request.method == 'POST' and download_form.validate_on_submit():
-        if download_form.download.data:
-            paper_ids = [sol.final_submit for sol in sols if sol is not None and sol.final_submit is not None]
-            mo.jobs.submit.schedule_download_submits(paper_ids, 'Odevzdaná řešení', g.user)
-            flash('Příprava řešení ke stažení zahájena.', 'success')
-            return redirect(url_for('org_jobs'))
+    if request.method == 'POST' and download_solutions(download_form, [sol for sol in sols if sol is not None], sc.round.round_code()):
+        return redirect(url_for('org_jobs'))
 
     task_sols: Dict[int, Dict[int, db.Solution]] = {}
     for t in tasks: