diff --git a/common/source/java/ch/systemsx/cisd/common/parser/AbstractParserObjectFactory.java b/common/source/java/ch/systemsx/cisd/common/parser/AbstractParserObjectFactory.java
index 4b38e3056419f92b642064783fb67e4178371974..26eca52fb3bf442f6866e48300b5b390a622587b 100644
--- a/common/source/java/ch/systemsx/cisd/common/parser/AbstractParserObjectFactory.java
+++ b/common/source/java/ch/systemsx/cisd/common/parser/AbstractParserObjectFactory.java
@@ -126,11 +126,25 @@ public abstract class AbstractParserObjectFactory<E> implements IParserObjectFac
         propertyNames.removeAll(propertyDescriptors.keySet());
         if (propertyNames.size() > 0)
         {
-            throw UserFailureException.fromTemplate("Following properties '%s' are not part of '%s'.", propertyNames,
-                    clazz.getSimpleName());
+            throw UserFailureException.fromTemplate("The following header columns are not part of '%s': %s",
+                    clazz.getSimpleName(), format(propertyNames));
         }
     }
 
+    private final String format(Set<String> set)
+    {
+        final StringBuilder builder = new StringBuilder();
+        for (String s : set)
+        {
+            builder.append("'");
+            builder.append(s);
+            builder.append("', ");
+        }
+        // Remove trailing ", "
+        builder.setLength(builder.length() - 2);
+        return builder.toString();
+    }
+    
     /**
      * Analyzes given <code>Class</code> and returns a <code>Map</code> containing the mandatory <code>Field</code>s
      * keyed by {@link Field#getName()}.