diff --git a/artemis_sqlmap/Feature.xml b/artemis_sqlmap/Feature.xml
index 28d6b8cda8e0ec92996daf9c54846b730bb06d8b..76d0d876860efbe72bcec7427a7d41fa1c620359 100644
--- a/artemis_sqlmap/Feature.xml
+++ b/artemis_sqlmap/Feature.xml
@@ -472,6 +472,7 @@
           parameterClass="Feature">
     UPDATE feature
     SET uniquename=#uniqueName#, is_obsolete=#obsolete#
+	  <isNotEqual property="name" compareValue="0">  , name=#name# </isNotEqual>
       <isNotNull property="cvTerm.cvTermId">  , type_id=$cvTerm.cvTermId$ </isNotNull>
       <isNotNull property="timeLastModified"> , timelastmodified=#timeLastModified# </isNotNull>
     WHERE feature_id=$featureId$
diff --git a/uk/ac/sanger/artemis/chado/ChadoTransactionManager.java b/uk/ac/sanger/artemis/chado/ChadoTransactionManager.java
index 1a67d782ebadf57881b49980830bcce6a64d816d..53d0a31e36fb912aa8d01a2adf68bcef8ff3489d 100644
--- a/uk/ac/sanger/artemis/chado/ChadoTransactionManager.java
+++ b/uk/ac/sanger/artemis/chado/ChadoTransactionManager.java
@@ -625,10 +625,11 @@ public class ChadoTransactionManager
   private void insertFeature(final Feature feature)
   {
     String feature_uniquename = null;
+    Qualifier qualifier_name = null;
     try
     {
       final Qualifier qualifier_uniquename = feature.getQualifierByName("ID");
-
+      qualifier_name = feature.getQualifierByName("Name");
       if(qualifier_uniquename != null)
       {
         feature_uniquename = (String)(qualifier_uniquename.getValues()).elementAt(0);
@@ -741,7 +742,8 @@ public class ChadoTransactionManager
     catch(InvalidRelationException ire){}
     
     chado_feature.setUniqueName(feature_uniquename);
-    chado_feature.setName(feature_uniquename);
+    if(qualifier_name != null)
+      chado_feature.setName((String)(qualifier_name.getValues()).elementAt(0));
 
     String key = feature.getKey().toString();
     if(key.equals(DatabaseDocument.EXONMODEL))
@@ -1426,7 +1428,9 @@ public class ChadoTransactionManager
     else
       qualifierName = new_qualifier.getName();
     
-    if(qualifierName.equals("ID") || qualifierName.equals("isObsolete"))
+    if(qualifierName.equals("ID") || 
+       qualifierName.equals("isObsolete") || 
+       qualifierName.equals("Name"))
     {
       updateFeature(feature, qualifierName, new_qualifier, old_qualifier);
       return;
@@ -1764,7 +1768,7 @@ public class ChadoTransactionManager
   }
   
   /**
-   * Update feature - uniquename and is_obsolete
+   * Update feature - uniquename, name and is_obsolete
    * @param feature
    * @param qualifierName
    * @param new_qualifier
@@ -1774,13 +1778,11 @@ public class ChadoTransactionManager
                              final String qualifierName,
                              final Qualifier new_qualifier,
                              final Qualifier old_qualifier)
-  {
-//  this shouldn't be possible
-    if(new_qualifier.getValues() == null)
-      return;
-   
+  {  
     final String uniqueName[];
     final String isObsolete;
+    String name = null;
+    
     final String log;
     if(qualifierName.equals("ID"))
     {
@@ -1812,25 +1814,44 @@ public class ChadoTransactionManager
         uniqueName = new String[1];
         uniqueName[0] = (String) feature.getQualifierByName("ID").getValues().get(0);
       }
-      isObsolete = (String)new_qualifier.getValues().get(0);
       
-      log = "IS_OBSOLETE:";
+      if(qualifierName.equals("Name"))
+      {
+        if(feature.getQualifierByName("isObsolete") != null)
+          isObsolete = (String) feature.getQualifierByName("isObsolete").getValues().get(0);
+        else
+          isObsolete = "false";
+        if(new_qualifier != null)
+          name = (String)new_qualifier.getValues().get(0);
+        log = "PRIMARY NAME:";
+      }
+      else
+      {  
+        isObsolete = (String)new_qualifier.getValues().get(0);
+        log = "IS_OBSOLETE:";
+      }
     }
     
     for(int i = 0; i < uniqueName.length; i++)
     {
       org.gmod.schema.sequence.Feature chadoFeature = new org.gmod.schema.sequence.Feature();
       chadoFeature.setUniqueName(uniqueName[i]);
+      
+      if(qualifierName.equals("Name"))
+        chadoFeature.setName(name);
+      else
+        chadoFeature.setName("0");
+      
       chadoFeature.setObsolete(Boolean.parseBoolean(isObsolete));
 
-      logger4j.debug(uniqueName[i] + " " + log
-          + (String) new_qualifier.getValues().get(0) + " OLD="
-          + (String) old_qualifier.getValues().get(0));
+      String logVal = uniqueName[i] + " " + log
+                      + (new_qualifier !=null ? (String) new_qualifier.getValues().get(0) : "NULL")
+                      + " OLD=" 
+                      + (old_qualifier != null ? (String) old_qualifier.getValues().get(0) : "NULL");
+      logger4j.debug(logVal);
       ChadoTransaction tsn = new ChadoTransaction(ChadoTransaction.UPDATE,
           chadoFeature, feature.getLastModified(), feature, 
-          feature.getKey().getKeyString(), "ID="+uniqueName[i] + " " +
-          log + (String) new_qualifier.getValues().get(0)
-              + " OLD=" + (String) old_qualifier.getValues().get(0));
+          feature.getKey().getKeyString(), "ID="+logVal);
 
       if(qualifierName.equals("ID"))
         tsn.setOldUniquename((String) old_qualifier.getValues().get(0));
diff --git a/uk/ac/sanger/artemis/util/DatabaseDocument.java b/uk/ac/sanger/artemis/util/DatabaseDocument.java
index 4d2bfe9695ed53380850d3acae2be2dd3ab11ec2..5d033ac5864f7e5880bc9b71525fde099e6b02a9 100644
--- a/uk/ac/sanger/artemis/util/DatabaseDocument.java
+++ b/uk/ac/sanger/artemis/util/DatabaseDocument.java
@@ -2681,6 +2681,7 @@ public class DatabaseDocument extends Document
           if(feature != null)
           {
             feature.setTimeLastModified(ts);
+            feature.setName("0");  // do not change name
             dao.merge(feature);
           }
         }