add fail case; refactor option