To better explain how we adjust priority and generate the desirable fix, we give the pseudo code to explain the main points in our approaches. Generate a Potential Fix Genrate(error){ threshold = 0; while (exist variable v: v.duration != error && v.duration != permanent && v.priority > threshold){ fixes = GenrateWithThreshold(threshold); if(fixes > 0){ fix = randomChoose(fixes); TranslateFeedback(accepctedVars, rejectedVars, threshold); break b1; }else{ threshold++; for(v in ErrorVars){ v.priority = v.priority + 1; } } } showPermanentErrorVariables(); } When an error is selected, we start generating fixes from threshold 0. When no fixes can be generated, we first increase the threshold (line 11), and then generate fixes based on the new threshold. If the variables with duration \error~ and \permanent~ lead to no fixes(line 3-4 return false), we show user these variables. Generate Fix with Threshold List GenrateWithThreshold(Threshold){ for (each v in variables){ if(v.priroty>threshold){ unchangeableVars.add(v); }else{ changableVars.add(v); } } return XiongGenerateFix(unchangeableVars, changableVars); } The variables higher than the threshold are put to the unchangeable set. The variables lower than the threshold are put to the changeable set. Then we use the algorithm in \cite{XHSC12} to genrate fixes(line 9). The following function shows how we translate feedback to priority. Translate Feedback to Priority TranslateFeedback(accepctedVars, rejectedVars, threshold){ for (each v in accepctedVars){ v.priority = 0; } for (each v in rejectedVars){ if (v.duration == fix){ v.priority = v.priority+1; }else if(v.duration == error){ v.priority = threshold +1; }else if(v.duration == permanent ){ v.priority = MAX; } } }