First final version (unpolished, not very responsive)