diff --git a/uk/ac/sanger/artemis/SimpleEntryGroup.java b/uk/ac/sanger/artemis/SimpleEntryGroup.java
index 63d53fc542cd7a1c401fca324529c640dbf86fc1..2b896b74fed07223dee0fd21d79b7ed653847b83 100644
--- a/uk/ac/sanger/artemis/SimpleEntryGroup.java
+++ b/uk/ac/sanger/artemis/SimpleEntryGroup.java
@@ -20,18 +20,24 @@
  * 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/SimpleEntryGroup.java,v 1.4 2006-03-21 16:05:48 tjc Exp $
+ * $Header: //tmp/pathsoft/artemis/uk/ac/sanger/artemis/SimpleEntryGroup.java,v 1.5 2006-08-07 14:57:10 tjc Exp $
  **/
 
 package uk.ac.sanger.artemis;
 
 import uk.ac.sanger.artemis.sequence.*;
+import uk.ac.sanger.artemis.io.EntryInformationException;
 import uk.ac.sanger.artemis.io.Range;
 import uk.ac.sanger.artemis.io.StreamSequence;
 import uk.ac.sanger.artemis.io.SimpleDocumentEntry;
+import uk.ac.sanger.artemis.io.DatabaseDocumentEntry;
+import uk.ac.sanger.artemis.io.DocumentEntry;
+import uk.ac.sanger.artemis.util.DatabaseDocument;
 import uk.ac.sanger.artemis.util.ReadOnlyException;
 import uk.ac.sanger.artemis.util.OutOfRangeException;
 import uk.ac.sanger.artemis.chado.ChadoTransactionManager;
+
+import java.io.IOException;
 import java.util.Vector;
 import java.util.NoSuchElementException;
 
@@ -41,7 +47,7 @@ import java.util.NoSuchElementException;
  *  once.  Objects of this class act a bit like single Entry objects.
  *
  *  @author Kim Rutherford
- *  @version $Id: SimpleEntryGroup.java,v 1.4 2006-03-21 16:05:48 tjc Exp $
+ *  @version $Id: SimpleEntryGroup.java,v 1.5 2006-08-07 14:57:10 tjc Exp $
  **/
 
 public class SimpleEntryGroup extends EntryVector
@@ -693,7 +699,32 @@ public class SimpleEntryGroup extends EntryVector
    **/
   public Entry createEntry() 
   {
-    final Entry new_entry = Entry.newEntry(getBases());
+    Entry new_entry = null;
+    uk.ac.sanger.artemis.io.Entry default_entry = 
+      getDefaultEntry().getEMBLEntry();
+    if(default_entry != null &&
+       default_entry instanceof DatabaseDocumentEntry)
+    {
+      DatabaseDocument doc =
+        (DatabaseDocument)((DocumentEntry)getDefaultEntry().getEMBLEntry()).getDocument();
+      DatabaseDocument new_doc = doc.createDatabaseDocument();
+      
+      try
+      {
+        DatabaseDocumentEntry new_doc_entry = 
+          new DatabaseDocumentEntry();
+        new_doc_entry.setDocument(new_doc);
+        new_entry = new Entry(getBases(), new_doc_entry);
+      }
+      catch(Exception e)
+      {
+        e.printStackTrace();
+      }
+      
+    }
+    else
+      new_entry = Entry.newEntry(getBases());
+    
     add(new_entry);
     return new_entry;
   }
diff --git a/uk/ac/sanger/artemis/components/DatabaseEntrySource.java b/uk/ac/sanger/artemis/components/DatabaseEntrySource.java
index baafc54ecb32b1ef7eef3b6872fe01806f7186d8..bac513adc6a431af702f85b82a955fd019503fdd 100644
--- a/uk/ac/sanger/artemis/components/DatabaseEntrySource.java
+++ b/uk/ac/sanger/artemis/components/DatabaseEntrySource.java
@@ -384,7 +384,7 @@ public class DatabaseEntrySource implements EntrySource
       {
         DatabaseDocument doc = new DatabaseDocument(location, pfield, id,
                                                     schema, splitGFFEntry, progress_listener);
-        db_entry = new DatabaseDocumentEntry(doc);
+        db_entry = new DatabaseDocumentEntry(doc, null);
       }
 
       final Bases real_bases;
