diff --git a/common/source/java/ch/systemsx/cisd/common/utilities/PathPrefixPrepender.java b/common/source/java/ch/systemsx/cisd/common/utilities/PathPrefixPrepender.java
index 4425282f755b644781241afeb0b849c99e584e11..8a358e59b3156168996e8003f09d9df9c4a326a1 100644
--- a/common/source/java/ch/systemsx/cisd/common/utilities/PathPrefixPrepender.java
+++ b/common/source/java/ch/systemsx/cisd/common/utilities/PathPrefixPrepender.java
@@ -31,6 +31,10 @@ import ch.systemsx.cisd.common.exceptions.ConfigurationFailureException;
  */
 public final class PathPrefixPrepender
 {
+    private final File absolutePathsDirectoryOrNull;
+
+    private final File relativePathsDirectoryOrNull;
+
     private final String prefixForAbsolutePaths;
 
     private final String prefixForRelativePaths;
@@ -42,15 +46,21 @@ public final class PathPrefixPrepender
     public PathPrefixPrepender(final String prefixForAbsolutePathsOrNull,
             final String prefixForRelativePathsOrNull) throws ConfigurationFailureException
     {
-        this.prefixForAbsolutePaths = StringUtils.defaultString(prefixForAbsolutePathsOrNull);
-        assertValid(this.prefixForAbsolutePaths, "absolute");
-        this.prefixForRelativePaths = preparePrefix(prefixForRelativePathsOrNull);
-        assertValid(this.prefixForRelativePaths, "relative");
+        this.prefixForAbsolutePaths = defaultString(prefixForAbsolutePathsOrNull);
+        absolutePathsDirectoryOrNull = tryCreateFile(this.prefixForAbsolutePaths, "absolute");
+        this.prefixForRelativePaths = preparePrefix(defaultString(prefixForRelativePathsOrNull));
+        relativePathsDirectoryOrNull = tryCreateFile(this.prefixForRelativePaths, "relative");
+    }
+
+    private final static String defaultString(final String path)
+    {
+        return StringUtils.defaultString(path).trim();
     }
 
     private final static String preparePrefix(final String pathPrefix)
     {
-        if (StringUtils.isEmpty(pathPrefix))
+        assert pathPrefix != null : "Unspecified path prefix.";
+        if (pathPrefix.length() == 0)
         {
             return "";
         }
@@ -61,25 +71,44 @@ public final class PathPrefixPrepender
         return pathPrefix + "/";
     }
 
-    private void assertValid(final String prefix, final String type)
+    private final static File tryCreateFile(final String prefix, final String type)
             throws ConfigurationFailureException
     {
-        if (prefix.length() != 0)
+        assert prefix != null : "Unspecified path prefix.";
+        if (prefix.length() > 0)
         {
             final File file = new File(prefix);
-            if (file.exists() == false)
+            final String response =
+                    FileUtilities.checkDirectoryFullyAccessible(file, type + " prefix path");
+            if (response != null)
             {
-                throw ConfigurationFailureException.fromTemplate(
-                        "Invalid prefix for %s paths: given file '%s' does not exist.", type, file
-                                .getAbsolutePath());
+                throw new ConfigurationFailureException(response);
             }
+            return file;
         }
+        return null;
+    }
+
+    /**
+     * Returns the directory for absolute paths.
+     */
+    public final File tryGetDirectoryForAbsolutePaths()
+    {
+        return absolutePathsDirectoryOrNull;
+    }
+
+    /**
+     * Returns the directory for relative paths.
+     */
+    public final File tryGetDirectoryForRelativePaths()
+    {
+        return relativePathsDirectoryOrNull;
     }
 
     /**
      * Returns the specified path with the appropriated prefix.
      */
-    public String addPrefixTo(final String path)
+    public final String addPrefixTo(final String path)
     {
         assert path != null : "Undefined path.";
         return (FilenameUtils.getPrefixLength(path) > 0 ? prefixForAbsolutePaths