protected DrawableNode mergeClades(ArrayList<TreeItem> majorityClades) throws FileParseException {
		DrawableNode root = new DrawableNode();
		progressMonitor.setNote("Merging clades");
		if (majorityClades.size()==0) {
			throw new FileParseException("Error building majority tree: Could not identify majority clades");
		}
		
		if (majorityClades.size()<3) {
			System.out.println("Hmmm... majority clades is very small, majority tree builder may have been messed up..");
		}
		
		TreeItem cladeInfo = majorityClades.get(0);
		root.addAnnotation("tips", cladeInfo.clade);
		root.addAnnotation("height", new Double(cladeInfo.height).toString());
		double var = cladeInfo.M2/(double)(cladeInfo.count-1.0);
		//System.out.println("Root node var : " + var);
		if (var>0) {
			System.out.println("Root node error : " + Math.sqrt(var));
			root.addAnnotation("error", new Double(Math.sqrt(var)).toString());
		}
		for(int i=1; i<majorityClades.size() && (!cancel); i++) {
			addClade(root, majorityClades.get(i));
			//System.out.println("Adding clade to tree root node.. : " + majorityClades.get(i).clade);
		}

		//Tree simpleTree = new Tree(root);
		//System.out.println("Newick tree: " + simpleTree.getNewick());
		if (root.numOffspring()<2) {
			System.out.println("Root has only one or two offspring, merge clades must have failed somehow");
		}
		if (root==null) {
			System.out.println("merge clades is returning a null node");
		}
		return root;
	}