pairs.put(new Pair(prev,newNode),null);
    private void fuse(Pair p) {	System.out.println("Fusing: "+p.work);	SIRContainer parent=p.n1.filter.getParent();	PartitionGroup part=findPartition(p,parent);	//Fuse	SIRFilter result=null;	if(parent instanceof SIRPipeline) {	    result=(SIRFilter)FusePipe.fuse((SIRPipeline)parent,part);	    Lifter.eliminatePipe((SIRPipeline)parent);	} else if(parent instanceof SIRSplitJoin) {	    FuseSplit.fuse((SIRSplitJoin)parent,part);	    result=(SIRFilter)FuseSplit.getLastFused();	    Lifter.eliminateSJ((SIRSplitJoin)parent);	} else	    Utils.fail("Trying to fuse FeedBackLoop");	//Update Rep	Node prev=p.n1.prev;	Node next=p.n2.next;	Node newNode=new Node(result,WorkEstimate.getWorkEstimate(result).getWork(result));	if(prev!=null) {	    prev.next=newNode;	    newNode.prev=prev;	    Pair inter=prev.p2;	    if(inter!=null) { //Reuse old Pair		pairs.remove(inter);		if(newNode==null)		    Utils.fail("GAH");		inter.n2=newNode;		inter.work(prev,newNode);		pairs.put(inter,null);	    } else if(prev.filter.getParent()==newNode.filter.getParent()) { //New Pair		//pairs.put(new Pair(prev,newNode),null);	    } else		System.out.println("DIFFERENT PARENT! "+prev.filter+" "+result+" "+prev.filter.getParent()+" "+result.getParent());	}	if(next!=null) {	    next.prev=newNode;	    newNode.next=next;	    Pair inter=next.p1;	    if(inter!=null) { //Reuse old Pair		pairs.remove(inter);		inter.n1=newNode;		inter.work(next,newNode);		pairs.put(inter,null);	    } else if(next.filter.getParent()==newNode.filter.getParent()) { //New Pair		pairs.put(new Pair(newNode,next),null);	    } else		System.out.println("DIFFERENT PARENT! "+next.filter+" "+result+" "+next.filter.getParent()+" "+result.getParent());	}	//Cleaning up	p.n1=null;	p.n2=null;	pairs.remove(p);    }