refine function