diff --git a/artemis_sqlmap/Feature.xml b/artemis_sqlmap/Feature.xml
index b07917e695d2b01e2746cc64facc6f3a87985d71..e30fdf10413cc4cb06e8f7883f37ecfa2036dff7 100644
--- a/artemis_sqlmap/Feature.xml
+++ b/artemis_sqlmap/Feature.xml
@@ -25,7 +25,9 @@
     <parameter property="featureCvTerms" javaType="java.util.List"/>
   </parameterMap> 
 
-  <resultMap id="map-basicfeature" class="Feature">       
+  <!-- resultMap templates below -->
+
+  <resultMap id="template-basicfeature" class="Feature">       
     <result property="timeLastModified" column="timelastmodified"/>
    	<result property="featureId" column="id"/>
     <result property="uniqueName" column="uniquename"/>
@@ -33,9 +35,30 @@
     <result property="seqLen" column="seqlen" nullValue="-1" />
 	<result property="obsolete" column="obsolete" />
   </resultMap>
-	
-  <resultMap id="map-feature" class="Feature" 
-	         groupBy="featureId" extends="map-basicfeature">
+  
+  <resultMap id="template-basicfeature-all-lazy" class="Feature" 
+	         extends="template-basicfeature">
+    <result property="cvTerm" column="type_id" select="getCvtermByCvTermId" />
+    <result property="dbXRef" column="dbXRefId"
+                              select="getDbXRefByDbXRefId" />
+    <result property="featureLocsForFeatureId" column="{id=id}" 
+                                               select="getFeatureLoc" />
+    <result property="featureProps" column="{feature_id=id}" 
+                                       select="getFeaturePropByFeatureId" />
+    <result property="featureDbXRefs" column="{featureId=id}"
+                                      select="getFeatureDbXRef" />
+    <result property="featureRelationshipsForObjectId" column="{object_id=id}" 
+                                       select="getFeatureRelationship" />  
+    <result property="featureRelationshipsForSubjectId" column="{subject_id=id}" 
+                                       select="getFeatureRelationship" /> 
+    <result property="featureSynonyms" column="{feature.uniqueName=uniqueName}" 
+                                       select="getLazyFeatureSynonymsByUniquename" />                       
+    <result property="organism" column="{organismId=organismId}" 
+                                select="getOrganism" />
+  </resultMap>	
+  
+  <resultMap id="template-feature" class="Feature" 
+	         extends="template-basicfeature">
 	<result property="organism.organismId" column="organism_id"/>
 	<result property="dbXRef" resultMap="DbXRef.select-dbxref" />
 	<result property="featureProps" resultMap="FeatureProp.map-featureprop" />
@@ -51,42 +74,44 @@
                                        select="getLazyFeatureSynonymsByUniquename" />
 	<result property="featureDbXRefs" column="{featureId=id}"
                                       select="getFeatureDbXRef" />
-	<result property="featureCvTerms"  column="{{uniqueName=uniquename}}"
-			                           select="getFeatureCvTermsByFeature"/>
 	<result property="featurePubs" column="{featureId=id}" select="getFeaturePubsByFeature"/>  
   </resultMap>
+  
+  <!-- resultMap proper below -->
+  
+  <resultMap id="map-feature" class="Feature" 
+	         groupBy="featureId" extends="template-feature">
+	<result property="featureCvTerms"  column="{{uniqueName=uniquename}}"
+			                           select="getFeatureCvTermsByFeature"/> 
+  </resultMap>
+  
+  <resultMap id="map-feature-no-rank" class="Feature" 
+	         groupBy="featureId" extends="template-feature">
+	<result property="featureCvTerms"  column="{{uniqueName=uniquename}}"
+			                           select="getFeatureCvTermsNoRankByFeature"/> 
+  </resultMap>
+  
 
