only clone if necessary