diff --git a/mo/users.py b/mo/users.py
index aae885accabad94e1cfbff7efffbb105acbe0c36..851ddf09c345e6b3e4ca7a7b16befb54a5cdb829 100644
--- a/mo/users.py
+++ b/mo/users.py
@@ -103,7 +103,7 @@ def find_or_create_user(email: str, krestni: Optional[str], prijmeni: Optional[s
                 else:
                     raise CheckErrorOrgIsUser('Nelze předefinovat účastníka na organizátora.')
             else:
-                raise CheckError('Nelze předefinovat organizátora na účastníka.')
+                raise mo.CheckError('Nelze předefinovat organizátora na účastníka.')
     return user, is_new, is_change_user_to_org
 
 
diff --git a/mo/web/org_users.py b/mo/web/org_users.py
index 0f8b055ab82e8fef7d32c823f06ff306fb1af05e..9633b3b4f5693ea0438f710ae9e7f5eeed3c2624 100644
--- a/mo/web/org_users.py
+++ b/mo/web/org_users.py
@@ -398,6 +398,7 @@ class UserEditForm(FlaskForm):
     note = wtforms.TextAreaField("Poznámka")
     is_test = wtforms.BooleanField("Testovací účet")
     allow_duplicate_name = wtforms.BooleanField("Přidat účet s duplicitním jménem")
+    allow_change_user_to_org = wtforms.BooleanField("Povolit převedení účastníka na organizátora")
     submit = wtforms.SubmitField("Uložit")
 
 
@@ -422,6 +423,7 @@ def org_user_edit(id: int):
 
     form = UserEditForm(obj=user)
     del form.allow_duplicate_name
+    del form.allow_change_user_to_org
     if (user.is_org or user.is_admin) and not g.user.is_admin:
         # emaily u organizátorů může editovat jen správce
         del form.email
@@ -471,12 +473,35 @@ def org_user_new():
     form = UserEditForm()
     form.submit.label.text = 'Vytvořit'
     is_duplicate_name = False
+    allow_change_user_to_org_show_field = False
     if form.validate_on_submit():
         check = True
 
-        if mo.users.user_by_email(form.email.data) is not None:
-            flash('Účet s daným e-mailem již existuje', 'danger')
-            check = False
+        old_user = mo.users.user_by_email(form.email.data)
+        if old_user is not None:
+            if is_org and not old_user.is_org:
+                allow_change_user_to_org_show_field = True
+                if form.allow_change_user_to_org.data:
+                    try:
+                        mo.users.find_or_create_user(
+                            email=form.email.data,
+                            krestni=form.first_name.data,
+                            prijmeni=form.last_name.data,
+                            is_org=True,
+                            reason="web",
+                            allow_change_user_to_org=True)
+                    except mo.CheckError as e:
+                        flash(str(e), 'danger')
+                        check = False
+                    if check:
+                        mo.db.get_session().commit()
+                        return redirect(url_for('org_org', id=old_user.user_id))
+                if check:
+                    flash('Účet s daným e-mailem již existuje. Převedení účastníka na organizátora můžete povolit ve formuláři.', 'danger')
+                    check = False
+            if check:
+                flash('Účet s daným e-mailem již existuje.', 'danger')
+                check = False
 
         if is_org:
             if (mo.db.get_session().query(db.User)
@@ -514,8 +539,11 @@ def org_user_new():
                 return redirect(url_for('org_org', id=new_user.user_id))
             return redirect(url_for('org_user', id=new_user.user_id))
 
-    if not is_duplicate_name:
+    if not is_duplicate_name and not form.allow_duplicate_name.data:
         del form.allow_duplicate_name
+
+    if not (is_org and allow_change_user_to_org_show_field):
+        del form.allow_change_user_to_org
     return render_template('org_user_new.html', form=form, is_org=is_org)