-  <!-- mapping for feature table and lazy loading of feature_dbxref, feature_relationship,
-       featureprop, organism tables -->
-	
-    <resultMap id="map-feature-lazy-no-residues" class="Feature" 
-	         extends="map-basicfeature">
-    <result property="cvTerm" column="type_id" select="getCvtermByCvTermId" />
-    <result property="dbXRef" column="dbXRefId"
-                              select="getDbXRefByDbXRefId" />
-    <result property="featureLocsForFeatureId" column="{id=id}" 
-                                               select="getFeatureLoc" />
-    <result property="featureProps" column="{feature_id=id}" 
-                                       select="getFeaturePropByFeatureId" />
-    <result property="featureDbXRefs" column="{featureId=id}"
-                                      select="getFeatureDbXRef" />
-    <result property="featureRelationshipsForObjectId" column="{object_id=id}" 
-                                       select="getFeatureRelationship" />  
-    <result property="featureRelationshipsForSubjectId" column="{subject_id=id}" 
-                                       select="getFeatureRelationship" /> 
-    <result property="featureSynonyms" column="{feature.uniqueName=uniqueName}" 
-                                       select="getLazyFeatureSynonymsByUniquename" />
+  <!-- mapping for feature table and lazy loading -->  
+  <resultMap id="map-feature-lazy-no-residues" class="Feature" 
+	         extends="template-basicfeature-all-lazy">
 	<result property="featureCvTerms"  column="{{uniqueName=uniquename}}"
 			                           select="getFeatureCvTermsByFeature"/>                         
-    <result property="organism" column="{organismId=organismId}" 
-                                select="getOrganism" />
   </resultMap>	
 	
   <resultMap id="map-feature-lazy" class="Feature" 
-	         extends="map-feature-lazy-no-residues">
+	         extends="template-basicfeature-all-lazy">
+	<result property="featureCvTerms"  column="{{uniqueName=uniquename}}"
+			                           select="getFeatureCvTermsByFeature"/>  
+    <result property="residues" column="residues" />
+  </resultMap>
+  
+  <resultMap id="map-feature-lazy-no-rank" class="Feature" 
+	         extends="template-basicfeature-all-lazy">
+	<result property="featureCvTerms"  column="{{uniqueName=uniquename}}"
+			                           select="getFeatureCvTermsNoRankByFeature"/>      
     <result property="residues" column="residues" />
   </resultMap>
-	
 	
   <resultMap id="map-feature-name-lazy" class="Feature">
 	 <result property="featureId" column="id"/>
@@ -94,11 +119,10 @@
 	 <result property="cvTerm.name" column="name" />
 	 <result property="featureRelationshipsForSubjectId" column="{subject_id=id}" 
                                        select="getParentFeatureRelationship" /> 
-  </resultMap>
-	  	
+  </resultMap>  	
 	
   <resultMap id="map-feature-withprop" class="Feature" 
-	         groupBy="featureId" extends="map-basicfeature">
+	         groupBy="featureId" extends="template-basicfeature">
     <result property="cvTerm" column="type_id" select="getCvtermByCvTermId" />
     <result property="featureProps" resultMap="FeatureProp.map-featureprop" />
     <result property="featureDbXRefs" column="{featureId=id}"
@@ -117,7 +141,7 @@
 	
 	
   <resultMap id="map-similaritymatch-lazy" class="Feature" 
-	         groupBy="featureId" extends="map-basicfeature">       
+	         groupBy="featureId" extends="template-basicfeature">       
     <result property="cvTerm.cvTermId" column="type_id"  />
 	<result property="featureLocsForFeatureId" column="{id=id}" 
                                                select="getFeatureLoc" />
@@ -157,10 +181,8 @@
      
   <!-- SQL --> 
   <!-- get feature -->
-
-  <select id="getFeature" parameterClass="Feature" 
-                          resultMap="map-feature">
-    SELECT
+  <sql id="sql-feature">
+      SELECT
       timelastmodified, 
       f.feature_id AS id, 
 	  f.organism_id,
@@ -202,11 +224,20 @@
            uniquename LIKE #uniqueName# 
          </isNotNull>
        </dynamic>
+  </sql>
+  
+  <select id="getFeature" parameterClass="Feature" 
+                          resultMap="map-feature">
+    <include refid="sql-feature"/>
+  </select>
+  
+  <select id="getFeatureNoFeatureCvTermRank" parameterClass="Feature" 
+                          resultMap="map-feature-no-rank">
+    <include refid="sql-feature"/>
   </select>
  
-  <select id="getLazyFeature" resultMap ="map-feature-lazy" 
-                              parameterClass="Feature">
-	SELECT
+  <sql id="sql-lazy-feature">
+   	SELECT
 	  timelastmodified,
 	  f.feature_id AS id,
 	  uniquename,
@@ -246,6 +277,17 @@
          cvterm.name=#cvTerm.name#
        </isNotNull>
      </dynamic>
+  </sql>
+  
+  <select id="getLazyFeature" resultMap ="map-feature-lazy" 
+                              parameterClass="Feature">
+    <include refid="sql-lazy-feature"/>
+  </select>
+  
+  <select id="getLazyFeatureNoFeatureCvTermRank"
+                              resultMap ="map-feature-lazy-no-rank" 
+                              parameterClass="Feature">
+    <include refid="sql-lazy-feature"/>
   </select>
 	
 
