diff --git a/src/data/BioTree.java b/src/data/BioTree.java
index 97ec7ed0dcde1b616d81fc38d9f2ede1a6b7bf93..b8039458a19754504419c68cb103cee8d84ec77c 100644
--- a/src/data/BioTree.java
+++ b/src/data/BioTree.java
@@ -292,17 +292,24 @@ public class BioTree implements Serializable {
 	public static Iterable<Integer> getNonEmptyChildren(int taxonId){
 		ArrayList<Integer> result = new ArrayList<Integer>();
 		
-		getNonEmptyChildren(idNodes.get(taxonId), result);
+		getAllChildren(idNodes.get(taxonId), result, false);
 		
 		return result;
+	}
+	
+	public static Iterable<Integer> getAllChildren(int taxonId){
+		ArrayList<Integer> result = new ArrayList<Integer>();
 		
+		getAllChildren(idNodes.get(taxonId), result, true);
+		
+		return result;
 	}
 	
-	private static void getNonEmptyChildren(TaxonNode txNode, ArrayList<Integer> result) {
+	private static void getAllChildren(TaxonNode txNode, ArrayList<Integer> result, boolean emptyAllowed) {
 		if (txNode == null) return;
-		if (txNode.getCount() > 0) result.add(txNode.getTaxonId());
+		if ((txNode.getCount() > 0) || emptyAllowed) result.add(txNode.getTaxonId());
 		for (TaxonNode tx: txNode.getChildren()) {
-			getNonEmptyChildren(tx, result);
+			getAllChildren(tx, result, emptyAllowed);
 		}
 	}
 	
diff --git a/src/model/TrawlExpert.java b/src/model/TrawlExpert.java
index a0a1ed490366e6760ad7b60002fa7af1297b5f50..7e4ba47ddb77828a8abac9fd7ab50cf4256878c6 100644
--- a/src/model/TrawlExpert.java
+++ b/src/model/TrawlExpert.java
@@ -1,6 +1,7 @@
 package model;
 
 import java.io.IOException;
+import java.util.ArrayList;
 
 import org.json.simple.parser.ParseException;
 
@@ -54,4 +55,13 @@ public class TrawlExpert {
 		}
 		return null;
 	}
+	
+	public Iterable<Integer> getNonEmptyChildren(int taxonId){
+		return BioTree.getNonEmptyChildren(taxonId);
+	}
+	
+	public Iterable<Integer> getAllChildren(int taxonId){
+		return BioTree.getAllChildren(taxonId);
+	}
+	
 }
diff --git a/src/search/GeneralCompare.java b/src/search/GeneralCompare.java
deleted file mode 100644
index 215fddf629ae39a3fec841758c91034af5e200f2..0000000000000000000000000000000000000000
--- a/src/search/GeneralCompare.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package search;
-
-public interface GeneralCompare<T> {
-	public int compare(Comparable<T> a1, Comparable<T> a2);
-}
diff --git a/tomcat/webapps/Trawl/bioresult.jsp b/tomcat/webapps/Trawl/bioresult.jsp
index 36460f354acf95ccf8bf673b541edf666839d259..01bbb822ad90a9a463f1500cf76ff348632c5db4 100644
--- a/tomcat/webapps/Trawl/bioresult.jsp
+++ b/tomcat/webapps/Trawl/bioresult.jsp
@@ -1,6 +1,9 @@
 <%@page import="org.json.simple.JSONArray"%>
 <%@page import="sort.MergeSort"%>
 <%@page import="sort.GeneralCompare"%>
+<%@page import="search.RedBlackTree"%>
+<%@page import="search.Field"%>
+<%@page import="data.TaxonType"%>
 <%@page import="org.json.simple.parser.JSONParser"%>
 <%@ page import="java.util.*, data.Record, model.TrawlExpert, search.BST, search.BasicSearchResult, org.json.simple.JSONObject, data.TaxonNode" %>
 <%
@@ -10,27 +13,59 @@
 	
 	Integer taxonId = (int) (long) req.get("taxId");
 	//System.out.println(taxonId);
-	ArrayList<TaxonNode> txNodes = ((ArrayList<TaxonNode>) te.getTaxonRecord(taxonId).getChildren());
-	TaxonNode[] txNodesAr = txNodes.toArray(new TaxonNode[txNodes.size()]);
 	
