diff --git a/uk/ac/sanger/artemis/chado/GmodDAO.java b/uk/ac/sanger/artemis/chado/GmodDAO.java
index 69e733f19a2421f35313da4ad0c73c57f89b90f9..ba10e0aaa4f722c2c8b50ff37d65ab85dcfc881c 100644
--- a/uk/ac/sanger/artemis/chado/GmodDAO.java
+++ b/uk/ac/sanger/artemis/chado/GmodDAO.java
@@ -36,6 +36,7 @@ import org.gmod.schema.general.Db;
 import org.gmod.schema.general.DbXRef;
 import org.gmod.schema.organism.Organism;
 import org.gmod.schema.pub.Pub;
+import org.gmod.schema.pub.PubDbXRef;
 import org.gmod.schema.sequence.Feature;
 import org.gmod.schema.sequence.FeatureCvTerm;
 import org.gmod.schema.sequence.FeatureCvTermDbXRef;
@@ -48,7 +49,8 @@ import uk.ac.sanger.artemis.util.DatabaseDocument;
 public abstract class GmodDAO 
        implements SequenceDaoI, SchemaDaoI, OrganismDaoI, CvDaoI, PubDaoI, GeneralDaoI
 {
-  
+  private static org.apache.log4j.Logger logger4j = 
+    org.apache.log4j.Logger.getLogger(GmodDAO.class);
   public abstract List getOrganismsContainingSrcFeatures();
   public abstract List getSimilarityMatchesByFeatureIds(final List featureIds);
   public abstract List getSimilarityMatches(final Integer srcFeatureId);
@@ -472,11 +474,45 @@ public abstract class GmodDAO
       
       insertPub(pub);
       pubResult = getPubByUniqueName(pub);
+      
+      // add PubDbXRef
+      loadPubDbXRef(pubResult);
     }
     
     return pubResult;
   }
   
+  /**
+   * Create PubDbXRef for new Pub's and to handle links to
+   * links to eg, pubmed.
+   * @param pub
+   */
+  private void loadPubDbXRef(final Pub pub)
+  {
+    try
+    {
+      int index = pub.getUniqueName().indexOf(':');
+      if (index > -1)
+      {
+        DbXRef dbXRef = new DbXRef();
+        dbXRef.setAccession(pub.getUniqueName().substring(index + 1));
+        Db db = new Db();
+        db.setName(pub.getUniqueName().substring(0, index));
+        dbXRef.setDb(db);
+        dbXRef = loadDbXRef(dbXRef);
+
+        PubDbXRef pubDbXRef = new PubDbXRef();
+        pubDbXRef.setDbXRef(dbXRef);
+        pubDbXRef.setPub(pub);
+        insertPubDbXRef(pubDbXRef);
+      }
+    }
+    catch (Exception e)
+    {
+      logger4j.warn("GmodDAO.loadPubDbXRef() :: "+e.getMessage());
+    }
+  }
+  
   /**
    * Insert a feature_cvterm and associated feature_cvtermprop's,
    * feature_cvterm_dbxref's and feature_cvterm_pub.
@@ -547,6 +583,7 @@ public abstract class GmodDAO
   protected abstract void insertDbXRef(DbXRef dbXRef);
   protected abstract Pub getPubByUniqueName(Pub pub);
   protected abstract void insertPub(Pub pub);
+  protected abstract void insertPubDbXRef(PubDbXRef pubDbXRef);
   protected abstract void insertFeatureCvTerm(final FeatureCvTerm feature_cvterm);
   protected abstract int getCurrval(String seq_id);
   protected abstract void insertFeatureCvTermProp(FeatureCvTermProp featureCvTermProp);
diff --git a/uk/ac/sanger/artemis/chado/IBatisDAO.java b/uk/ac/sanger/artemis/chado/IBatisDAO.java
index 47ac96692a522a06b1200cde18d8a3851f979e06..e1f66ade5cdd8d8591a9b52500ca0781c96a747b 100644
--- a/uk/ac/sanger/artemis/chado/IBatisDAO.java
+++ b/uk/ac/sanger/artemis/chado/IBatisDAO.java
@@ -47,6 +47,7 @@ import org.gmod.schema.general.Db;
 import org.gmod.schema.general.DbXRef;
 import org.gmod.schema.organism.Organism;
 import org.gmod.schema.pub.Pub;
+import org.gmod.schema.pub.PubDbXRef;
 import org.gmod.schema.analysis.AnalysisFeature;
 import org.gmod.schema.cv.Cv;
 import org.gmod.schema.cv.CvTerm;
@@ -1236,6 +1237,11 @@ public class IBatisDAO extends GmodDAO
     sqlMap.insert("insertPub", pub);
   }
   
+  protected void insertPubDbXRef(PubDbXRef pubDbXRef)
+  {
+    sqlMap.insert("insertPubDbXRef", pubDbXRef);
+  }
+  
   
   public void startTransaction() throws SQLException
   { 
diff --git a/uk/ac/sanger/artemis/chado/JdbcDAO.java b/uk/ac/sanger/artemis/chado/JdbcDAO.java
index 2d7c4d05edac73aaa06454ad2d92bbbeb8d72dce..a4b0b7975c5c0406c9cb3fc963bb7d360a83ed83 100644
--- a/uk/ac/sanger/artemis/chado/JdbcDAO.java
+++ b/uk/ac/sanger/artemis/chado/JdbcDAO.java
@@ -2285,8 +2285,9 @@ public class JdbcDAO extends GmodDAO
       throw new RuntimeException(sqle);
     }
   }
-
-
-
-
+  
+  protected void insertPubDbXRef(PubDbXRef pubDbXRef)
+  {
+    
+  }
 }