diff --git a/bds/source/java/ch/systemsx/cisd/bds/Utilities.java b/bds/source/java/ch/systemsx/cisd/bds/Utilities.java
index 305fc25175bcf63787c79ee15c064b25ad33db75..f99601db8498287d7f91e7b6ea9b6edcaeabd886 100644
--- a/bds/source/java/ch/systemsx/cisd/bds/Utilities.java
+++ b/bds/source/java/ch/systemsx/cisd/bds/Utilities.java
@@ -102,6 +102,22 @@ public class Utilities
         return file.getStringContent();
     }
 
+    /**
+     * Returns the string content of a file from the specified directory. Doesn't change line
+     * terminating characters to '\n'.
+     * 
+     * @param directory Directory of the requested file.
+     * @param name Name of the file.
+     * @return never <code>null</code> but could return an empty string.
+     * @throws DataStructureException if the requested file does not exist.
+     */
+    public static String getExactString(final IDirectory directory, final String name)
+    {
+        final INode node = tryGetFileNode(directory, name);
+        final IFile file = (IFile) node;
+        return file.getExactStringContent();
+    }
+
     /**
      * Returns the string content of a file from the specified directory as list of
      * <code>String</code> objects.
@@ -252,7 +268,7 @@ public class Utilities
         /** Converts this object to corresponding <code>boolean</code>. */
         public boolean toBoolean()
         {
-            return (this == TRUE) ? true : false;
+            return this == TRUE ? true : false;
         }
 
         /** Converts given <code>boolean</code> to this enumeration item. */
