diff --git a/rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/etl/DatasetMappingResolver.java b/rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/etl/DatasetMappingResolver.java
index 0caea4478687016dca0e9d8cb69870df84676119..c542b5e385e78240bb28a9e39920df58d65b8910 100644
--- a/rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/etl/DatasetMappingResolver.java
+++ b/rtd_yeastx/source/java/ch/systemsx/cisd/yeastx/etl/DatasetMappingResolver.java
@@ -21,6 +21,7 @@ import java.util.Properties;
 
 import org.apache.commons.io.FilenameUtils;
 
+import ch.systemsx.cisd.bds.StringUtils;
 import ch.systemsx.cisd.common.collections.CollectionUtils;
 import ch.systemsx.cisd.common.exceptions.EnvironmentFailureException;
 import ch.systemsx.cisd.common.exceptions.UserFailureException;
@@ -214,22 +215,29 @@ class DatasetMappingResolver
         {
             return false;
         }
-        String sampleCode = tryFigureSampleCode(mapping, log);
         ExperimentIdentifier experimentIdentifier = tryFigureExperimentIdentifier(mapping);
+        if (mapping.getSampleCodeOrLabel() == null && experimentIdentifier == null)
+        {
+            log.datasetMappingError(mapping, "neither sample nor experiment has been specified.");
+            return false;
+        }
+        String sampleCode = tryFigureSampleCode(mapping, log);
         if (sampleCode == null)
         {
-            // sample can be skipped only if experiment identifier is supplied
-            if (experimentIdentifier == null)
+            if (mapping.getSampleCodeOrLabel() != null)
             {
-                log.datasetMappingError(mapping,
-                        "neither sample nor experiment has been specified.");
-                return false;
-            } else
-            {
-                return experimentExists(mapping, log, experimentIdentifier);
+                return false; // error has been already reported
             }
+            assert experimentIdentifier != null : "experimentIdentifier should be not null here";
+            return experimentExists(mapping, log, experimentIdentifier);
         } else
         {
+            if (StringUtils.isBlank(mapping.getParentDataSetCodes()) == false)
+            {
+                log.datasetMappingError(mapping,
+                        "when dataset is connected to a sample it cannot have parent datasets.");
+                return false;
+            }
             return sampleExistsAndBelongsToExperiment(mapping, log, sampleCode);
         }
     }