diff --git a/uk/ac/sanger/artemis/io/DatabaseDocumentEntry.java b/uk/ac/sanger/artemis/io/DatabaseDocumentEntry.java
index 1ceef25159ef8a390c6d5ea81eba81a25c94c42f..fffbcebf985f32eda6f6096a3272c7c4476f985d 100644
--- a/uk/ac/sanger/artemis/io/DatabaseDocumentEntry.java
+++ b/uk/ac/sanger/artemis/io/DatabaseDocumentEntry.java
@@ -86,7 +86,7 @@ public class DatabaseDocumentEntry extends SimpleDocumentEntry
       if(feature instanceof DatabaseStreamFeature)
         return (DatabaseStreamFeature)feature;
       else
-        return (EmblStreamFeature)feature;
+        return (GFFStreamFeature)feature;
     }
     else
       return new DatabaseStreamFeature(feature);      
diff --git a/uk/ac/sanger/artemis/io/DatabaseStreamFeature.java b/uk/ac/sanger/artemis/io/DatabaseStreamFeature.java
index 16e0244414e70b1d7599be6ec832e856e5560b37..0f1d11a3702e88dec949d70b33615840b30a83b2 100644
--- a/uk/ac/sanger/artemis/io/DatabaseStreamFeature.java
+++ b/uk/ac/sanger/artemis/io/DatabaseStreamFeature.java
@@ -31,11 +31,11 @@ import java.io.*;
  *  This is an implementation of Feature that can read and write itself to a
  *  CHADO stream.
  *
- *  @version $Id: DatabaseStreamFeature.java,v 1.1 2005-03-31 12:09:13 tjc Exp $
+ *  @version $Id: DatabaseStreamFeature.java,v 1.2 2005-06-13 18:36:49 tjc Exp $
  **/
 
 public class DatabaseStreamFeature