diff --git a/bds/source/java/ch/systemsx/cisd/bds/check/AbstractChecker.java b/bds/source/java/ch/systemsx/cisd/bds/check/AbstractChecker.java
index 7fdd5ec75b814b99322b0d866681534ef4c973ec..b0f8178aa5d11544aaf0523ca0c7cafecb918895 100644
--- a/bds/source/java/ch/systemsx/cisd/bds/check/AbstractChecker.java
+++ b/bds/source/java/ch/systemsx/cisd/bds/check/AbstractChecker.java
@@ -236,6 +236,7 @@ public abstract class AbstractChecker
     {
         try
         {
+            checkTrimmed(problemReport, dataDir, name);
             return Utilities.getBoolean(dataDir, name).toBoolean();
         } catch (final Exception e)
         {
@@ -249,6 +250,7 @@ public abstract class AbstractChecker
     {
         try
         {
+            checkTrimmed(problemReport, dataSet, name);
             final String loadedValue = Utilities.getTrimmedString(dataSet, name);
             boolean matches = false;
             for (final String value : values)
@@ -276,6 +278,7 @@ public abstract class AbstractChecker
     {
         try
         {
+            checkTrimmed(problemReport, dir, file);
             return Utilities.getNumber(dir, file);
         } catch (final Exception e)
         {
@@ -288,6 +291,7 @@ public abstract class AbstractChecker
     {
         try
         {
+            // FIXME???
             getFileOrFail(dataDir, name);
         } catch (final Exception e)
         {
@@ -478,6 +482,8 @@ public abstract class AbstractChecker
     {
         try
         {
+            checkTrimmed(problemReport, dir, file);
+
             final int loaded = Utilities.getNumber(dir, file);
             if (loaded != value)
             {
@@ -489,6 +495,18 @@ public abstract class AbstractChecker
         }
     }
 
+    public static void checkTrimmed(final ProblemReport problemReport, final IDirectory dir,
+            final String file)
+    {
+        final String loaded = Utilities.getExactString(dir, file);
+        final String loadedTrimmed = Utilities.getTrimmedString(dir, file);
+        if (loaded.equals(loadedTrimmed) == false)
+        {
+            problemReport.error(String.format(
+                    "Found not trimmed value in file '%s' (directory '%s').", file, dir));
+        }
+    }
+
     private IFile tryGetFile(final IDirectory bdsRoot, final String name)
     {
         IFile file1;
diff --git a/bds/source/java/ch/systemsx/cisd/bds/check/HCSImageChecker.java b/bds/source/java/ch/systemsx/cisd/bds/check/HCSImageChecker.java
index a41d122f94a04477c365793b12a947098dc7988c..4517a277925febc9ee97eb5487df6ca38bfc501a 100644
--- a/bds/source/java/ch/systemsx/cisd/bds/check/HCSImageChecker.java
+++ b/bds/source/java/ch/systemsx/cisd/bds/check/HCSImageChecker.java
@@ -25,7 +25,7 @@ import ch.systemsx.cisd.bds.storage.IDirectory;
 import ch.systemsx.cisd.bds.storage.filesystem.NodeFactory;
 
 /**
- * Allows to check consistency of <image>HCS_IMAGE V1.0</code> format. Program will try to find all
+ * Allows to check consistency of <code>HCS_IMAGE V1.0</code> format. Program will try to find all
  * the problems. If the path provided as an argument is not a readable directory or version is
  * incorrect (directory with version does not exist, cannot be parsed, etc.) - program will stop
  * processing the path complaining only about this basic problem.
diff --git a/bds/source/java/ch/systemsx/cisd/bds/check/StructureChecker.java b/bds/source/java/ch/systemsx/cisd/bds/check/StructureChecker.java
index 3874a6670c11125966f529db7811515597b76bd5..0ab1eac47c3871a2ee4f2662966ec5fb0ba8faa0 100644
--- a/bds/source/java/ch/systemsx/cisd/bds/check/StructureChecker.java
+++ b/bds/source/java/ch/systemsx/cisd/bds/check/StructureChecker.java
@@ -137,7 +137,7 @@ public final class StructureChecker extends AbstractChecker
         try
         {
             final IDirectory md5sum = Utilities.getSubDirectory(metadata, AbstractChecker.MD5SUM);
-            checkFileNotEmpty(md5sum, AbstractChecker.ORIGINAL);
+            checkFileNotEmpty(md5sum, AbstractChecker.ORIGINAL, false);
         } catch (final Exception e)
         {
             problemReport.error(e.getMessage());
@@ -149,9 +149,9 @@ public final class StructureChecker extends AbstractChecker
         try
         {
             final IDirectory sample = Utilities.getSubDirectory(metadata, AbstractChecker.SAMPLE);
-            checkFileNotEmpty(sample, AbstractChecker.TYPE_DESCRIPTION);
-            checkFileNotEmpty(sample, AbstractChecker.TYPE_CODE);
-            checkFileNotEmpty(sample, AbstractChecker.CODE);
+            checkFileNotEmptyAndTrimmed(sample, AbstractChecker.TYPE_DESCRIPTION);
+            checkFileNotEmptyAndTrimmed(sample, AbstractChecker.TYPE_CODE);
+            checkFileNotEmptyAndTrimmed(sample, AbstractChecker.CODE);
         } catch (final Exception e)
         {
             problemReport.error(e.getMessage());
@@ -164,9 +164,9 @@ public final class StructureChecker extends AbstractChecker
         {
             final IDirectory experimentRegistrator =
                     Utilities.getSubDirectory(metadata, AbstractChecker.EXPERIMENT_REGISTRATOR);
-            checkFileNotEmpty(experimentRegistrator, AbstractChecker.FIRST_NAME);
-            checkFileNotEmpty(experimentRegistrator, AbstractChecker.LAST_NAME);
-            checkFileNotEmpty(experimentRegistrator, AbstractChecker.EMAIL);
+            checkFileNotEmptyAndTrimmed(experimentRegistrator, AbstractChecker.FIRST_NAME);
+            checkFileNotEmptyAndTrimmed(experimentRegistrator, AbstractChecker.LAST_NAME);
+            checkFileNotEmptyAndTrimmed(experimentRegistrator, AbstractChecker.EMAIL);
         } catch (final Exception e)
         {
             problemReport.error(e.getMessage());
@@ -184,10 +184,10 @@ public final class StructureChecker extends AbstractChecker
         {
             final IDirectory experimentIdentifier =
                     Utilities.getSubDirectory(metadata, AbstractChecker.EXPERIMENT_IDENTIFIER);
-            checkFileNotEmpty(experimentIdentifier, AbstractChecker.INSTANCE_CODE);
-            checkFileNotEmpty(experimentIdentifier, AbstractChecker.GROUP_CODE);
-            checkFileNotEmpty(experimentIdentifier, AbstractChecker.PROJECT_CODE);
-            checkFileNotEmpty(experimentIdentifier, AbstractChecker.EXPERIMENT_CODE);
+            checkFileNotEmptyAndTrimmed(experimentIdentifier, AbstractChecker.INSTANCE_CODE);
+            checkFileNotEmptyAndTrimmed(experimentIdentifier, AbstractChecker.GROUP_CODE);
+            checkFileNotEmptyAndTrimmed(experimentIdentifier, AbstractChecker.PROJECT_CODE);
+            checkFileNotEmptyAndTrimmed(experimentIdentifier, AbstractChecker.EXPERIMENT_CODE);
         } catch (final Exception e)
         {
             problemReport.error(e.getMessage());
@@ -200,7 +200,7 @@ public final class StructureChecker extends AbstractChecker
         {
             final IDirectory format = getFormatOrFail(metadata);
             checkVersion(format);
-            checkFileNotEmpty(format, AbstractChecker.CODE);
+            checkFileNotEmptyAndTrimmed(format, AbstractChecker.CODE);
         } catch (final Exception e)
         {
             problemReport.error(e.getMessage());
@@ -213,10 +213,10 @@ public final class StructureChecker extends AbstractChecker
         {
             final IDirectory dataSet =
                     Utilities.getSubDirectory(metadata, AbstractChecker.DATA_SET);
-            checkFileNotEmpty(dataSet, AbstractChecker.CODE);
+            checkFileNotEmptyAndTrimmed(dataSet, AbstractChecker.CODE);
             checkFileContainsTimestamp(dataSet, AbstractChecker.PRODUCTION_TIMESTAMP);
-            checkFileNotEmpty(dataSet, AbstractChecker.PRODUCER_CODE);
-            checkFileNotEmpty(dataSet, AbstractChecker.OBSERVABLE_TYPE);
+            checkFileNotEmptyAndTrimmed(dataSet, AbstractChecker.PRODUCER_CODE);
+            checkFileNotEmptyAndTrimmed(dataSet, AbstractChecker.OBSERVABLE_TYPE);
             final Boolean isMeasured = checkFileContainsBoolean(dataSet, IS_MEASURED);
             checkFileContainsEnumeration(dataSet, IS_COMPLETE, new String[]
                 { TRUE, FALSE, UNKNOWN });
@@ -236,7 +236,7 @@ public final class StructureChecker extends AbstractChecker
                 checkFileExists(dataSet, PARENT_CODES);
             } else
             {
-                checkFileNotEmpty(dataSet, PARENT_CODES);
+                checkFileNotEmptyAndTrimmed(dataSet, PARENT_CODES);
             }
         } catch (final Exception e)
         {
@@ -262,6 +262,7 @@ public final class StructureChecker extends AbstractChecker
     {
         try
         {
+            checkTrimmed(problemReport, dataDir, name);
             if (Utilities.getDateOrNull(dataDir, name) == null)
             {
                 throw new DataStructureException(String.format(
@@ -273,10 +274,15 @@ public final class StructureChecker extends AbstractChecker
         }
     }
 
-    private void checkFileNotEmpty(final IDirectory dataDir, final String name)
+    private void checkFileNotEmpty(final IDirectory dataDir, final String name,
+            final boolean mustBeTrimmed)
     {
         try
         {
+            if (mustBeTrimmed)
+            {
+                checkTrimmed(problemReport, dataDir, name);
+            }
             final IFile file = getFileOrFail(dataDir, name);
             if (StringUtils.isEmpty(file.getStringContent()))
             {
@@ -290,6 +296,11 @@ public final class StructureChecker extends AbstractChecker
         }
     }
 
+    private void checkFileNotEmptyAndTrimmed(final IDirectory dataDir, final String name)
+    {
+        checkFileNotEmpty(dataDir, name, true);
+    }
+
     private void checkVersion(final IDirectory containerNode)
     {
         try
diff --git a/bds/source/java/ch/systemsx/cisd/bds/storage/IFile.java b/bds/source/java/ch/systemsx/cisd/bds/storage/IFile.java
index 0f28c6016d314805beab951f3fba9a430b468e71..afe652e1e9967f3b502ae3bfc6efbf57fbf66193 100644
--- a/bds/source/java/ch/systemsx/cisd/bds/storage/IFile.java
+++ b/bds/source/java/ch/systemsx/cisd/bds/storage/IFile.java
@@ -45,6 +45,14 @@ public interface IFile extends INode
      */
     public String getStringContent();
 
+    /**
+     * Returns the content of this file node as a string. Doesn't change line terminating
+     * characters.
+     * 
+     * @return never <code>null</code> but could return an empty string.
+     */
+    public String getExactStringContent();
+
     /**
      * Returns the content of this file node as a list of <code>String</code> objects.
      * <p>
diff --git a/bds/source/java/ch/systemsx/cisd/bds/storage/filesystem/File.java b/bds/source/java/ch/systemsx/cisd/bds/storage/filesystem/File.java
index 8bde99e3f57c5650fe703a7d928a773dd37c338a..ef9251442cf83d7895092b467c796f996f058cb9 100644
--- a/bds/source/java/ch/systemsx/cisd/bds/storage/filesystem/File.java
+++ b/bds/source/java/ch/systemsx/cisd/bds/storage/filesystem/File.java
@@ -48,11 +48,11 @@ final class File extends AbstractNode implements IFile
 
     public final byte[] getBinaryContent()
     {
-        InputStream inputStream = getInputStream();
+        final InputStream inputStream = getInputStream();
         try
         {
             return IOUtils.toByteArray(inputStream);
-        } catch (IOException ex)
+        } catch (final IOException ex)
         {
             throw new EnvironmentFailureException("Couldn't get data from file "
                     + nodeFile.getAbsolutePath(), ex);
@@ -67,7 +67,7 @@ final class File extends AbstractNode implements IFile
         try
         {
             return new FileInputStream(nodeFile);
-        } catch (FileNotFoundException ex)
+        } catch (final FileNotFoundException ex)
         {
             throw new EnvironmentFailureException("Couldn't open input stream for file "
                     + nodeFile.getAbsolutePath());
@@ -79,6 +79,11 @@ final class File extends AbstractNode implements IFile
         return FileUtilities.loadToString(nodeFile);
     }
 
+    public final String getExactStringContent()
+    {
+        return FileUtilities.loadExactToString(nodeFile);
+    }
+
     public final List<String> getStringContentList()
     {
         return FileUtilities.loadToStringList(nodeFile);
@@ -90,7 +95,7 @@ final class File extends AbstractNode implements IFile
         try
         {
             FileUtils.copyFileToDirectory(nodeFile, directory);
-        } catch (IOException ex)
+        } catch (final IOException ex)
         {
             throw EnvironmentFailureException.fromTemplate(ex,
                     "Couldn't not copy file '%s' to directory '%s'.", nodeFile.getAbsolutePath(),
diff --git a/bds/sourceTest/java/ch/systemsx/cisd/bds/check/AbstractCheckerTest.java b/bds/sourceTest/java/ch/systemsx/cisd/bds/check/AbstractCheckerTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..6a5c4481ccbd23047ee62e0607114ac6285b9a37
--- /dev/null
+++ b/bds/sourceTest/java/ch/systemsx/cisd/bds/check/AbstractCheckerTest.java
@@ -0,0 +1,98 @@
+/*
+ * Copyright 2008 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.bds.check;
+
+import java.io.File;
+
+import org.testng.Assert;
+import org.testng.annotations.Test;
+
+import ch.systemsx.cisd.bds.storage.IDirectory;
+import ch.systemsx.cisd.bds.storage.filesystem.NodeFactory;
+import ch.systemsx.cisd.common.utilities.OSUtilities;
+
+/**
+ * @author Izabela Adamczyk
+ */
+public class AbstractCheckerTest
+{
+
+    protected final String errorFoundNotTrimmed(final String path, final String file,
+            final String dir)
+    {
+        return String.format("ERROR: Found not trimmed value in file '%s' (directory '%s%s')."
+                + OSUtilities.LINE_SEPARATOR, file, path, dir);
+    }
+
+    @Test
+    public final void testCheckTrimmedOk()
+    {
+        final File dir = new File("testdata/trimming");
+        final IDirectory containerNode = NodeFactory.createDirectoryNode(dir);
+        final ProblemReport problemReport = new ProblemReport();
+        AbstractChecker.checkTrimmed(problemReport, containerNode, "ok");
+        Assert.assertEquals(problemReport.toString(), "");
+    }
+
+    @Test
+    public final void testCheckTrimmedNewLineBeginning()
+    {
+        final File dir = new File("testdata/trimming");
+        final IDirectory containerNode = NodeFactory.createDirectoryNode(dir);
+        final ProblemReport problemReport = new ProblemReport();
+        final String fileName = "new_line_beginning";
+        AbstractChecker.checkTrimmed(problemReport, containerNode, fileName);
+        Assert.assertEquals(problemReport.toString(), errorFoundNotTrimmed(dir.getAbsolutePath(),
+                fileName, ""));
+    }
+
+    @Test
+    public final void testCheckTrimmedNewLineEnd()
+    {
+        final File dir = new File("testdata/trimming");
+        final IDirectory containerNode = NodeFactory.createDirectoryNode(dir);
+        final ProblemReport problemReport = new ProblemReport();
+        final String fileName = "new_line_end";
+        AbstractChecker.checkTrimmed(problemReport, containerNode, fileName);
+        Assert.assertEquals(problemReport.toString(), errorFoundNotTrimmed(dir.getAbsolutePath(),
+                fileName, ""));
+    }
+
+    @Test
+    public final void testCheckTrimmedSpaceBeginning()
+    {
+        final File dir = new File("testdata/trimming");
+        final IDirectory containerNode = NodeFactory.createDirectoryNode(dir);
+        final ProblemReport problemReport = new ProblemReport();
+        final String fileName = "space_beginning";
+        AbstractChecker.checkTrimmed(problemReport, containerNode, fileName);
+        Assert.assertEquals(problemReport.toString(), errorFoundNotTrimmed(dir.getAbsolutePath(),
+                fileName, ""));
+    }
+
+    @Test
+    public final void testCheckTrimmedSpaceEnd()
+    {
+        final File dir = new File("testdata/trimming");
+        final IDirectory containerNode = NodeFactory.createDirectoryNode(dir);
+        final ProblemReport problemReport = new ProblemReport();
+        final String fileName = "space_end";
+        AbstractChecker.checkTrimmed(problemReport, containerNode, fileName);
+        Assert.assertEquals(problemReport.toString(), errorFoundNotTrimmed(dir.getAbsolutePath(),
+                fileName, ""));
+    }
+}
diff --git a/bds/sourceTest/java/ch/systemsx/cisd/bds/check/HCSImageCheckerTest.java b/bds/sourceTest/java/ch/systemsx/cisd/bds/check/HCSImageCheckerTest.java
index a5351e063ffa995659bb93bb7fc62b1f02d4a631..f97a5b55eb9eb22016046f67c1ab954c086cc5ce 100644
--- a/bds/sourceTest/java/ch/systemsx/cisd/bds/check/HCSImageCheckerTest.java
+++ b/bds/sourceTest/java/ch/systemsx/cisd/bds/check/HCSImageCheckerTest.java
@@ -22,7 +22,7 @@ import java.io.IOException;
 import org.testng.Assert;
 import org.testng.annotations.Test;
 
-public class HCSImageCheckerTest
+public class HCSImageCheckerTest extends AbstractCheckerTest
 {
     private final boolean verbose = false;
 
@@ -76,4 +76,27 @@ public class HCSImageCheckerTest
                 new File("testdata/bds_hcs_mapping_error")).numberOfProblems(), 2);
 
     }
+
+    @Test
+    public final void testNotTrimmedKeyValuePairFiles() throws IOException
+    {
+
+        final File dir = new File("testdata/bds_new_lines");
+        final String path = dir.getAbsolutePath();
+
+        Assert.assertEquals(new HCSImageChecker(verbose).getHCSImageConsistencyReport(dir)
+                .toString(), errorFoundNotTrimmed(path, "metadata/data_set/observable_type", "")
+                + errorFoundNotTrimmed(path, "metadata/format/code", "")
+                + errorFoundNotTrimmed(path, "major", "/metadata/format/version")
+                + errorFoundNotTrimmed(path, "minor", "/metadata/format/version")
+                + errorFoundNotTrimmed(path, "metadata/parameters/plate_geometry/rows", "")
+                + errorFoundNotTrimmed(path, "metadata/parameters/plate_geometry/columns", "")
+                + errorFoundNotTrimmed(path, "metadata/parameters/well_geometry/rows", "")
+                + errorFoundNotTrimmed(path, "metadata/parameters/well_geometry/columns", "")
+                + errorFoundNotTrimmed(path, "metadata/parameters/number_of_channels", "")
+                + errorFoundNotTrimmed(path, "wavelength", "/annotations/channel1")
+                + errorFoundNotTrimmed(path, "wavelength", "/annotations/channel2")
+                + errorFoundNotTrimmed(path, "metadata/parameters/contains_original_data", ""));
+
+    }
 }
diff --git a/bds/sourceTest/java/ch/systemsx/cisd/bds/check/StructureCheckerTest.java b/bds/sourceTest/java/ch/systemsx/cisd/bds/check/StructureCheckerTest.java
index df60fb8f20866ae89bb5036f7726678f02cc7137..a51348036bbf3bfc1cc3136bfda84685b1646590 100644
--- a/bds/sourceTest/java/ch/systemsx/cisd/bds/check/StructureCheckerTest.java
+++ b/bds/sourceTest/java/ch/systemsx/cisd/bds/check/StructureCheckerTest.java
@@ -22,7 +22,7 @@ import java.io.IOException;
 import org.testng.Assert;
 import org.testng.annotations.Test;
 
-public class StructureCheckerTest
+public class StructureCheckerTest extends AbstractCheckerTest
 {
     private final boolean verbose = false;
 
@@ -30,8 +30,11 @@ public class StructureCheckerTest
     public final void testCorrectContainer() throws IOException
     {
 
-        Assert.assertEquals(new StructureChecker(verbose).getStructureConsistencyReport(
-                new File("testdata/bds_ok")).noProblemsFound(), true);
+        final ProblemReport structureConsistencyReport =
+                new StructureChecker(verbose).getStructureConsistencyReport(new File(
+                        "testdata/bds_ok"));
+        Assert.assertEquals(structureConsistencyReport.toString(), "");
+        Assert.assertEquals(structureConsistencyReport.noProblemsFound(), true);
 
     }
 
@@ -76,7 +79,40 @@ public class StructureCheckerTest
     @Test
     public final void testWrongFileFormat()
     {
-        Assert.assertEquals(new StructureChecker(verbose).getStructureConsistencyReport(
-                new File("testdata/bds_wrong_values")).numberOfProblems(), 7);
+        final ProblemReport structureConsistencyReport =
+                new StructureChecker(verbose).getStructureConsistencyReport(new File(
+                        "testdata/bds_wrong_values"));
+        Assert.assertEquals(structureConsistencyReport.numberOfProblems(), 7);
+    }
+
+    @Test
+    public final void testNewLinesPresentInKeyValuePairFiles()
+    {
+        final File dir = new File("testdata/bds_new_lines");
+        final String path = dir.getAbsolutePath();
+
+        Assert.assertEquals(new StructureChecker(verbose).getStructureConsistencyReport(dir)
+                .toString(), errorFoundNotTrimmed(path, "major", "/version")
+                + errorFoundNotTrimmed(path, "minor", "/version")
+                + errorFoundNotTrimmed(path, "code", "/metadata/data_set")
+                + errorFoundNotTrimmed(path, "production_timestamp", "/metadata/data_set")
+                + errorFoundNotTrimmed(path, "producer_code", "/metadata/data_set")
+                + errorFoundNotTrimmed(path, "observable_type", "/metadata/data_set")
+                + errorFoundNotTrimmed(path, "is_measured", "/metadata/data_set")
+                + errorFoundNotTrimmed(path, "is_complete", "/metadata/data_set")
+                + errorFoundNotTrimmed(path, "major", "/metadata/format/version")
+                + errorFoundNotTrimmed(path, "minor", "/metadata/format/version")
+                + errorFoundNotTrimmed(path, "code", "/metadata/format")
+                + errorFoundNotTrimmed(path, "instance_code", "/metadata/experiment_identifier")
+                + errorFoundNotTrimmed(path, "group_code", "/metadata/experiment_identifier")
+                + errorFoundNotTrimmed(path, "project_code", "/metadata/experiment_identifier")
+                + errorFoundNotTrimmed(path, "experiment_code", "/metadata/experiment_identifier")
+                + errorFoundNotTrimmed(path, "experiment_registration_timestamp", "/metadata")
+                + errorFoundNotTrimmed(path, "first_name", "/metadata/experiment_registrator")
+                + errorFoundNotTrimmed(path, "last_name", "/metadata/experiment_registrator")
+                + errorFoundNotTrimmed(path, "email", "/metadata/experiment_registrator")
+                + errorFoundNotTrimmed(path, "type_description", "/metadata/sample")
+                + errorFoundNotTrimmed(path, "type_code", "/metadata/sample")
+                + errorFoundNotTrimmed(path, "code", "/metadata/sample"));
     }
 }
diff --git a/bds/testdata/bds_new_lines/annotations/channel1/wavelength b/bds/testdata/bds_new_lines/annotations/channel1/wavelength
new file mode 100644
index 0000000000000000000000000000000000000000..e499fafe4364256503b63c18c7110255702a68e8
--- /dev/null
+++ b/bds/testdata/bds_new_lines/annotations/channel1/wavelength
@@ -0,0 +1,2 @@
+
+460
diff --git a/bds/testdata/bds_new_lines/annotations/channel2/wavelength b/bds/testdata/bds_new_lines/annotations/channel2/wavelength
new file mode 100644
index 0000000000000000000000000000000000000000..0632673692517a55defd83639786cce8267e2473
--- /dev/null
+++ b/bds/testdata/bds_new_lines/annotations/channel2/wavelength
@@ -0,0 +1,2 @@
+
+530
diff --git a/bds/testdata/bds_new_lines/data/original/microX_200801011213_3VCP1/TIFF/blabla_3VCP1_K13_8_w460.tif b/bds/testdata/bds_new_lines/data/original/microX_200801011213_3VCP1/TIFF/blabla_3VCP1_K13_8_w460.tif
new file mode 100644
index 0000000000000000000000000000000000000000..34cccbea61632d310b9b323e11fa07516f5bb525
--- /dev/null
+++ b/bds/testdata/bds_new_lines/data/original/microX_200801011213_3VCP1/TIFF/blabla_3VCP1_K13_8_w460.tif
@@ -0,0 +1 @@
+image for well k13
diff --git a/bds/testdata/bds_new_lines/data/original/microX_200801011213_3VCP1/TIFF/blabla_3VCP1_M03_2_w530.tif b/bds/testdata/bds_new_lines/data/original/microX_200801011213_3VCP1/TIFF/blabla_3VCP1_M03_2_w530.tif
new file mode 100644
index 0000000000000000000000000000000000000000..e41cffbf8429f9bdf9a63bab84298ef4d9d2d6a5
--- /dev/null
+++ b/bds/testdata/bds_new_lines/data/original/microX_200801011213_3VCP1/TIFF/blabla_3VCP1_M03_2_w530.tif
@@ -0,0 +1 @@
+image for well m03
diff --git a/bds/testdata/bds_new_lines/data/original/microX_200801011213_3VCP1/TIFF/readme-not.txt b/bds/testdata/bds_new_lines/data/original/microX_200801011213_3VCP1/TIFF/readme-not.txt
new file mode 100644
index 0000000000000000000000000000000000000000..32a43271f6c7b5fcf8674a0601909ed62283eb20
--- /dev/null
+++ b/bds/testdata/bds_new_lines/data/original/microX_200801011213_3VCP1/TIFF/readme-not.txt
@@ -0,0 +1 @@
+nothing to read.
diff --git a/bds/testdata/bds_new_lines/data/original/microX_200801011213_3VCP1/log.txt b/bds/testdata/bds_new_lines/data/original/microX_200801011213_3VCP1/log.txt
new file mode 100644
index 0000000000000000000000000000000000000000..f3419f4ea13f0ec637383051cd3667eaf8766ede
--- /dev/null
+++ b/bds/testdata/bds_new_lines/data/original/microX_200801011213_3VCP1/log.txt
@@ -0,0 +1 @@
+some log data
diff --git a/bds/testdata/bds_new_lines/data/standard/channel1/row11/column13/row3_column2.tiff b/bds/testdata/bds_new_lines/data/standard/channel1/row11/column13/row3_column2.tiff
new file mode 100644
index 0000000000000000000000000000000000000000..34cccbea61632d310b9b323e11fa07516f5bb525
--- /dev/null
+++ b/bds/testdata/bds_new_lines/data/standard/channel1/row11/column13/row3_column2.tiff
@@ -0,0 +1 @@
+image for well k13
diff --git a/bds/testdata/bds_new_lines/data/standard/channel2/row13/column3/row1_column2.tiff b/bds/testdata/bds_new_lines/data/standard/channel2/row13/column3/row1_column2.tiff
new file mode 100644
index 0000000000000000000000000000000000000000..e41cffbf8429f9bdf9a63bab84298ef4d9d2d6a5
--- /dev/null
+++ b/bds/testdata/bds_new_lines/data/standard/channel2/row13/column3/row1_column2.tiff
@@ -0,0 +1 @@
+image for well m03
diff --git a/bds/testdata/bds_new_lines/metadata/data_set/code b/bds/testdata/bds_new_lines/metadata/data_set/code
new file mode 100644
index 0000000000000000000000000000000000000000..5522f919e759becee18d2afa7b63af21f7b0c6ea
--- /dev/null
+++ b/bds/testdata/bds_new_lines/metadata/data_set/code
@@ -0,0 +1,2 @@
+
+microX-3VCP1
diff --git a/bds/testdata/bds_new_lines/metadata/data_set/is_complete b/bds/testdata/bds_new_lines/metadata/data_set/is_complete
new file mode 100644
index 0000000000000000000000000000000000000000..323c54009f5f468205919af477b92dc45b8f8950
--- /dev/null
+++ b/bds/testdata/bds_new_lines/metadata/data_set/is_complete
@@ -0,0 +1,2 @@
+
+FALSE
diff --git a/bds/testdata/bds_new_lines/metadata/data_set/is_measured b/bds/testdata/bds_new_lines/metadata/data_set/is_measured
new file mode 100644
index 0000000000000000000000000000000000000000..dd5ebb5dac7eed4e01129733790d8b861b4cfe04
--- /dev/null
+++ b/bds/testdata/bds_new_lines/metadata/data_set/is_measured
@@ -0,0 +1,2 @@
+
+TRUE
diff --git a/bds/testdata/bds_new_lines/metadata/data_set/observable_type b/bds/testdata/bds_new_lines/metadata/data_set/observable_type
new file mode 100644
index 0000000000000000000000000000000000000000..beb696f3dea7e5acf9a5003e62f0d46fbede6c58
--- /dev/null
+++ b/bds/testdata/bds_new_lines/metadata/data_set/observable_type
@@ -0,0 +1,2 @@
+
+HCS_IMAGE
diff --git a/bds/testdata/bds_new_lines/metadata/data_set/parent_codes b/bds/testdata/bds_new_lines/metadata/data_set/parent_codes
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/bds/testdata/bds_new_lines/metadata/data_set/producer_code b/bds/testdata/bds_new_lines/metadata/data_set/producer_code
new file mode 100644
index 0000000000000000000000000000000000000000..92bc789eb3b9db500d1ba7de2498c6ada8a04a07
--- /dev/null
+++ b/bds/testdata/bds_new_lines/metadata/data_set/producer_code
@@ -0,0 +1,2 @@
+
+microX
diff --git a/bds/testdata/bds_new_lines/metadata/data_set/production_timestamp b/bds/testdata/bds_new_lines/metadata/data_set/production_timestamp
new file mode 100644
index 0000000000000000000000000000000000000000..5b5dda60d473fa5203735a9091f78fefed571902
--- /dev/null
+++ b/bds/testdata/bds_new_lines/metadata/data_set/production_timestamp
@@ -0,0 +1,2 @@
+
+2008-01-01 12:13:00 +0100
diff --git a/bds/testdata/bds_new_lines/metadata/experiment_identifier/experiment_code b/bds/testdata/bds_new_lines/metadata/experiment_identifier/experiment_code
new file mode 100644
index 0000000000000000000000000000000000000000..53dd07998093f1d03fa57e0fa23a773bad6b0cb1
--- /dev/null
+++ b/bds/testdata/bds_new_lines/metadata/experiment_identifier/experiment_code
@@ -0,0 +1,2 @@
+
+EXP1
diff --git a/bds/testdata/bds_new_lines/metadata/experiment_identifier/group_code b/bds/testdata/bds_new_lines/metadata/experiment_identifier/group_code
new file mode 100644
index 0000000000000000000000000000000000000000..7ed5d0f714c2e8280a2cbc1a2f76bc2dcd8b8923
--- /dev/null
+++ b/bds/testdata/bds_new_lines/metadata/experiment_identifier/group_code
@@ -0,0 +1,2 @@
+
+CISD
diff --git a/bds/testdata/bds_new_lines/metadata/experiment_identifier/instance_code b/bds/testdata/bds_new_lines/metadata/experiment_identifier/instance_code
new file mode 100644
index 0000000000000000000000000000000000000000..76905f1c43e74741ab07d669dae3c8e824525e99
--- /dev/null
+++ b/bds/testdata/bds_new_lines/metadata/experiment_identifier/instance_code
@@ -0,0 +1,2 @@
+
+integration-test
diff --git a/bds/testdata/bds_new_lines/metadata/experiment_identifier/project_code b/bds/testdata/bds_new_lines/metadata/experiment_identifier/project_code
new file mode 100644
index 0000000000000000000000000000000000000000..c41fff88cffdf61eea7ab040a5fa3e660338ee58
--- /dev/null
+++ b/bds/testdata/bds_new_lines/metadata/experiment_identifier/project_code
@@ -0,0 +1,2 @@
+
+NEMO
diff --git a/bds/testdata/bds_new_lines/metadata/experiment_registration_timestamp b/bds/testdata/bds_new_lines/metadata/experiment_registration_timestamp
new file mode 100644
index 0000000000000000000000000000000000000000..2f61160bfa00ef45a1ac8751d63768f1fd28064c
--- /dev/null
+++ b/bds/testdata/bds_new_lines/metadata/experiment_registration_timestamp
@@ -0,0 +1,2 @@
+
+2008-05-05 21:18:55 +0200
diff --git a/bds/testdata/bds_new_lines/metadata/experiment_registrator/email b/bds/testdata/bds_new_lines/metadata/experiment_registrator/email
new file mode 100644
index 0000000000000000000000000000000000000000..97e3a9dd3ff53d6b0830dd72587abc740cef01ab
--- /dev/null
+++ b/bds/testdata/bds_new_lines/metadata/experiment_registrator/email
@@ -0,0 +1,2 @@
+
+franz-josef.elmer@systemsx.ch
diff --git a/bds/testdata/bds_new_lines/metadata/experiment_registrator/first_name b/bds/testdata/bds_new_lines/metadata/experiment_registrator/first_name
new file mode 100644
index 0000000000000000000000000000000000000000..9daf273c2aac33ded80079f96abc88fd8c65148c
--- /dev/null
+++ b/bds/testdata/bds_new_lines/metadata/experiment_registrator/first_name
@@ -0,0 +1,2 @@
+
+John
diff --git a/bds/testdata/bds_new_lines/metadata/experiment_registrator/last_name b/bds/testdata/bds_new_lines/metadata/experiment_registrator/last_name
new file mode 100644
index 0000000000000000000000000000000000000000..4b7a02e2198bebf91b915871f0d5fe210a8848d1
--- /dev/null
+++ b/bds/testdata/bds_new_lines/metadata/experiment_registrator/last_name
@@ -0,0 +1,2 @@
+
+Doe
diff --git a/bds/testdata/bds_new_lines/metadata/format/code b/bds/testdata/bds_new_lines/metadata/format/code
new file mode 100644
index 0000000000000000000000000000000000000000..beb696f3dea7e5acf9a5003e62f0d46fbede6c58
--- /dev/null
+++ b/bds/testdata/bds_new_lines/metadata/format/code
@@ -0,0 +1,2 @@
+
+HCS_IMAGE
diff --git a/bds/testdata/bds_new_lines/metadata/format/version/major b/bds/testdata/bds_new_lines/metadata/format/version/major
new file mode 100644
index 0000000000000000000000000000000000000000..a464d9da742a631e9d8c104a45f2e44f1629a9a1
--- /dev/null
+++ b/bds/testdata/bds_new_lines/metadata/format/version/major
@@ -0,0 +1,2 @@
+
+1
diff --git a/bds/testdata/bds_new_lines/metadata/format/version/minor b/bds/testdata/bds_new_lines/metadata/format/version/minor
new file mode 100644
index 0000000000000000000000000000000000000000..d9cf16b9d2ab4ea90edc9f640db7382804fd8def
--- /dev/null
+++ b/bds/testdata/bds_new_lines/metadata/format/version/minor
@@ -0,0 +1,2 @@
+
+0
diff --git a/bds/testdata/bds_new_lines/metadata/md5sum/original b/bds/testdata/bds_new_lines/metadata/md5sum/original
new file mode 100644
index 0000000000000000000000000000000000000000..50ec1ec2cf84265dde7b365744a07cfdc612161c
--- /dev/null
+++ b/bds/testdata/bds_new_lines/metadata/md5sum/original
@@ -0,0 +1,4 @@
+eb2a9d06f9be93939469f67f2ff80114  microX_200801011213_3VCP1/log.txt
+9e63f091de2de8cba08042988440778a  microX_200801011213_3VCP1/TIFF/blabla_3VCP1_K13_8_w460.tif
+a1a60fc84bf8f6ac7e482fe6503a340e  microX_200801011213_3VCP1/TIFF/blabla_3VCP1_M03_2_w530.tif
+3b7d2bde004984617606337a475f7ab3  microX_200801011213_3VCP1/TIFF/readme-not.txt
diff --git a/bds/testdata/bds_new_lines/metadata/parameters/contains_original_data b/bds/testdata/bds_new_lines/metadata/parameters/contains_original_data
new file mode 100644
index 0000000000000000000000000000000000000000..dd5ebb5dac7eed4e01129733790d8b861b4cfe04
--- /dev/null
+++ b/bds/testdata/bds_new_lines/metadata/parameters/contains_original_data
@@ -0,0 +1,2 @@
+
+TRUE
diff --git a/bds/testdata/bds_new_lines/metadata/parameters/number_of_channels b/bds/testdata/bds_new_lines/metadata/parameters/number_of_channels
new file mode 100644
index 0000000000000000000000000000000000000000..1f8c977ecc6b64e087f8e7a8c8f87978949aefd2
--- /dev/null
+++ b/bds/testdata/bds_new_lines/metadata/parameters/number_of_channels
@@ -0,0 +1,2 @@
+
+2
diff --git a/bds/testdata/bds_new_lines/metadata/parameters/plate_geometry/columns b/bds/testdata/bds_new_lines/metadata/parameters/plate_geometry/columns
new file mode 100644
index 0000000000000000000000000000000000000000..a451d8b531c2ec847ff0029c8818ee7ac70d1772
--- /dev/null
+++ b/bds/testdata/bds_new_lines/metadata/parameters/plate_geometry/columns
@@ -0,0 +1,2 @@
+
+24
diff --git a/bds/testdata/bds_new_lines/metadata/parameters/plate_geometry/rows b/bds/testdata/bds_new_lines/metadata/parameters/plate_geometry/rows
new file mode 100644
index 0000000000000000000000000000000000000000..adc366f3910bb9693b79be203ca4038a9b6697ee
--- /dev/null
+++ b/bds/testdata/bds_new_lines/metadata/parameters/plate_geometry/rows
@@ -0,0 +1,2 @@
+
+16
diff --git a/bds/testdata/bds_new_lines/metadata/parameters/well_geometry/columns b/bds/testdata/bds_new_lines/metadata/parameters/well_geometry/columns
new file mode 100644
index 0000000000000000000000000000000000000000..c184de169a2ee81cfe0cc7db049646f4c73409d7
--- /dev/null
+++ b/bds/testdata/bds_new_lines/metadata/parameters/well_geometry/columns
@@ -0,0 +1,2 @@
+
+3
diff --git a/bds/testdata/bds_new_lines/metadata/parameters/well_geometry/rows b/bds/testdata/bds_new_lines/metadata/parameters/well_geometry/rows
new file mode 100644
index 0000000000000000000000000000000000000000..c184de169a2ee81cfe0cc7db049646f4c73409d7
--- /dev/null
+++ b/bds/testdata/bds_new_lines/metadata/parameters/well_geometry/rows
@@ -0,0 +1,2 @@
+
+3
diff --git a/bds/testdata/bds_new_lines/metadata/sample/code b/bds/testdata/bds_new_lines/metadata/sample/code
new file mode 100644
index 0000000000000000000000000000000000000000..df2eecf1f87a6e653d9687a0c6248ef1341e57a4
--- /dev/null
+++ b/bds/testdata/bds_new_lines/metadata/sample/code
@@ -0,0 +1,2 @@
+
+3VCP1
diff --git a/bds/testdata/bds_new_lines/metadata/sample/type_code b/bds/testdata/bds_new_lines/metadata/sample/type_code
new file mode 100644
index 0000000000000000000000000000000000000000..93763ab9a1809c6eb7c130dc415b797cf0fed6ac
--- /dev/null
+++ b/bds/testdata/bds_new_lines/metadata/sample/type_code
@@ -0,0 +1,2 @@
+
+CELL_PLATE
diff --git a/bds/testdata/bds_new_lines/metadata/sample/type_description b/bds/testdata/bds_new_lines/metadata/sample/type_description
new file mode 100644
index 0000000000000000000000000000000000000000..a06b6468d7a56a1cb060d59d0f274db2c50a5b2e
--- /dev/null
+++ b/bds/testdata/bds_new_lines/metadata/sample/type_description
@@ -0,0 +1,2 @@
+
+Screening Plate
diff --git a/bds/testdata/bds_new_lines/metadata/standard_original_mapping b/bds/testdata/bds_new_lines/metadata/standard_original_mapping
new file mode 100644
index 0000000000000000000000000000000000000000..33261f111a8f715c92b0615f53792a10ce55e9f2
--- /dev/null
+++ b/bds/testdata/bds_new_lines/metadata/standard_original_mapping
@@ -0,0 +1,2 @@
+channel2/row13/column3/row1_column2.tiff	I	microX_200801011213_3VCP1/TIFF/blabla_3VCP1_M03_2_w530.tif
+channel1/row11/column13/row3_column2.tiff	I	microX_200801011213_3VCP1/TIFF/blabla_3VCP1_K13_8_w460.tif
diff --git a/bds/testdata/bds_new_lines/version/major b/bds/testdata/bds_new_lines/version/major
new file mode 100644
index 0000000000000000000000000000000000000000..a464d9da742a631e9d8c104a45f2e44f1629a9a1
--- /dev/null
+++ b/bds/testdata/bds_new_lines/version/major
@@ -0,0 +1,2 @@
+
+1
diff --git a/bds/testdata/bds_new_lines/version/minor b/bds/testdata/bds_new_lines/version/minor
new file mode 100644
index 0000000000000000000000000000000000000000..d9cf16b9d2ab4ea90edc9f640db7382804fd8def
--- /dev/null
+++ b/bds/testdata/bds_new_lines/version/minor
@@ -0,0 +1,2 @@
+
+0
diff --git a/bds/testdata/trimming/new_line_beginning b/bds/testdata/trimming/new_line_beginning
new file mode 100644
index 0000000000000000000000000000000000000000..058f8b4a9654471cdcdca24c5287d7c7d8bf59a1
--- /dev/null
+++ b/bds/testdata/trimming/new_line_beginning
@@ -0,0 +1,2 @@
+
+new line
\ No newline at end of file
diff --git a/bds/testdata/trimming/new_line_end b/bds/testdata/trimming/new_line_end
new file mode 100644
index 0000000000000000000000000000000000000000..86ba82a2e61b677ebd18b7186426a43fb3c81fc4
--- /dev/null
+++ b/bds/testdata/trimming/new_line_end
@@ -0,0 +1 @@
+new line
diff --git a/bds/testdata/trimming/ok b/bds/testdata/trimming/ok
new file mode 100644
index 0000000000000000000000000000000000000000..b5754e20373fdaa5331ef6e4623dbae636225e3b
--- /dev/null
+++ b/bds/testdata/trimming/ok
@@ -0,0 +1 @@
+ok
\ No newline at end of file
diff --git a/bds/testdata/trimming/space_beginning b/bds/testdata/trimming/space_beginning
new file mode 100644
index 0000000000000000000000000000000000000000..4241ba278ae58b10aa064aa478ba4a22cb425dd5
--- /dev/null
+++ b/bds/testdata/trimming/space_beginning
@@ -0,0 +1 @@
+ new line
\ No newline at end of file
diff --git a/bds/testdata/trimming/space_end b/bds/testdata/trimming/space_end
new file mode 100644
index 0000000000000000000000000000000000000000..785e0f51f19eace6b402da2540638e37c5127216
--- /dev/null
+++ b/bds/testdata/trimming/space_end
@@ -0,0 +1 @@
+new line 
\ No newline at end of file
diff --git a/common/source/java/ch/systemsx/cisd/common/utilities/FileUtilities.java b/common/source/java/ch/systemsx/cisd/common/utilities/FileUtilities.java
index 708adfee72897580b56ab28230181bb30ec2e377..5e0f4e2f5c2d2275a0d38b6b5c8dd8aefd489684 100644
--- a/common/source/java/ch/systemsx/cisd/common/utilities/FileUtilities.java
+++ b/common/source/java/ch/systemsx/cisd/common/utilities/FileUtilities.java
@@ -154,6 +154,34 @@ public final class FileUtilities
         }
     }
 
+    /**
+     * Loads a text file to a {@link String}. Doesn't append new line at the end.
+     * 
+     * @param file the file that should be loaded. This method asserts that given <code>File</code>
+     *            is not <code>null</code>.
+     * @return The content of the file. All newline characters are '\n' (Unix convention). Never
+     *         returns <code>null</code>.
+     * @throws CheckedExceptionTunnel for wrapping an {@link IOException}, e.g. if the file does
+     *             not exist.
+     */
+    public static String loadExactToString(final File file) throws CheckedExceptionTunnel
+    {
+        assert file != null;
+
+        FileReader fileReader = null;
+        try
+        {
+            fileReader = new FileReader(file);
+            return readExactString(new BufferedReader(fileReader));
+        } catch (final IOException ex)
+        {
+            throw new CheckedExceptionTunnel(ex);
+        } finally
+        {
+            IOUtils.closeQuietly(fileReader);
+        }
+    }
+
     /**
      * Writes the specified string to the specified file.
      * 
@@ -341,6 +369,19 @@ public final class FileUtilities
         return builder.toString();
     }
 
+    private static String readExactString(final BufferedReader reader) throws IOException
+    {
+        assert reader != null : "Unspecified BufferedReader.";
+        final StringBuilder builder = new StringBuilder();
+        int numRead = 0;
+        while ((numRead = reader.read()) != -1)
+        {
+            builder.append(String.copyValueOf(Character.toChars(numRead)));
+        }
+        reader.close();
+        return builder.toString();
+    }
+
     private final static List<String> readStringList(final BufferedReader reader,
             final ILineFilter lineFilterOrNull) throws IOException
     {
@@ -413,8 +454,8 @@ public final class FileUtilities
         final String msg = checkPathAccessible(directory, kindOfDirectory, "directory", false);
         if (msg == null && directory.isDirectory() == false)
         {
-            return String.format("Path '%s' is supposed to be a %s directory but isn't.",
-                    directory.getPath(), kindOfDirectory);
+            return String.format("Path '%s' is supposed to be a %s directory but isn't.", directory
+                    .getPath(), kindOfDirectory);
         }
         return msg;
     }
@@ -435,8 +476,8 @@ public final class FileUtilities
         final String msg = checkPathAccessible(directory, kindOfDirectory, "directory", true);
         if (msg == null && directory.isDirectory() == false)
         {
-            return String.format("Path '%s' is supposed to be a %s directory but isn't.",
-                    directory.getPath(), kindOfDirectory);
+            return String.format("Path '%s' is supposed to be a %s directory but isn't.", directory
+                    .getPath(), kindOfDirectory);
         }
         return msg;
     }
@@ -484,7 +525,7 @@ public final class FileUtilities
     }
 
     private static String checkPathAccessible(final File path, final String kindOfPath,
-            final String directoryOrFile, boolean readAndWrite)
+            final String directoryOrFile, final boolean readAndWrite)
     {
         assert path != null;
         assert kindOfPath != null;
@@ -604,7 +645,7 @@ public final class FileUtilities
 
     private static final class LastChangedWorker
     {
-        private boolean subDirectoriesOnly;
+        private final boolean subDirectoriesOnly;
 
         private final long reference;