private void addClade(DrawableNode root, TreeItem cladeInfo) {
		//boolean add = false;
		//We traverse the tree and look for a node that contains this clade, but
		//that does not have any children that contain this clade
		
		if (containsClade(root, cladeInfo.clade)) {
			boolean found = false;
			for(Node kid : root.getOffspring()) {
				if (containsClade((DrawableNode)kid, cladeInfo.clade)) {
					found = true;
					
					addClade((DrawableNode)kid, cladeInfo);
				}
			}
			if (!found) {
				//Here the root contains this clade, but none of root's kids do, so add the clade here
				//System.out.println("Clade " + cladeInfo.clade + " was not found in any kids, but was contained in this node, so adding here");
				DrawableNode newNode = new DrawableNode();
				newNode.addAnnotation("tips", cladeInfo.clade);
				newNode.addAnnotation("support", new Double((double)cladeInfo.count/(double)numInputTrees).toString());
				double height = cladeInfo.height;
				newNode.addAnnotation("height", new Double(height).toString());
				double var = cladeInfo.M2/(double)(cladeInfo.count-1.0);
				//System.out.print("Var: " + var);
				if (var>0) {
					double stdev = Math.sqrt(var);
					//System.out.println(" stdev : " + stdev);
					newNode.addAnnotation("error", new Double(stdev).toString());	
				}
					
				
				newNode.setParent(root);
				root.addOffspring(newNode);
				try {
					double parentHeight = Double.parseDouble( root.getAnnotationValue("height") ) ;
					newNode.setDistToParent( parentHeight- cladeInfo.height);
				}
				catch (Exception nfe) {
					System.err.println("Could not read height value from root node, this means we can't set the node height for a node. Uh oh");
				}
				
				if (cladeInfo.cardinality==1) {
					newNode.setLabel( cladeInfo.clade.replaceAll(labelSep, "") );
				}
			}
		}
	}