diff --git a/uk/ac/sanger/artemis/chado/ChadoTransactionManager.java b/uk/ac/sanger/artemis/chado/ChadoTransactionManager.java
index b60a4ddc52fee04615098f9d8daaf50cc85a2523..56fc8721022af9e51846270a53ab851631b68cff 100644
--- a/uk/ac/sanger/artemis/chado/ChadoTransactionManager.java
+++ b/uk/ac/sanger/artemis/chado/ChadoTransactionManager.java
@@ -62,6 +62,7 @@ import org.gmod.schema.sequence.FeatureCvTermPub;
 import org.gmod.schema.sequence.FeatureLoc;
 import org.gmod.schema.sequence.FeatureProp;
 import org.gmod.schema.sequence.FeatureDbXRef;
+import org.gmod.schema.sequence.FeaturePub;
 import org.gmod.schema.sequence.FeatureRelationship;
 import org.gmod.schema.sequence.FeatureSynonym;
 import org.gmod.schema.sequence.FeatureCvTerm;
@@ -90,7 +91,7 @@ public class ChadoTransactionManager
   public static boolean addSegments = true;
   private Vector sql = new Vector();
   
-  /** GFF3 predefined tags */
+  /** GFF3 predefined tags, i.e. not feature_prop's */
   private String reserved_tags[] = 
           {   "ID",
               "Name",
@@ -104,6 +105,7 @@ public class ChadoTransactionManager
               "score",
               "codon_start",
               "similarity",
+              "literature",
               "gff_source",      // program or database
               "gff_seqname" };   // seqID of coord system
            
@@ -1244,37 +1246,22 @@ public class ChadoTransactionManager
                                       feature.getKey().getKeyString());
            sql.add(tsn);
          }
-         else if(isCvTag(qualifier_name))
+         else if(qualifier_name.equals("literature"))
          {
-           /*Qualifier qual = feature.getQualifierByName(qualifier_name);
-           StringVector values = qual.getValues();
-           int beginIndex = qualifier_string.indexOf("term=")+5;
-           int endIndex   = qualifier_string.indexOf(";",beginIndex);
-           final String thisTerm;
-           if(endIndex > -1)
-             thisTerm = qualifier_string.substring(beginIndex, endIndex);
-           else
-             thisTerm = qualifier_string.substring(beginIndex);
-           
-           
-           for(int j=0; j<new_qualifier_strings.size(); j++)
-           {
-             String new_qualifier_string = (String)old_qualifier_strings.elementAt(j);
-             if(new_qualifier_string.indexOf("term="+thisTerm) > -1)
-             {
-               // possible update
-             }
-           }*/
+           logger4j.debug(uniquename+"  in handleReservedTags() DELETE literature");
+           FeaturePub featurePub = getFeaturePub(qualifier_string, uniquename);
            
+           tsn = new ChadoTransaction(ChadoTransaction.DELETE,
+               featurePub,
+               feature.getLastModified(), feature, 
+               feature.getKey().getKeyString());
+           sql.add(tsn);
+         }
+         else if(isCvTag(qualifier_name))
+         {
            logger4j.debug(uniquename+"  in handleReservedTags() DELETE "+
                qualifier_name+" "+qualifier_string);
            
-           /*for(int j=0; j<new_qualifier_strings.size(); j++)
-           {
-             String new_qualifier_string = (String)old_qualifier_strings.elementAt(j);
-             System.out.println(new_qualifier_string);
-           }*/
-           
            FeatureCvTerm feature_cvterm = getFeatureCvTerm(qualifier_name, qualifier_string, 
                                                            uniquename);
            tsn = new ChadoTransaction(ChadoTransaction.DELETE,
@@ -1351,6 +1338,17 @@ public class ChadoTransactionManager
                                       feature.getKey().getKeyString());
            sql.add(tsn);
          }
+         else if(qualifier_name.equals("literature"))
+         {
+           logger4j.debug(uniquename+"  in handleReservedTags() INSERT literature");
+           FeaturePub featurePub = getFeaturePub(qualifier_string, uniquename);
+           
+           tsn = new ChadoTransaction(ChadoTransaction.INSERT,
+               featurePub,
+               feature.getLastModified(), feature,
+               feature.getKey().getKeyString());
+           sql.add(tsn);
+         }
          else if(qualifier_name.equals("Parent"))
          {
            processFeatureRelationshipRank(feature, feature.getLocation().getRanges(),
@@ -1551,6 +1549,28 @@ public class ChadoTransactionManager
     return feature_dbxref;
   }
   
+  
+  /**
+   * Create the <code>FeaturePub</code> object for /literature 
+   * qualifiers
+   * @param qualifier_string
+   * @param uniqueName
+   * @return
+   */
+  private FeaturePub getFeaturePub(final String qualifier_string,
+                                   final String uniqueName)
+  {
+    FeaturePub featurePub = new FeaturePub();
+    Pub pub = new Pub();
+    pub.setUniqueName(qualifier_string);
+    org.gmod.schema.sequence.Feature feat = 
+      new org.gmod.schema.sequence.Feature();
+    feat.setUniqueName(uniqueName);
+    
+    featurePub.setPub(pub);
+    featurePub.setFeature(feat);
+    return featurePub;
+  }
   /**
    * Create the <code>FeatureCvTerm</code> object
    * @param qualifier_name