improve input system