-	GeneralCompare<TaxonNode> gc = (tn0, tn1) -> ((TaxonNode) tn0).getName().compareTo(((TaxonNode) tn1).getName());
-	MergeSort.sort(txNodesAr, 0, txNodesAr.length - 1, gc);
+	//get all children
+	ArrayList<Integer> txIds = ((ArrayList<Integer>) te.getAllChildren(taxonId));
+	
+	//GeneralCompare<String> gc = (t0, t1) -> ((String) t0).compareTo((String)t1);
+	//Field<String, ArrayList<TaxonNode>> fld = tn -> ((ArrayList<TaxonNode>) tn).get(0).getName().toString().toLowerCase();
+	//RedBlackTree<String, ArrayList<TaxonNode>> tt = new RedBlackTree<String, ArrayList<TaxonNode>>(fld, gc);
 
+	BST<TaxonType, ArrayList<TaxonNode>> tt = new BST<TaxonType, ArrayList<TaxonNode>>();
+	
+	//add to BST in bins
+	for (Integer txId: txIds){
+		TaxonNode txNode = te.getTaxonRecord(txId);
+		ArrayList<TaxonNode> txList = tt.get(txNode.getTaxonType());
+		if (txList == null){
+			txList = new ArrayList<TaxonNode>();
+			txList.add(txNode);
+			tt.put(txNode.getTaxonType(), txList);
+		} else{
+			txList.add(txNode);
+		}
+	}
+	//initialize JSON objects and arrays
 	JSONObject js = new JSONObject();
 	JSONArray taxonIds = new JSONArray();
 	JSONArray names    = new JSONArray();
 	
-	taxonIds.add(-1);
-	names.add("Any");
-	
-	for (TaxonNode tx: txNodesAr){
-		taxonIds.add(tx.getTaxonId());
-		names.add(tx.getName());
+	GeneralCompare<TaxonNode> gc = (tn0, tn1) -> ((TaxonNode) tn0).getName().compareTo(((TaxonNode) tn1).getName());
+
+	//iterate through all results
+	for(TaxonType taxType: tt.keys()){
+		String name = taxType.toString().toLowerCase();
+		ArrayList<TaxonNode> al = tt.get(taxType);
+		TaxonNode[] txNodesAr = al.toArray(new TaxonNode[al.size()]);
+		//sort result
+		MergeSort.sort(txNodesAr, 0, txNodesAr.length - 1, gc);
+		taxonIds = new JSONArray();
+		names = new JSONArray();
+		
+		taxonIds.add(-1);
+		names.add("Any");
+		
+		for (TaxonNode tx: txNodesAr){
+			taxonIds.add(tx.getTaxonId());
+			names.add(tx.getName());
+		}
+		JSONObject inner = new JSONObject();
+		inner.put("taxonName", names);
+		inner.put("taxonId", taxonIds);
+		
+		js.put(name, inner);
 	}
 	
-	js.put("taxonId", taxonIds);
-	js.put("taxonName", names);
-	
 	out.print(js.toJSONString());
 	
 %>
\ No newline at end of file
diff --git a/tomcat/webapps/Trawl/index.jsp b/tomcat/webapps/Trawl/index.jsp
index 535087a7ca62bbf68ff959090f6fc24476a94d09..a674f48b49434067511beb590b286ecd18dd1682 100644
--- a/tomcat/webapps/Trawl/index.jsp
+++ b/tomcat/webapps/Trawl/index.jsp
@@ -10,7 +10,7 @@ Double Handle Slider Modified from: http://jqueryui.com/slider/#range
     <meta name="viewport" content="width=device-width, initial-scale=1.0">
     <meta name="keywords" content="insert, some, keywords"> <!--TODO-->
     <meta name="description" content="insert a description"> <!--TODO-->
-    <title>TrawlTool</title>
+    <title>TrawlExpert</title>
     <link rel="stylesheet" type="text/css" href="style.css">
 
     <!--JQuery-->
@@ -30,7 +30,7 @@ Double Handle Slider Modified from: http://jqueryui.com/slider/#range
 <body>
     <header>
         <div class="headerWrapper">
-            <a href="index.jsp" >TrawlTool</a>
+            <a href="index.jsp" >TrawlExpert</a>
             <span class="nav-bar">
                 <a href="about.html">About</a> |
                 <a href="index.html" target="_blank">Gitlab/Github Nonfunc!</a>