diff --git a/uk/ac/sanger/artemis/util/DatabaseDocument.java b/uk/ac/sanger/artemis/util/DatabaseDocument.java
index 04fb7531a796b47c2fd046d16750dd2487e01a1f..70d9284fb5fd3ae5aabcf3d3b9bf2822cc65b3d0 100644
--- a/uk/ac/sanger/artemis/util/DatabaseDocument.java
+++ b/uk/ac/sanger/artemis/util/DatabaseDocument.java
@@ -1,10 +1,10 @@
 /* DatabaseDocument.java
  *
- * created: Fri Dec 18 1998
+ * created: 2005
  *
  * This file is part of Artemis
  * 
- * Copyright (C) 1998,1999,2000  Genome Research Limited
+ * Copyright (C) 2005  Genome Research Limited
  * 
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -50,8 +50,8 @@ public class DatabaseDocument extends Document
   private Vector organism;
   private String sqlLog = System.getProperty("user.home")+
                           System.getProperty("file.separator")+"art_sql_debug.log";
-  private StringBuffer[] gff_buffer;
-  private StringBuffer gff_buff;
+  private ByteBuffer[] gff_buffer;
+  private ByteBuffer gff_buff;
   private String[] types = { "exon", "gene", "CDS", "transcript" };
   private boolean splitGFFEntry;
 
@@ -92,7 +92,7 @@ public class DatabaseDocument extends Document
   }
 
   public DatabaseDocument(String location, String feature_id,
-                          StringBuffer gff_buff, String name)
+                          ByteBuffer gff_buff, String name)
   {
     super(location);
     this.feature_id = feature_id;
@@ -192,7 +192,7 @@ public class DatabaseDocument extends Document
 
     if(gff_buff != null)
     {
-      instream = new ByteArrayInputStream(gff_buff.toString().getBytes());
+      instream = new ByteArrayInputStream(gff_buff.getBytes());
       return instream;
     }
 
@@ -202,19 +202,27 @@ public class DatabaseDocument extends Document
       System.out.println("Connected");
 
       gff_buffer = getGFF(conn,feature_id);
-      String entry;
+      ByteBuffer entry = new ByteBuffer();
 
       if(splitGFFEntry)
-        entry = gff_buffer[0] + getSequence(conn);
+      {
+        if(gff_buffer[0].size() > 0)
+          entry.append(gff_buffer[0]);
+        getSequence(conn, entry);
+      }
       else
       {
-        entry = new String();
         for(int i=0; i<gff_buffer.length; i++)
-          entry = entry + gff_buffer[i];
-        entry = entry + getSequence(conn);
+        {
+          if(gff_buffer[i].size() > 0)
+            entry.append(gff_buffer[i]);
+        }
+        getSequence(conn, entry);
       }
 
-      appendToLogFile(entry,sqlLog);
+//    if(System.getProperty("debug") != null)
+//      appendToLogFile(new String(entry.getBytes()),sqlLog);
+
       instream = new ByteArrayInputStream(entry.getBytes());
 
       conn.close();
@@ -231,16 +239,28 @@ public class DatabaseDocument extends Document
 
   public DatabaseDocument[] getGffDocuments(String location, String id)
   {
-    DatabaseDocument[] new_docs = new DatabaseDocument[gff_buffer.length-1];
+    int nentries = 0;
+    for(int i=1; i<gff_buffer.length; i++)
+    {
+      if(gff_buffer[i].size() > 0)
+        nentries++;
+    }
+
+    DatabaseDocument[] new_docs = new DatabaseDocument[nentries];
+    nentries = 0;
     for(int i=1; i<gff_buffer.length; i++)
     {
+      if(gff_buffer[i].size() == 0)
+        continue;
+
       String name;
       if(i >= types.length)
         name = "other";
       else
         name = types[i];
 
-      new_docs[i-1] = new DatabaseDocument(location, id, gff_buffer[i], name);
+      new_docs[nentries] = new DatabaseDocument(location, id, gff_buffer[i], name);
+      nentries++;
     }
 
     return new_docs;
@@ -253,7 +273,7 @@ public class DatabaseDocument extends Document
   * in the form of a GFF stream.
   *
   */ 
-  private StringBuffer[] getGFF(Connection conn, String parentFeatureID) 
+  private ByteBuffer[] getGFF(Connection conn, String parentFeatureID) 
           throws java.sql.SQLException
   {
     Statement st = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);
@@ -278,13 +298,13 @@ public class DatabaseDocument extends Document
     appendToLogFile(sql,sqlLog);
     ResultSet rs = st.executeQuery(sql);
 
-    StringBuffer[] buffers = new StringBuffer[types.length+1];
+    ByteBuffer[] buffers = new ByteBuffer[types.length+1];
     for(int i=0; i<buffers.length; i++)
-      buffers[i] = new StringBuffer();
+      buffers[i] = new ByteBuffer();
 
     String parentFeature = getFeatureName(parentFeatureID,conn);
     Hashtable hstore = new Hashtable();
-    StringBuffer this_buff;
+    ByteBuffer this_buff;
 
     while(rs.next())
     {
@@ -422,7 +442,7 @@ public class DatabaseDocument extends Document
   }
 
 
-  public String getSequence(Connection conn) throws java.sql.SQLException
+  public ByteBuffer getSequence(Connection conn, ByteBuffer buff) throws java.sql.SQLException
   {
     Statement st = conn.createStatement();
     String sql = "SELECT name, residues from feature where feature_id = '"+
@@ -433,8 +453,14 @@ public class DatabaseDocument extends Document
     ResultSet rs = st.executeQuery(sql);
 
     rs.next();
-    name = rs.getString("name");
-    return "##FASTA\n>" + name + "\n" + rs.getString("residues");
+
+    buff.append("##FASTA\n>");
+    buff.append(rs.getBytes("name"));
+    buff.append("\n");
+    buff.append(rs.getBytes("residues"));
+    return buff;
+
+//  return "##FASTA\n>" + name + "\n" + rs.getString("residues");
   }