Iterator<DirectedSparseEdge> inEdges = q.getInEdges().iterator();
Set<DirectedSparseEdge> removeEdges = new HashSet<DirectedSparseEdge>();
while(inEdges.hasNext()){
DirectedSparseEdge e = inEdges.next();
DirectedSparseEdge eDash = new DirectedSparseEdge(e.getSource(), qDash);
eDash.addUserDatum(JUConstants.LABEL, e.getUserDatum(JUConstants.LABEL), UserData.CLONE);
if(!e.getSource().getSuccessors().contains(qDash))
model.addEdge(eDash);
else{
Edge existing = findEdge(e.getSource(), qDash);
Set<String> labels = (Set<String>)existing.getUserDatum(JUConstants.LABEL);// KIRR: if you use UserData.SHARED, you do not need to copy the result back using put