loop proof (hopefully) deep copy implemented