refine clone()