diff --git a/common/source/java/ch/systemsx/cisd/common/parser/DefaultParser.java b/common/source/java/ch/systemsx/cisd/common/parser/DefaultParser.java
index d0c99bbe4002eded519e2af9ce837d94cf2d6899..3f848408de3a37f14890137b22b641ed93f03d52 100644
--- a/common/source/java/ch/systemsx/cisd/common/parser/DefaultParser.java
+++ b/common/source/java/ch/systemsx/cisd/common/parser/DefaultParser.java
@@ -73,7 +73,7 @@ public class DefaultParser<E> implements IParser<E>
     // Parser
     //
 
-    public final List<E> parse(final Iterator<Line> lineIterator, final ILineFilter lineFilter, final long headerLength)
+    public final List<E> parse(final Iterator<Line> lineIterator, final ILineFilter lineFilter, final int headerLength)
             throws ParsingException
     {
         final List<E> elements = new ArrayList<E>();
@@ -83,7 +83,7 @@ public class DefaultParser<E> implements IParser<E>
             while (lineIterator.hasNext())
             {
                 Line line = lineIterator.next();
-                final String nextLine = line.getText();
+                String nextLine = line.getText();
                 int number = line.getNumber();
                 if (lineFilter.acceptLine(nextLine, number))
                 {
@@ -91,11 +91,23 @@ public class DefaultParser<E> implements IParser<E>
                     E object = null;
                     try
                     {
-                        if (tokens.length > headerLength)
+                        if (tokens.length != headerLength)
                         {
+                            String moreLessStr = tokens.length > headerLength ? "more" : "less";
+                            StringBuilder lineStructure = new StringBuilder();
+                            for (int i = 0; i < tokens.length; i++)
+                            {
+                                lineStructure.append(tokens[i]);
+                                if (i + 1 < tokens.length)
+                                {
+                                    lineStructure.append(" <TAB> ");
+                                }
+                            }
+                            lineStructure.append(" <END_OF_LINE>");
                             throw new RuntimeException(String.format(
-                                    "Line <%s> has more columns (%s) than the header (%s)", number, String
-                                            .valueOf(tokens.length), String.valueOf(headerLength)));
+                                    "Line <%s> has %s columns (%s) than the header (%s):\n%s", number, moreLessStr,
+                                    String.valueOf(tokens.length), String.valueOf(headerLength), lineStructure
+                                            .toString()));
                         }
                         object = createObject(tokens);
                     } catch (final ParserException parserException)
diff --git a/common/source/java/ch/systemsx/cisd/common/parser/IParser.java b/common/source/java/ch/systemsx/cisd/common/parser/IParser.java
index f3c5df833d39c58878710141d2348ed4b1e67788..59cbd702d0264025941c53a2a6b56c723ad87b28 100644
--- a/common/source/java/ch/systemsx/cisd/common/parser/IParser.java
+++ b/common/source/java/ch/systemsx/cisd/common/parser/IParser.java
@@ -35,7 +35,7 @@ public interface IParser<E>
      * @param headerLength number of columns in the header
      * @return a <code>List</code> of elements.
      */
-    public List<E> parse(final Iterator<Line> lineIterator, final ILineFilter lineFilter, final long headerLength)
+    public List<E> parse(final Iterator<Line> lineIterator, final ILineFilter lineFilter, final int headerLength)
             throws ParsingException;
 
     /**
diff --git a/common/source/java/ch/systemsx/cisd/common/parser/TabFileLoader.java b/common/source/java/ch/systemsx/cisd/common/parser/TabFileLoader.java
index 2622ce2162f360f17cd77cd1ead484805b3452be..d7880016f6ec89395779f6d263765821bf206868 100644
--- a/common/source/java/ch/systemsx/cisd/common/parser/TabFileLoader.java
+++ b/common/source/java/ch/systemsx/cisd/common/parser/TabFileLoader.java
@@ -97,7 +97,7 @@ public class TabFileLoader<T>
         {
             reader = new FileReader(file);
             return load(reader);
-        } catch (IOException ex)
+        } catch (final IOException ex)
         {
             throw new EnvironmentFailureException(ex.getMessage());
         } catch (final ParsingException ex)
@@ -110,10 +110,10 @@ public class TabFileLoader<T>
         }
     }
 
-    List<T> load(Reader reader)
+    List<T> load(final Reader reader)
     {
-        List<T> result = new ArrayList<T>();
-        Iterator<Line> lineIterator = createLineIterator(reader);
+        final List<T> result = new ArrayList<T>();
+        final Iterator<Line> lineIterator = createLineIterator(reader);
         if (lineIterator.hasNext() == false)
         {
             return result;
@@ -136,11 +136,11 @@ public class TabFileLoader<T>
 
         final DefaultParser<T> parser = new DefaultParser<T>();
         final String[] tokens = StringUtils.split(headerLine, "\t");
-        final long headerLength = tokens.length;
+        final int headerLength = tokens.length;
         notUnique(tokens);
         final IAliasPropertyMapper propertyMapper = new HeaderFilePropertyMapper(tokens);
         parser.setObjectFactory(factory.createFactory(propertyMapper));
-        ILineFilter filter = AlwaysAcceptLineFilter.INSTANCE;
+        final ILineFilter filter = AlwaysAcceptLineFilter.INSTANCE;
         if (previousLineHasColumnHeaders)
         {
             result.addAll(parser.parse(Arrays.asList(line).iterator(), filter, headerLength));
@@ -149,10 +149,10 @@ public class TabFileLoader<T>
         return result;
     }
 
-    private Iterator<Line> createLineIterator(Reader reader)
+    private Iterator<Line> createLineIterator(final Reader reader)
     {
         final LineIterator lineIterator = IOUtils.lineIterator(reader);
-        Iterator<Line> iterator = new Iterator<Line>()
+        final Iterator<Line> iterator = new Iterator<Line>()
             {
                 private int lineNumber;
 
diff --git a/common/sourceTest/java/ch/systemsx/cisd/common/parser/DefaultParserTest.java b/common/sourceTest/java/ch/systemsx/cisd/common/parser/DefaultParserTest.java
index ac0d353cc24cbe74c13092573652086e231df0b0..7ac7e2c6056fffa6c37e252d1ea864a35c183cfa 100644
--- a/common/sourceTest/java/ch/systemsx/cisd/common/parser/DefaultParserTest.java
+++ b/common/sourceTest/java/ch/systemsx/cisd/common/parser/DefaultParserTest.java
@@ -36,7 +36,7 @@ public final class DefaultParserTest
                     "Charles\tDarwin\tHumboldt Ave. 1865\t4242 Somewhere",
                     "Albert\tEinstein\tNewton Road 1905\t4711 Princton");
 
-    private final static long HEADER_LENGTH = 4;
+    private final static int HEADER_LENGTH = 4;
 
     @Test
     public final void testParseWithoutFactoryAndHeader()
@@ -80,7 +80,7 @@ public final class DefaultParserTest
         try
         {
             parser.parse(createLineIterator(), new HeaderLineFilter(2), HEADER_LENGTH);
-        } catch (ParsingException ex)
+        } catch (final ParsingException ex)
         {
             assertEquals("Creating an object with following tokens '[firstName, lastName, address, city]' failed.", ex
                     .getMessage());
@@ -92,7 +92,7 @@ public final class DefaultParserTest
     {
         return new Iterator<Line>()
             {
-                private Iterator<String> iterator = text.iterator();
+                private final Iterator<String> iterator = text.iterator();
 
                 private int lineNumber;