public final void free() {
		// reset the linkage between this edge and the edge in the other direction, if it exists 
		if(oppositeEdge != null) {
			if(oppositeEdge.oppositeEdge == this) {
				oppositeEdge.oppositeEdge = null;
			}
			oppositeEdge = null;
		}
		this.startNode = null;
		this.endNode = null;
		this.defaultColor = null;
		this.sendingColor = null;
		this.oppositeEdge = null;
		numEdgesOnTheFly --;
		freeEdges.add(this);
	}