diff --git a/datastore_server/source/java/ch/systemsx/cisd/etlserver/TopLevelDataSetRegistratorGlobalState.java b/datastore_server/source/java/ch/systemsx/cisd/etlserver/TopLevelDataSetRegistratorGlobalState.java
index b0bd6e575acfdf06e7dea2c36e6855b6736eb44e..0144a00d43749adbf965fb287bdca4caa611279b 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/etlserver/TopLevelDataSetRegistratorGlobalState.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/etlserver/TopLevelDataSetRegistratorGlobalState.java
@@ -154,6 +154,7 @@ public class TopLevelDataSetRegistratorGlobalState
         this.storageRecoveryManager = storageRecoveryManager;
         this.storageRecoveryManager.setDropboxRecoveryStateDir(dropboxRecoveryStateDir);
         this.storageRecoveryManager.setRecoveryMarkerFilesDir(recoveryMarkerFilesDirectory);
+        this.storageRecoveryManager.setMaximumRertyCount(getMaximumRecoveryCount(threadParameters.getThreadProperties()));
 
         // Initialize the DSS Registration Log Directory
         new DssRegistrationLogDirectoryHelper(dssRegistrationLogDir).initializeSubdirectories();
@@ -305,6 +306,8 @@ public class TopLevelDataSetRegistratorGlobalState
     public static final String PRE_COMMIT_DIR = "pre-commit-dir";
 
     public static final String RECOVERY_MARKER_DIR = "recovery-marker-dir";
+    
+    public static final String RECOVERY_MAX_RETRY_COUNT = "recovery-max-retry-count";
 
     private static File getStagingDir(File storeRoot, String shareId, Properties threadProperties)
     {
@@ -329,6 +332,11 @@ public class TopLevelDataSetRegistratorGlobalState
                 "recovery-marker");
     }
 
+    private static int getMaximumRecoveryCount(Properties threadProperties)
+    {
+        return PropertyUtils.getInt(threadProperties, RECOVERY_MAX_RETRY_COUNT, 50);
+    }
+    
     /**
      * Get a directory local to the share, respecting the user override, if one is specified, and
      * defaulting to the defaultDirName.
diff --git a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/DataSetStorageRecoveryManager.java b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/DataSetStorageRecoveryManager.java
index a9e32fcda60e4dc569281b2d107f63920620c96c..9ab0479c1f45a537cb8ccfe91e7baa0cc95c5fda 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/DataSetStorageRecoveryManager.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/DataSetStorageRecoveryManager.java
@@ -44,7 +44,9 @@ public class DataSetStorageRecoveryManager implements IDataSetStorageRecoveryMan
     private File dropboxRecoveryStateDir;
 
     private File recoveryMarkerFilesDir;
-
+    
+    private int maxRetryCount = 50;
+    
     public <T extends DataSetInformation> void checkpointPrecommittedState(
             DataSetStorageAlgorithmRunner<T> runner)
     {
@@ -150,4 +152,13 @@ public class DataSetStorageRecoveryManager implements IDataSetStorageRecoveryMan
         this.recoveryMarkerFilesDir = recoveryMarkerFileDir;
     }
 
+    public void setMaximumRertyCount(int maxRetryCount)
+    {
+        this.maxRetryCount = maxRetryCount;
+    }
+
+    public int getMaximumRertyCount()
+    {
+        return this.maxRetryCount;
+    }
 }
diff --git a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/IDataSetStorageRecoveryManager.java b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/IDataSetStorageRecoveryManager.java
index c95b94d47c87afd4d3a592f3f8092048bac63f6a..238d5d4246d459db68ac019afcaba3cbf130f8b6 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/IDataSetStorageRecoveryManager.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/etlserver/registrator/IDataSetStorageRecoveryManager.java
@@ -70,4 +70,8 @@ public interface IDataSetStorageRecoveryManager
     void setDropboxRecoveryStateDir(File dropboxRecoveryStateDir);
     
     void setRecoveryMarkerFilesDir(File recoveryMarkerFileDir);
+    
+    int getMaximumRertyCount();
+    
+    void setMaximumRertyCount(int maxRetryCount);
 }
\ No newline at end of file
diff --git a/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/registrator/AbstractJythonDataSetHandlerTest.java b/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/registrator/AbstractJythonDataSetHandlerTest.java
index d69a12583b4a8f9acee70629894d88fa0d37c9f6..9480f5a195f1a4c235ec565038052a24079fd0cf 100644
--- a/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/registrator/AbstractJythonDataSetHandlerTest.java
+++ b/datastore_server/sourceTest/java/ch/systemsx/cisd/etlserver/registrator/AbstractJythonDataSetHandlerTest.java
@@ -213,6 +213,7 @@ public abstract class AbstractJythonDataSetHandlerTest extends AbstractFileSyste
                             new File(workingDirectory, "jython-handler-test"));
                     one(storageRecoveryManager).setRecoveryMarkerFilesDir(new File(
                             new File(workingDirectory, "recovery-marker"), "jython-handler-test"));
+                    one(storageRecoveryManager).setMaximumRertyCount(with(any(Integer.class)));
                 }
             });
     }