diff --git a/uk/ac/sanger/artemis/chado/GmodDAO.java b/uk/ac/sanger/artemis/chado/GmodDAO.java
index 2aca307482bd69a161a91144fe6452fbb06037d3..69e733f19a2421f35313da4ad0c73c57f89b90f9 100644
--- a/uk/ac/sanger/artemis/chado/GmodDAO.java
+++ b/uk/ac/sanger/artemis/chado/GmodDAO.java
@@ -49,6 +49,7 @@ public abstract class GmodDAO
        implements SequenceDaoI, SchemaDaoI, OrganismDaoI, CvDaoI, PubDaoI, GeneralDaoI
 {
   
+  public abstract List getOrganismsContainingSrcFeatures();
   public abstract List getSimilarityMatchesByFeatureIds(final List featureIds);
   public abstract List getSimilarityMatches(final Integer srcFeatureId);
   public abstract List getClustersByFeatureIds(final List featureIds);
diff --git a/uk/ac/sanger/artemis/chado/IBatisDAO.java b/uk/ac/sanger/artemis/chado/IBatisDAO.java
index c097c547655c09f78c6f9fecc63ce0388b514d63..1c2e2db46dac1a8358dd5e0b08fbb7e62532317a 100644
--- a/uk/ac/sanger/artemis/chado/IBatisDAO.java
+++ b/uk/ac/sanger/artemis/chado/IBatisDAO.java
@@ -118,7 +118,12 @@ public class IBatisDAO extends GmodDAO
   
   public List getResidueFeatures(final Integer organismId)
   {
-    return sqlMap.queryForList("getResidueFeatures",organismId);
+
+    CvTerm cvTerm = getCvTermByNameAndCvName("top_level_seq", "genedb_misc");
+    if(cvTerm  != null)
+      return sqlMap.queryForList("getTopLevelFeatures",organismId);
+    else
+      return sqlMap.queryForList("getResidueFeatures",organismId);
   }
   
   public List getResidueFeaturesByOrganismCommonName(final String commonName)
@@ -492,8 +497,6 @@ public class IBatisDAO extends GmodDAO
   
   /**
    * Return a list of top-level features 
-   * 
-   *  
    * @return a (possibly empty) List<Feature> of children
    */
   public List getTopLevelFeatures()
@@ -570,9 +573,22 @@ public class IBatisDAO extends GmodDAO
    */
   public List getResidueFeatures()
   { 
-    return sqlMap.queryForList("getResidueFeatures",null);
+    CvTerm cvTerm = getCvTermByNameAndCvName("top_level_seq", "genedb_misc");
+    if(cvTerm  != null)
+      return sqlMap.queryForList("getTopLevelFeatures",null);
+    else
+      return sqlMap.queryForList("getResidueFeatures",null);
   }
 
+  public List getOrganismsContainingSrcFeatures()
+  {
+    CvTerm cvTerm = getCvTermByNameAndCvName("top_level_seq", "genedb_misc");
+    if(cvTerm  != null)
+      return sqlMap.queryForList("getTopLevelOrganisms", null);
+    else  
+      return sqlMap.queryForList("getOrganismsContainingSrcFeatures", null);
+  }
+  
   /**
    *
    * For a schema return the type_id's with residues.
diff --git a/uk/ac/sanger/artemis/chado/JdbcDAO.java b/uk/ac/sanger/artemis/chado/JdbcDAO.java
index 27c549cc98997cbc95dfe44d0ae15f3018bb97f0..2d7c4d05edac73aaa06454ad2d92bbbeb8d72dce 100644
--- a/uk/ac/sanger/artemis/chado/JdbcDAO.java
+++ b/uk/ac/sanger/artemis/chado/JdbcDAO.java
@@ -101,6 +101,11 @@ public class JdbcDAO extends GmodDAO
   //////
   //////
   
+  public List getOrganismsContainingSrcFeatures()
+  {
+    return null;
+  }
+  
   public Feature getLazyFeatureNoResiduesById(final Integer featureId)
   {
     return null;