diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/samplelister/SampleListingWorker.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/samplelister/SampleListingWorker.java
index 83dc9a079d0475dae293a0c929d5ff0b5771ede8..5b1ae06f50ad209933de306f4ba1dec80be4f6ab 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/samplelister/SampleListingWorker.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/samplelister/SampleListingWorker.java
@@ -142,8 +142,8 @@ final class SampleListingWorker
 
     private final LongSet idsOfSamplesAwaitingParentResolution = new LongOpenHashSet();
 
-    private final Long2ObjectMap<RelatedSampleRecord> samplesAwaitingParentResolution =
-            new Long2ObjectOpenHashMap<RelatedSampleRecord>();
+    private final List<RelatedSampleRecord> samplesAwaitingParentResolution =
+            new ArrayList<RelatedSampleRecord>();
 
     private final Long2ObjectMap<RelatedSampleRecord> samplesAwaitingContainerResolution =
             new Long2ObjectOpenHashMap<RelatedSampleRecord>();
@@ -695,18 +695,16 @@ final class SampleListingWorker
                         idsOfSamplesAwaitingParentResolution);
         for (SampleRelationRecord relation : parentRelations)
         {
-            samplesAwaitingParentResolution.put(relation.sample_id_child, new RelatedSampleRecord(
-                    sampleMap.get(relation.sample_id_child), relation.sample_id_parent));
+            samplesAwaitingParentResolution.add(new RelatedSampleRecord(sampleMap
+                    .get(relation.sample_id_child), relation.sample_id_parent));
             addRelatedParentSampleToRequested(relation.sample_id_parent);
         }
     }
 
     private void resolveParents()
     {
-        for (Long2ObjectMap.Entry<RelatedSampleRecord> e : samplesAwaitingParentResolution
-                .long2ObjectEntrySet())
+        for (RelatedSampleRecord record : samplesAwaitingParentResolution)
         {
-            final RelatedSampleRecord record = e.getValue();
             final Sample parent = sampleMap.get(record.relatedSampleId);
             record.sample.addParent(parent);
         }
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/samplelister/SampleListingWorkerTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/samplelister/SampleListingWorkerTest.java
index 3421d474e7d7da70266ed2254455ddaae0380b42..2bc20b5d9caddac71112b2009ae3331db486b595 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/samplelister/SampleListingWorkerTest.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/business/bo/samplelister/SampleListingWorkerTest.java
@@ -208,20 +208,43 @@ public class SampleListingWorkerTest extends AbstractDAOTest
     {
         if (s.getId().equals(CHILD_WITH_2_PARENTS_ID))
         {
-            assertNotNull("ID:" + s.getId(), s.getGeneratedFrom());
-            assertEquals("ID:" + s.getId(), PARENT2_ID, s.getGeneratedFrom().getId().longValue());
-            // FIXME
-            // test s.getGeneratedFrom throws exception
-            // assertEquals(2, s.getParents().size());
-            // for (Sample parent : s.getParents())
-            // {
-            // assertTrue("ID:" + s.getId(), parent.getId().equals(PARENT1_ID)
-            // || parent.getId().equals(PARENT2_ID));
-            // }
+            checkParents(s, Arrays.asList(PARENT1_ID, PARENT2_ID));
+            checkGetGeneratedFromFail(s);
         } else
         {
-            assertNotNull("ID:" + s.getId(), s.getGeneratedFrom());
-            assertEquals("ID:" + s.getId(), PARENT1_ID, s.getGeneratedFrom().getId().longValue());
+            checkGeneratedFrom(s, PARENT1_ID);
         }
     }
+
+    private void checkGetGeneratedFromFail(Sample s)
+    {
+        boolean fail = false;
+        try
+        {
+            s.getGeneratedFrom();
+        } catch (IllegalStateException e)
+        {
+            // expected
+        }
+        if (fail)
+        {
+            fail("Expected IllegalStateException");
+        }
+    }
+
+    private void checkParents(Sample s, List<Long> expectedParentIds)
+    {
+        assertEquals(expectedParentIds.size(), s.getParents().size());
+        for (Sample parent : s.getParents())
+        {
+            expectedParentIds.contains(parent.getId());
+            assertTrue("ID:" + s.getId(), expectedParentIds.contains(parent.getId()));
+        }
+    }
+
+    private void checkGeneratedFrom(Sample s, Long expectedParentId)
+    {
+        assertNotNull("ID:" + s.getId(), s.getGeneratedFrom());
+        assertEquals("ID:" + s.getId(), expectedParentId, s.getGeneratedFrom().getId());
+    }
 }