support user choose io