With user input and validation. Needs fully testing