diff --git a/uk/ac/sanger/artemis/components/genebuilder/GeneUtils.java b/uk/ac/sanger/artemis/components/genebuilder/GeneUtils.java
index 973a779d7078bac185831fd34d2292ed6ad6a107..2daccd386066abe3e3c31b5802303494787feb11 100644
--- a/uk/ac/sanger/artemis/components/genebuilder/GeneUtils.java
+++ b/uk/ac/sanger/artemis/components/genebuilder/GeneUtils.java
@@ -1151,22 +1151,33 @@ public class GeneUtils
     return 0;
   }
   
+  public static void checkGeneBoundary(final ChadoCanonicalGene chado_gene)
+  {
+    checkGeneBoundary(chado_gene, true);
+  }
+  
+  protected static Range checkTranscriptBoundary(
+      final uk.ac.sanger.artemis.Feature transcript,
+      final ChadoCanonicalGene chado_gene)
+  {
+    return checkTranscriptBoundary(transcript, chado_gene, true);
+  }
+  
   /**
    * Adjust transcript and gene boundaries
    * @param chado_gene
    */
-  public static void checkGeneBoundary(final ChadoCanonicalGene chado_gene)
+  public static void checkGeneBoundary(final ChadoCanonicalGene chado_gene, final boolean changeEmblFeature)
   {
-    final List transcripts = chado_gene.getTranscripts();
+    final List<Feature> transcripts = chado_gene.getTranscripts();
     int gene_start = Integer.MAX_VALUE;
     int gene_end = -1;
     
     Range range;
-    for(int i=0; i<transcripts.size(); i++)
+    for(Feature transcript: transcripts)
     {
-      final Feature transcript = (Feature)transcripts.get(i);
       range = checkTranscriptBoundary(
-          (uk.ac.sanger.artemis.Feature)transcript.getUserData(), chado_gene);
+          (uk.ac.sanger.artemis.Feature)transcript.getUserData(), chado_gene, changeEmblFeature);
       if(range != null && range.getStart() < gene_start)
         gene_start = range.getStart();
       if(range != null && range.getEnd() > gene_end)
@@ -1176,24 +1187,26 @@ public class GeneUtils
     if(gene_end == -1 && gene_start == Integer.MAX_VALUE)
       return;
     
-    setLocation(chado_gene.getGene(), gene_start, gene_end);
+    setLocation(chado_gene.getGene(), gene_start, gene_end, changeEmblFeature);
   }
   
-  
   /**
    * Check and adjust transcript boundary
    * @param transcript
    * @param chado_gene
+   * @param changeEmblFeature
+   * @return
    */
-  public static Range checkTranscriptBoundary(
+  protected static Range checkTranscriptBoundary(
       final uk.ac.sanger.artemis.Feature transcript,
-      final ChadoCanonicalGene chado_gene)
+      final ChadoCanonicalGene chado_gene,
+      final boolean changeEmblFeature)
   {
     final List transcripts = chado_gene.getTranscripts();
 
     if(transcripts.contains(transcript.getEmblFeature()))
     {
-      checkProteinBoundary(transcript.getEmblFeature(), chado_gene);
+      checkProteinBoundary(transcript.getEmblFeature(), chado_gene, changeEmblFeature);
       
       final Set children = chado_gene.getChildren(transcript.getEmblFeature());
       int transcript_start = Integer.MAX_VALUE;
@@ -1215,7 +1228,7 @@ public class GeneUtils
         return null;
       
       return setLocation(transcript.getEmblFeature(), 
-                   transcript_start, transcript_end);
+            transcript_start, transcript_end, changeEmblFeature);
     }
     else
       JOptionPane.showMessageDialog(null,
@@ -1230,7 +1243,8 @@ public class GeneUtils
    * @param chado_gene
    */
   private static void checkProteinBoundary(final Feature transcript,
-                                          final ChadoCanonicalGene chado_gene)
+                                          final ChadoCanonicalGene chado_gene,
+                                          final boolean changeEmblFeature)
   {
     final String transcriptName = getUniqueName(transcript);
     final Feature protein = chado_gene.getProteinOfTranscript(transcriptName);
@@ -1269,7 +1283,8 @@ public class GeneUtils
     
     if(pp_start == Integer.MAX_VALUE || pp_end == -1)
        return;
-    setLocation(protein, pp_start, pp_end);
+    
+    setLocation(protein, pp_start, pp_end, changeEmblFeature);
   }
   
   /**
@@ -1436,9 +1451,11 @@ public class GeneUtils
       }
     }
   }
-  
+
   private static Range setLocation(final Feature f, 
-                                   final int start, final int end)
+                                   final int start,
+                                   final int end,
+                                   final boolean changeEmblFeature)
   {
     try
     {
@@ -1447,23 +1464,27 @@ public class GeneUtils
       ranges.add(range);
 
       final Location new_location = new Location(ranges, 
-                        f.getLocation().isComplement());
-      f.setLocation(new_location);
+          f.getLocation().isComplement());
+      
+      if(changeEmblFeature)
+        f.setLocation(new_location);
+      else
+        ((uk.ac.sanger.artemis.Feature)f.getUserData()).setLocation(new_location);
       return range;
     }
-    catch(OutOfRangeException e)
+    catch (OutOfRangeException e)
     {
       // TODO Auto-generated catch block
       e.printStackTrace();
     }
-    catch(ReadOnlyException e)
+    catch (ReadOnlyException e)
     {
       // TODO Auto-generated catch block
       e.printStackTrace();
     }
     return null;
   }
-  
+
   public static String getUniqueName(final Feature feature)
   {
     try