diff --git a/common/source/java/ch/systemsx/cisd/common/parser/DefaultLineTokenizer.java b/common/source/java/ch/systemsx/cisd/common/parser/DefaultLineTokenizer.java
index d1fb1446a00994a8cb75fe5dc77847d7e6d71d52..3110a359c1c512fe5f012ca9417b745dc2b7642e 100644
--- a/common/source/java/ch/systemsx/cisd/common/parser/DefaultLineTokenizer.java
+++ b/common/source/java/ch/systemsx/cisd/common/parser/DefaultLineTokenizer.java
@@ -8,7 +8,7 @@ import org.apache.commons.lang.text.StrTokenizer;
 
 /**
  * A default <code>ILineTokenizer</code> implementation that parses a line into an array of <code>String</code>
- * objects.
+ * objects. This implementation uses {@link StrTokenizer} as internal worker.
  * <p>
  * The default separator chars used here are <code>\t</code>. If you want to change that, use
  * {@link #setProperty(PropertyKey, String)} with corresponding property key defined here.
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 6e0d184ba265d21a2fa4dd03e5dacdce504e6f20..89f5ce4fe160c2280d14b259c1b48ae97d2df73c 100644
--- a/common/source/java/ch/systemsx/cisd/common/parser/DefaultReaderParser.java
+++ b/common/source/java/ch/systemsx/cisd/common/parser/DefaultReaderParser.java
@@ -55,10 +55,13 @@ public class DefaultReaderParser<E> implements IReaderParser<E>
     
     private IParserObjectFactory<E> factory;
     
-    private IPropertyMapperFactory mapperFactory;
-    
-    // TODO Christian: refactor this!!!
-    private boolean propertyMapperSet = false;
+    /**
+     * The line where the header is.
+     * <p>
+     * If we set it bigger than <code>-1</code>, we assume that the header contains mapping informations.
+     * </p>
+     */
+    private int headerLine = -1;
     
     public DefaultReaderParser()
     {
@@ -85,6 +88,11 @@ public class DefaultReaderParser<E> implements IReaderParser<E>
         return lineTokenizer.tokenize(lineNumber, line);
     }
     
+    public final void setHeaderLine(int headerLine)
+    {
+        this.headerLine = headerLine;
+    }
+    
     ///////////////////////////////////////////////////////
     // Parser
     ///////////////////////////////////////////////////////