@@ -264,52 +306,6 @@
 	FROM feature f
     WHERE f.feature_id=$featureId$
   </select>
-	
-  <select id="getLazyFeatureById" resultMap ="map-feature-lazy" >
-	SELECT
-	  timelastmodified,
-	  f.feature_id AS id,
-	  uniquename,
-	  organism_id AS organismId,
-	  f.is_obsolete AS obsolete,
-	  f.name AS feature_name,
-	  f.type_id,
-	  f.dbxref_id AS dbXRefId,
-	  f.seqlen,
-	  residues
-	FROM feature f
-    WHERE f.feature_id=$featureId$
-  </select>
-	
-  <select id="getLazyFeatureNameAndTypeById" resultMap ="map-feature-name-lazy" >
-	SELECT
-	  uniquename, cvTerm.name, feature_id AS id
-	FROM feature f
-	LEFT JOIN cvterm ON cvterm.cvterm_id=type_id
-    WHERE f.feature_id=$featureId$
-  </select>
-	
-	
-  <select id="getFeatureById" resultMap ="map-feature-withprop" 
-		cacheModel="feature-cache">
-	SELECT
-	  timelastmodified,
-	  f.feature_id AS id,
-	  uniquename,
-	  organism_id AS organismId,
-	  f.is_obsolete AS obsolete,
-	  f.name AS feature_name,
-	  f.type_id,
-	  f.dbxref_id,
-	  f.seqlen,
-	  fp.type_id AS prop_type_id, fp.rank AS prop_rank, fp.value, fp.featureprop_id,
-	  dbxref.*, db.*
-    FROM feature f
-    LEFT JOIN featureprop fp ON fp.feature_id=f.feature_id
-	LEFT JOIN dbxref ON f.dbxref_id=dbxref.dbxref_id
-	LEFT JOIN db ON dbxref.db_id=db.db_id
-    WHERE f.feature_id=$featureId$
-  </select>
     
   <select id="getFeaturesByListOfIds" resultMap ="map-feature-withprop">
 	SELECT
@@ -407,36 +403,6 @@
   </select>
 
 
-  <!--
-  <select id="getResidueFeatures" parameterClass="java.lang.Integer"
-            resultMap="map-feature-with-residues-result">
-    SELECT feature.name, uniquename, feature_id, type_id, 
-	       feature.organism_id, abbreviation, genus, species, common_name,
-	       cvterm.name AS cvterm_name
-    FROM feature 
-	LEFT JOIN organism ON organism.organism_id=feature.organism_id
-	LEFT JOIN cvterm ON cvterm.cvterm_id=feature.type_id
-	WHERE  <isNotNull> feature.organism_id=$value$ AND </isNotNull>
-	  cvterm.name!='mRNA' AND cvterm.name!='pseudogenic_transcript' AND 
-	  cvterm.name!='polypeptide' AND
-	  residues notnull AND residues NOT LIKE '' ORDER BY common_name
-  </select>
-	
-  <select id="getResidueFeaturesByOrganismCommonName" parameterClass="java.lang.String"
-            resultMap="map-feature-with-residues-result">
-    SELECT feature.name, uniquename, feature_id, type_id, 
-	       feature.organism_id, abbreviation, genus, species, common_name,
-	       cvterm.name AS cvterm_name
-    FROM feature 
-	LEFT JOIN organism ON organism.organism_id=feature.organism_id
-	LEFT JOIN cvterm ON cvterm.cvterm_id=feature.type_id
-	WHERE  <isNotNull> organism.common_name=#value# AND </isNotNull>
-	  cvterm.name!='mRNA' AND cvterm.name!='pseudogenic_transcript' AND
-	  cvterm.name!='polypeptide' AND
-	  residues notnull AND residues NOT LIKE '' ORDER BY common_name
-  </select>
-  -->
-
   <sql id="source_feature_cvterm_names">
 	  cvterm.name LIKE '%chromosome%' OR cvterm.name LIKE '%sequence%' OR 
 	    cvterm.name IN ('supercontig', 'ultra_scaffold', 'golden_path_region', 'contig')
