implement non intrusive move