diff --git a/uk/ac/sanger/artemis/chado/SimilarityLazyQualifierValue.java b/uk/ac/sanger/artemis/chado/FeatureLocLazyQualifierValue.java
similarity index 82%
rename from uk/ac/sanger/artemis/chado/SimilarityLazyQualifierValue.java
rename to uk/ac/sanger/artemis/chado/FeatureLocLazyQualifierValue.java
index 35bdc4b33e054bb640d2ac49c42383ae14c7b043..f6a57ec2b3a9dcfb44ff44f8825895128999e173 100644
--- a/uk/ac/sanger/artemis/chado/SimilarityLazyQualifierValue.java
+++ b/uk/ac/sanger/artemis/chado/FeatureLocLazyQualifierValue.java
@@ -1,4 +1,4 @@
-/* 
+/* FeatureLocLazyQualifierValue
  *
  * created: 2007
  *
@@ -33,6 +33,7 @@ import java.util.List;
 import java.util.Vector;
 
 import org.gmod.schema.analysis.AnalysisFeature;
+import org.gmod.schema.general.DbXRef;
 import org.gmod.schema.sequence.FeatureDbXRef;
 import org.gmod.schema.sequence.FeatureLoc;
 import org.gmod.schema.sequence.FeatureProp;
@@ -41,7 +42,7 @@ import org.gmod.schema.sequence.Feature;
 import uk.ac.sanger.artemis.io.LazyQualifierValue;
 import uk.ac.sanger.artemis.util.DatabaseDocument;
 
-public class SimilarityLazyQualifierValue implements LazyQualifierValue
+public class FeatureLocLazyQualifierValue implements LazyQualifierValue
 {
   /** match feature associated with the similarity */
   private Feature matchFeature;
@@ -53,11 +54,13 @@ public class SimilarityLazyQualifierValue implements LazyQualifierValue
   private boolean lazyLoaded = false;
   
   /**
-   * Qualifier object to handle lazy loading of similarity data
+   * Qualifier object to handle lazy loading of properties that
+   * are featureloc'ed to the feature being read in. e.g. similarity,
+   * polypeptide_domain, protein predictions (TMHMM, signal_peptide).
    * @param matchFeature
    * @param featureId
    */
-  public SimilarityLazyQualifierValue(final Feature matchFeature, final int featureId)
+  public FeatureLocLazyQualifierValue(final Feature matchFeature, final int featureId)
   {
     this.matchFeature = matchFeature;
     this.featureId    = featureId;
@@ -77,7 +80,7 @@ public class SimilarityLazyQualifierValue implements LazyQualifierValue
     
     while(it.hasNext())
     {
-      SimilarityLazyQualifierValue thisSimilarity = (SimilarityLazyQualifierValue)it.next();
+      FeatureLocLazyQualifierValue thisSimilarity = (FeatureLocLazyQualifierValue)it.next();
       Feature thisMatchFeature = thisSimilarity.getMatchFeature();
       Collection featureLocs = thisMatchFeature.getFeatureLocsForFeatureId();
       Iterator it2 = featureLocs.iterator();
@@ -192,9 +195,19 @@ public class SimilarityLazyQualifierValue implements LazyQualifierValue
 
     Collection analysisFeatures = matchFeature.getAnalysisFeatures();
     Iterator it3 = analysisFeatures.iterator();
-    AnalysisFeature analysisFeature = (AnalysisFeature) it3.next();
-
-    buff.append(analysisFeature.getAnalysis().getProgram()+";");
+    AnalysisFeature analysisFeature = null;
+    
+    if(it3.hasNext())  // attached analysisfeature 
+    {
+      analysisFeature = (AnalysisFeature) it3.next();
+      buff.append(analysisFeature.getAnalysis().getProgram()+";");
+    }
+    else
+    {
+      // predictions and polypeptide_domains have dbxrefs
+      buff.append(getMatchFeatureDbXRefs());
+    }
+    
 
     org.gmod.schema.sequence.Feature subject = null;
     org.gmod.schema.sequence.FeatureLoc queryLoc   = null;
@@ -279,16 +292,20 @@ public class SimilarityLazyQualifierValue implements LazyQualifierValue
     else
       buff.append(";");
     
-    if(analysisFeature.getIdentity() != null)
+    if(analysisFeature != null && analysisFeature.getIdentity() != null)
       buff.append("id="+analysisFeature.getIdentity()+"%;");
-    if(analysisFeature.getSignificance() != null)
+    if(analysisFeature != null && analysisFeature.getSignificance() != null)
       buff.append("E()="+analysisFeature.getSignificance()+";");
-    if(analysisFeature.getRawScore() != null)
+    if(analysisFeature != null && analysisFeature.getRawScore() != null)
       buff.append("score="+analysisFeature.getRawScore()+";");
     
     if(queryLoc != null && queryLoc.getFmin().intValue() > -1)
     {
-      int fmin = queryLoc.getFmin().intValue()+1;
+      final int fmin;
+      if(queryLoc.getFmin().compareTo(queryLoc.getFmax()) == 0)
+        fmin = queryLoc.getFmin().intValue();
+      else
+        fmin = queryLoc.getFmin().intValue()+1;
       buff.append("query "+fmin+"-"+queryLoc.getFmax());
       if(matchFeature.getCvTerm().getName().equals("protein_match"))
         buff.append(" aa;");
@@ -333,6 +350,42 @@ public class SimilarityLazyQualifierValue implements LazyQualifierValue
     return new String(buff);
   }
   
+  /**
+   * Get dbxrefs associated with the match feature
+   * @return
+   */
+  private String getMatchFeatureDbXRefs()
+  {
+    final StringBuffer dbXRefs = new StringBuffer();
+    final Collection featureDbXRefs = matchFeature.getFeatureDbXRefs();
+    final Iterator it3 = featureDbXRefs.iterator();
+    while(it3.hasNext())
+    {
+      DbXRef dbXRef = ((FeatureDbXRef) it3.next()).getDbXRef();
+      dbXRefs.append(dbXRef.getDb().getName()+":"+
+                               dbXRef.getAccession());
+      
+      if( dbXRef.getDescription() != null && 
+         !dbXRef.getDescription().equals("") )
+        dbXRefs.append(" :\t"+dbXRef.getDescription());
+      dbXRefs.append(";");
+    }
+    
+    final DbXRef dbXRef = matchFeature.getDbXRef();
+    
+    if(dbXRef != null)
+    {
+      dbXRefs.append(dbXRef.getDb().getName()+":"+
+                   dbXRef.getAccession());
+    
+      /*if( dbXRef.getDescription() != null && 
+         !dbXRef.getDescription().equals("") )
+       dbXRefs.append(" :\t"+dbXRef.getDescription()+";");*/
+      dbXRefs.append(";");
+    }
+    
+    return dbXRefs.toString();
+  }
   
   private String getSoftString()
   {