refining algorithms