diff --git a/datastore_server/source/java/ch/systemsx/cisd/etlserver/ETLDaemon.java b/datastore_server/source/java/ch/systemsx/cisd/etlserver/ETLDaemon.java
index c5faf900464a9dc27c14c0fd64578aa899b6fb90..8b0cda24eb3ff8eb83eebf165ff60a0b582f0e03 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/etlserver/ETLDaemon.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/etlserver/ETLDaemon.java
@@ -51,6 +51,7 @@ import ch.systemsx.cisd.common.filesystem.StoreItem;
 import ch.systemsx.cisd.common.highwatermark.HighwaterMarkDirectoryScanningHandler;
 import ch.systemsx.cisd.common.highwatermark.HighwaterMarkWatcher;
 import ch.systemsx.cisd.common.highwatermark.HostAwareFileWithHighwaterMark;
+import ch.systemsx.cisd.common.logging.Log4jSimpleLogger;
 import ch.systemsx.cisd.common.logging.LogCategory;
 import ch.systemsx.cisd.common.logging.LogFactory;
 import ch.systemsx.cisd.common.mail.IMailClient;
@@ -228,12 +229,13 @@ public final class ETLDaemon
         final IDataSourceQueryService dataSourceQueryService =
                 ServiceProvider.getDataSourceQueryService();
         File storeRootDir = DssPropertyParametersUtil.getStoreRootDir(parameters.getProperties());
-        File[] shares = SegmentedStoreUtils.getShares(storeRootDir);
         List<String> incomingShares = new ArrayList<String>();
         for (final ThreadParameters threadParameters : threads)
         {
             File incomingDataDirectory = threadParameters.getIncomingDataDirectory();
-            String shareId = SegmentedStoreUtils.findIncomingShare(incomingDataDirectory, shares);
+            String shareId =
+                    SegmentedStoreUtils.findIncomingShare(incomingDataDirectory, storeRootDir,
+                            new Log4jSimpleLogger(operationLog));
             incomingShares.add(shareId);
             operationLog.info("[" + threadParameters.getThreadName() + "]: Data sets drop into '"
                     + incomingDataDirectory + "' will be stored in share " + shareId + ".");
diff --git a/datastore_server/source/java/ch/systemsx/cisd/etlserver/api/v1/PutDataSetService.java b/datastore_server/source/java/ch/systemsx/cisd/etlserver/api/v1/PutDataSetService.java
index 5ccda47e09a306d212be208615c68a28b31d3ab5..1202a271c4b157e070ca0f3a916e0d0f142ea090 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/etlserver/api/v1/PutDataSetService.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/etlserver/api/v1/PutDataSetService.java
@@ -29,6 +29,7 @@ import org.apache.log4j.Logger;
 import ch.systemsx.cisd.base.exceptions.IOExceptionUnchecked;
 import ch.systemsx.cisd.common.exceptions.ConfigurationFailureException;
 import ch.systemsx.cisd.common.exceptions.UserFailureException;
+import ch.systemsx.cisd.common.logging.Log4jSimpleLogger;
 import ch.systemsx.cisd.common.mail.IMailClient;
 import ch.systemsx.cisd.common.mail.MailClient;
 import ch.systemsx.cisd.etlserver.DataStrategyStore;
@@ -240,7 +241,9 @@ public class PutDataSetService
                         + storeDirectory);
             }
         }
-        shareId = SegmentedStoreUtils.findIncomingShare(incomingDir, storeDirectory);
+        shareId =
+                SegmentedStoreUtils.findIncomingShare(incomingDir, storeDirectory,
+                        new Log4jSimpleLogger(operationLog));
         operationLog.info("Data sets registered via RPC are stored in share " + shareId + ".");
 
         registratorMap = initializer.getRegistratorMap(shareId, openBisService, mailClient);
diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/utils/SegmentedStoreUtils.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/utils/SegmentedStoreUtils.java
index 4c1b4bec4ca5cafeb3234903e8e8723e1d71b390..9f785b36ffc025650e08e509bae25ea3cbb317e3 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/utils/SegmentedStoreUtils.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/utils/SegmentedStoreUtils.java
@@ -36,6 +36,7 @@ import ch.systemsx.cisd.common.exceptions.ConfigurationFailureException;
 import ch.systemsx.cisd.common.exceptions.EnvironmentFailureException;
 import ch.systemsx.cisd.common.exceptions.UserFailureException;
 import ch.systemsx.cisd.common.filesystem.FileUtilities;
+import ch.systemsx.cisd.common.filesystem.HostAwareFile;
 import ch.systemsx.cisd.common.filesystem.IFreeSpaceProvider;
 import ch.systemsx.cisd.common.filesystem.rsync.RsyncCopier;
 import ch.systemsx.cisd.common.logging.ISimpleLogger;
