         return Set( crossings.flatMap{ x -> [Edge] in x.edges } )
     }
     
-    public func copy() -> Link {
+    public func copy(name: String? = nil) -> Link {
         let edges = Dictionary(pairs: allEdges.map{ e -> (Int, Edge) in (e.id, e) } )
         
         let copiedEdges = edges.mapValues{ e in Edge(e.id) }

            e.to   = copiedCross[ crossings.index(of: orig.to  )! ]
        }
        
        return Link(name: name, crossings: copiedCross)
    }
    
    public var components: [Component] {

    }
    
    public var mirrored: Link {
        let L = self.copy(name: "m\(name)")
        for x in L.crossings {
            x.changeCrossing()
        }
