Full review (do not merge)

Model, add a validator.

-- 
Later,
 Lukas #lzap Zapletal