diff --git a/uk/ac/sanger/artemis/util/DatabaseDocument.java b/uk/ac/sanger/artemis/util/DatabaseDocument.java
index 7c6f8177691a544f9acfc904491d2915d88a4ac8..13da9002facaf9ff618bf6dfc460faa0bee7f333 100644
--- a/uk/ac/sanger/artemis/util/DatabaseDocument.java
+++ b/uk/ac/sanger/artemis/util/DatabaseDocument.java
@@ -61,6 +61,8 @@ import java.sql.*;
 import java.text.SimpleDateFormat;
 import java.io.*;
 import java.net.ConnectException;
+import java.util.Collections;
+import java.util.Comparator;
 import java.util.HashSet;
 import java.util.Hashtable;
 import java.util.HashMap;
@@ -1854,6 +1856,7 @@ public class DatabaseDocument extends Document
       }
     }
 
+    Collections.sort(cdsFeatureLocs, new LocationComarator());
     return cdsFeatureLocs;
   }
   
@@ -2641,4 +2644,37 @@ public class DatabaseDocument extends Document
   {
     return singleSchema;
   }
+  
+  /**
+   * Ensure exon featurelocs are in the correct order
+   */
+  class LocationComarator implements Comparator
+  {
+
+    public int compare(Object o1, Object o2)
+    {
+      int loc1 = ((FeatureLoc)o1).getFmin().intValue();
+      int loc2 = ((FeatureLoc)o2).getFmin().intValue();
+      
+      if(loc2 == loc1)
+        return 0;
+      int strand = ((FeatureLoc)o1).getStrand().intValue();
+      
+      if(strand < 0)
+      {
+        if(loc2 > loc1)
+          return 1;
+        else
+          return -1;
+      }
+      else
+      {
+        if(loc2 > loc1)
+          return -1;
+        else
+          return 1;
+      }
+    }
+    
+  }
 }