diff --git a/artemis_sqlmap/FeatureCvTerm.xml b/artemis_sqlmap/FeatureCvTerm.xml
index 3abdec1dfc49df8dfcab35c290950a6e11e3a5bb..6ef8cd98e14b5e55f38f4bc3f6ad849d2a4d46b1 100644
--- a/artemis_sqlmap/FeatureCvTerm.xml
+++ b/artemis_sqlmap/FeatureCvTerm.xml
@@ -5,16 +5,14 @@
 
 <sqlMap namespace="FeatureCvTerm"> 
  
-     <cacheModel id="featurecvterm-rank-cache" type ="LRU" readOnly="true"> 
+    <cacheModel id="featurecvterm-rank-cache" type ="LRU" readOnly="true"> 
       <flushInterval hours="24"/>  
       <property name="cache-size" value="15" /> 
     </cacheModel> 
     
     <typeAlias alias="FeatureCvTerm"
         type="org.gmod.schema.sequence.FeatureCvTerm"/>
-        
 
-    
      <resultMap id="select-featurecvterm-no-rank" class="FeatureCvTerm" 
                 groupBy="featureCvTermId">
         <result property="featureCvTermId"   column="feature_cvterm_id" />
@@ -41,10 +39,8 @@
 
  
       <!--  select feature_cvterm -->
-	
-	<select id="getFeatureCvTermsBySrcFeature" parameterClass="org.gmod.schema.sequence.Feature"
-             resultMap="select-featurecvterm">
-        SELECT
+      <sql id="sql_select_feature_cvterm">
+         SELECT
           fc.*, 
           fcp.type_id, fcp.value, fcp.rank AS fcp_rank,
           cvterm.name AS cvterm_name,
@@ -60,6 +56,11 @@
         LEFT JOIN pub ON fc.pub_id=pub.pub_id
         LEFT JOIN dbxref ON cvterm.dbxref_id=dbxref.dbxref_id 
         LEFT JOIN db ON dbxref.db_id=db.db_id
