InputController made generic through interface