Added InputDevice as an abstract input type