diff --git a/mo/imports.py b/mo/imports.py
index 51aa689b4e9a77adbbfc85124a688f0e0e552507..10261ecc146c8d8360c0d0ce5e99403eca4e2a6f 100644
--- a/mo/imports.py
+++ b/mo/imports.py
@@ -149,21 +149,16 @@ class Import:
         return place
 
     def parse_school(self, kod: str) -> Optional[db.Place]:
-        if kod == "":
-            return self.error('Škola je povinná')
-
         if kod in self.school_place_cache:
             return self.school_place_cache[kod]
 
-        place = db.get_place_by_code(kod, fetch_school=True)
-        if not place:
-            return self.error(f'Škola s kódem "{kod}" nenalezena'+
-                    ('. Nechybí vám # na začátku?' if re.fullmatch(r'\d+', kod) else ''))
-
-        if place.type != db.PlaceType.school:
-            return self.error(f'Kód školy "{kod}" neodpovídá škole')
+        try:
+            place = mo.users.validate_and_find_school(kod)
+        except mo.CheckError as e:
+            return self.error(str(e))
 
         self.school_place_cache[kod] = place
+
         return place
 
     def parse_grade(self, rocnik: str, school: Optional[db.School]) -> Optional[str]:
@@ -174,24 +169,21 @@ class Import:
         # lidé připisují všechny možné i nemožné znaky, které vypadají jako apostrof :)
         rocnik = re.sub('[\'"\u00b4\u2019]', "", rocnik)
 
-        if (not re.fullmatch(r'\d(/\d)?', rocnik)):
-            return self.error(f'Ročník má neplatný formát, musí to být buď číslice, nebo číslice/číslice')
-
-        if (not school.is_zs and re.fullmatch(r'\d', rocnik)):
-            return self.error(f'Ročník pro střední školu ({school.place.name}) zapisujte ve formátu číslice/číslice')
-
-        if (not school.is_ss and re.fullmatch(r'\d/\d', rocnik)):
-            return self.error(f'Ročník pro základní školu ({school.place.name}) zapisujte jako číslici 1–9')
-
-        return rocnik
+        try:
+            return mo.users.normalize_grade(rocnik, school)
+        except mo.CheckError as e:
+            return self.error(str(e))
 
     def parse_born(self, rok: str) -> Optional[int]:
         if not re.fullmatch(r'\d{4}', rok):
             return self.error('Rok narození musí být čtyřciferné číslo')
 
         r = int(rok)
-        if r < 2000 or r > 2099:
-            return self.error('Rok narození musí být v intervalu [2000,2099]')
+
+        try:
+            mo.users.validate_born_year(r)
+        except mo.CheckError as e:
+            return self.error(str(e))
 
         return r
 
diff --git a/mo/users.py b/mo/users.py
index 503276570d83c2962f82a7b67b8b28be1192d716..8fd5d0e0068bfc8dcc8b01a1409ed2254bbfd3a7 100644
--- a/mo/users.py
+++ b/mo/users.py
@@ -13,6 +13,41 @@ import mo.util
 import mo.tokens
 
 
+def normalize_grade(rocnik: str, school: db.School) -> str:
+    """ Aktuálně provádí jen kontrolu formátu. """
+
+    if not re.fullmatch(r'\d(/\d)?', rocnik):
+        raise mo.CheckError('Ročník má neplatný formát, musí to být buď číslice, nebo číslice/číslice')
+
+    if not school.is_zs and re.fullmatch(r'\d', rocnik):
+        raise mo.CheckError(f'Ročník pro střední školu ({school.place.name}) zapisujte ve formátu číslice/číslice')
+
+    if not school.is_ss and re.fullmatch(r'\d/\d', rocnik):
+        raise mo.CheckError(f'Ročník pro základní školu ({school.place.name}) zapisujte jako číslici 1–9')
+
+    return rocnik
+
+
+def validate_born_year(r: int) -> None:
+    if r < 2000 or r > 2099:
+        raise mo.CheckError('Rok narození musí být v intervalu [2000,2099]')
+
+
+def validate_and_find_school(kod: str) -> db.Place:
+    if kod == "":
+        raise mo.CheckError('Škola je povinná')
+
+    place = db.get_place_by_code(kod, fetch_school=True)
+    if not place:
+        raise mo.CheckError(f'Škola s kódem "{kod}" nenalezena' +
+                            ('. Nechybí vám # na začátku?' if re.fullmatch(r'\d+', kod) else ''))
+
+    if place.type != db.PlaceType.school:
+        raise mo.CheckError(f'Kód školy "{kod}" neodpovídá škole')
+
+    return place
+
+
 def normalize_email(addr: str) -> str:
     if not re.fullmatch(r'.+@.+', addr):
         raise mo.CheckError('V e-mailové adrese chybí zavináč')