refactor three strategies