diff --git a/common/source/java/ch/systemsx/cisd/common/utilities/RsyncBasedRecursiveHardLinkMaker.java b/common/source/java/ch/systemsx/cisd/common/utilities/RsyncBasedRecursiveHardLinkMaker.java
index 55f6ae1a66f6fc74dc14f6d85891cf442a99b33e..5ae3bcb668394978c15fa46a2c921bed4d09d5af 100644
--- a/common/source/java/ch/systemsx/cisd/common/utilities/RsyncBasedRecursiveHardLinkMaker.java
+++ b/common/source/java/ch/systemsx/cisd/common/utilities/RsyncBasedRecursiveHardLinkMaker.java
@@ -58,7 +58,7 @@ public class RsyncBasedRecursiveHardLinkMaker implements IDirectoryImmutableCopi
 
     private final long timeToSleepAfterCopyFails;
 
-    private RsyncCopier rsyncCopier = new RsyncCopier(OSUtilities.findExecutable(RSYNC_EXEC));
+    private final RsyncCopier rsyncCopier;
 
     public interface ILastChangedChecker
     {
@@ -67,13 +67,28 @@ public class RsyncBasedRecursiveHardLinkMaker implements IDirectoryImmutableCopi
 
     public RsyncBasedRecursiveHardLinkMaker()
     {
-        this(DEFAULT_INACTIVITY_TRESHOLD_MILLIS, DEFAULT_MAX_ERRORS_TO_IGNORE,
+        this(null, DEFAULT_INACTIVITY_TRESHOLD_MILLIS, DEFAULT_MAX_ERRORS_TO_IGNORE,
                 DEFAULT_MAX_ATTEMPTS, DEFAULT_TIME_TO_SLEEP_AFTER_COPY_FAILS);
     }
 
-    public RsyncBasedRecursiveHardLinkMaker(long inactivityThresholdMillis, int maxErrorsToIgnore,
-            int maxAttempts, long timeToSleepAfterCopyFails)
+    public RsyncBasedRecursiveHardLinkMaker(File rsyncExecutableOrNull)
     {
+        this(rsyncExecutableOrNull, DEFAULT_INACTIVITY_TRESHOLD_MILLIS,
+                DEFAULT_MAX_ERRORS_TO_IGNORE, DEFAULT_MAX_ATTEMPTS,
+                DEFAULT_TIME_TO_SLEEP_AFTER_COPY_FAILS);
+    }
+
+    public RsyncBasedRecursiveHardLinkMaker(File rsyncExecutableOrNull,
+            long inactivityThresholdMillis, int maxErrorsToIgnore, int maxAttempts,
+            long timeToSleepAfterCopyFails)
+    {
+        if (rsyncExecutableOrNull == null)
+        {
+            rsyncCopier = new RsyncCopier(OSUtilities.findExecutable(RSYNC_EXEC));
+        } else
+        {
+            rsyncCopier = new RsyncCopier(rsyncExecutableOrNull);
+        }
         this.inactivityThresholdMillis = inactivityThresholdMillis;
         this.timeToSleepAfterCopyFails = timeToSleepAfterCopyFails;
         this.maxErrorsToIgnore = maxErrorsToIgnore;