if (Layout.joiners.contains(node)) {
if (Layout.getJoiners().contains(node)) {
    private List getDestinationHelper(FlatNode node, SimulationCounter counters, String				 joinerBuffer, FlatNode previous)     {	//if we reached a node then this is a destination	//add to its buffer and	//create a list and add it	if (node.contents instanceof SIRFilter) {	    if (Layout.identities.contains(node)) {		return getDestinationHelper(node.edges[0], counters,					    joinerBuffer, node);	    }	    counters.incrementBufferCount(node);	    LinkedList list = new LinkedList();	    list.add(node);	    return list;	}	else if (node.contents instanceof SIRJoiner) {	    //just pass thru joiners except the joiners that are the 	    //last joiner in a joiner group	    //this list is kept in the layout class	    if (Layout.joiners.contains(node)) {		joinerBuffer = joinerBuffer + getJoinerBuffer(node, previous);		counters.addJoinerReceiveBuffer(node, joinerBuffer);		counters.incrementBufferCount(node);		LinkedList list = new LinkedList();		list.add(node);		return list;	    }	    else {		return getDestinationHelper(node.edges[0], counters, 				      joinerBuffer + getJoinerBuffer(node, 								     previous),				      node);	    }	}	else if (node.contents instanceof SIRSplitter) {	    //here is the meat	    SIRSplitter splitter = (SIRSplitter)node.contents;	    //if splitter send the item out to all arcs	    //build a list of all the dests	    if (splitter.getType() == SIRSplitType.DUPLICATE) {		LinkedList list = new LinkedList();                for (int i = 0; i < node.ways;i++) {		    //decrement counter on arc		    if (counters.getArcCountOutgoing(node, i) == 0)			counters.resetArcCountOutgoing(node, i);		    counters.decrementArcCountOutgoing(node, i);		    list.addAll(getDestinationHelper(node.edges[i], 					    counters, joinerBuffer,					    previous));		}		return list;	    }	    else {		//weighted round robin		for (int i = 0; i < node.ways; i++) {		    if (counters.getArcCountOutgoing(node, i) > 0) {			counters.decrementArcCountOutgoing(node, i);			return getDestinationHelper(node.edges[i], 					      counters, joinerBuffer,					      previous);		    }		}		//none were greater than zero, reset all counters		//and send to the first non-zero weight		for (int i = 0; i < node.ways; i++) {		    counters.resetArcCountOutgoing(node, i);		}		for (int i = 0; i < node.ways; i++) {		    if (counters.getArcCountOutgoing(node, i) > 0) {			counters.decrementArcCountOutgoing(node, i);			return getDestinationHelper(node.edges[i], 					      counters, joinerBuffer,					      previous);		    }		}	    }	    	}	else {	    throw new RuntimeException("SimulateDataItem");	}	return null;    }