diff --git a/uk/ac/sanger/artemis/io/ValidateFeature.java b/uk/ac/sanger/artemis/io/ValidateFeature.java
index a46bb1bd864654968ffbc5fdef5edf90b16710a2..a8ebe2290d3e14b70e02c5d481b474e37273b6a1 100644
--- a/uk/ac/sanger/artemis/io/ValidateFeature.java
+++ b/uk/ac/sanger/artemis/io/ValidateFeature.java
@@ -146,6 +146,17 @@ public class ValidateFeature
 
   /**
    * Check a single feature
+   * 
+   * GFF - check complete gene model
+   *     - check boundaries are valid
+   *     - check all features are on the same strand
+   *     - check CDS features have a phase
+   *     - check attribute column 
+   *          - qualifiers have a value (not empty)
+   *          - only reserved tags start with uppercase
+   * - CDS have no internal stop codon
+   * - CDS have valid stop codon
+   * 
    * @param f
    * @param fv
    * @param showOnlyFailures
@@ -199,10 +210,12 @@ public class ValidateFeature
         report.put("CDS phase (codon_start) not set", Level.FATAL);
       }
 
-      final String attr = isAttributesOK(gffFeature);
+      String attr = isAttributesOK(gffFeature);
       if(!attr.equals(""))
       {
         pass = false;
+        if(attr.endsWith("\n"))
+          attr = attr.substring(0, attr.length()-1);
         report.put(attr, Level.FATAL);
       }
     }
@@ -310,7 +323,7 @@ public class ValidateFeature
 
         if(!found)
         {
-          String msg = qualifier.getName()+" non-reserved attribute name begins with uppercase";
+          String msg = qualifier.getName()+" non-reserved attribute name begins with uppercase\n";
           str.append(msg);
         }
       }
@@ -320,10 +333,10 @@ public class ValidateFeature
       if(  values == null || values.size() < 1 ||
          ( values.size() == 1 && values.get(0).equals("")) )
       {
-        String msg = qualifier.getName()+" atribute has no value";
+        String msg = qualifier.getName()+" atribute has no value\n";
         str.append(msg);
       }
-    }
+    }  
     return str.toString();
   }