improve recover logic, recoverCondition()