the program has suffer refactor