diff --git a/integration-tests/test_openbis_sync.py b/integration-tests/test_openbis_sync.py
index c3426a623a3a82882348fa1a5e0fd0e9139ef6a1..d97415da3e67d2169903d86e786550370a1b52dd 100755
--- a/integration-tests/test_openbis_sync.py
+++ b/integration-tests/test_openbis_sync.py
@@ -295,7 +295,9 @@ class TestCase(systemtest.testcase.TestCase):
         base64string = base64.encodestring('%s:%s' % (user, password)).replace('\n', '')
         request.add_header("Authorization", "Basic %s" % base64string)
         data = urllib.urlencode({'mode' : 'test'})
-        response = urllib2.urlopen(request, data, context=ssl._create_unverified_context())
+#        response = urllib2.urlopen(request, data, context=ssl._create_unverified_context())
+#       TODO if python version > 2.10: replace next line by the line above
+        response = urllib2.urlopen(request, data)
         return response
 
     def getHarvesterConfigFolder(self):
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/parser/SampleUploadSectionsParser.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/parser/SampleUploadSectionsParser.java
index 1a7b95d7e7228077f72eafcbf6cb04a7eefdc3e6..03dd43ea4abc1f5c627dece2b600d268d1ea83c4 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/parser/SampleUploadSectionsParser.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/parser/SampleUploadSectionsParser.java
@@ -357,7 +357,7 @@ public class SampleUploadSectionsParser
         return results;
     }
 