@@ -54,6 +55,14 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.SimpleDataSetInformationDTO;
  */
 public class SegmentedStoreUtils
 {
+    private static final IFreeSpaceProvider DUMMY_FREE_SPACE_PROVIDER = new IFreeSpaceProvider()
+        {
+            public long freeSpaceKb(HostAwareFile path) throws IOException
+            {
+                return Long.MAX_VALUE;
+            }
+        };
+
     private static final String RSYNC_EXEC = "rsync";
 
     private static final Pattern SHARE_ID_PATTERN = Pattern.compile("[0-9]+");
@@ -84,7 +93,7 @@ public class SegmentedStoreUtils
      */
     public static File[] getShares(File storeRootDir)
     {
-        File[] files = storeRootDir.listFiles(SegmentedStoreUtils.FILTER_ON_SHARES);
+        File[] files = storeRootDir.listFiles(FILTER_ON_SHARES);
         Arrays.sort(files);
         return files;
     }
@@ -93,7 +102,7 @@ public class SegmentedStoreUtils
      * Returns first the id of the first incoming share folder of specified store root which allows
      * to move a file from specified incoming folder to the incoming share.
      */
-    public static String findIncomingShare(File incomingFolder, File storeRoot)
+    public static String findIncomingShare(File incomingFolder, File storeRoot, ISimpleLogger logger)
     {
         if (incomingFolder.isDirectory() == false)
         {
@@ -105,16 +114,7 @@ public class SegmentedStoreUtils
             throw new ConfigurationFailureException(
                     "Store root does not exist or is not a folder: " + storeRoot);
         }
-        return findIncomingShare(incomingFolder, storeRoot.listFiles(FILTER_ON_SHARES));
-    }
-
-    /**
-     * Returns the name of the first share folder which allows to move a file from specified
-     * incoming folder to that share folder.
-     */
-    public static String findIncomingShare(File incomingDataDirectory, File[] shares)
-    {
-        File testFile = new File(incomingDataDirectory, ".DDS_TEST");
+        File testFile = new File(incomingFolder, ".DDS_TEST");
         try
         {
             testFile.createNewFile();
@@ -122,20 +122,29 @@ public class SegmentedStoreUtils
         {
             throw new ConfigurationFailureException(
                     "Couldn't create a test file in the following incoming folder: "
-                            + incomingDataDirectory, ex);
+                            + incomingFolder, ex);
         }
-        File matchingShare = findShare(testFile, shares);
+        File matchingShare = findShare(testFile, storeRoot, logger);
         return matchingShare.getName();
     }
 
-    private static File findShare(File testFile, File[] shares)
+    private static File findShare(File testFile, File storeRoot, ISimpleLogger logger)
     {
-        for (File share : shares)
+        for (File share : getShares(storeRoot))
         {
             File destination = new File(share, testFile.getName());
             if (testFile.renameTo(destination))
             {
                 destination.delete();
+                Share shareObject =
+                        new ShareFactory().createShare(share, DUMMY_FREE_SPACE_PROVIDER, logger);
+                if (shareObject.isWithdrawShare())
+                {
+                    logger.log(LogLevel.WARN, "Incoming folder [" + testFile.getParent()
+                            + "] can not be assigned to share " + shareObject.getShareId()
+                            + " because its property " + ShareFactory.WITHDRAW_SHARE_PROP
+                            + " is set to true.");
+                }
                 return share;
             }
         }
diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/utils/ShareFactory.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/utils/ShareFactory.java
index 3e3987b4181db652884da3253fcb35b7894e722b..48bf51429aab5ae77366fa22066019b2e217ef53 100644
--- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/utils/ShareFactory.java
+++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/utils/ShareFactory.java
@@ -51,7 +51,6 @@ public class ShareFactory
     @Private
     static final String SHUFFLE_PRIORITY_PROP = "shuffle-priority";
     
-    @Private
     public static final String WITHDRAW_SHARE_PROP = "withdraw-share";
 
     private int speed = Math.abs(Constants.DEFAULT_SPEED_HINT);
diff --git a/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/dss/generic/shared/utils/SegmentedStoreUtilsTest.java b/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/dss/generic/shared/utils/SegmentedStoreUtilsTest.java
index ced01b1f3c7efe36b4bf48846abb53a55a3dd22a..501cdd3796e538ac3ff862be363c6f1f135cbe36 100644
--- a/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/dss/generic/shared/utils/SegmentedStoreUtilsTest.java
+++ b/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/dss/generic/shared/utils/SegmentedStoreUtilsTest.java
@@ -273,6 +273,25 @@ public class SegmentedStoreUtilsTest extends AbstractFileSystemTestCase
         log.assertNoMoreLogMessages();
     }
     
+    @Test
+    public void testFindIncomingShare()
+    {
+        File incomingFolder = new File(workingDirectory, "incoming");
+        incomingFolder.mkdirs();
+        File share1 = new File(store, "1");
+        share1.mkdirs();
+        FileUtilities.writeToFile(new File(share1, "share.properties"), "withdraw-share = true");
+        
+        String share = SegmentedStoreUtils.findIncomingShare(incomingFolder, store, log);
+        
+        assertEquals("1", share);
+        assertEquals(
+                "WARN: Incoming folder [targets/unit-test-wd/"
+                        + SegmentedStoreUtilsTest.class.getName()
+                        + "/incoming] can not be assigned to share 1 because its property "
+                        + "withdraw-share is set to true.\n", log.toString());
+    }
+    
     private File dataSetFile(String shareId, boolean empty)
     {
         File share = new File(store, shareId);