diff --git a/mo/web/org_users.py b/mo/web/org_users.py
index f50abeadc7b44f79262b756421d17c0439962c1c..683c0f792e14eb1bed26454724905c16a9ba0dbd 100644
--- a/mo/web/org_users.py
+++ b/mo/web/org_users.py
@@ -572,6 +572,40 @@ class ParticipantEditForm(FlaskForm):
     submit = wtforms.SubmitField("Uložit")
 
 
+@app.route('/org/user/<int:user_id>/participant/<int:year>/delete', methods=('POST',))
+def org_user_participant_delete(user_id: int, year: int):
+    sess = db.get_session()
+    user = mo.users.user_by_uid(user_id)
+    if not user:
+        raise werkzeug.exceptions.NotFound()
+
+    rr = g.gatekeeper.rights_generic()
+    if not rr.can_edit_user(user):
+        raise werkzeug.exceptions.Forbidden()
+
+    participant = sess.query(db.Participant).filter_by(user_id=user.user_id).filter_by(year=year).one_or_none()
+    if participant is None:
+        raise werkzeug.exceptions.NotFound()
+
+    if sess.query(db.Participation).filter_by(user_id=user.user_id).filter(db.Participation.contest.has(db.Contest.round.has(year=year))).count() != 0:
+        flash('Registraci není možná smazat, soutěžící se v daném ročníku účastní nějakého kola.', 'danger')
+    else:
+        sess.delete(participant)
+
+        app.logger.info(f"Participant id {user_id} year {year} deleted")
+        mo.util.log(
+            type=db.LogType.participant,
+            what=user_id,
+            details={'action': 'delete-participant', 'year': year, 'participant': db.row2dict(participant)},
+        )
+
+        sess.commit()
+
+        flash('Registrace smazána.', 'success')
+
+    return redirect(url_for('org_user', id=user_id))
+
+
 @app.route('/org/user/<int:user_id>/participant/<int:year>/edit', methods=('GET', 'POST'))
 def org_user_participant_edit(user_id: int, year: int):
     sess = db.get_session()