add pre copy function