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 9b3c4427704abeb8a7bee9286f791d4d6c138147..c9c464a26128202fb425889bdb325f97b73360e9 100644
--- a/common/source/java/ch/systemsx/cisd/common/parser/AbstractParserObjectFactory.java
+++ b/common/source/java/ch/systemsx/cisd/common/parser/AbstractParserObjectFactory.java
@@ -20,7 +20,6 @@ import java.beans.PropertyDescriptor;
 import java.lang.reflect.Field;
 import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
-import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.HashMap;
@@ -148,8 +147,8 @@ public abstract class AbstractParserObjectFactory<E> implements IParserObjectFac
         int column = propertyModel.getColumn();
         if (column >= lineTokens.length)
         {
-            throw UserFailureException.fromTemplate("Column index '%s' bigger than available line tokens '%s'.",
-                    column, Arrays.asList(lineTokens));
+            throw UserFailureException.fromTemplate("Not enough tokens are available (index: %d, available: %d)",
+                    column, lineTokens.length);
         }
         return lineTokens[column];
     }
diff --git a/common/source/java/ch/systemsx/cisd/common/parser/DefaultReaderParser.java b/common/source/java/ch/systemsx/cisd/common/parser/DefaultReaderParser.java
index 112877f94ed5650c1c26255531afcbf5b8e58755..80db898cce11dc0256f50fe61500ac626f7fcdca 100644
--- a/common/source/java/ch/systemsx/cisd/common/parser/DefaultReaderParser.java
+++ b/common/source/java/ch/systemsx/cisd/common/parser/DefaultReaderParser.java
@@ -18,6 +18,7 @@ package ch.systemsx.cisd.common.parser;
 
 import java.io.Reader;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.List;
 
 import org.apache.commons.io.IOUtils;
@@ -48,15 +49,9 @@ public class DefaultReaderParser<E> implements IReaderParser<E>
         this.lineTokenizer = lineTokenizer;
     }
 
-    protected E createObject(int lineNumber, String[] tokens)
+    protected E createObject(String[] tokens)
     {
-        try
-        {
-            return factory.createObject(tokens);
-        } catch (RuntimeException ex)
-        {
-            throw new ParseException(ex.getMessage(), lineNumber);
-        }
+        return factory.createObject(tokens);
     }
 
     /**
@@ -92,7 +87,16 @@ public class DefaultReaderParser<E> implements IReaderParser<E>
                 if (lineFilter.acceptLine(nextLine, lineNumber))
                 {
                     String[] tokens = parseLine(lineNumber, nextLine);
-                    elements.add(createObject(lineNumber, tokens));
+                    E object;
+                    try
+                    {
+                        object = createObject(tokens);
+                    } catch (RuntimeException ex)
+                    {
+                        throw new ParseException(String.format("Creating an object with following tokens '%s' failed.",
+                                Arrays.asList(tokens)), ex, lineNumber);
+                    }
+                    elements.add(object);
                 }
             }
             lineTokenizer.destroy();
diff --git a/common/sourceTest/java/ch/systemsx/cisd/common/parser/AbstractParserObjectFactoryTest.java b/common/sourceTest/java/ch/systemsx/cisd/common/parser/AbstractParserObjectFactoryTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..f2ca242f0e901ca39f8dfa32512cfc978f547b51
--- /dev/null
+++ b/common/sourceTest/java/ch/systemsx/cisd/common/parser/AbstractParserObjectFactoryTest.java
@@ -0,0 +1,27 @@
+/*
+ * Copyright 2007 ETH Zuerich, CISD
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package ch.systemsx.cisd.common.parser;
+
+/**
+ * Test cases for corresponding {@link AbstractParserObjectFactory} class.
+ * 
+ * @author Christian Ribeaud
+ */
+public final class AbstractParserObjectFactoryTest
+{
+
+}
\ No newline at end of file
diff --git a/common/sourceTest/java/ch/systemsx/cisd/common/parser/DefaultReaderParserTest.java b/common/sourceTest/java/ch/systemsx/cisd/common/parser/DefaultReaderParserTest.java
index db3bfc85b2bb27fa566ac1643902bbbe8e146d1d..55636f55f3682ff2c6345e9b9cd7b88738e03d45 100644
--- a/common/sourceTest/java/ch/systemsx/cisd/common/parser/DefaultReaderParserTest.java
+++ b/common/sourceTest/java/ch/systemsx/cisd/common/parser/DefaultReaderParserTest.java
@@ -18,7 +18,6 @@ package ch.systemsx.cisd.common.parser;
 
 import static org.testng.AssertJUnit.assertEquals;
 
