diff --git a/mo/users.py b/mo/users.py
index aac7963b5b38077d1169d3c4f7a38b074998aa2e..1df301f95087741537ae0e9866e787c712798b36 100644
--- a/mo/users.py
+++ b/mo/users.py
@@ -131,10 +131,17 @@ def find_or_create_participant(user: db.User, year: int, school_id: Optional[int
     part = sess.query(db.Participant).get((user.user_id, year))
     is_new = part is None
     if part is None:
+        prev_part = sess.query(db.Participant).filter_by(user_id=user.user_id).order_by(db.Participant.year.desc()).limit(1).one_or_none()
         if not school_id:
-            raise mo.CheckError('Osoba s daným e-mailem zatím není zaregistrovaná do ročníku, je nutné uvést školu.')
+            if prev_part:
+                school_id = prev_part.school
+            else:
+                raise mo.CheckError('Osoba s daným e-mailem zatím není zaregistrovaná do ročníku, je nutné uvést školu.')
         if not birth_year:
-            raise mo.CheckError('Osoba s daným e-mailem zatím není zaregistrovaná do ročníku, je nutné uvést rok narození.')
+            if prev_part:
+                birth_year = prev_part.birth_year
+            else:
+                raise mo.CheckError('Osoba s daným e-mailem zatím není zaregistrovaná do ročníku, je nutné uvést rok narození.')
         if not grade:
             raise mo.CheckError('Osoba s daným e-mailem zatím není zaregistrovaná do ročníku, je nutné uvést ročník.')
         part = db.Participant(user=user, year=year, school=school_id, birth_year=birth_year, grade=grade)