diff --git a/src/biotree/BioTree.java b/src/biotree/BioTree.java
index 891480d81191ac7c9eb675ee92ef3ab4f84b3ce2..98b6683a7e1c1b72db3bdf113443b8e0b6110ffe 100644
--- a/src/biotree/BioTree.java
+++ b/src/biotree/BioTree.java
@@ -2,18 +2,36 @@ package biotree;
 
 import java.io.IOException;
 
+import org.json.simple.parser.ParseException;
+
 import search.BST;
 
 public class BioTree {
 	private static BST<Integer, TaxonNode> nodes;
-	private static int n;
+	
+	public static void main(String[] args) {
+		init();
+		processRecord(125125);
+		processRecord(125125);
+		processRecord(125123);
+		processRecord(125122);
+		processRecord(125392);
+		processRecord(125391);
+		System.out.println(nodes.size());
+		System.out.println(nodes.get(123207));
+		Iterable<Integer> keys = nodes.keys();
+		for (Integer i: keys) {
+			System.out.println(nodes.get(i));
+			//System.out.println(String.format("%-26s %s", nodes.get(i).getName(), nodes.get(i).getTaxonType()));
+		}
+		printTree(nodes.get(2), 0);
+	}
 	
 	/**
 	 * Initialize species abstract object
 	 */
 	public static void init() {
 		nodes = new BST<Integer, TaxonNode>();
-		n = 0;
 	}
 
 	/**
@@ -67,17 +85,34 @@ public class BioTree {
 	 * @param taxonId
 	 */
 	private static void processTaxonId(int taxonId) {
-		TaxonNode[] newNodes = WormsAPI.idToClassification(taxonId);
-		for (int i = newNodes.length - 1; i > 0; i--) {
-			TaxonNode tx = newNodes[i];
+		TaxonNode[] newNodes = null;
+		try {
+			newNodes = WormsAPI.idToClassification(taxonId);
+		} catch (IOException | ParseException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+		TaxonNode tx = nodes.get(newNodes[newNodes.length - 1].getTaxonId());
+		if (tx != null) {
+			tx.incCount();
+		} else {
+			newNodes[newNodes.length - 1].incCount();
+		}
+		for (int i = newNodes.length - 1; i >= 0; i--) {
+			tx = newNodes[i];
 			TaxonNode result = nodes.get(tx.getTaxonId());
-			TaxonNode parent = nodes.get(newNodes[i - 1].getTaxonId());
-			if (parent == null) parent = newNodes[i - 1];
+			TaxonNode parent = null;
+			if (i > 0) {
+				parent = nodes.get(newNodes[i - 1].getTaxonId());
+				if (parent == null) parent = newNodes[i - 1];
+			}
 			if (result == null) { //if node is not found, add it
+				nodes.put(tx.getTaxonId(), tx);
 				tx.setParent(parent);
-				parent.addChild(tx);
+				if (parent != null) parent.addChild(tx);
 			} else
 				break; //stop loop if this node already exists in the tree
+
 		}
 	}
 
@@ -91,4 +126,11 @@ public class BioTree {
 	public static TaxonNode getTaxonRecord(int taxonId) {
 		return nodes.get(taxonId);
 	}
+	
+	public static void printTree(TaxonNode tx, int level) {
+		String padd = new String(new char[level * 4]).replace('\0', ' ');
+		System.out.format(padd + "%s %d\n", tx.getName(), tx.getCount());
+		for (TaxonNode tx2: tx.getChildren())
+			printTree(tx2, level + 1);
+	}
 }