diff --git a/uk/ac/sanger/artemis/io/ChadoCanonicalGene.java b/uk/ac/sanger/artemis/io/ChadoCanonicalGene.java
index c4c0fdd7f82d7a5a6d492ec0aaeb3a83a4fb637d..0d800492b21aa9ba80cdf08b83d9633be55b13a3 100644
--- a/uk/ac/sanger/artemis/io/ChadoCanonicalGene.java
+++ b/uk/ac/sanger/artemis/io/ChadoCanonicalGene.java
@@ -20,7 +20,7 @@
  * along with this program; if not, write to the Free Software
  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  *
- * $Header: //tmp/pathsoft/artemis/uk/ac/sanger/artemis/io/ChadoCanonicalGene.java,v 1.19 2007-02-01 18:13:49 tjc Exp $
+ * $Header: //tmp/pathsoft/artemis/uk/ac/sanger/artemis/io/ChadoCanonicalGene.java,v 1.20 2007-03-28 09:15:34 tjc Exp $
  */
 
 package uk.ac.sanger.artemis.io;
@@ -272,7 +272,6 @@ public class ChadoCanonicalGene
    */
   public void addSplicedFeatures(final String transcript_name, 
                       final Feature exon, boolean reset) 
-         throws InvalidRelationException
   {
     if(reset)
       splicedFeatures.remove(transcript_name);
@@ -286,8 +285,7 @@ public class ChadoCanonicalGene
    * @throws InvalidRelationException
    */
   public void addSplicedFeatures(final String transcript_name, 
-                      final Feature spliced) 
-         throws InvalidRelationException
+                      final Feature spliced)
   {   
     final List v_spliced;
     if(splicedFeatures.containsKey(transcript_name))
@@ -340,7 +338,6 @@ public class ChadoCanonicalGene
    */
   public void addProtein(final String transcript_name,
                          final Feature protein) 
-         throws InvalidRelationException
   {   
     proteins.put(transcript_name, protein);
   }
@@ -353,7 +350,6 @@ public class ChadoCanonicalGene
    */
   public void add3PrimeUtr(final String transcript_name, 
                            final Feature utr) 
-         throws InvalidRelationException
   {  
     final List utr_list;
     if(three_prime_utr.containsKey(transcript_name))
@@ -372,8 +368,7 @@ public class ChadoCanonicalGene
    * @throws InvalidRelationException
    */
   public void add5PrimeUtr(final String transcript_name, 
-                           final Feature utr) 
-         throws InvalidRelationException
+                           final Feature utr)
   {
     final List utr_list;
     if(five_prime_utr.containsKey(transcript_name))
@@ -576,18 +571,35 @@ public class ChadoCanonicalGene
    * @param transcript_id transcript feature
    * @return
    */
-  private boolean isSplicedFeatures(final String feature_id, 
-                         final String transcript_id)
+  private boolean isSplicedFeatures(final String feature_id)
   {
-    List splicedFeatures = getSplicedFeaturesOfTranscript(transcript_id);
-    if(splicedFeatures == null)
-      return false;
+    List splicedFeatures = new Vector();
+    List transcripts = getTranscripts();
+    
     try
     {
+      for(int i = 0; i < transcripts.size(); i++)
+      {
+        Feature transcript = (Feature) transcripts.get(i);
+        String transcript_id = getQualifier(transcript, "ID");
+        List splicedSites = getSplicedFeaturesOfTranscript(transcript_id);
+        if(splicedSites != null)
+          splicedFeatures.addAll(splicedSites);
+      }
+
+      if(splicedFeatures == null)
+        return false;
+
       for(int i=0; i<splicedFeatures.size(); i++)
       {
-        if(feature_id.equals(getQualifier((Feature)splicedFeatures.get(i), "ID")))
-          return true;
+        GFFStreamFeature feature = (GFFStreamFeature)splicedFeatures.get(i);
+        RangeVector rv = feature.getLocation().getRanges();
+        for(int j=0; j<rv.size(); j++)
+        {
+          String this_feature_id = feature.getSegmentID((Range)rv.get(j));
+          if(feature_id.equals(this_feature_id))
+            return true;
+        }
       }
     }
     catch(InvalidRelationException e)
@@ -631,20 +643,36 @@ public class ChadoCanonicalGene
   {
     try
     {
-      //List exons = getExonsOfTranscript(transcript_id);
-      int transcript_number = 1;
-      for(transcript_number=1; transcript_number<=transcripts.size(); 
-          transcript_number++)
+      int index = transcript_id.lastIndexOf(':');
+      int transcript_number = -1;
+      
+      if(index > -1)
       {
-        Feature transcript = (Feature)transcripts.get(transcript_number-1);
-        if(transcript_id.equals( getQualifier(transcript, "ID") ))
-          break;
+        try
+        {
+          transcript_number = Integer.parseInt(transcript_id.substring(index+1));
+        }
+        catch(NumberFormatException nfe)
+        {
+          transcript_number = -1;
+        }
+      }
+      
+      if(transcript_number < 1)
+      {
+        for(transcript_number = 1; transcript_number <= transcripts.size(); 
+            transcript_number++)
+        {
+          Feature transcript = (Feature) transcripts.get(transcript_number - 1);
+          if(transcript_id.equals(getQualifier(transcript, "ID")))
+            break;
+        }
       }
       
       String name = (String)getGene().getQualifierByName("ID").getValues().get(0);
       int auto = 1;
       while( isSplicedFeatures( 
-          name + ":" + transcript_number + ":exon:" + auto, transcript_id ) && auto < 50)
+          name + ":" + transcript_number + ":exon:" + auto) && auto < 50)
         auto++;
       return name + ":" + transcript_number + ":exon:" + auto;
     }