@@ -114,11 +122,10 @@ public class DefaultReaderParser<E> implements IReaderParser<E>
             {
                 for (int lineNumber = 0; (line = bufferedReader.readLine()) != null; lineNumber++)
                 {
-                    if (mapperFactory != null && mapperFactory.getHeaderLine() > -1 && propertyMapperSet == false)
+                    if (lineNumber == headerLine)
                     {
                         String[] tokens = parseLine(lineNumber, line);
-                        factory.setPropertyMapper(mapperFactory.createPropertyMapper(tokens));
-                        propertyMapperSet = true;
+                        factory.setPropertyMapper(new HeaderFilePropertyMapper(tokens));
                         continue;
                     }
                     if (lineFilter.acceptLine(line))
@@ -145,9 +152,4 @@ public class DefaultReaderParser<E> implements IReaderParser<E>
     {
         this.factory = factory;
     }
-
-    public final void setPropertyMapperFactory(IPropertyMapperFactory mapperFactory)
-    {
-        this.mapperFactory = mapperFactory;
-    }
 }
\ No newline at end of file
diff --git a/common/source/java/ch/systemsx/cisd/common/parser/HeaderFilePropertyMapper.java b/common/source/java/ch/systemsx/cisd/common/parser/HeaderFilePropertyMapper.java
index 4703d0b4750f0ffd500764569bf2d6ec79086ef4..89fea568c67c55e89a5d188f47ab2a10abd8ec18 100644
--- a/common/source/java/ch/systemsx/cisd/common/parser/HeaderFilePropertyMapper.java
+++ b/common/source/java/ch/systemsx/cisd/common/parser/HeaderFilePropertyMapper.java
@@ -20,35 +20,37 @@ import java.util.HashMap;
 import java.util.Map;
 
 /**
+ * A <code>IPropertyMapper</code> implementation for mapping informations being in the header of a given file.
+ * <p>
+ * The parser already parsed the header and give us a <code>String</code> array.
+ * </p>
  * 
- *
  * @author Christian Ribeaud
  */
-public class HeaderFilePropertyMapper implements IPropertyMapper
+final class HeaderFilePropertyMapper implements IPropertyMapper
 {
-    private final Map<String, Property> properties;
+    private final Map<String, IPropertyModel> properties;
     
-    public HeaderFilePropertyMapper(String[] headerTokens) {
+    HeaderFilePropertyMapper(String[] headerTokens) {
         this.properties = tokensToMap(headerTokens);
     }
     
-    private final static Map<String, Property> tokensToMap(String[] tokens)
+    private final static Map<String, IPropertyModel> tokensToMap(String[] tokens)
     {
-        Map<String, Property> map = new HashMap<String, Property>(tokens.length);
+        Map<String, IPropertyModel> map = new HashMap<String, IPropertyModel>(tokens.length);
         for (int i = 0; i < tokens.length; i++)
         {
             String token = tokens[i];
-            map.put(token, new Property(i, token));
+            map.put(token, new MappedProperty(i, token));
         }
         return map;
     }
     
-    
     ///////////////////////////////////////////////////////
     // IPropertyMapper
     ///////////////////////////////////////////////////////
 
-    public Property getProperty(String name)
+    public final IPropertyModel getProperty(String name)
     {
         return properties.get(name);
     }
diff --git a/common/source/java/ch/systemsx/cisd/common/parser/ILineTokenizer.java b/common/source/java/ch/systemsx/cisd/common/parser/ILineTokenizer.java
index 4d46852628845c5572da90c415ef262eb16a4933..f1dc5ae608a95222d83af38a9e3c758b74c64900 100644
--- a/common/source/java/ch/systemsx/cisd/common/parser/ILineTokenizer.java
+++ b/common/source/java/ch/systemsx/cisd/common/parser/ILineTokenizer.java
@@ -17,8 +17,9 @@
 package ch.systemsx.cisd.common.parser;
 
 /**
+ * A <code>ILineTokenizer</code> implementation is able to split a given <code>String</code> line in an array of
+ * tokens.
  * 
- *
  * @author Christian Ribeaud
  */
 public interface ILineTokenizer
@@ -27,17 +28,18 @@ public interface ILineTokenizer
     /**
      * Inits this <code>ILineTokenizer</code>.
      * <p>
-     * Just gets called before parsing starts.
+     * Should be called before parsing starts.
      * </p>
      */
     public void init();
     
-    public abstract String[] tokenize(int lineNumber, String line);
+    /** Splits given <code>line</code> into an array of tokens. */
+    public String[] tokenize(int lineNumber, String line);
 
     /**
-     * Destroys resources used by this <code>IParserObjectFactory</code>.
+     * Cleans up resources used by this <code>ILineTokenizer</code>.
      * <p>
-     * Just gets called when parsing has finished.
+     * Should be called when parsing has finished.
      * </p>
      */
     public void destroy();
diff --git a/common/source/java/ch/systemsx/cisd/common/parser/IParserObjectFactory.java b/common/source/java/ch/systemsx/cisd/common/parser/IParserObjectFactory.java
index b7ef78fdb38cfa1914fd5693b5e44ed9da80bd1b..87bb7e61e6da8007d9cb67938880eb7dcabc2db0 100644
--- a/common/source/java/ch/systemsx/cisd/common/parser/IParserObjectFactory.java
+++ b/common/source/java/ch/systemsx/cisd/common/parser/IParserObjectFactory.java
@@ -17,9 +17,10 @@
 package ch.systemsx.cisd.common.parser;
 
 /**
- * Implementation know how to deal with given parsed text line and convert it into an appropriate <code>Object</code>.
- * A <code>IParserObjectFactory</code> needs a <code>IPropertyMapper</code> to do its job. This
- * <code>IPropertyMapper</code> helps to map <code>Object</code> properties to given tokens.
+ * A <code>IParserObjectFactory</code> implementation knows how to deal with given line tokens and convert them into
+ * an appropriate <code>Object</code>. A <code>IParserObjectFactory</code> needs a <code>IPropertyMapper</code>
+ * to perform its job. A <code>IPropertyMapper</code> helps to map passed tokens to created <code>Object</code>
+ * properties .
  * <p>
  * A <code>IParserObjectFactory</code> is typically registered in {@link IReaderParser}.
  * </p>
@@ -31,7 +32,11 @@ public interface IParserObjectFactory<E>
 
     /**
      * This <code>IParserObjectFactory</code> implementation does nothing and returns the passed
-     * <code>lineTokens</code> as <code>String[]</code>.
+     * <code>lineTokens</code> as <code>String[]</code>. No mapping needed, so
+     * {@link #setPropertyMapper(IPropertyMapper)} does nothing.
+     * <p>
+     * This implementation could be used to debugging purposes.
+     * </p>
      * 
      * @author Christian Ribeaud
      */
@@ -42,12 +47,12 @@ public interface IParserObjectFactory<E>
             // IParserObjectFactory
             ///////////////////////////////////////////////////////
 
-            public String[] createObject(String[] lineTokens)
+            public final String[] createObject(String[] lineTokens)
             {
                 return lineTokens;
             }
 
-            public void setPropertyMapper(IPropertyMapper propertyMapper)
+            public final void setPropertyMapper(IPropertyMapper propertyMapper)
             {
             }
         };
@@ -57,5 +62,6 @@ public interface IParserObjectFactory<E>
      */
     public E createObject(String[] lineTokens);
 
+    /** Sets a <code>IPropertyMapper</code> to map line tokens. */
     public void setPropertyMapper(IPropertyMapper propertyMapper);
 }
\ No newline at end of file
diff --git a/common/source/java/ch/systemsx/cisd/common/parser/IPropertyMapper.java b/common/source/java/ch/systemsx/cisd/common/parser/IPropertyMapper.java
index 62dac4f5f662b5c812550e0046c839424627128f..3f5039316154c56340f223c04f91a268a43dc878 100644
--- a/common/source/java/ch/systemsx/cisd/common/parser/IPropertyMapper.java
+++ b/common/source/java/ch/systemsx/cisd/common/parser/IPropertyMapper.java
@@ -16,48 +16,14 @@
 
 package ch.systemsx.cisd.common.parser;
 
-import org.apache.commons.lang.builder.ToStringBuilder;
-
 /**
+ * The job of <code>PropertyMapper</code> is to return mapping informations regarding a given property name.
  * 
- *
  * @author Christian Ribeaud
  */
 public interface IPropertyMapper
 {
-    
-    public Property getProperty(String name);
-    
-    ///////////////////////////////////////////////////////
-    // Helper Classes
-    ///////////////////////////////////////////////////////
 
-    /**
-     *
-     * 
-     * @author Christian Ribeaud
-     */
-    public final static class Property {
-        
-        public final int column;
-        
-        public final String name;
-        
-        protected Property(final int column, final String name)
-        {
-            this.column = column;
-            this.name = name;
-        }
-        
-        ///////////////////////////////////////////////////////
-        // Object
-        ///////////////////////////////////////////////////////
-        
-        @Override
-        public final String toString()
-        {
-            return ToStringBuilder.reflectionToString(this);
-        }
-        
-    }
+    /** Returns a <code>IPropertyModel</code> for a given property name. */
+    public IPropertyModel getProperty(String name);
 }
\ No newline at end of file
diff --git a/common/source/java/ch/systemsx/cisd/common/parser/IPropertyMapperFactory.java b/common/source/java/ch/systemsx/cisd/common/parser/IPropertyMapperFactory.java
deleted file mode 100644
index 9d3a6ee5fb8b3572e90612fc064b3d98bb6774fe..0000000000000000000000000000000000000000
--- a/common/source/java/ch/systemsx/cisd/common/parser/IPropertyMapperFactory.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * 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;
-
-/**
- * 
- *
- * @author Christian Ribeaud
- */
-// TODO Christian: actually this only can understand file with a header. We should
-// be more generic.
-public interface IPropertyMapperFactory
-{
-    public int getHeaderLine();
-
-    public IPropertyMapper createPropertyMapper(String[] tokens);
-}
diff --git a/common/source/java/ch/systemsx/cisd/common/parser/IReaderParser.java b/common/source/java/ch/systemsx/cisd/common/parser/IReaderParser.java
index 7a110b7d79c2d871fc4ad6111fdcd7466ca2001e..4133346474913bae0dd0aa727d49893ba71b5511 100644
--- a/common/source/java/ch/systemsx/cisd/common/parser/IReaderParser.java
+++ b/common/source/java/ch/systemsx/cisd/common/parser/IReaderParser.java
@@ -62,6 +62,4 @@ public interface IReaderParser<E>
      * </p>
      */
     public void setObjectFactory(IParserObjectFactory<E> factory);
-
-    public void setPropertyMapperFactory(IPropertyMapperFactory factory);
 }