@@ -437,7 +437,7 @@ public class DatabaseEntrySource implements EntrySource
       db_entry = new DatabaseDocumentEntry[new_docs.length];
 
       for(int i = 0; i < new_docs.length; i++)
-        db_entry[i] = new DatabaseDocumentEntry(new_docs[i]);
+        db_entry[i] = new DatabaseDocumentEntry(new_docs[i], null);
     }
     catch (EntryInformationException e)
     {
diff --git a/uk/ac/sanger/artemis/components/genebuilder/GeneBuilderFrame.java b/uk/ac/sanger/artemis/components/genebuilder/GeneBuilderFrame.java
index 0952586ca9993ec1b459b4557294d14ec4643a60..044bcaa1a15310ec88f02556e896a2fe1afd6f0c 100644
--- a/uk/ac/sanger/artemis/components/genebuilder/GeneBuilderFrame.java
+++ b/uk/ac/sanger/artemis/components/genebuilder/GeneBuilderFrame.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/genebuilder/GeneBuilderFrame.java,v 1.11 2006-08-04 11:05:53 tjc Exp $
+ * $Header: //tmp/pathsoft/artemis/uk/ac/sanger/artemis/components/genebuilder/GeneBuilderFrame.java,v 1.12 2006-08-07 14:57:10 tjc Exp $
  */
 
 package uk.ac.sanger.artemis.components.genebuilder;
@@ -44,6 +44,7 @@ import uk.ac.sanger.artemis.SelectionChangeEvent;
 import uk.ac.sanger.artemis.SelectionChangeListener;
 import uk.ac.sanger.artemis.EntryGroup;
 import uk.ac.sanger.artemis.Feature;
+import uk.ac.sanger.artemis.io.Qualifier;
 import uk.ac.sanger.artemis.FeatureChangeEvent;
 import uk.ac.sanger.artemis.FeatureChangeListener;
 import uk.ac.sanger.artemis.GotoEventSource;
@@ -301,16 +302,20 @@ public class GeneBuilderFrame extends JFrame
         }
         break;
       case EntryChangeEvent.FEATURE_ADDED:
+        Qualifier parent_qualifier = 
+          qualifiers.getQualifierByName("Parent");
+        
+        if(parent_qualifier == null)
+          return;
         tree.addNode(event.getFeature());
         feature.addFeatureChangeListener(this);
         
