diff --git a/common/resource/dependency-structure.ddf b/common/resource/dependency-structure.ddf
index ad85468ede116bd249fddea1071b6c4e5fa3e540..b4b257b8c81e19ecde5cfcfdbefaa85b58c4dff6 100644
--- a/common/resource/dependency-structure.ddf
+++ b/common/resource/dependency-structure.ddf
@@ -18,16 +18,20 @@ check sets [logging]
 [parser] = ${package}.parser.*
 check sets [parser]
 
+[process] = ${package}.process.*
+check sets [process]
+
 [test] = ${package}.test.*
 check sets [test]
 
-[utilities] = ${package}.utilities.*
+[utilities] = ${package}.utilities.* excluding ${package}.utilities.RecursiveHardLinkMaker
 check sets [utilities]
 
 layer layer0 = [annotation] [exceptions] [logging] [test]
-layer layer1 = [utilities] 
-layer layer2 = [db] [parser]
+layer layer1 = [utilities]
+layer layer2 = [process]
+layer layer3 = [db] [parser]
 
-check layeringOf layer0 layer1 layer2
+check layeringOf layer0 layer1 layer2 layer3
 
 check [parser] independentOf ${package}.exceptions.UserFailureException 
\ No newline at end of file
diff --git a/common/source/java/ch/systemsx/cisd/common/compression/file/InPlaceCompressionMethod.java b/common/source/java/ch/systemsx/cisd/common/compression/file/InPlaceCompressionMethod.java
index 65cdedf9fefbea0115f8d8ff1387e73f1f8c4e87..a3a8ac385e2dea2ef990254dcdce72a03e0d20ce 100644
--- a/common/source/java/ch/systemsx/cisd/common/compression/file/InPlaceCompressionMethod.java
+++ b/common/source/java/ch/systemsx/cisd/common/compression/file/InPlaceCompressionMethod.java
@@ -27,8 +27,8 @@ import ch.systemsx.cisd.common.exceptions.Status;
 import ch.systemsx.cisd.common.exceptions.StatusFlag;
 import ch.systemsx.cisd.common.logging.LogCategory;
 import ch.systemsx.cisd.common.logging.LogFactory;
+import ch.systemsx.cisd.common.process.ProcessExecutionHelper;
 import ch.systemsx.cisd.common.utilities.ISelfTestable;
-import ch.systemsx.cisd.common.utilities.ProcessExecutionHelper;
 
 /**
  * An {@link ICompressionMethod} that performs in-place compression of a bulk of files by means of calling an external
diff --git a/common/source/java/ch/systemsx/cisd/common/compression/tiff/TiffZipCompressionMethod.java b/common/source/java/ch/systemsx/cisd/common/compression/tiff/TiffZipCompressionMethod.java
index cef175f430065609ddb9e9844115c3f1ab7b3130..ffe837e39b7e7bc805fe7b24131c942eed365f16 100644
--- a/common/source/java/ch/systemsx/cisd/common/compression/tiff/TiffZipCompressionMethod.java
+++ b/common/source/java/ch/systemsx/cisd/common/compression/tiff/TiffZipCompressionMethod.java
@@ -25,9 +25,9 @@ import ch.systemsx.cisd.common.compression.file.InPlaceCompressionMethod;
 import ch.systemsx.cisd.common.exceptions.ConfigurationFailureException;
 import ch.systemsx.cisd.common.exceptions.EnvironmentFailureException;
 import ch.systemsx.cisd.common.logging.LogInitializer;
-import ch.systemsx.cisd.common.utilities.ProcessExecutionHelper;
+import ch.systemsx.cisd.common.process.ProcessExecutionHelper;
+import ch.systemsx.cisd.common.process.ProcessResult;
 import ch.systemsx.cisd.common.utilities.OSUtilities;
-import ch.systemsx.cisd.common.utilities.ProcessResult;
 
 /**
  * A compression method for TIFF files using the ImageMagick <code>convert</code> utility with compression
diff --git a/common/source/java/ch/systemsx/cisd/common/utilities/CleanUpCallable.java b/common/source/java/ch/systemsx/cisd/common/process/CleanUpCallable.java
similarity index 97%
rename from common/source/java/ch/systemsx/cisd/common/utilities/CleanUpCallable.java
rename to common/source/java/ch/systemsx/cisd/common/process/CleanUpCallable.java
index 4b10233797d32d9ba27cac27791493863f062f8e..d0a57d7e04c504257f3634db06bedfcba5a75247 100644
--- a/common/source/java/ch/systemsx/cisd/common/utilities/CleanUpCallable.java
+++ b/common/source/java/ch/systemsx/cisd/common/process/CleanUpCallable.java
@@ -14,7 +14,8 @@
  * limitations under the License.
  */
 
