diff --git a/uk/ac/sanger/artemis/components/DatabaseEntrySource.java b/uk/ac/sanger/artemis/components/DatabaseEntrySource.java
index f69cf39dae553d5d9fcccc82a89922884cc5c642..4b7bdedf44c5c47856608a21d1dca9aae9106901 100644
--- a/uk/ac/sanger/artemis/components/DatabaseEntrySource.java
+++ b/uk/ac/sanger/artemis/components/DatabaseEntrySource.java
@@ -28,10 +28,6 @@ import javax.swing.*;
 import javax.swing.tree.DefaultMutableTreeNode;
 import javax.swing.tree.TreeSelectionModel;
 import javax.swing.tree.TreePath;
-import java.awt.event.MouseListener;
-import java.awt.event.MouseAdapter;
-import java.awt.event.MouseEvent;
-import java.awt.Cursor;
 import java.awt.Container;
 import java.awt.GridLayout;
 import java.net.*;
@@ -189,7 +185,7 @@ public class DatabaseEntrySource implements EntrySource
     DatabaseDocument doc = new DatabaseDocument(location);
 
     entries = doc.getDatabaseEntries();
-    Vector organism   = doc.getOrganism();
+    Vector organism = doc.getOrganism();
 
     DefaultMutableTreeNode top =
         new DefaultMutableTreeNode("PSU Organism List");
@@ -206,12 +202,19 @@ public class DatabaseEntrySource implements EntrySource
   * @return     node that is currently selected
   *
   */
-  protected DefaultMutableTreeNode getSelectedNode(JTree tree)
+  protected String getSelectedNode(JTree tree)
   {
     TreePath path = tree.getLeadSelectionPath();
     if(path == null)
       return null;
-    return (DefaultMutableTreeNode)path.getLastPathComponent();
+
+    DefaultMutableTreeNode seq_node  = (DefaultMutableTreeNode)path.getLastPathComponent();
+    DefaultMutableTreeNode type_node = (DefaultMutableTreeNode)seq_node.getParent();
+    DefaultMutableTreeNode org_node  = (DefaultMutableTreeNode)type_node.getParent();
+
+    return (String)org_node.getUserObject() + " - " +
+           (String)type_node.getUserObject() + " - " +
+           (String)seq_node.getUserObject();
   }
 
   /**
@@ -228,6 +231,7 @@ public class DatabaseEntrySource implements EntrySource
     Enumeration enum_org = org.elements();
     DefaultMutableTreeNode org_node;
     DefaultMutableTreeNode seq_node;
+    DefaultMutableTreeNode typ_node;
 
     while(enum_org.hasMoreElements())
     { 
@@ -235,14 +239,31 @@ public class DatabaseEntrySource implements EntrySource
       org_node = new DefaultMutableTreeNode(name);
       top.add(org_node);
 
+      Hashtable seq_type_node = new Hashtable();
+
       Enumeration enum_seq = organism.keys();
       while(enum_seq.hasMoreElements())
       {
         String seq_name = (String)enum_seq.nextElement();
         if(seq_name.startsWith(name))
         {
+          int ind1 = seq_name.indexOf( "- ");
+          int ind2 = seq_name.lastIndexOf("- ");
+
+          String type =  seq_name.substring(ind1+2,ind2).trim();
+          seq_name = seq_name.substring(ind2+2).trim();
+
+          if(!seq_type_node.containsKey(type))
+          {   
+            typ_node = new DefaultMutableTreeNode(type);
+            seq_type_node.put(type,typ_node);
+            org_node.add(typ_node);          
+          }
+          else
+            typ_node= (DefaultMutableTreeNode)seq_type_node.get(type);
+         
           seq_node = new DefaultMutableTreeNode(seq_name);
-          org_node.add(seq_node);
+          typ_node.add(seq_node);
         }
       }
     }
diff --git a/uk/ac/sanger/artemis/components/DatabaseJFrame.java b/uk/ac/sanger/artemis/components/DatabaseJFrame.java
index 81d6236b9b39f89beedfe09f49def0d2e687fa44..0fb34b5f8c680fa814126a2fbb10b4b6b535127f 100644
--- a/uk/ac/sanger/artemis/components/DatabaseJFrame.java
+++ b/uk/ac/sanger/artemis/components/DatabaseJFrame.java
@@ -20,7 +20,7 @@
  * along with this program; if not, write to the Free Software
  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  *
- * $Header: //tmp/pathsoft/artemis/uk/ac/sanger/artemis/components/DatabaseJFrame.java,v 1.3 2005-06-01 15:07:31 tjc Exp $
+ * $Header: //tmp/pathsoft/artemis/uk/ac/sanger/artemis/components/DatabaseJFrame.java,v 1.4 2005-06-18 07:01:16 tjc Exp $
  */
 
 package uk.ac.sanger.artemis.components;
