diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/AbstractSampleBusinessObject.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/AbstractSampleBusinessObject.java
index 276320ff2bfd5001af0ca3404c963ef2d535466d..4a0dd2305bac1c5b83c7ce0d308a60ac14af0ec5 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/AbstractSampleBusinessObject.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/AbstractSampleBusinessObject.java
@@ -40,6 +40,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.BasicConstant;
 import ch.systemsx.cisd.openbis.generic.shared.basic.TechId;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.IEntityProperty;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.NewSample;
+import ch.systemsx.cisd.openbis.generic.shared.dto.DataPE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.EntityTypePE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.EntityTypePropertyTypePE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.ExperimentPE;
@@ -457,14 +458,17 @@ abstract class AbstractSampleBusinessObject extends AbstractSampleIdentifierBusi
 
     protected void checkExperimentBusinessRules(SamplePE sample)
     {
-//        checkSampleWithoutDatasets(sample);
+        ExperimentPE experiment = sample.getExperiment();
+        if (experiment == null)
+        {
+            checkSampleWithoutDatasets(sample);
+        }
         if (hasDatasets(sample) && sample.getSpace() == null)
         {
             throw UserFailureException.fromTemplate("Cannot detach the sample '%s' from the space "
                     + "because there are already datasets attached to the sample.",
                     sample.getIdentifier());
         }
-        ExperimentPE experiment = sample.getExperiment();
         if (experiment != null
                 && (sample.getSpace() == null || experiment.getProject().getSpace()
                         .equals(sample.getSpace()) == false))
@@ -558,14 +562,14 @@ abstract class AbstractSampleBusinessObject extends AbstractSampleIdentifierBusi
             return;
         }
         ensureExperimentIsValid(identifierOrNull, newExperiment, sample);
-        ensureSampleAttachableToExperiment(sample);
+        ensureSampleAttachableToExperiment(sample, newExperiment);
 
         assignSampleAndRelatedDataSetsToExperiment(sample, newExperiment);
     }
 
-    private void ensureSampleAttachableToExperiment(SamplePE sample)
+    private void ensureSampleAttachableToExperiment(SamplePE sample, ExperimentPE newExperiment)
     {
-        if (sample.getSpace() == null)
+        if (sample.getSpace() == null && newExperiment != null)
         {
             throw UserFailureException.fromTemplate(
                     "It is not allowed to connect a shared sample '%s' to the experiment.",
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/util/SampleUtils.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/util/SampleUtils.java
index 217030893671bb9d546ed30b32b557c9674bd1ec..30521c76f70d5c31d095540e1e932536a1fee7c8 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/util/SampleUtils.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/util/SampleUtils.java
@@ -44,7 +44,7 @@ public class SampleUtils
     {
         return UserFailureException.fromTemplate(
                 "The dataset '%s' cannot be connected to the sample '%s' because %s.",
-                data.getCode(), sample.getIdentifier(), reason);
+                data.getCode(), sample == null ? "?" : sample.getIdentifier(), reason);
     }
 
 }