diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/SampleTable.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/SampleTable.java
index 008bc660ae8438ddd1ad46fb2dd5d504627dd5a7..4343a87b59ef7fb8ebfbef23740118a4c2cb2544 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/SampleTable.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/SampleTable.java
@@ -252,13 +252,13 @@ public final class SampleTable extends AbstractSampleBusinessObject implements I
             final String[] parents = updates.getModifiedParentCodesOrNull();
             if (parents != null)
             {
-                setParents(sample, parents, null);
+                setParents(sample, parents, updates.tryGetDefaultSpaceIdentifier());
             }
         }
         if (details.isContainerUpdateRequested())
         {
             setContainer(updates.getSampleIdentifier(), sample,
-                    updates.getContainerIdentifierOrNull(), null);
+                    updates.getContainerIdentifierOrNull(), updates.tryGetDefaultSpaceIdentifier());
         }
         // NOTE: Checking business rules with relationships is expensive.
         // Don't perform them unless relevant data were changed.
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/UpdatedSample.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/UpdatedSample.java
index 54531eaa5240f95f518764c8f129a4a7b92af868..03509e8409f0e5d0b1cb15927e0183aca9e7fe4d 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/UpdatedSample.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/UpdatedSample.java
@@ -34,7 +34,8 @@ public final class UpdatedSample extends NewSample
                     + "# but for samples from default space (if it was provided in the form) it is enough to put sample codes (e.g. SAMPLE_1) into the column.\n"
                     + "# The \"container\" column (if not removed) should contain sample identifiers, e.g. /SPACE/SAMPLE_1\n"
                     + "# The \"parent\" column (if not removed) should contain comma separated list of sample identifiers, e.g. /SPACE/SAMPLE_1,/SPACE/SAMPLE_2\n"
-                    + "# The \"experiment\" column (if not removed) should contain experiment identifier, e.g. /SPACE/PROJECT/EXP_1\n";
+                    + "# The \"experiment\" column (if not removed) should contain experiment identifier, e.g. /SPACE/PROJECT/EXP_1\n"
+                    + "# The \"space\" column is optional, it can be used to override home space for the row\n";
 
     private SampleBatchUpdateDetails batchUpdateDetails;
 
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/SampleBatchUpdatesDTO.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/SampleBatchUpdatesDTO.java
index 8786fd292dbadd13b9d5c4b0b2f6df3e13ca851c..0e2b0bbe954ad1115c1619953024dfd6f2a55a7c 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/SampleBatchUpdatesDTO.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/SampleBatchUpdatesDTO.java
@@ -31,17 +31,21 @@ public class SampleBatchUpdatesDTO extends SampleUpdatesDTO
 {
     private static final long serialVersionUID = ServiceVersionHolder.VERSION;
 
+    private final String defaultSpaceIdentifierOrNull;
+
     private SampleIdentifier oldSampleIdentifierOrNull;
 
     private SampleBatchUpdateDetails details;
 
-    public SampleBatchUpdatesDTO(SampleIdentifier oldSampleIdentifier,
-            List<IEntityProperty> properties, ExperimentIdentifier experimentIdentifierOrNull,
-            SampleIdentifier sampleIdentifier, String containerIdentifierOrNull,
-            String[] modifiedParentCodesOrNull, SampleBatchUpdateDetails details)
+    public SampleBatchUpdatesDTO(String defaultSpaceIdentifierOrNull,
+            SampleIdentifier oldSampleIdentifier, List<IEntityProperty> properties,
+            ExperimentIdentifier experimentIdentifierOrNull, SampleIdentifier sampleIdentifier,
+            String containerIdentifierOrNull, String[] modifiedParentCodesOrNull,
+            SampleBatchUpdateDetails details)
     {
         super(null, properties, experimentIdentifierOrNull, null, null, sampleIdentifier,
                 containerIdentifierOrNull, modifiedParentCodesOrNull);
+        this.defaultSpaceIdentifierOrNull = defaultSpaceIdentifierOrNull;
         this.oldSampleIdentifierOrNull = oldSampleIdentifier;
         this.details = details;
     }
@@ -56,4 +60,9 @@ public class SampleBatchUpdatesDTO extends SampleUpdatesDTO
         return details;
     }
 
