diff --git a/datamover/source/java/ch/systemsx/cisd/datamover/DataMover.java b/datamover/source/java/ch/systemsx/cisd/datamover/DataMover.java
index 888d3ce881e76517b4c6a1ce1d833cffb1b7e5c4..4d2bdb370112e17ced48ebca16250ef79dec1b70 100644
--- a/datamover/source/java/ch/systemsx/cisd/datamover/DataMover.java
+++ b/datamover/source/java/ch/systemsx/cisd/datamover/DataMover.java
@@ -67,7 +67,7 @@ public class DataMover
      * 
      * @return object which can be used to terminate the process and all its threads
      */
-    public static final ITerminable start(final Parameters parameters,
+    static final ITerminable start(final Parameters parameters,
             final IFileSysOperationsFactory factory)
     {
         return start(parameters, factory, createLocalBufferDirs(parameters));
@@ -80,7 +80,7 @@ public class DataMover
     }
 
     /** Allows to specify buffer directories. Exposed for testing purposes. */
-    public static final ITerminable start(final Parameters parameters,
+    static final ITerminable start(final Parameters parameters,
             final IFileSysOperationsFactory factory, final LocalBufferDirs localBufferDirs)
     {
         return new DataMover(parameters, factory, localBufferDirs).start();
diff --git a/datamover/source/java/ch/systemsx/cisd/datamover/DataMoverProcess.java b/datamover/source/java/ch/systemsx/cisd/datamover/DataMoverProcess.java
index 54f9667870ad029df4589bd4ed07a0868289cc3a..3fcadc6b23b0aea8398fac47db9faa36f485c8d2 100644
--- a/datamover/source/java/ch/systemsx/cisd/datamover/DataMoverProcess.java
+++ b/datamover/source/java/ch/systemsx/cisd/datamover/DataMoverProcess.java
@@ -26,6 +26,8 @@ import ch.systemsx.cisd.datamover.filesystem.intf.IRecoverableTimerTaskFactory;
 
 /**
  * A class that represents the incoming moving process.
+ * 
+ * @author Bernd Rinn
  */
 public class DataMoverProcess implements ITerminable
 {
diff --git a/datamover/source/java/ch/systemsx/cisd/datamover/Main.java b/datamover/source/java/ch/systemsx/cisd/datamover/Main.java
index c45ddf3e70239b0d5b5e3a1e48b1455ca3a9d7b4..18a661658d968dfc265016eb5fd5b1e9f86e0f48 100644
--- a/datamover/source/java/ch/systemsx/cisd/datamover/Main.java
+++ b/datamover/source/java/ch/systemsx/cisd/datamover/Main.java
@@ -21,6 +21,7 @@ import java.util.ArrayList;
 
 import org.apache.log4j.Logger;
 
+import ch.rinn.restrictions.Private;
 import ch.systemsx.cisd.common.exceptions.HighLevelException;
 import ch.systemsx.cisd.common.logging.LogCategory;
 import ch.systemsx.cisd.common.logging.LogFactory;
@@ -41,7 +42,6 @@ import ch.systemsx.cisd.datamover.utils.LocalBufferDirs;
  */
 public class Main
 {
-
     private static final Logger operationLog =
             LogFactory.getLogger(LogCategory.OPERATION, Main.class);
 
@@ -51,7 +51,12 @@ public class Main
     private static final UncaughtExceptionHandler loggingExceptionHandler =
             new UncaughtExceptionHandler()
                 {
-                    public void uncaughtException(Thread t, Throwable e)
+
+                    //
+                    // UncaughtExceptionHandler
+                    //
+
+                    public final void uncaughtException(final Thread t, final Throwable e)
                     {
                         notificationLog.error("An exception has occurred [thread: '" + t.getName()
                                 + "'].", e);
@@ -60,7 +65,12 @@ public class Main
 
     private static final Runnable loggingShutdownHook = new Runnable()
         {
-            public void run()
+
+            //
+            // Runnable
+            //
+
+            public final void run()
             {
                 if (operationLog.isInfoEnabled())
                 {
@@ -120,7 +130,7 @@ public class Main
                 stores.add(dummyStore);
             }
             final IPathCopier copyProcess = factory.getCopier(false);
-            SelfTest.check(copyProcess, stores.toArray(new IFileStore[] {}));
+            SelfTest.check(copyProcess, stores.toArray(IFileStore.EMPTY_ARRAY));
         } catch (final HighLevelException e)
         {
             System.err.printf(msgStart + " [%s: %s]\n", e.getClass().getSimpleName(), e
@@ -134,7 +144,7 @@ public class Main
         }
     }
 
-    /** exposed for testing purposes */
+    @Private
     static ITerminable startupServer(final Parameters parameters, final LocalBufferDirs bufferDirs)
     {
         final IFileSysOperationsFactory factory = new FileSysOperationsFactory(parameters);
@@ -154,7 +164,10 @@ public class Main
         printInitialLogMessage(parameters);
         selfTest(parameters);
         startupServer(parameters);
-        operationLog.info("Datamover ready and waiting for data.");
+        if (operationLog.isInfoEnabled())
+        {
+            operationLog.info("Datamover ready and waiting for data.");
+        }
     }
 
 }
diff --git a/datamover/source/java/ch/systemsx/cisd/datamover/filesystem/intf/IFileStore.java b/datamover/source/java/ch/systemsx/cisd/datamover/filesystem/intf/IFileStore.java
index 6aeb06e383e1918fca3f72f312eb01951d454465..1e064f4a5ccb5b8cc61a7134ffb7ec81bdd9cb71 100644
--- a/datamover/source/java/ch/systemsx/cisd/datamover/filesystem/intf/IFileStore.java
+++ b/datamover/source/java/ch/systemsx/cisd/datamover/filesystem/intf/IFileStore.java
@@ -29,6 +29,8 @@ import ch.systemsx.cisd.common.utilities.StoreItem;
  */
 public interface IFileStore extends ISelfTestable
 {
+    public static final IFileStore[] EMPTY_ARRAY = new IFileStore[0];
+
     /**
      * Returns the location of the specified store item.
      */
diff --git a/datamover/sourceTest/java/ch/systemsx/cisd/datamover/MainTest.java b/datamover/sourceTest/java/ch/systemsx/cisd/datamover/MainTest.java
index d696e88474d8601d1b2ee991cb75ead73db511f1..d9c28470af326e7f3ed4037c5a42841894b70f20 100644
--- a/datamover/sourceTest/java/ch/systemsx/cisd/datamover/MainTest.java
+++ b/datamover/sourceTest/java/ch/systemsx/cisd/datamover/MainTest.java
@@ -34,6 +34,7 @@ import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.DataProvider;
 import org.testng.annotations.Test;
 
+import ch.rinn.restrictions.Friend;
 import ch.systemsx.cisd.common.logging.LogInitializer;
 import ch.systemsx.cisd.common.utilities.FileUtilities;
 import ch.systemsx.cisd.common.utilities.ITerminable;
@@ -41,9 +42,13 @@ import ch.systemsx.cisd.datamover.testhelper.FileStructEngine;
 import ch.systemsx.cisd.datamover.utils.LocalBufferDirs;
 
 /**
+ * Test cases for the {@link Parameters} class.
+ * 
  * @author Tomasz Pylak
  */
-public class MainTest
+@Friend(toClasses =
+    { Main.class })
+public final class MainTest
 {
     private static final FileStructEngine DEFAULT_STRUCT = new FileStructEngine("test");
 
@@ -314,10 +319,10 @@ public class MainTest
     }
 
     private static void runDataMover(Parameters parameters, LocalBufferDirs bufferDirs,
-            long dataMoverCompleteionTime) throws InterruptedException
+            long dataMoverCompletionTime) throws InterruptedException
     {
         ITerminable terminable = Main.startupServer(parameters, bufferDirs);
-        Thread.sleep(dataMoverCompleteionTime);
+        Thread.sleep(dataMoverCompletionTime);
         assertTrue(terminable.terminate());
     }