added deepCopy()