-        String parent = 
-          (String)qualifiers.getQualifierByName("Parent").getValues().get(0);
-        
+        String parent = (String)parent_qualifier.getValues().get(0);
         String gene_name = null;
         try
         {
-          gene_name = (String)chado_gene.getGene().getQualifierByName("ID").getValues().get(0);
+          gene_name = 
+            (String)chado_gene.getGene().getQualifierByName("ID").getValues().get(0);
         }
         catch(InvalidRelationException e)
         {
diff --git a/uk/ac/sanger/artemis/components/genebuilder/GeneViewerPanel.java b/uk/ac/sanger/artemis/components/genebuilder/GeneViewerPanel.java
index 36cf912bba4ce02d5a87be2cdd0933e560863b6e..fd115cbdd888aad9e1291adf349ffe444fc7fc87 100644
--- a/uk/ac/sanger/artemis/components/genebuilder/GeneViewerPanel.java
+++ b/uk/ac/sanger/artemis/components/genebuilder/GeneViewerPanel.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/genebuilder/GeneViewerPanel.java,v 1.18 2006-08-04 11:05:53 tjc Exp $
+ * $Header: //tmp/pathsoft/artemis/uk/ac/sanger/artemis/components/genebuilder/GeneViewerPanel.java,v 1.19 2006-08-07 14:57:10 tjc Exp $
  */
 
 package uk.ac.sanger.artemis.components.genebuilder;
@@ -658,69 +658,69 @@ public class GeneViewerPanel extends JPanel
     List exons = chado_gene.getExonsOfTranscript(
         getFeatureID( embl_transcript ));
 
-    if(exons == null)
-      return; 
-
     ypos += border*2;
     
-    boolean last_segment = false;
-    
-    // build from artemis objects
-    for(int i=0; i<exons.size(); i++)
+    if(exons != null)
     {
-      int last_ex_start = 0;
-      int last_ex_end   = 0;
-      int last_ypos     = 0;
-
-      Feature embl_exon = (Feature)exons.get(i);
+      boolean last_segment = false;
+    
+      // build from artemis objects
+      for(int i=0; i<exons.size(); i++)
+      {
+        int last_ex_start = 0;
+        int last_ex_end = 0;
+        int last_ypos = 0;
 
-      uk.ac.sanger.artemis.Feature exon = 
-        (uk.ac.sanger.artemis.Feature)embl_exon.getUserData();
+        Feature embl_exon = (Feature) exons.get(i);
 
-      RangeVector ranges = exon.getLocation().getRanges();
-      FeatureSegmentVector segments = null;
-      
-      try
-      {
-        segments = exon.getSegments();
-      }
-      catch(NullPointerException npe){}
-      
-      float selected_size;
-      for(int j=0; j<ranges.size(); j++)
-      {
-        Range range = (Range)ranges.get(j);
+        uk.ac.sanger.artemis.Feature exon = 
+          (uk.ac.sanger.artemis.Feature)embl_exon.getUserData();
 
-        int ex_start = border+(int)((range.getStart()-start)*fraction);
-        int ex_end   = border+(int)((range.getEnd()-start)*fraction);
+        RangeVector ranges = exon.getLocation().getRanges();
+        FeatureSegmentVector segments = null;
 
-        if(exon.getColour() != null)
-          g2d.setColor( exon.getColour() );
+        try
+        {
+          segments = exon.getSegments();
+        }
+        catch(NullPointerException npe)
+        {
+        }
 
-        if(j == ranges.size()-1)
-          last_segment = true;
-        
-        selected_size = 2.f;
-        if(segments != null)
+        float selected_size;
+        for(int j = 0; j < ranges.size(); j++)
         {
-          for(int k=0; k<segments.size(); k++)
+          Range range = (Range) ranges.get(j);
+
+          int ex_start = border + (int)((range.getStart() - start) * fraction);
+          int ex_end   = border + (int)((range.getEnd() - start) * fraction);
+
+          if(exon.getColour() != null)
+            g2d.setColor(exon.getColour());
+
+          if(j == ranges.size() - 1)
+            last_segment = true;
+
+          selected_size = 2.f;
+          if(segments != null)
           {
-            FeatureSegment segment = segments.elementAt(k);
-            if(range.equals(segment.getRawRange()) &&
-               selection.contains(segment))
-              selected_size = 4.f;
+            for(int k = 0; k < segments.size(); k++)
+            {
+              FeatureSegment segment = segments.elementAt(k);
+              if(range.equals(segment.getRawRange())
+                  && selection.contains(segment))
+                selected_size = 4.f;
+            }
           }
-        }
-        
-        drawExons(g2d, ex_start, ex_end, 
-            last_ex_start, last_ex_end, last_ypos,
-            0, ypos, exon.getColour(),
-            2, exon.isForwardFeature(),
-            last_segment, selection.contains(exon), selected_size);
 
-        last_ex_end   = ex_end;
-        last_ex_start = ex_start;
-        last_ypos   = ypos;
+          drawExons(g2d, ex_start, ex_end, last_ex_start, last_ex_end,
+              last_ypos, 0, ypos, exon.getColour(), 2, exon.isForwardFeature(),
+              last_segment, selection.contains(exon), selected_size);
+
+          last_ex_end = ex_end;
+          last_ex_start = ex_start;
+          last_ypos = ypos;
+        }
       }
     }
     
@@ -1255,8 +1255,6 @@ public class GeneViewerPanel extends JPanel
    */
   class PopupListener extends MouseAdapter
   {
-    private JMenuItem exonMenu = new JMenuItem();
-    private ActionListener exonListener;
     public void mousePressed(MouseEvent e)
     {
       maybeShowPopup(e);
@@ -1271,39 +1269,10 @@ public class GeneViewerPanel extends JPanel
     {
       if(e.isPopupTrigger())
       {
-        exonMenu.removeActionListener(exonListener);
         final Feature embl_transcript = getTranscriptAt(e.getPoint());
         if(embl_transcript == null)
           return;
         
-        try
-        {
-          final String uniquename = 
-            (String)(embl_transcript.getQualifierByName("ID").getValues().get(0));
-            
-          exonMenu.setText("Show exon list for "+uniquename);       
-          exonListener = new ActionListener()
-          {
-            public void actionPerformed(ActionEvent event)  
-            {
-              try
-              {
-                showExonsList(uniquename);
-              }
-              catch(InvalidRelationException e)
-              {
-                e.printStackTrace();
-              }
-            }
-          };
-          exonMenu.addActionListener(exonListener);
-          popup.add(exonMenu);
-        }
-        catch(InvalidRelationException e1)
-        {
-          e1.printStackTrace();
-        }
-        
         popup.show(e.getComponent(),
                 e.getX(), e.getY());
       }
diff --git a/uk/ac/sanger/artemis/io/DatabaseDocumentEntry.java b/uk/ac/sanger/artemis/io/DatabaseDocumentEntry.java
index 46bf3ec584d9624689b3920429ea38d23bee132c..051e6c92942dd7adb492ddb9a5270e35c57cd37a 100644
--- a/uk/ac/sanger/artemis/io/DatabaseDocumentEntry.java
+++ b/uk/ac/sanger/artemis/io/DatabaseDocumentEntry.java
@@ -38,12 +38,18 @@ public class DatabaseDocumentEntry extends GFFDocumentEntry
     implements DocumentEntry 
 {
 
-  public DatabaseDocumentEntry(final Document doc)
+  public DatabaseDocumentEntry(final Document doc, 
+                               final ReadListener listener)
          throws EntryInformationException, IOException
   {
-    super(doc,null);
+    super(doc,listener);
   }
 
+  public DatabaseDocumentEntry()
+  {
+    super(new GFFEntryInformation());
+  }
+  
   /**
    *  Returns true if and only if this entry is read only.  For now this
    *  always returns true - BlastDocumentEntry objects can't be changed.
diff --git a/uk/ac/sanger/artemis/io/GFFStreamFeature.java b/uk/ac/sanger/artemis/io/GFFStreamFeature.java
index 4e05ce75a745dc65d3da4ea3bb40d9c45cac2831..c8bb170ba51266e30b3851ee8c2112bcca8e5fc9 100644
--- a/uk/ac/sanger/artemis/io/GFFStreamFeature.java
+++ b/uk/ac/sanger/artemis/io/GFFStreamFeature.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/io/GFFStreamFeature.java,v 1.42 2006-08-04 11:00:30 tjc Exp $
+ * $Header: //tmp/pathsoft/artemis/uk/ac/sanger/artemis/io/GFFStreamFeature.java,v 1.43 2006-08-07 14:57:10 tjc Exp $
  */
 
 package uk.ac.sanger.artemis.io;
@@ -40,7 +40,7 @@ import java.text.SimpleDateFormat;
  *  A StreamFeature that thinks it is a GFF feature.
  *
  *  @author Kim Rutherford
- *  @version $Id: GFFStreamFeature.java,v 1.42 2006-08-04 11:00:30 tjc Exp $
+ *  @version $Id: GFFStreamFeature.java,v 1.43 2006-08-07 14:57:10 tjc Exp $
  **/
 
 public class GFFStreamFeature extends SimpleDocumentFeature
@@ -86,6 +86,8 @@ public class GFFStreamFeature extends SimpleDocumentFeature
       setKey(key);
       setLocation(location);
       setQualifiers(qualifiers);
+      
+      /*
       if(getQualifierByName("score") == null)
         setQualifier(new Qualifier("score", "."));
       
@@ -94,7 +96,7 @@ public class GFFStreamFeature extends SimpleDocumentFeature
       
       if(getQualifierByName("gff_seqname") == null)
         setQualifier(new Qualifier("gff_seqname", "."));
-
+      */
       if(getQualifierByName("ID") == null)
         setQualifier(new Qualifier("ID", "to_be_set"));
       
@@ -207,11 +209,14 @@ public class GFFStreamFeature extends SimpleDocumentFeature
         }
       }
 
-      final Qualifier gff_seqname =
-        new Qualifier("gff_seqname", decode((String)line_bits.elementAt(0)));
-
-      setQualifier(gff_seqname);
+      if( !((String)line_bits.elementAt(0)).equals("null") )
+      {
+        final Qualifier gff_seqname =
+          new Qualifier("gff_seqname", decode((String)line_bits.elementAt(0)));
 
+        setQualifier(gff_seqname);
+      }
+      
       final Key key = new Key((String)line_bits.elementAt(2));
       setKey(key);
 
@@ -219,10 +224,13 @@ public class GFFStreamFeature extends SimpleDocumentFeature
         new Qualifier("gff_source", (String)line_bits.elementAt(1));
       setQualifier(source_qualifier);
 
-      final Qualifier score_qualifier =
-        new Qualifier("score", (String)line_bits.elementAt(5));
-      setQualifier(score_qualifier);
-
+      if( !((String)line_bits.elementAt(5)).equals(".") )
+      {
+        final Qualifier score_qualifier =
+          new Qualifier("score", (String)line_bits.elementAt(5));
+        setQualifier(score_qualifier);
+      }
+      
       String frame = (String)line_bits.elementAt(7);
 
       if(frame.equals ("0"))
diff --git a/uk/ac/sanger/artemis/util/DatabaseDocument.java b/uk/ac/sanger/artemis/util/DatabaseDocument.java
index 58a4195c12fb4765bd2216fbd4db6cde86fb77f7..96836b2b6833f33e3522559135330f89d5144e6f 100644
--- a/uk/ac/sanger/artemis/util/DatabaseDocument.java
+++ b/uk/ac/sanger/artemis/util/DatabaseDocument.java
@@ -109,6 +109,7 @@ public class DatabaseDocument extends Document
     }
   }
 
+  
   /**
    * 
    * Create a new Document from a database.
@@ -244,14 +245,13 @@ public class DatabaseDocument extends Document
     this.name = name;
   }
 
-  /**
-   * Return a Document with the last element stripped off.
-   */
-  public Document getParent()
+
+  public DatabaseDocument createDatabaseDocument()
   {
-    return null;
+    return new DatabaseDocument( (String)getLocation(), pfield,
+                                 feature_id, schema );
   }
-
+  
   /**
    * Return true if and only if the Document refered to by this object exists
    * and is readable. Always returns true.
@@ -310,7 +310,7 @@ public class DatabaseDocument extends Document
         if(gff_buffer[0].size() > 0)
           entry.append(gff_buffer[0]);
 
-        getSequence(dao, entry);
+        getChadoSequence(dao, entry);
       }
       else
       {
@@ -320,7 +320,7 @@ public class DatabaseDocument extends Document
             entry.append(gff_buffer[i]);
         }
 
-        getSequence(dao, entry);
+        getChadoSequence(dao, entry);
       }
 
       instream = new ByteArrayInputStream(entry.getBytes());
@@ -784,7 +784,7 @@ public class DatabaseDocument extends Document
    * @return      the resulting buffer
    * @throws java.sql.SQLException
    */
-  private ByteBuffer getSequence(ChadoDAO dao, ByteBuffer buff)
+  private ByteBuffer getChadoSequence(ChadoDAO dao, ByteBuffer buff)
                      throws java.sql.SQLException
   {
     ChadoFeature feature = dao.getSequence(Integer.parseInt(feature_id),
@@ -1173,4 +1173,9 @@ public class DatabaseDocument extends Document
       e.printStackTrace();
     }
   }
+
+  public Document getParent()
+  {
+    return null;
+  }
 }