-package ch.systemsx.cisd.common.utilities;
+package ch.systemsx.cisd.common.process;
+
 
 /**
  * A class that implements the logic of cleaning up a resource even in case of an exception but re-throws an exception
diff --git a/common/source/java/ch/systemsx/cisd/common/utilities/CleanUpRegistry.java b/common/source/java/ch/systemsx/cisd/common/process/CleanUpRegistry.java
similarity index 97%
rename from common/source/java/ch/systemsx/cisd/common/utilities/CleanUpRegistry.java
rename to common/source/java/ch/systemsx/cisd/common/process/CleanUpRegistry.java
index 2917e37d04b02767b91a8759aad5f44b3286a250..afc7e5c76a0ae91354c1c1ef717c0e645bda3d6f 100644
--- a/common/source/java/ch/systemsx/cisd/common/utilities/CleanUpRegistry.java
+++ b/common/source/java/ch/systemsx/cisd/common/process/CleanUpRegistry.java
@@ -14,11 +14,12 @@
  * limitations under the License.
  */
 
-package ch.systemsx.cisd.common.utilities;
+package ch.systemsx.cisd.common.process;
 
 import java.util.ArrayList;
 import java.util.List;
 
+
 /**
  * A class that allows registering items for clean up and that allows to perform the clean up later.
  *
diff --git a/common/source/java/ch/systemsx/cisd/common/utilities/FileRenamingProcess.java b/common/source/java/ch/systemsx/cisd/common/process/FileRenamingProcess.java
similarity index 98%
rename from common/source/java/ch/systemsx/cisd/common/utilities/FileRenamingProcess.java
rename to common/source/java/ch/systemsx/cisd/common/process/FileRenamingProcess.java
index c2f12f3bc5c7c2d2b8392944af6d82a67e597afa..97dd5f2fa092501a763e5ca3d5dfc94aa987a1d6 100644
--- a/common/source/java/ch/systemsx/cisd/common/utilities/FileRenamingProcess.java
+++ b/common/source/java/ch/systemsx/cisd/common/process/FileRenamingProcess.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package ch.systemsx.cisd.common.utilities;
+package ch.systemsx.cisd.common.process;
 
 import java.io.File;
 
diff --git a/common/source/java/ch/systemsx/cisd/common/utilities/ICallableWithCleanUp.java b/common/source/java/ch/systemsx/cisd/common/process/ICallableWithCleanUp.java
similarity index 95%
rename from common/source/java/ch/systemsx/cisd/common/utilities/ICallableWithCleanUp.java
rename to common/source/java/ch/systemsx/cisd/common/process/ICallableWithCleanUp.java
index 7c9bcb063ec9718908e5ed0d19f832aa8c53f236..b60287510be528d395e4afce2afc927c017c84be 100644
--- a/common/source/java/ch/systemsx/cisd/common/utilities/ICallableWithCleanUp.java
+++ b/common/source/java/ch/systemsx/cisd/common/process/ICallableWithCleanUp.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package ch.systemsx.cisd.common.utilities;
+package ch.systemsx.cisd.common.process;
 
 /**
  * A role that calls a method which requires one or more clean-up steps that need to be run reliably at the end of the
diff --git a/common/source/java/ch/systemsx/cisd/common/utilities/ICleanUpRegistry.java b/common/source/java/ch/systemsx/cisd/common/process/ICleanUpRegistry.java
similarity index 95%
rename from common/source/java/ch/systemsx/cisd/common/utilities/ICleanUpRegistry.java
rename to common/source/java/ch/systemsx/cisd/common/process/ICleanUpRegistry.java
index 53d0b0620afe690e9bc9f976660b9d316d13b306..d78a39be4b089da6d59be68922f7aa50f3bf6015 100644
--- a/common/source/java/ch/systemsx/cisd/common/utilities/ICleanUpRegistry.java
+++ b/common/source/java/ch/systemsx/cisd/common/process/ICleanUpRegistry.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package ch.systemsx.cisd.common.utilities;
+package ch.systemsx.cisd.common.process;
 
 /**
  * A role that allows to register a clean-up method that is called regardless of whether an exception occurs or not.
diff --git a/common/source/java/ch/systemsx/cisd/common/utilities/IProcess.java b/common/source/java/ch/systemsx/cisd/common/process/IProcess.java
similarity index 97%
rename from common/source/java/ch/systemsx/cisd/common/utilities/IProcess.java
rename to common/source/java/ch/systemsx/cisd/common/process/IProcess.java
index be4db76f6dd0f5bac383c1a0647f212d0cb83a09..2e48694b0003ce7a8565bb646bcd4ba8f734e230 100644
--- a/common/source/java/ch/systemsx/cisd/common/utilities/IProcess.java
+++ b/common/source/java/ch/systemsx/cisd/common/process/IProcess.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package ch.systemsx.cisd.common.utilities;
+package ch.systemsx.cisd.common.process;
 
 /**
  * A <code>Runnable</code> extension that describes a process.
diff --git a/common/source/java/ch/systemsx/cisd/common/utilities/ProcessExecutionHelper.java b/common/source/java/ch/systemsx/cisd/common/process/ProcessExecutionHelper.java
similarity index 99%
rename from common/source/java/ch/systemsx/cisd/common/utilities/ProcessExecutionHelper.java
rename to common/source/java/ch/systemsx/cisd/common/process/ProcessExecutionHelper.java
index b923bc3fce79eb4e94b87b8822ffc66577bc4195..ef192bf08a64bebdf96623694f00fbcdaa072d19 100644
--- a/common/source/java/ch/systemsx/cisd/common/utilities/ProcessExecutionHelper.java
+++ b/common/source/java/ch/systemsx/cisd/common/process/ProcessExecutionHelper.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package ch.systemsx.cisd.common.utilities;
+package ch.systemsx.cisd.common.process;
 
 import java.io.BufferedReader;
 import java.io.IOException;
@@ -28,6 +28,8 @@ import org.apache.commons.io.IOUtils;
 import org.apache.log4j.Level;
 import org.apache.log4j.Logger;
 
+import ch.systemsx.cisd.common.utilities.OSUtilities;
+
 /**
  * Utility to execute a command from a command line and log all events.
  * 
diff --git a/common/source/java/ch/systemsx/cisd/common/utilities/ProcessResult.java b/common/source/java/ch/systemsx/cisd/common/process/ProcessResult.java
similarity index 99%
rename from common/source/java/ch/systemsx/cisd/common/utilities/ProcessResult.java
rename to common/source/java/ch/systemsx/cisd/common/process/ProcessResult.java
index 31623f0dbbb5afb29786ef4310062ae5d175938f..a0a72e0d231eaa3434b0cebee62f3b6753277fba 100644
--- a/common/source/java/ch/systemsx/cisd/common/utilities/ProcessResult.java
+++ b/common/source/java/ch/systemsx/cisd/common/process/ProcessResult.java
@@ -1,4 +1,4 @@
-package ch.systemsx.cisd.common.utilities;
+package ch.systemsx.cisd.common.process;
 
 import java.io.File;
 import java.io.IOException;
diff --git a/common/source/java/ch/systemsx/cisd/common/utilities/ProcessRunner.java b/common/source/java/ch/systemsx/cisd/common/process/ProcessRunner.java
similarity index 97%
rename from common/source/java/ch/systemsx/cisd/common/utilities/ProcessRunner.java
rename to common/source/java/ch/systemsx/cisd/common/process/ProcessRunner.java
index d93a6b7f53d3099f2ed9f18df0f32e8a2d37c77b..fd930f64952456107d0adc309eb81dc673474d60 100644
--- a/common/source/java/ch/systemsx/cisd/common/utilities/ProcessRunner.java
+++ b/common/source/java/ch/systemsx/cisd/common/process/ProcessRunner.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package ch.systemsx.cisd.common.utilities;
+package ch.systemsx.cisd.common.process;
 
 import ch.systemsx.cisd.common.exceptions.CheckedExceptionTunnel;
 
diff --git a/common/source/java/ch/systemsx/cisd/common/utilities/RecursiveHardLinkMaker.java b/common/source/java/ch/systemsx/cisd/common/utilities/RecursiveHardLinkMaker.java
index 8f163b5b61b56293f02f8689e4fb469af84c8acd..ac8eba0e301aeaf173593eb019d030a0f41f438b 100644
--- a/common/source/java/ch/systemsx/cisd/common/utilities/RecursiveHardLinkMaker.java
+++ b/common/source/java/ch/systemsx/cisd/common/utilities/RecursiveHardLinkMaker.java
@@ -24,6 +24,9 @@ import org.apache.log4j.Logger;
 
 import ch.systemsx.cisd.common.logging.LogCategory;
 import ch.systemsx.cisd.common.logging.LogFactory;
+import ch.systemsx.cisd.common.process.IProcess;
+import ch.systemsx.cisd.common.process.ProcessExecutionHelper;
+import ch.systemsx.cisd.common.process.ProcessRunner;
 
 /**
  * Utility to create a hard link of a file or copy recursively a directories structure, creating a hard link for each
diff --git a/common/sourceTest/java/ch/systemsx/cisd/common/utilities/ProcessExecutionHelperTest.java b/common/sourceTest/java/ch/systemsx/cisd/common/process/ProcessExecutionHelperTest.java
similarity index 96%
rename from common/sourceTest/java/ch/systemsx/cisd/common/utilities/ProcessExecutionHelperTest.java
rename to common/sourceTest/java/ch/systemsx/cisd/common/process/ProcessExecutionHelperTest.java
index 70e2fd485234a0168b29aed03842495f9429b047..f400362e6ae63e99c0c84861d97beeb243a5137e 100644
--- a/common/sourceTest/java/ch/systemsx/cisd/common/utilities/ProcessExecutionHelperTest.java
+++ b/common/sourceTest/java/ch/systemsx/cisd/common/process/ProcessExecutionHelperTest.java
@@ -14,13 +14,16 @@
  * limitations under the License.
  */
 
