Copying a type is simply taking a duplicate twin of the graph reachable from the type's root. Sharing of pointers coming from the fact that type parameters co-occur are recorded in a parameter substitution table (in our implementation, simply a java.util.HashMap) along the way, and thus consistent pointer sharing can be easily made effective.