diff --git a/common/source/java/ch/systemsx/cisd/common/process/ProcessResult.java b/common/source/java/ch/systemsx/cisd/common/process/ProcessResult.java
index c5321ab0e035fcc075b2afce05a1aeea5e1e858d..35578bca0c0ce36c1ce8c3a9c8d09f7c3ac677f9 100644
--- a/common/source/java/ch/systemsx/cisd/common/process/ProcessResult.java
+++ b/common/source/java/ch/systemsx/cisd/common/process/ProcessResult.java
@@ -26,6 +26,7 @@ import org.apache.log4j.Logger;
 import ch.systemsx.cisd.base.utilities.OSUtilities;
 import ch.systemsx.cisd.common.concurrent.ExecutionResult;
 import ch.systemsx.cisd.common.concurrent.ExecutionStatus;
+import ch.systemsx.cisd.common.exceptions.Status;
 
 /**
  * Class that keeps around the result of running an Operating System process.
@@ -241,6 +242,34 @@ public final class ProcessResult
         return errorOutput;
     }
 
+    /**
+     * Returns this result as a {@link Status}.
+     */
+    public Status toStatus()
+    {
+        if (isOK())
+        {
+            return Status.OK;
+        } else
+        {
+            if (isTimedOut())
+            {
+                return Status.createRetriableError("Process timed out");
+            }
+            if (isInterruped())
+            {
+                return Status.createRetriableError("Process got interrupted");
+            }
+            if (StringUtils.isBlank(getStartupFailureMessage()) == false)
+            {
+                return Status.createError(getStartupFailureMessage());
+            }
+            return Status.createError("Exit Value: " + getExitValue() + "\n"
+                    + StringUtils.join(getErrorOutput(), "\n"));
+        }
+
+    }
+
     /**
      * Returns the text output of the process (<code>stdout</code> and <code>stderr</code>). If it
      * not available (see {@link #isOutputAvailable()}, an empty list is returned.