-import java.io.IOException;
 import java.io.Reader;
 import java.io.StringReader;
 import java.util.List;
@@ -39,7 +38,7 @@ public final class DefaultReaderParserTest
                     + "Marcel\tOdiet\tRue des Pervenches 46\t2800 DelŽmont\n";
 
     @Test
-    public final void testParseWithoutFactoryAndHeader() throws IOException
+    public final void testParseWithoutFactoryAndHeader()
     {
         final IReaderParser<String[]> parser = new DefaultReaderParser<String[]>();
         parser.setObjectFactory(IParserObjectFactory.STRING_ARRAY_OBJECT_FACTORY);
@@ -53,7 +52,7 @@ public final class DefaultReaderParserTest
     }
 
     @Test
-    public final void testParseWithoutFactoryWithLineFilter() throws IOException
+    public final void testParseWithoutFactoryWithLineFilter()
     {
         final IReaderParser<String[]> parser = new DefaultReaderParser<String[]>();
         parser.setObjectFactory(IParserObjectFactory.STRING_ARRAY_OBJECT_FACTORY);
@@ -64,4 +63,32 @@ public final class DefaultReaderParserTest
         assertEquals(result.get(1)[2], "Rue des Pervenches 46");
         IOUtils.closeQuietly(reader);
     }
+
+    @Test
+    public final void testCreateObjectWithException()
+    {
+        final IReaderParser<String[]> parser = new DefaultReaderParser<String[]>()
+            {
+                //
+                // DefaultReaderParser
+                //
+                @Override
+                protected String[] createObject(String[] tokens)
+                {
+                    throw new ArrayIndexOutOfBoundsException();
+                }
+            };
+        parser.setObjectFactory(IParserObjectFactory.STRING_ARRAY_OBJECT_FACTORY);
+        final Reader reader = new StringReader(text);
+        try
+        {
+            parser.parse(reader, new HeaderLineFilter(2));
+        } catch (ParseException ex)
+        {
+            assertEquals(
+                    "Creating an object with following tokens '[Christian, Ribeaud, Kapfrain 2/2, Efringen-Kirchen]' failed.",
+                    ex.getMessage());
+            assertEquals(3, ex.getLineNumber());
+        }
+    }
 }
\ No newline at end of file
diff --git a/common/sourceTest/java/ch/systemsx/cisd/common/parser/ParserUtilitiesTest.java b/common/sourceTest/java/ch/systemsx/cisd/common/parser/ParserUtilitiesTest.java
index 252dd05efdf639bf0b43ce21e806edd0df06d0e9..4b4fc1b5878fd6d7004d8891320f1c12aba98c21 100644
--- a/common/sourceTest/java/ch/systemsx/cisd/common/parser/ParserUtilitiesTest.java
+++ b/common/sourceTest/java/ch/systemsx/cisd/common/parser/ParserUtilitiesTest.java
@@ -25,8 +25,8 @@ import java.util.Arrays;
 
 import org.apache.commons.io.FileUtils;
 import org.apache.commons.lang.StringUtils;
-import org.testng.annotations.AfterSuite;
-import org.testng.annotations.BeforeSuite;
+import org.testng.annotations.AfterClass;
+import org.testng.annotations.BeforeClass;
 import org.testng.annotations.Test;
 
 import ch.systemsx.cisd.common.logging.LogInitializer;
@@ -40,9 +40,11 @@ import ch.systemsx.cisd.common.parser.ParserUtilities.Line;
 public final class ParserUtilitiesTest
 {
 
-    private static final File workingDirectory = new File("targets" + File.separator + "unit-test-wd");
+    private static final File unitTestRootDirectory = new File("targets" + File.separator + "unit-test-wd");
 
-    @BeforeSuite
+    private static final File workingDirectory = new File(unitTestRootDirectory, "ParserUtilitiesTest");
+
+    @BeforeClass
     public final void setUp()
     {
         LogInitializer.init();
@@ -50,10 +52,11 @@ public final class ParserUtilitiesTest
         assert workingDirectory.isDirectory();
     }
 
-    @AfterSuite
+    @AfterClass
     public void tearDown() throws IOException
     {
         FileUtils.deleteDirectory(workingDirectory);
+        workingDirectory.deleteOnExit();
     }
 
     @Test