diff --git a/mo/web/fields.py b/mo/web/fields.py
index 85eeb71fb6655b2f6f2b047968c7d92ee0c949ad..5fcbb6b0c63b460973b63dae11bf2d8fa5224a11 100644
--- a/mo/web/fields.py
+++ b/mo/web/fields.py
@@ -9,6 +9,19 @@ import mo.users
 import mo.db as db
 
 
+class Stripped:
+    """Zkombinuje se s třídou z WTForms a přidá automatické ořezávání mezer."""
+
+    def process_formdata(self, valuelist):
+        if valuelist:
+            valuelist = [x.strip() for x in valuelist]
+        super().process_formdata(valuelist)
+
+
+class String(Stripped, wtforms.StringField):
+    pass
+
+
 class OptionalInt(wtforms.IntegerField):
     widget = NumberInput()
 
@@ -40,7 +53,7 @@ class Decimal(wtforms.DecimalField):
         return super(Decimal, self)._value()
 
 
-class IntList(wtforms.StringField):
+class IntList(String):
     list = None
 
     def __init__(self, label="", validators=None, **kwargs):
@@ -54,13 +67,13 @@ class IntList(wtforms.StringField):
             except mo.CheckError as e:
                 raise wtforms.ValidationError(str(e))
 
+
 class Points(Decimal):
     def __init__(self, label="Body", validators=None, **kwargs):
         super().__init__(label, validators, **kwargs)
 
 
-
-class Email(EmailField):
+class Email(Stripped, EmailField):
     def __init__(self, label="E-mail", validators=None, **kwargs):
         super().__init__(label, validators, **kwargs)
 
@@ -72,7 +85,7 @@ class Email(EmailField):
                 raise wtforms.ValidationError(str(e))
 
 
-class Grade(wtforms.StringField):
+class Grade(String):
     """Pro validaci hledá ve formuláři form.school a podle ní rozlišuje SŠ a ZŠ """
     default_description = "Pro základní školy je to číslo od 1 do 9, pro <var>k</var>-tý ročník <var>r</var>-leté střední školy má formát <var>k</var>/<var>r</var>."
     validate_grade = True
@@ -104,7 +117,7 @@ class BirthYear(OptionalInt):
                 raise wtforms.ValidationError(str(e))
 
 
-class Name(wtforms.StringField):
+class Name(String):
     def pre_validate(field, form):
         # XXX: Tato kontrola úmyslně není striktní, aby prošla i jména jako 'de Beer'
         if field.data:
@@ -124,7 +137,7 @@ class LastName(Name):
         super().__init__(label, validators, **kwargs)
 
 
-class Place(wtforms.StringField):
+class Place(String):
     def __init__(self, label="Místo", validators=None, **kwargs):
         super().__init__(label, validators, **kwargs)
         self.render_kw = {"placeholder": "Kód"}
@@ -142,7 +155,7 @@ class Place(wtforms.StringField):
                 field.place_error = "Zadané místo nenalezeno."
 
     def get_place(field) -> Optional[db.Place]:
-        """ Kešuje výsledek v field.place"""
+        """Kešuje výsledek v field.place"""
         if not field.place_loaded:
             field.place_loaded = True
             field.load_place()
@@ -182,7 +195,11 @@ class School(Place):
                 field.place_error = str(e)
 
 
-class NewPassword(wtforms.PasswordField):
+class Password(Stripped, wtforms.PasswordField):
+    pass
+
+
+class NewPassword(Password):
     def __init__(self, label="Nové heslo", validators=None, **kwargs):
         super().__init__(label, validators, **kwargs)
 
@@ -192,7 +209,7 @@ class NewPassword(wtforms.PasswordField):
                 raise wtforms.ValidationError(mo.users.password_help)
 
 
-class RepeatPassword(wtforms.PasswordField):
+class RepeatPassword(Password):
     """Pro validaci hledá ve formuláři form.new_passwd a s ním porovnává."""
 
     def __init__(self, label="Zopakujte heslo", validators=None, **kwargs):