diff --git a/datamover/source/java/ch/systemsx/cisd/datamover/IncomingProcessor.java b/datamover/source/java/ch/systemsx/cisd/datamover/IncomingProcessor.java
index 5acdef3f6a8987e769eabc403226a3bdccab81d1..8e82ed8aef065ebf264a9f3c64e9c71c2b3a6283 100644
--- a/datamover/source/java/ch/systemsx/cisd/datamover/IncomingProcessor.java
+++ b/datamover/source/java/ch/systemsx/cisd/datamover/IncomingProcessor.java
@@ -120,7 +120,7 @@ public class IncomingProcessor implements IRecoverableTimerTaskFactory
     {
         final StoreItemFilterBank filterBank = new StoreItemFilterBank();
         filterBank.add(new QuietPeriodFileFilter(incomingStore, parameters, timeProvider));
-        final String dataCompletedScript = parameters.getDataCompletedScript();
+        final File dataCompletedScript = parameters.getDataCompletedScript();
         if (dataCompletedScript != null)
         {
             final long timeout = parameters.getDataCompletedScriptTimeout();
diff --git a/datamover/source/java/ch/systemsx/cisd/datamover/Parameters.java b/datamover/source/java/ch/systemsx/cisd/datamover/Parameters.java
index 658317ed8b733c716d97cc3c2213bc4aafd634f6..63fdc830847d60554d172104d8d9887e35e636b8 100644
--- a/datamover/source/java/ch/systemsx/cisd/datamover/Parameters.java
+++ b/datamover/source/java/ch/systemsx/cisd/datamover/Parameters.java
@@ -26,7 +26,6 @@ import java.util.Properties;
 import java.util.regex.Pattern;
 
 import org.apache.commons.io.IOUtils;
-import org.apache.commons.lang.StringUtils;
 import org.apache.commons.lang.time.DateUtils;
 import org.apache.commons.lang.time.DurationFormatUtils;
 import org.apache.log4j.Logger;
@@ -37,6 +36,7 @@ import ch.systemsx.cisd.args4j.CmdLineException;
 import ch.systemsx.cisd.args4j.CmdLineParser;
 import ch.systemsx.cisd.args4j.ExampleMode;
 import ch.systemsx.cisd.args4j.Option;
+import ch.systemsx.cisd.args4j.spi.FileOptionHandler;
 import ch.systemsx.cisd.args4j.spi.LongOptionHandler;
 import ch.systemsx.cisd.args4j.spi.OptionHandler;
 import ch.systemsx.cisd.args4j.spi.Setter;
@@ -78,8 +78,8 @@ public final class Parameters implements ITimingParameters, IFileSysParameters
             LogFactory.getLogger(LogCategory.NOTIFY, Parameters.class);
 
     @Option(longName = PropertyNames.DATA_COMPLETED_SCRIPT, metaVar = "EXEC", usage = "Optional script "
-            + "which checks whether incoming data is complete or not.")
-    private String dataCompletedScript;
+            + "which checks whether incoming data is complete or not.", handler = FileOptionHandler.class)
+    private File dataCompletedScript;
 
     @Option(longName = PropertyNames.DATA_COMPLETED_SCRIPT_TIMEOUT, usage = "Timeout (in seconds) after which data completed script will be stopped "
             + "[default: " + DEFAULT_DATA_COMPLETED_SCRIPT_TIMEOUT + "]", handler = MillisecondConversionOptionHandler.class)
@@ -425,7 +425,7 @@ public final class Parameters implements ITimingParameters, IFileSysParameters
     {
         final Properties serviceProperties = loadServiceProperties();
         dataCompletedScript =
-                PropertyUtils.getProperty(serviceProperties, PropertyNames.DATA_COMPLETED_SCRIPT,
+                tryCreateFile(serviceProperties, PropertyNames.DATA_COMPLETED_SCRIPT,
                         dataCompletedScript);
         dataCompletedScriptTimeout =
                 toMillis(PropertyUtils.getPosLong(serviceProperties,
@@ -553,9 +553,9 @@ public final class Parameters implements ITimingParameters, IFileSysParameters
         }
     }
 
-    public final String getDataCompletedScript()
+    public final File getDataCompletedScript()
     {
-        return StringUtils.defaultIfEmpty(dataCompletedScript, null);
+        return dataCompletedScript;
     }
 
     public final long getDataCompletedScriptTimeout()
diff --git a/datamover/source/java/ch/systemsx/cisd/datamover/utils/DataCompletedFilter.java b/datamover/source/java/ch/systemsx/cisd/datamover/utils/DataCompletedFilter.java
index f1c8586870c7a22e47f940fba89e19e8e97aec6d..a9d04608b946b0fe6a30b7a0ab45e39a377ae859 100644
--- a/datamover/source/java/ch/systemsx/cisd/datamover/utils/DataCompletedFilter.java
+++ b/datamover/source/java/ch/systemsx/cisd/datamover/utils/DataCompletedFilter.java
@@ -16,6 +16,7 @@
 
 package ch.systemsx.cisd.datamover.utils;
 
+import java.io.File;
 import java.util.ArrayList;
 import java.util.List;
 
@@ -28,6 +29,7 @@ import ch.systemsx.cisd.common.logging.LogFactory;
 import ch.systemsx.cisd.common.logging.LogLevel;
 import ch.systemsx.cisd.common.process.ProcessExecutionHelper;
 import ch.systemsx.cisd.common.process.ProcessResult;
+import ch.systemsx.cisd.common.utilities.FileUtilities;
 import ch.systemsx.cisd.common.utilities.OSUtilities;
 import ch.systemsx.cisd.common.utilities.StoreItem;
 import ch.systemsx.cisd.datamover.filesystem.intf.IFileStore;
@@ -57,7 +59,7 @@ public class DataCompletedFilter implements IStoreItemFilter
 
     private final IFileStore fileStore;
 
-    private final String dataCompletedScript;
+    private final File dataCompletedScript;
 
     private final long dataCompletedScriptTimeout;
 
@@ -68,7 +70,7 @@ public class DataCompletedFilter implements IStoreItemFilter
     /**
      * Creates an instance for the specified file store, data completed script, and script time out.
      */
-    public DataCompletedFilter(final IFileStore fileStore, final String dataCompletedScript,
+    public DataCompletedFilter(final IFileStore fileStore, final File dataCompletedScript,
             final long dataCompletedScriptTimeout)
     {
         if (dataCompletedScript == null)
@@ -94,7 +96,7 @@ public class DataCompletedFilter implements IStoreItemFilter
         {
             command.add("sh");
         }
-        command.add(getDataCompletedScript());
+        command.add(FileUtilities.getCanonicalPath(getDataCompletedScript()));
         command.add(storeItemLocation.getAbsolutePath());
         final String host = storeItemLocation.getHost();
         if (host != null)
@@ -104,7 +106,7 @@ public class DataCompletedFilter implements IStoreItemFilter
         return command;
     }
 
-    private final String getDataCompletedScript()
+    private final File getDataCompletedScript()
     {
         if (OSUtilities.executableExists(dataCompletedScript) == false)
         {
@@ -113,7 +115,7 @@ public class DataCompletedFilter implements IStoreItemFilter
         } else
         {
             notificationLogger.reset(String.format("Script '%s' is again accessible.",
-                    dataCompletedScript));
+                    FileUtilities.getCanonicalPath(dataCompletedScript)));
         }
         return dataCompletedScript;
     }
diff --git a/datamover/sourceTest/java/ch/systemsx/cisd/datamover/ParametersTest.java b/datamover/sourceTest/java/ch/systemsx/cisd/datamover/ParametersTest.java
index d3e2bbd5f772de9820c315ef7c201c60a5dad854..fed16e559b8183b6fbab20e6e733780544047544 100644
--- a/datamover/sourceTest/java/ch/systemsx/cisd/datamover/ParametersTest.java
+++ b/datamover/sourceTest/java/ch/systemsx/cisd/datamover/ParametersTest.java
@@ -178,7 +178,8 @@ public final class ParametersTest extends AbstractFileSystemTestCase
         // With a highwater mark value
         parameters =
                 parse("--" + optionName, localTempDir
-                        + HostAwareFileWithHighwaterMarkHandler.DIRECTORY_HIGHWATERMARK_SEP + highwaterMark);
+                        + HostAwareFileWithHighwaterMarkHandler.DIRECTORY_HIGHWATERMARK_SEP
+                        + highwaterMark);
         hostAwareFileWithHighwaterMark = getFileWithHighwaterMark(optionName, parameters);
         assertEquals(localTempDir, hostAwareFileWithHighwaterMark.getFile().getPath());
         assertEquals(highwaterMark, hostAwareFileWithHighwaterMark.getHighwaterMark());
@@ -224,7 +225,7 @@ public final class ParametersTest extends AbstractFileSystemTestCase
         final File scriptFile = new File(workingDirectory, scriptName);
         FileUtils.touch(scriptFile);
         parameters = parse("--" + PropertyNames.DATA_COMPLETED_SCRIPT, scriptFile.getPath());
-        assertEquals(scriptFile.getPath(), parameters.getDataCompletedScript());
+        assertEquals(scriptFile, parameters.getDataCompletedScript());
     }
 
     @Test