-    private static void generateIdentifiers(boolean projectSamplesEnabled,
+    static void generateIdentifiers(boolean projectSamplesEnabled,
             String defaultGroupIdentifier,
             SampleCodeGenerator sampleCodeGenerator, boolean isAutoGenerateCodes,
             List<NewSamplesWithTypes> newSamplesWithTypes)
@@ -370,27 +370,28 @@ public class SampleUploadSectionsParser
             List<String> codes = sampleCodeGenerator.generateCodes(newSamples.size());
             for (int i = 0; i < newSamples.size(); i++)
             {
+                NewSample sample = newSamples.get(i);
                 String spaceCodeOrNull = null;
-                if (newSamples.get(i).getDefaultSpaceIdentifier() == null || newSamples.get(i).getDefaultSpaceIdentifier().isEmpty())
+                if (StringUtils.isBlank(sample.getDefaultSpaceIdentifier()))
                 {
                     spaceCodeOrNull = defaultGroupIdentifier;
                 } else
                 {
-                    spaceCodeOrNull = newSamples.get(i).getDefaultSpaceIdentifier();
+                    spaceCodeOrNull = sample.getDefaultSpaceIdentifier();
                 }
                 spaceCodeOrNull = spaceCodeOrNull.substring(1);
                 String projectCodeOrNull = null;
-                if (projectSamplesEnabled && newSamples.get(i).getExperimentIdentifier() != null
-                        && !newSamples.get(i).getExperimentIdentifier().isEmpty())
+                if (projectSamplesEnabled && StringUtils.isNotBlank(sample.getExperimentIdentifier()))
                 {
-                    String[] experimentIdentifierParts = newSamples.get(i).getExperimentIdentifier().split("/");
-                    if(experimentIdentifierParts.length != 4) {
-                        throw new UserFailureException("Incorrect format for the experiment identifier: " + newSamples.get(i).getExperimentIdentifier());
+                    String[] experimentIdentifierParts = sample.getExperimentIdentifier().split("/");
+                    if (experimentIdentifierParts.length != 4)
+                    {
+                        throw new UserFailureException("Incorrect format for the experiment identifier: " + sample.getExperimentIdentifier());
                     }
                     spaceCodeOrNull = experimentIdentifierParts[experimentIdentifierParts.length - 3];
                     projectCodeOrNull = experimentIdentifierParts[experimentIdentifierParts.length - 2];
                 }
-                newSamples.get(i).setIdentifier(createIdentifier(spaceCodeOrNull, projectCodeOrNull, codes.get(i)));
+                sample.setIdentifier(createIdentifier(spaceCodeOrNull, projectCodeOrNull, codes.get(i)));
             }
         }
     }
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/parser/SampleUploadSectionsParserTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/parser/SampleUploadSectionsParserTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..2814364ef0b89c7cd718b1a2c2c0afd4c2e40a9e
--- /dev/null
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/parser/SampleUploadSectionsParserTest.java
@@ -0,0 +1,153 @@
+/*
+ * Copyright 2018 ETH Zuerich, SIS
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package ch.systemsx.cisd.openbis.generic.shared.parser;
+
+import static org.testng.Assert.assertEquals;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.stream.Collectors;
+
+import org.testng.annotations.Test;
+
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.NewSample;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.NewSamplesWithTypes;
+
+/**
+ * @author Franz-Josef Elmer
+ */
+public class SampleUploadSectionsParserTest
+{
+    private static final class Generator implements SampleUploadSectionsParser.SampleCodeGenerator
+    {
+        private int counter;
+
+        @Override
+        public List<String> generateCodes(int size)
+        {
+
+            List<String> codes = new ArrayList<>(size);
+            for (int i = 0; i < size; i++)
+            {
+                codes.add("S-" + counter++);
+            }
+            return codes;
+        }
+
+    }
+
+    @Test
+    public void testGenerateIdentifiersWithDefaultSpaceAndNoProjectSamples()
+    {
+        // Given
+        NewSamplesWithTypes swt1 = new NewSamplesWithTypes();
+        swt1.setNewEntities(Arrays.asList(s().defaultSpace("/MY_SPACE"),
+                s().experiment("/A/B/C")));
+        NewSamplesWithTypes swt2 = new NewSamplesWithTypes();
+        swt2.setNewEntities(Arrays.asList(s().defaultSpace("/ABC").experiment("/D/E/F")));
+
+        // When
+        SampleUploadSectionsParser.generateIdentifiers(false, "/DEFAULT", new Generator(), true, Arrays.asList(swt1, swt2));
+
+        // Then
+        assertEquals(extractIdentifiers(swt1).toString(), "[/MY_SPACE/S-0, /DEFAULT/S-1]");
+        assertEquals(extractIdentifiers(swt2).toString(), "[/ABC/S-2]");
+    }
+
+    @Test
+    public void testGenerateIdentifiersWithNoDefaultSpaceAndNoProjectSamples()
+    {
+        // Given
+        NewSamplesWithTypes swt1 = new NewSamplesWithTypes();
+        swt1.setNewEntities(Arrays.asList(s().defaultSpace("/MY_SPACE"),
+                s().defaultSpace("/A1").experiment("/A/B/C")));
+        NewSamplesWithTypes swt2 = new NewSamplesWithTypes();
+        swt2.setNewEntities(Arrays.asList(s().defaultSpace("/ABC").experiment("/D/E/F")));
+
+        // When
+        SampleUploadSectionsParser.generateIdentifiers(false, null, new Generator(), true, Arrays.asList(swt1, swt2));
+
+        // Then
+        assertEquals(extractIdentifiers(swt1).toString(), "[/MY_SPACE/S-0, /A1/S-1]");
+        assertEquals(extractIdentifiers(swt2).toString(), "[/ABC/S-2]");
+    }
+
+    @Test
+    public void testGenerateIdentifiersWithDefaultSpaceAndProjectSamples()
+    {
+        // Given
+        NewSamplesWithTypes swt1 = new NewSamplesWithTypes();
+        swt1.setNewEntities(Arrays.asList(s().defaultSpace("/MY_SPACE"),
+                s().experiment("/A/B/C")));
+        NewSamplesWithTypes swt2 = new NewSamplesWithTypes();
+        swt2.setNewEntities(Arrays.asList(s().defaultSpace("/ABC").experiment("/D/E/F")));
+
+        // When
+        SampleUploadSectionsParser.generateIdentifiers(true, "/DEFAULT", new Generator(), true, Arrays.asList(swt1, swt2));
+
+        // Then
+        assertEquals(extractIdentifiers(swt1).toString(), "[/MY_SPACE/S-0, /A/B/S-1]");
+        assertEquals(extractIdentifiers(swt2).toString(), "[/D/E/S-2]");
+    }
+
+    @Test
+    public void testGenerateIdentifiersWithNoDefaultSpaceAndProjectSamples()
+    {
+        // Given
+        NewSamplesWithTypes swt1 = new NewSamplesWithTypes();
+        swt1.setNewEntities(Arrays.asList(s().defaultSpace("/MY_SPACE"), s().defaultSpace("/A1").experiment("/A/B/C")));
+        NewSamplesWithTypes swt2 = new NewSamplesWithTypes();
+        swt2.setNewEntities(Arrays.asList(s().defaultSpace("/ABC").experiment("/D/E/F"),
+                s().defaultSpace("/S1").experiment("/C/D/E")));
+
+        // When
+        SampleUploadSectionsParser.generateIdentifiers(true, null, new Generator(), true, Arrays.asList(swt1, swt2));
+
+        // Then
+        assertEquals(extractIdentifiers(swt1).toString(), "[/MY_SPACE/S-0, /A/B/S-1]");
+        assertEquals(extractIdentifiers(swt2).toString(), "[/D/E/S-2, /C/D/S-3]");
+    }
+
+    private List<String> extractIdentifiers(NewSamplesWithTypes samplesWithTypes)
+    {
+        return samplesWithTypes.getNewEntities().stream().map(NewSample::getIdentifier).collect(Collectors.toList());
+    }
+
+    private NewSampleBuilder s()
+    {
+        return new NewSampleBuilder();
+    }
+
+    private static final class NewSampleBuilder extends NewSample
+    {
+        private static final long serialVersionUID = 1L;
+
+        public NewSampleBuilder defaultSpace(String defaultSpaceIdentifier)
+        {
+            setDefaultSpaceIdentifier(defaultSpaceIdentifier);
+            return this;
+        }
+
+        public NewSampleBuilder experiment(String experimentIdentifier)
+        {
+            setExperimentIdentifier(experimentIdentifier);
+            return this;
+        }
+    }
+
+}