>totally beside the implemetation details another option would be to have an interface spelling out the differences of the action, for instance 2 methods named DeepCopy and ShallowCopy. Goes a bit against polymorphism as a concept, but does not require you to have a mental map on which objects .Clone has DeepCopy functionality added by clearly spelling out the action wanted. More clarity, less magic...
Thanks