-package ch.systemsx.cisd.common.utilities;
+package ch.systemsx.cisd.common.process;
 
-import static org.testng.AssertJUnit.*;
+import static org.testng.AssertJUnit.assertEquals;
+import static org.testng.AssertJUnit.assertFalse;
+import static org.testng.AssertJUnit.assertTrue;
 
 import java.io.File;
 import java.io.IOException;
 import java.util.Arrays;
+
 import org.apache.log4j.Logger;
 import org.testng.annotations.BeforeClass;
 import org.testng.annotations.BeforeMethod;
@@ -29,6 +32,7 @@ import org.testng.annotations.Test;
 import ch.systemsx.cisd.common.logging.LogCategory;
 import ch.systemsx.cisd.common.logging.LogFactory;
 import ch.systemsx.cisd.common.logging.LogInitializer;
+import ch.systemsx.cisd.common.utilities.CollectionIO;
 
 /**
  * Test cases for the {@link ProcessExecutionHelper}.
diff --git a/common/sourceTest/java/ch/systemsx/cisd/common/utilities/ProcessRunnerTest.java b/common/sourceTest/java/ch/systemsx/cisd/common/process/ProcessRunnerTest.java
similarity index 96%
rename from common/sourceTest/java/ch/systemsx/cisd/common/utilities/ProcessRunnerTest.java
rename to common/sourceTest/java/ch/systemsx/cisd/common/process/ProcessRunnerTest.java
index 34aea6a4e45d6f82870fbdbda328bbaa44428109..8c040babafe1c44ee15ff6c07d69f4ca5598cecc 100644
--- a/common/sourceTest/java/ch/systemsx/cisd/common/utilities/ProcessRunnerTest.java
+++ b/common/sourceTest/java/ch/systemsx/cisd/common/process/ProcessRunnerTest.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package ch.systemsx.cisd.common.utilities;
+package ch.systemsx.cisd.common.process;
 
 import static org.testng.AssertJUnit.fail;
 
@@ -24,6 +24,9 @@ import org.testng.annotations.AfterMethod;
 import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.Test;
 
+import ch.systemsx.cisd.common.process.IProcess;
+import ch.systemsx.cisd.common.process.ProcessRunner;
+
 /**
  * Test cases for the {@link ProcessRunner}.
  *