Copy/Paste is tightly related to Clone. This is how it can be done :
ProjectService.CopyTo(IFolderItem targetContainer,IFolderItem sourceItem) { if (!targetContainer can accept sourceItem) return;//should never get here we try to paste a folder in a model or something //clone the sourceItem var target = sourceItem.Clone(); var fileItems = target.GetAllItemsRecursive<IFileBased>(); foreach (IFileBased fileBasedItem in fileItems) { //create a copy of the file if it is projectdata to prevent unwanted relations if (item is projectdata/internal) { string newPath = GetSomeNewGuidName(); fileBasedItem.Relocate(newPath); } } }