@@ -115,11 +115,8 @@ public class DatabaseJFrame extends JFrame
     Cursor cbusy = new Cursor(Cursor.WAIT_CURSOR);
     Cursor cdone = new Cursor(Cursor.DEFAULT_CURSOR);
 
-    DefaultMutableTreeNode node = entry_source.getSelectedNode(tree);
-    if(node == null || !node.isLeaf())
-      return;
-
-    String id =  entry_source.getEntryID((String)node.getUserObject());
+    String node_name = entry_source.getSelectedNode(tree);
+    String id =  entry_source.getEntryID(node_name);
     if(id != null)
       getEntryEditFromDatabase(id, entry_source, tree, art_main);
   }
diff --git a/uk/ac/sanger/artemis/util/DatabaseDocument.java b/uk/ac/sanger/artemis/util/DatabaseDocument.java
index 7bd1affa4497180da556996f96487c3b9de4d7b0..bee313c20216f855f89418d59e78d74845fe70f2 100644
--- a/uk/ac/sanger/artemis/util/DatabaseDocument.java
+++ b/uk/ac/sanger/artemis/util/DatabaseDocument.java
@@ -189,6 +189,13 @@ public class DatabaseDocument extends Document
     return null;
   }
 
+
+  /**
+  *
+  * Given a parent (chromosome, contig, supercontig) retrieve the features
+  * in the form of a GFF stream.
+  *
+  */ 
   private String getGFF(Connection conn, String parentFeatureID) 
           throws java.sql.SQLException
   {
@@ -338,13 +345,7 @@ public class DatabaseDocument extends Document
       while(rs.next())
         cvterm_id.add(rs.getString("type_id"));
 
-//    String sql = "select cvterm.cvterm_id, cvterm.name FROM cvterm, cv "+
-//                 "WHERE cv.cv_id = cvterm.cv_id and cvterm.name = 'chromosome'";
-//    ResultSet rs = st.executeQuery(sql);
-//    rs.next();
-//    String cvterm_id = rs.getString("cvterm_id");
-
-      sql = new String("SELECT abbreviation, name, feature_id FROM organism, feature WHERE (");
+      sql = new String("SELECT abbreviation, name, feature_id, type_id FROM organism, feature WHERE (");
 
       for(int i=0; i<cvterm_id.size(); i++)
       {
@@ -356,16 +357,15 @@ public class DatabaseDocument extends Document
       sql = sql + ") " + " and organism.organism_id=feature.organism_id "+
             "ORDER BY abbreviation, name";
 
-//    sql = new String("SELECT abbreviation, name, feature_id FROM organism, feature WHERE type_id = '"+
-//                      cvterm_id+"' and organism.organism_id=feature.organism_id "+
-//                      "ORDER BY abbreviation, name");
       appendToLogFile(sql,sqlLog);
 
       rs = st.executeQuery(sql);
       while(rs.next())
       {
-        String org = rs.getString("abbreviation");
-        db.put(org+" - "+rs.getString("name"), rs.getString("feature_id"));
+        String org      = rs.getString("abbreviation");
+        String typeName = getCvtermName(conn,rs.getLong("type_id"));
+        db.put(org+" - "+typeName+" - "+rs.getString("name"), 
+               rs.getString("feature_id"));
         if(!organism.contains(org))
           organism.add(org);
       }