+      </sql>
+  
+	<select id="getFeatureCvTermsBySrcFeature" parameterClass="org.gmod.schema.sequence.Feature"
+             resultMap="select-featurecvterm">
+        <include refid="sql_select_feature_cvterm"/> 
         WHERE feature_id IN 
 		(SELECT feature_id FROM featureloc fl WHERE srcfeature_id=$featureId$
 	    <isGreaterThan property="featureLoc.fmin" compareValue="0" prepend="AND"> 
@@ -71,22 +72,7 @@
 	
 	<select id="getFeatureCvTermsNoRankBySrcFeature" parameterClass="org.gmod.schema.sequence.Feature"
              resultMap="select-featurecvterm-no-rank">
-        SELECT
-          fc.*, 
-          fcp.type_id, fcp.value, fcp.rank AS fcp_rank,
-          cvterm.name AS cvterm_name,
-          cv.name AS cv_name,
-          pub.pub_id, 
-          pub.uniquename,
-          db.name,
-          dbxref.accession
-        FROM feature_cvterm fc 
-        LEFT JOIN feature_cvtermprop fcp ON fc.feature_cvterm_id=fcp.feature_cvterm_id 
-        LEFT JOIN cvterm ON cvterm.cvterm_id=fc.cvterm_id 
-        LEFT JOIN cv ON cvterm.cv_id=cv.cv_id 
-        LEFT JOIN pub ON fc.pub_id=pub.pub_id
-        LEFT JOIN dbxref ON cvterm.dbxref_id=dbxref.dbxref_id 
-        LEFT JOIN db ON dbxref.db_id=db.db_id
+        <include refid="sql_select_feature_cvterm"/>
         WHERE feature_id IN 
 		(SELECT feature_id FROM featureloc fl WHERE srcfeature_id=$featureId$
 	    <isGreaterThan property="featureLoc.fmin" compareValue="0" prepend="AND"> 
@@ -98,22 +84,7 @@
 	
      <select id="getFeatureCvTermsByFeature" parameterClass="Feature"
              resultMap="select-featurecvterm">
-        SELECT
-          fc.*, 
-          fcp.type_id, fcp.value, fcp.rank AS fcp_rank,
-          cvterm.name AS cvterm_name,
-          cv.name AS cv_name,
-          pub.pub_id, 
-          pub.uniquename,
-          db.name,
-          dbxref.accession
-        FROM feature_cvterm fc 
-        LEFT JOIN feature_cvtermprop fcp ON fc.feature_cvterm_id=fcp.feature_cvterm_id 
-        LEFT JOIN cvterm ON cvterm.cvterm_id=fc.cvterm_id 
-        LEFT JOIN cv ON cvterm.cv_id=cv.cv_id 
-        LEFT JOIN pub ON fc.pub_id=pub.pub_id
-        LEFT JOIN dbxref ON cvterm.dbxref_id=dbxref.dbxref_id 
-        LEFT JOIN db ON dbxref.db_id=db.db_id
+        <include refid="sql_select_feature_cvterm"/>
         <dynamic>
           <isNotNull property="uniqueName" prepend="WHERE">
             feature_id IN (SELECT feature_id FROM feature WHERE uniquename=#uniqueName#)
@@ -121,30 +92,12 @@
         </dynamic>
         ORDER BY fc.feature_cvterm_id, fc.rank, type_id, fcp.rank;
      </select>
-     
-     
+
+
      <!-- same as getFeatureCvTermsByFeature but without feature_cvterm.rank -->   
      <select id="getFeatureCvTermsNoRankByFeature" parameterClass="Feature"
              resultMap="select-featurecvterm-no-rank">
-        SELECT
-          fc.feature_id,
-          fc.feature_cvterm_id,
-          fc.cvterm_id, 
-          fc.is_not, 
-          fcp.type_id, fcp.value, fcp.rank AS fcp_rank,
-          cvterm.name AS cvterm_name,
-          cv.name AS cv_name,
-          pub.pub_id, 
-          pub.uniquename,
-          db.name,
-          dbxref.accession
-        FROM feature_cvterm fc 
-        LEFT JOIN feature_cvtermprop fcp ON fc.feature_cvterm_id=fcp.feature_cvterm_id 
-        LEFT JOIN cvterm ON cvterm.cvterm_id=fc.cvterm_id 
-        LEFT JOIN cv ON cvterm.cv_id=cv.cv_id 
-        LEFT JOIN pub ON fc.pub_id=pub.pub_id
-        LEFT JOIN dbxref ON cvterm.dbxref_id=dbxref.dbxref_id 
-        LEFT JOIN db ON dbxref.db_id=db.db_id
+        <include refid="sql_select_feature_cvterm"/>
         <dynamic>
           <isNotNull property="uniqueName" prepend="WHERE">
             feature_id=(SELECT feature_id FROM feature WHERE uniquename=#uniqueName#)
@@ -154,7 +107,6 @@
      </select>
      
      
-     
      <select id="getFeatureCvTermColumnsForASchema" parameterClass="java.lang.String"
              resultClass="java.lang.String" cacheModel="featurecvterm-rank-cache">
        SELECT pg_attribute.attname 
diff --git a/uk/ac/sanger/artemis/chado/IBatisDAO.java b/uk/ac/sanger/artemis/chado/IBatisDAO.java
index 83dabe75396d3809e43941182a3dbbb2f4ecd7f7..47ac96692a522a06b1200cde18d8a3851f979e06 100644
--- a/uk/ac/sanger/artemis/chado/IBatisDAO.java
+++ b/uk/ac/sanger/artemis/chado/IBatisDAO.java
@@ -64,6 +64,8 @@ public class IBatisDAO extends GmodDAO
   private static org.apache.log4j.Logger logger4j = 
     org.apache.log4j.Logger.getLogger(IBatisDAO.class);
   private SqlMapClientWrapper sqlMap;
+  private boolean featureCvTermRank        = true;
+  private boolean featureCvTermRankChecked = false;
   
   /**
    * Define a iBatis data access object. This uses <code>DbSqlConfig</code>
@@ -87,6 +89,33 @@ public class IBatisDAO extends GmodDAO
     sqlMap.close();
   }
 
+  /**
+   * Test to see if this is an old chado database version
+   * without the feature_cvterm.rank column.
+   * @return true if the feature_cvterm.rank column exists.
+   */
+  private boolean isFeatureCvTermRank()
+  {
+  	if(featureCvTermRankChecked)
+  		return featureCvTermRank;
+  	
+    String schema = ArtemisUtils.getCurrentSchema();   
+    // check column names
+    List list = sqlMap.queryForList("getFeatureCvTermColumnsForASchema", schema);   
+    featureCvTermRank = false;
+    for(int i=0; i<list.size(); i++)
+    {
+      if( ((String)list.get(i)).equals("rank") )
+      {  
+      	featureCvTermRank = true;
+        break;
+      }
+    }
+    
+    featureCvTermRankChecked = true;
+    return featureCvTermRank;
+  }
+  
   //////
   ////// GeneralDaoI
   //////
@@ -143,23 +172,7 @@ public class IBatisDAO extends GmodDAO
   
   public List getFeatureCvTermsBySrcFeature(Feature srcFeature)
   {
-//  find whether current schema has a feature_cvterm.rank column
-    String schema = ArtemisUtils.getCurrentSchema();
-    
-    // check column names
-    List list = sqlMap.queryForList("getFeatureCvTermColumnsForASchema", schema);
-    
-    boolean rank_exists = false;
-    for(int i=0; i<list.size(); i++)
-    {
-      if( ((String)list.get(i)).equals("rank") )
-      {  
-        rank_exists = true;
-        break;
-      }
-    }
-     
-    if(rank_exists)
+  	if(isFeatureCvTermRank())
     {
       logger4j.debug("USE getFeatureCvTermsBySrcFeature()");
       return sqlMap.queryForList("getFeatureCvTermsBySrcFeature",
@@ -223,7 +236,11 @@ public class IBatisDAO extends GmodDAO
     org.gmod.schema.sequence.Feature feature = 
       new org.gmod.schema.sequence.Feature();
     feature.setFeatureId(id);
-    return (Feature)sqlMap.queryForObject("getLazyFeature", feature);
+    
+    if(isFeatureCvTermRank())
+      return (Feature)sqlMap.queryForObject("getLazyFeature", feature);
+    else
+    	return (Feature)sqlMap.queryForObject("getLazyFeatureNoFeatureCvTermRank", feature);
   }
   
   public List getFeaturesByListOfIds(final List featureIds)
@@ -236,7 +253,11 @@ public class IBatisDAO extends GmodDAO
     org.gmod.schema.sequence.Feature feature = 
       new org.gmod.schema.sequence.Feature();
     feature.setUniqueName(uniquename);
-    return sqlMap.queryForList("getLazyFeature", feature);
+    
+    if(isFeatureCvTermRank())
+      return sqlMap.queryForList("getLazyFeature", feature);
+    else
+    	return sqlMap.queryForList("getLazyFeatureNoFeatureCvTermRank", feature);
   }
   
   public Feature getFeatureByUniqueName(String uniquename, String featureType) 
@@ -249,7 +270,10 @@ public class IBatisDAO extends GmodDAO
     cvTerm.setName(featureType);
     feature.setCvTerm(cvTerm);
     
-    return (Feature)sqlMap.queryForObject("getLazyFeature", feature);
+    if(isFeatureCvTermRank())
+      return (Feature)sqlMap.queryForObject("getLazyFeature", feature);
+    else
+    	return (Feature)sqlMap.queryForObject("getLazyFeatureNoFeatureCvTermRank", feature);
   }
    
   
@@ -270,10 +294,10 @@ public class IBatisDAO extends GmodDAO
     feature.setUniqueName(name);
     feature.setFeatureSynonyms(feature_synonym_list);
 
-    List features = sqlMap.queryForList("getLazyFeature", feature);
-    
-    return features;
-    
+    if(isFeatureCvTermRank())
+      return sqlMap.queryForList("getLazyFeature", feature);
+    else
+    	return sqlMap.queryForList("getLazyFeatureNoFeatureCvTermRank", feature);
   }
   
   /**
@@ -318,11 +342,10 @@ public class IBatisDAO extends GmodDAO
    */
   public List getFeaturesByLocatedOnFeature(final Feature feature)
   { 
-    List feature_list = sqlMap.queryForList("getFeature", feature);
-
-    // merge same features in the list
-    //return mergeList(feature_list);
-    return feature_list;
+  	if(isFeatureCvTermRank())
+      return sqlMap.queryForList("getFeature", feature);
+  	else
+  		return sqlMap.queryForList("getFeatureNoFeatureCvTermRank", feature);
   }
   
   /**
@@ -349,23 +372,7 @@ public class IBatisDAO extends GmodDAO
    */
   public List getFeatureCvTermsByFeature(Feature feature)
   {  
-    // find whether current schema has a feature_cvterm.rank column
-    String schema = ArtemisUtils.getCurrentSchema();
-    
-    // check column names
-    List list = sqlMap.queryForList("getFeatureCvTermColumnsForASchema", schema);
-    
-    boolean rank_exists = false;
-    for(int i=0; i<list.size(); i++)
-    {
-      if( ((String)list.get(i)).equals("rank") )
-      {  
-        rank_exists = true;
-        break;
-      }
-    }
-     
-    if(rank_exists)
+    if(isFeatureCvTermRank())
       return
         sqlMap.queryForList("getFeatureCvTermsByFeature", feature);
     else