+    public String tryGetDefaultSpaceIdentifier()
+    {
+        return defaultSpaceIdentifierOrNull;
+    }
+
 }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/server/GenericServer.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/server/GenericServer.java
index 273a92dad1d3dc6ceafa520a21170b85b221633c..7d62578ab4c95303655e993d73b9bcd80bd5e59d 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/server/GenericServer.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/server/GenericServer.java
@@ -283,7 +283,7 @@ public final class GenericServer extends AbstractServer<IGenericServer> implemen
         public void execute(List<NewSample> newSamples)
         {
             List<Sample> existingSamples = fetchExistingSamples(newSamples);
-            
+
             List<NewSample> samplesToUpdate =
                     SampleRegisterOrUpdateUtil.getSamplesToUpdate(newSamples, existingSamples);
             List<NewSample> samplesToRegister = new ArrayList<NewSample>(newSamples);
@@ -306,8 +306,8 @@ public final class GenericServer extends AbstractServer<IGenericServer> implemen
                     sampleLister.list(SampleRegisterOrUpdateUtil
                             .createListSamplesByCodeCriteria(codes));
             existingSamples.addAll(list);
-            
-            // for contained samples add container samples codes 
+
+            // for contained samples add container samples codes
             codes = SampleRegisterOrUpdateUtil.extractCodes(newSamples, true);
             ListOrSearchSampleCriteria criteria =
                     SampleRegisterOrUpdateUtil.createListSamplesByCodeCriteria(codes);
@@ -420,7 +420,8 @@ public final class GenericServer extends AbstractServer<IGenericServer> implemen
         for (NewSample updatedSample : updatedSamples)
         {
             final SampleIdentifier oldSampleIdentifier =
-                    SampleIdentifierFactory.parse(updatedSample.getIdentifier());
+                    SampleIdentifierFactory.parse(updatedSample.getIdentifier(),
+                            updatedSample.getSpaceIdentifier());
             final List<IEntityProperty> properties = Arrays.asList(updatedSample.getProperties());
             final ExperimentIdentifier experimentIdentifierOrNull;
             final SampleIdentifier newSampleIdentifier;
@@ -429,7 +430,7 @@ public final class GenericServer extends AbstractServer<IGenericServer> implemen
                 // experiment is provided - new sample identifier takes experiment space
                 experimentIdentifierOrNull =
                         new ExperimentIdentifierFactory(updatedSample.getExperimentIdentifier())
-                                .createIdentifier();
+                                .createIdentifier(updatedSample.getSpaceIdentifier());
                 newSampleIdentifier =
                         new SampleIdentifier(new GroupIdentifier(
                                 experimentIdentifierOrNull.getDatabaseInstanceCode(),
@@ -446,9 +447,10 @@ public final class GenericServer extends AbstractServer<IGenericServer> implemen
             final SampleBatchUpdateDetails batchUpdateDetails =
                     createBatchUpdateDetails(updatedSample);
 
-            samples.add(new SampleBatchUpdatesDTO(oldSampleIdentifier, properties,
-                    experimentIdentifierOrNull, newSampleIdentifier, containerIdentifierOrNull,
-                    parentsOrNull, batchUpdateDetails));
+            samples.add(new SampleBatchUpdatesDTO(updatedSample.getSpaceIdentifier(),
+                    oldSampleIdentifier, properties, experimentIdentifierOrNull,
+                    newSampleIdentifier, containerIdentifierOrNull, parentsOrNull,
+                    batchUpdateDetails));
         }
         return samples;
     }