diff --git a/app/models/user.rb b/app/models/user.rb
index 29a0fb24b48ba0c17919c09a4b468b449290c513..a3d5efae234784070fab14b15e00602f35fee525 100644
--- a/app/models/user.rb
+++ b/app/models/user.rb
@@ -7,6 +7,7 @@ class User < ApplicationRecord
   validates :name, uniqueness: { case_sensitive: false, message: "already in use" }, allow_nil: false
   validates :email, uniqueness: { case_sensitive: false, message: "already in use" }, allow_nil: true, allow_blank: true
 
+  before_validation :cleanup_languages
   validates :languages_from, format: { with: /\A([a-z][a-z])(,[a-z][a-z])*\z/, message: "please use comma-separated two-letter codes"}, allow_blank: true
   validates :languages_from, length: { maximum: 14 }
 
@@ -60,4 +61,9 @@ class User < ApplicationRecord
     valid_tokens = ["gargamel"]
     errors.add(:invitation_token, "is invalid") unless valid_tokens.include?(invitation_token)
   end
+
+  def cleanup_languages
+    self.languages_from = self.languages_from.gsub(/\s+/, '').downcase
+    self.languages_to = self.languages_to.gsub(/\s+/, '').downcase
+  end
 end