-    extends SimpleDocumentFeature
+    extends GFFStreamFeature
     implements DocumentFeature, StreamFeature, ComparableFeature
 {
   /**
@@ -151,23 +151,23 @@ public class DatabaseStreamFeature
    *  @return null if in_stream is at the end of file when the method is
    *  called
    **/
-  protected static DatabaseStreamFeature
-    readFromStream(LinePushBackReader stream)
-      throws IOException
-  {
-    String line = stream.readLine ();
-    return readFromStream(line);
-  }
-
-  protected static DatabaseStreamFeature
-    readFromStream(String line)
-      throws IOException
-  {
-    if(line == null)
-      return null;
-
-    return new DatabaseStreamFeature(line);
-  }
+//protected static DatabaseStreamFeature
+//  readFromStream(LinePushBackReader stream)
+//    throws IOException
+//{
+//  String line = stream.readLine ();
+//  return readFromStream(line);
+//}
+
+//protected static DatabaseStreamFeature
+//  readFromStream(String line)
+//    throws IOException
+//{
+//  if(line == null)
+//    return null;
+
+//  return new DatabaseStreamFeature(line);
+//}
 
   /**
    *  This is used by readFromStream() as temporary storage.  It is a class
diff --git a/uk/ac/sanger/artemis/util/DatabaseDocument.java b/uk/ac/sanger/artemis/util/DatabaseDocument.java
index f829393ba3bfcea2b22dfcbfac5f25107b0f10ac..3c0b03b8200c6771b59c29b4b6b44727d1286c7a 100644
--- a/uk/ac/sanger/artemis/util/DatabaseDocument.java
+++ b/uk/ac/sanger/artemis/util/DatabaseDocument.java
@@ -115,11 +115,28 @@ public class DatabaseDocument extends Document
    *  Return a Document with the last element stripped off.
    *
    **/
-  public Document getParent() 
+  public String getFeatureName(String feature_id, Connection conn)
+                  throws java.sql.SQLException
+  { 
+    Statement st = conn.createStatement();
+
+    String sql = "SELECT name FROM feature WHERE feature_id= "+feature_id;
+    appendToLogFile(sql,sqlLog);
+    ResultSet rs = st.executeQuery(sql);
+    rs.next();
+    return rs.getString("name");
+  }
+  
+  /**
+   *
+   *  Return a Document with the last element stripped off.
+   *
+   **/
+  public Document getParent()
   {
     return null;
   }
-  
+
   /**
    *
    *  Return true if and only if the Document refered to by this object exists
@@ -157,9 +174,9 @@ public class DatabaseDocument extends Document
       Connection conn = getConnection();
       System.out.println("Connected");
 
-      String entry = getGene(conn,feature_id) + getSequence(conn);
+      String entry = getGFF(conn,feature_id) + getSequence(conn);
 //    String entry = getSequence(conn);
-      
+      appendToLogFile(entry,sqlLog);
       ByteArrayInputStream instream = new ByteArrayInputStream(entry.getBytes());
       return instream;
     }
@@ -172,45 +189,47 @@ public class DatabaseDocument extends Document
     return null;
   }
 
-  private String getGene(Connection conn, String parentFeatureID) 
+  private String getGFF(Connection conn, String parentFeatureID) 
           throws java.sql.SQLException
   {
     Statement st = conn.createStatement();
-    String sql = "SELECT strand, fmin, fmax, value, uniquename, featureprop.type_id, strand"+
+    String sql = "SELECT strand, fmin, fmax, value, uniquename, feature.type_id, featureprop.type_id, strand"+
                  " FROM feature, featureloc, featureprop WHERE srcfeature_id = "+parentFeatureID+
                  " and featureloc.feature_id=featureprop.feature_id"+
                  " and featureloc.feature_id=feature.feature_id" +
-                 " and feature.type_id=cvterm.cvterm_id and cvterm.name='gene'";
+                 " and feature.type_id=cvterm.cvterm_id"; // and cvterm.name='gene'";
 
     appendToLogFile(sql,sqlLog);
     ResultSet rs = st.executeQuery(sql);
     StringBuffer cdsBuffer = new StringBuffer();
 
+    String parentFeature = getFeatureName(parentFeatureID,conn);
     int loop = 1;
 
     while(rs.next())
     {
-      int fmin        = rs.getInt("fmin")+1;
-      int fmax        = rs.getInt("fmax");
-      long type_id    = rs.getLong("type_id");
+      int fmin          = rs.getInt("fmin")+1;
+      int fmax          = rs.getInt("fmax");
+      long type_id      = rs.getLong(6);
+      long prop_type_id = rs.getLong(7);
       int strand      = rs.getInt("strand");
       String name     = rs.getString("uniquename");
       String typeName = getCvtermName(conn,type_id);
-
-// start with uniquename
-      cdsBuffer.append("CHADO="+name+" ");
-
-      if(strand == -1)
-        cdsBuffer.append("complement(");
-      cdsBuffer.append(fmin+"..");
-      cdsBuffer.append(fmax);
-      if(strand == -1)
-        cdsBuffer.append(")");
-
-      cdsBuffer.append(";");
-      cdsBuffer.append("/"+typeName+"=\"");
-      cdsBuffer.append(rs.getString("value")+"\"\n");
-
+      String propTypeName = getCvtermName(conn,prop_type_id);
+// make gff format
+
+      cdsBuffer.append(parentFeature+"\t");    // seqid
+      cdsBuffer.append("chado\t");             // source
+      cdsBuffer.append(typeName+"\t");         // type
+      cdsBuffer.append(fmin+"\t");             // start
+      cdsBuffer.append(fmax+"\t");             // end
+      cdsBuffer.append(".\t");                 // score
+      if(strand == -1)                         // strand
+        cdsBuffer.append("-\t");
+      else
+        cdsBuffer.append("+\t");
+      cdsBuffer.append(".\t");                 // phase
+      cdsBuffer.append("ID="+name+";"+propTypeName+"="+rs.getString("value")+"\n"); // attributes
       progress_listener.progressMade("Read from database: "+name);
     }
 
@@ -276,7 +295,7 @@ public class DatabaseDocument extends Document
 
     rs.next();
     name = rs.getString("name");
-    return rs.getString("residues");
+    return "##FASTA\n>" + name + "\n" + rs.getString("residues");
   }
 
 
@@ -378,8 +397,8 @@ public class DatabaseDocument extends Document
     try
     {
       String dat = new java.util.Date().toString();
-      bw = new BufferedWriter(new FileWriter(dat+":: "+logFileName, true));
-      bw.write(logEntry);
+      bw = new BufferedWriter(new FileWriter(logFileName, true));
+      bw.write(dat+":: "+logEntry);
       bw.newLine();
       bw.flush();
     }