diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/SamplePE.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/SamplePE.java
index 001924f26f59a7c6ad3fa856b2c0c216bc6198f3..4936235a46c19907e3ca6df00a27e8c0a464783b 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/SamplePE.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/SamplePE.java
@@ -385,12 +385,14 @@ public class SamplePE extends AttachmentHolderPE implements IIdAndCodeHolder, Co
     @Transient
     public SamplePE getTop()
     {
-        SamplePE parentPE = getGeneratedFrom();
-        if (parentPE != null)
+        // traverse through parent relationship graph and stops on first sample that doesn't
+        // have parents or has more than one parent
+        final List<SamplePE> parents = getParents();
+        if (parents.size() == 1)
         {
-            return parentPE.getTop() == null ? parentPE : parentPE.getTop();
+            return parents.get(0).getTop();
         }
-        return null;
+        return this;
     }
 
     @Transient