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 014209e81f0a37d7a8e79d67a4958a8b221c4e82..c8c3ab70acabd31acc948df36769096e43dd9df3 100644
--- a/common/source/java/ch/systemsx/cisd/common/parser/DefaultParser.java
+++ b/common/source/java/ch/systemsx/cisd/common/parser/DefaultParser.java
@@ -21,6 +21,8 @@ import java.util.Iterator;
 import java.util.List;
 import java.util.NoSuchElementException;
 
+import org.apache.commons.lang.StringUtils;
+
 import ch.systemsx.cisd.common.parser.filter.ILineFilter;
 
 /**
@@ -73,17 +75,21 @@ public class DefaultParser<E, T> implements IParser<E, T>
             {
                 E object = null;
                 String[] tokens = parseLine(number, nextLine, headerLength);
-                try
-                {
-                    object = createObject(tokens);
-                } catch (final ParserException parserException)
+                // skip empty lines
+                if (false == areAllTokensBlank(tokens))
                 {
-                    throw new ParsingException(parserException, tokens, number);
-                }
-                // Skip null values
-                if (null != object)
-                {
-                    elements.add(object);
+                    try
+                    {
+                        object = createObject(tokens);
+                    } catch (final ParserException parserException)
+                    {
+                        throw new ParsingException(parserException, tokens, number);
+                    }
+                    // Skip null values
+                    if (null != object)
+                    {
+                        elements.add(object);
+                    }
                 }
             }
         }
@@ -91,6 +97,18 @@ public class DefaultParser<E, T> implements IParser<E, T>
         return elements;
     }
 
+    private boolean areAllTokensBlank(String[] tokens)
+    {
+        for (String token : tokens)
+        {
+            if (false == StringUtils.isBlank(token))
+            {
+                return false;
+            }
+        }
+        return true;
+    }
+
     public final Iterator<E> parseIteratively(final Iterator<ILine<T>> lineIterator,
             final ILineFilter lineFilter, final int headerLength) throws ParsingException
     {
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 4b0b19824a937865a939a7587b91f5db7300a6bb..adb945651db4c9f039d9edcccae117860d125952 100644
--- a/common/sourceTest/java/ch/systemsx/cisd/common/parser/DefaultParserTest.java
+++ b/common/sourceTest/java/ch/systemsx/cisd/common/parser/DefaultParserTest.java
@@ -47,6 +47,10 @@ public final class DefaultParserTest
             "# This is a comment", "firstName\tlastName\taddress\tcity",
             "\tDarwin\tHumboldt Ave. 1865", "Albert\tEinstein");
 
+    private final static List<String> textWithEmptyLines = Arrays.asList("", "# This is a comment",
+            "firstName\tlastName\taddress\tcity", "\tDarwin\tHumboldt Ave. 1865", "  \t  \t  \t  ",
+            "Albert\tEinstein");
+
     private final static int HEADER_LENGTH = 4;
 
     private final static IParser<String[], String> createParser()
@@ -130,6 +134,18 @@ public final class DefaultParserTest
         assertEquals("", result.get(2)[3]);
     }
 
+    @Test
+    public final void testParseEmptyLinesIgnored()
+    {
+        final IParser<String[], String> parser = createParser();
+        final List<String[]> result =
+                parser.parse(createLineIterator(textWithEmptyLines), new HeaderLineFilter(),
+                        HEADER_LENGTH);
+        assertEquals(3, result.size());
+        assertEquals("Darwin", result.get(1)[1]);
+        assertEquals("Albert", result.get(2)[0]);
+    }
+
     @Test
     public final void testParseWithColumnSizeMismatching()
     {