diff --git a/uk/ac/sanger/artemis/util/DatabaseDocument.java b/uk/ac/sanger/artemis/util/DatabaseDocument.java
index 5d033ac5864f7e5880bc9b71525fde099e6b02a9..367a00d90c14b39fc43796ce4290a0101cb0259a 100644
--- a/uk/ac/sanger/artemis/util/DatabaseDocument.java
+++ b/uk/ac/sanger/artemis/util/DatabaseDocument.java
@@ -676,7 +676,8 @@ public class DatabaseDocument extends Document
         dao.getFeatureCvTermDbXRefBySrcFeature(srcFeature));
       featureCvTermPubs = getFeatureCvTermPub(dao, 
         dao.getFeatureCvTermPubBySrcFeature(srcFeature));
-      featurePubs = getFeaturePubsBySrcFeature(dao,srcFeature);
+      featurePubs = getFeaturePubs(dao,
+        dao.getFeaturePubsBySrcFeature(srcFeature));
     
       pubDbXRefs= dao.getPubDbXRef();
     }
@@ -741,15 +742,13 @@ public class DatabaseDocument extends Document
   /**
    * Get FeaturePub's (i.e. /literature qualifiers).
    * @param dao
-   * @param srcfeature_id
+   * @param list
    * @return
    */
-  private Hashtable getFeaturePubsBySrcFeature(final GmodDAO dao,
-                                               final Feature srcFeature)
+  private Hashtable getFeaturePubs(final GmodDAO dao,
+                                   final List list)
   {
-    List list = dao.getFeaturePubsBySrcFeature(srcFeature);
-    
-    Hashtable featurePubs = new Hashtable();
+    final Hashtable featurePubs = new Hashtable();
     Integer featureId;
     List value;
     FeaturePub featurePub;
@@ -904,7 +903,8 @@ public class DatabaseDocument extends Document
         dao.getFeatureCvTermDbXRefBySrcFeature(srcFeature));
     Hashtable featureCvTermPubs = getFeatureCvTermPub(dao, 
         dao.getFeatureCvTermPubBySrcFeature(srcFeature));
-    Hashtable featurePubs = getFeaturePubsBySrcFeature(dao,srcFeature);
+    Hashtable featurePubs = getFeaturePubs(dao,
+        dao.getFeaturePubsBySrcFeature(srcFeature));
 
     List pubDbXRefs = dao.getPubDbXRef();
     
@@ -992,13 +992,15 @@ public class DatabaseDocument extends Document
     Feature parent = new Feature();
     parent.setFeatureId(src_id);
 
+    logger4j.debug("GET PARENT FEATURE");
     parent = dao.getFeatureById(src_id);
     
     chado_gene.setSeqlen(parent.getSeqLen());
     chado_gene.setSrcfeature_id(src_id);
 
-    ByteBuffer buff = new ByteBuffer();
+    final ByteBuffer buff = new ByteBuffer();
     
+    logger4j.debug("BUILD GENE GFF LINE");
     buildGffLineFromId(dao, chadoFeature.getFeatureId(), 
         id_store, parent.getUniqueName(), src_id, buff, chadoFeature);
     
@@ -1015,12 +1017,14 @@ public class DatabaseDocument extends Document
     for(int i = 0; i < relations.size(); i++)
     {
       //Feature transcript = new Feature();
-      
       int id = ((FeatureRelationship) relations.get(i)).getFeatureBySubjectId().getFeatureId();
-      
       Feature transcript = buildGffLineFromId(dao, id, id_store, parent.getUniqueName(), 
                                               src_id, buff, null);
 
+      if( transcript.getCvTerm().getName() == null || 
+         (transcript.getCvTerm().getName().indexOf("RNA") < 0 &&
+          transcript.getCvTerm().getName().indexOf("transcript") < 0 ) )
+        continue;
       // get children of transcript - exons and pp
       List transcipt_relations = new Vector(
           transcript.getFeatureRelationshipsForObjectId());
@@ -1034,7 +1038,7 @@ public class DatabaseDocument extends Document
       }
     }
 
-    logger4j.debug( new String(buff.getBytes()) );
+    logger4j.debug( "GFF:\n"+new String(buff.getBytes()) );
 
     // now wait for cvterm to be loaded
     if(cvThread != null)
@@ -1080,8 +1084,14 @@ public class DatabaseDocument extends Document
     id_store.put(Integer.toString(chadoFeature.getFeatureId()), 
                  chadoFeature);
 
-    FeatureLoc loc = getFeatureLoc(new Vector(
+    final FeatureLoc loc = getFeatureLoc(new Vector(
         chadoFeature.getFeatureLocsForFeatureId()), srcFeatureId);
+    
+    if(loc == null)
+    {
+      logger4j.debug("FEATURELOC NOT FOUND :: "+chadoFeature.getUniqueName());
+      return null;
+    }
     final Hashtable dbxrefs = IBatisDAO.mergeDbXRef(
         dao.getFeatureDbXRefsByFeatureUniquename(chadoFeature.getUniqueName()));
     
@@ -1094,13 +1104,18 @@ public class DatabaseDocument extends Document
     final Hashtable featureCvTermDbXRefs = getFeatureCvTermDbXRef(dao, 
                              dao.getFeatureCvTermDbXRefByFeature(chadoFeature));
     
-    final Hashtable featureCvTermPubs = getFeatureCvTermPub(dao,
-                             dao.getFeatureCvTermPubByFeature(chadoFeature));
+    Hashtable featureCvTermPubs = null;
     
-    Feature srcFeature = new Feature();
-    srcFeature.setFeatureId(srcFeatureId);
-    final Hashtable featurePubs = getFeaturePubsBySrcFeature(dao,srcFeature);
-    List pubDbXRefs= dao.getPubDbXRef();
+    try
+    {
+      featureCvTermPubs = getFeatureCvTermPub(dao,
+                          dao.getFeatureCvTermPubByFeature(chadoFeature));
+    }
+    catch(RuntimeException re){re.printStackTrace();}
+
+    final Hashtable featurePubs = getFeaturePubs(dao,
+        dao.getFeaturePubsByFeature(chadoFeature));
+    List pubDbXRefs= new Vector(); //dao.getPubDbXRef();
     chadoToGFF(chadoFeature, parentName, dbxrefs, synonym, featureCvTerms,
         pubDbXRefs, featureCvTermDbXRefs, featureCvTermPubs, featurePubs, 
         id_store, dao, loc, this_buff, gene_builder);  
@@ -2995,6 +3010,12 @@ public class DatabaseDocument extends Document
     return null;
   }
   
+  /**
+   * Find from a list the FeatureLoc with a given srcFeature
+   * @param locs
+   * @param srcfeature_id
+   * @return
+   */
   public static FeatureLoc getFeatureLoc(List locs, int srcfeature_id)
   {
     for(int i=0; i<locs.size(); i++)