Fully working (but a bit clumsy) UI. No error handling.