Separate input gathering from action dispatch.