! UPDATE: refactor the Input module.