diff --git a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/AbstractOmniscientTopLevelDataSetRegistrator.java b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/AbstractOmniscientTopLevelDataSetRegistrator.java
index 77a8e0d5afa7a0322aac0999671c5f2ab101fec3..a60ae12a24402c3f1fcfd400ae552e432866ea66 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/AbstractOmniscientTopLevelDataSetRegistrator.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/AbstractOmniscientTopLevelDataSetRegistrator.java
@@ -498,7 +498,7 @@ public abstract class AbstractOmniscientTopLevelDataSetRegistrator<T extends Dat
                 handleValidationErrors(validationErrors, incomingDataSetFile, service);
             } else
             {
-                handleDataSet(incomingDataSetFile.getLogicalIncomingFile(), service);
+                handleDataSet(incomingDataSetFile, service);
                 service.commit();
             }
         } catch (Throwable ex)
@@ -693,6 +693,6 @@ public abstract class AbstractOmniscientTopLevelDataSetRegistrator<T extends Dat
      * 
      * @throws Throwable
      */
-    protected abstract void handleDataSet(File dataSetFile, DataSetRegistrationService<T> service)
+    protected abstract void handleDataSet(DataSetFile dataSetFile, DataSetRegistrationService<T> service)
             throws Throwable;
 }
diff --git a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/DataSetStorageAlgorithmRunner.java b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/DataSetStorageAlgorithmRunner.java
index e96b071f6ca9fd87a0e897e8eaf9711c240e1690..2e9d74f16cd77a8d09b394149a18484e5c61fb9b 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/DataSetStorageAlgorithmRunner.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/DataSetStorageAlgorithmRunner.java
@@ -612,6 +612,7 @@ public class DataSetStorageAlgorithmRunner<T extends DataSetInformation>
 
         while (true)
         {
+            waitUntilApplicationIsReady();
             
             if (result == EntityOperationsState.NO_OPERATION)
             {
diff --git a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/JythonTopLevelDataSetHandler.java b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/JythonTopLevelDataSetHandler.java
index 3f28cc42d011dd762fc022a6b5483ce73f434bb8..5c5f4ffda3ee13bc10bb7801b41e5abfbce09761 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/JythonTopLevelDataSetHandler.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/JythonTopLevelDataSetHandler.java
@@ -162,7 +162,7 @@ public class JythonTopLevelDataSetHandler<T extends DataSetInformation> extends
     }
 
     @Override
-    public void handleDataSet(File dataSetFile, DataSetRegistrationService<T> genericService)
+    public void handleDataSet(DataSetFile dataSetFile, DataSetRegistrationService<T> genericService)
             throws Throwable
     {
         // Load the script
@@ -174,12 +174,12 @@ public class JythonTopLevelDataSetHandler<T extends DataSetInformation> extends
         executeJythonScript(dataSetFile, scriptString, service);
     }
 
-    protected void executeJythonScript(File dataSetFile, String scriptString,
+    protected void executeJythonScript(DataSetFile dataSetFile, String scriptString,
             JythonDataSetRegistrationService<T> service)
     {
         // Configure the evaluator
         PythonInterpreter interpreter = service.interpreter;
-        configureEvaluator(dataSetFile, service, interpreter);
+        configureEvaluator(dataSetFile.getLogicalIncomingFile(), service, interpreter);
 
         // Invoke the evaluator
         interpreter.exec(scriptString);
diff --git a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v2/JythonTopLevelDataSetHandlerV2.java b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v2/JythonTopLevelDataSetHandlerV2.java
index f6bba5209be2a4c0219b49f946d3668fa9d24b9b..1583f965b052830c0158ce95f69092bedb239aee 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v2/JythonTopLevelDataSetHandlerV2.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/api/v2/JythonTopLevelDataSetHandlerV2.java
@@ -51,6 +51,7 @@ import ch.systemsx.cisd.etlserver.registrator.api.v1.IDataSetRegistrationTransac
 import ch.systemsx.cisd.etlserver.registrator.api.v1.impl.AbstractTransactionState;
 import ch.systemsx.cisd.etlserver.registrator.api.v1.impl.RollbackStack;
 import ch.systemsx.cisd.etlserver.registrator.api.v1.impl.RollbackStack.IRollbackStackDelegate;
+import ch.systemsx.cisd.etlserver.registrator.monitor.DssRegistrationHealthMonitor;
 import ch.systemsx.cisd.etlserver.registrator.recovery.AbstractRecoveryState;
 import ch.systemsx.cisd.etlserver.registrator.recovery.DataSetStoragePrecommitRecoveryState;
 import ch.systemsx.cisd.etlserver.registrator.recovery.DataSetStorageRecoveryInfo;
@@ -131,13 +132,13 @@ public class JythonTopLevelDataSetHandlerV2<T extends DataSetInformation> extend
     }
 
     @Override
-    protected void executeJythonScript(File dataSetFile, String scriptString,
+    protected void executeJythonScript(DataSetFile dataSetFile, String scriptString,
             JythonDataSetRegistrationService<T> service)
     {
 
         // Configure the evaluator
         PythonInterpreter interpreter = service.getInterpreter();
-        configureEvaluator(dataSetFile, service, interpreter);
+        configureEvaluator(dataSetFile.getLogicalIncomingFile(), service, interpreter);
 
         // Invoke the evaluator
         interpreter.exec(scriptString);
@@ -155,12 +156,22 @@ public class JythonTopLevelDataSetHandlerV2<T extends DataSetInformation> extend
         } else
         {
             executeJythonProcessFunctionWithRetries(interpreter,
-                    (JythonDataSetRegistrationServiceV2<T>) service, retryFunction);
+                    (JythonDataSetRegistrationServiceV2<T>) service, retryFunction, dataSetFile);
         }
     }
 
+    private void waitUntilApplicationIsReady(DataSetFile incomingDataSetFile)
+    {
+        while (false == DssRegistrationHealthMonitor.getInstance().isApplicationReady(
+                incomingDataSetFile.getRealIncomingFile().getParentFile()))
+        {
+            waitTheRetryPeriod();
+            // do nothing. just repeat until the application is ready
+        }
+    }
+    
     private void executeJythonProcessFunctionWithRetries(PythonInterpreter interpreter,
-            JythonDataSetRegistrationServiceV2<T> service, PyFunction retryFunction)
+            JythonDataSetRegistrationServiceV2<T> service, PyFunction retryFunction, DataSetFile incomingDataSetFile)
     {
         DistinctExceptionsCollection errors = new DistinctExceptionsCollection();
 
@@ -169,6 +180,8 @@ public class JythonTopLevelDataSetHandlerV2<T extends DataSetInformation> extend
 
         while (true)
         {
+            waitUntilApplicationIsReady(incomingDataSetFile);
+            
             Exception problem;
             try
             {
diff --git a/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/registrator/DataSetStorageRollbackerTest.java b/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/registrator/DataSetStorageRollbackerTest.java
index 2741f2d4c3f2e440d83f0654555b6d744dca1bfa..b0f3945e862f71ac49a008fa200267ec5dcf5854 100644
--- a/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/registrator/DataSetStorageRollbackerTest.java
+++ b/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/registrator/DataSetStorageRollbackerTest.java
@@ -146,7 +146,7 @@ public class DataSetStorageRollbackerTest extends AbstractFileSystemTestCase
         }
 
         @Override
-        protected void handleDataSet(File dataSetFile,
+        protected void handleDataSet(DataSetFile dataSetFile,
                 DataSetRegistrationService<DataSetInformation> service) throws Throwable
         {
 
diff --git a/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/DataSetRegistrationTransactionTest.java b/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/DataSetRegistrationTransactionTest.java
index 2bcaa84f74def2600c71a33965d34edbeb6e3e25..e7bb91a8fe6b0a5c66c22b466f8c62dda9126c55 100644
--- a/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/DataSetRegistrationTransactionTest.java
+++ b/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/registrator/api/v1/impl/DataSetRegistrationTransactionTest.java
@@ -684,7 +684,7 @@ public class DataSetRegistrationTransactionTest extends AbstractFileSystemTestCa
         }
 
         @Override
-        protected void handleDataSet(File dataSetFile,
+        protected void handleDataSet(DataSetFile dataSetFile,
                 DataSetRegistrationService<DataSetInformation> aService) throws Throwable
         {