refine based on OO