add etc; refine