diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/Dict.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/Dict.java
index 300965e156bd5979c71f3373a68574d9f3a3ade0..334edcd09d001e744875d27082228129afa76f98 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/Dict.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/Dict.java
@@ -419,6 +419,8 @@ public abstract class Dict
 
     public static final String DERIVED_SAMPLES_HEADING = "derived_samples_heading";
 
+    public static final String PARENT_SAMPLES_HEADING = "parent_samples_heading";
+
     public static final String DERIVED_SAMPLE = "derived_sample";
 
     public static final String EXTERNAL_DATA_HEADING = "external_data_heading";
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/framework/DisplayTypeIDGenerator.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/framework/DisplayTypeIDGenerator.java
index 72fd93fac9bc644d4da385686a97d60437ea7c9c..62160308b22dfd6e6ec41432e56ad387ba814136 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/framework/DisplayTypeIDGenerator.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/framework/DisplayTypeIDGenerator.java
@@ -77,6 +77,8 @@ public enum DisplayTypeIDGenerator implements IDisplayTypeIDGenerator
 
     DERIVED_SAMPLES_SECTION("derived-samples-section"),
 
+    PARENT_SAMPLES_SECTION("parent-samples-section"),
+
     DATA_SET_SECTION("data-set-section"),
 
     DATA_SET_PARENTS_SECTION("data-set-parents-section"),
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/sample/SampleBrowserGrid.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/sample/SampleBrowserGrid.java
index d88d29e1d9624a1f27e6cf4290bf8d59fe20a4c4..a1789e6d6bf614556c00bfed9915c9db872a5c73 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/sample/SampleBrowserGrid.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/sample/SampleBrowserGrid.java
@@ -151,14 +151,7 @@ public class SampleBrowserGrid extends
     {
         final ListSampleDisplayCriteria criteria =
                 ListSampleDisplayCriteria.createForContainer(containerSampleId);
-        final String entityTypeCode = sampleType.getCode();
-
-        final SampleBrowserGrid browserGrid =
-                createGridAsComponent(viewContext, browserId, criteria, entityTypeCode,
-                        DisplayTypeIDGenerator.SAMPLE_DETAILS_GRID);
-        browserGrid.updateCriteriaProviderAndRefresh();
-        browserGrid.extendBottomToolbar();
-        return browserGrid.asDisposableWithoutToolbar();
+        return createGridForRelatedSamples(viewContext, criteria, browserId, sampleType);
     }
 
     public static IDisposableComponent createGridForDerivedSamples(
@@ -167,8 +160,24 @@ public class SampleBrowserGrid extends
     {
         final ListSampleDisplayCriteria criteria =
                 ListSampleDisplayCriteria.createForParent(parentSampleId);
-        final String entityTypeCode = sampleType.getCode();
+        return createGridForRelatedSamples(viewContext, criteria, browserId, sampleType);
+    }
 
+    public static IDisposableComponent createGridForParentSamples(
+            final IViewContext<ICommonClientServiceAsync> viewContext, final TechId childSampleId,
+            final String browserId, final SampleType sampleType)
+    {
+        final ListSampleDisplayCriteria criteria =
+                ListSampleDisplayCriteria.createForChild(childSampleId);
+        return createGridForRelatedSamples(viewContext, criteria, browserId, sampleType);
+    }
+
+    private static IDisposableComponent createGridForRelatedSamples(
+            final IViewContext<ICommonClientServiceAsync> viewContext,
+            final ListSampleDisplayCriteria criteria, final String browserId,
+            final SampleType sampleType)
+    {
+        final String entityTypeCode = sampleType.getCode();
         final SampleBrowserGrid browserGrid =
                 createGridAsComponent(viewContext, browserId, criteria, entityTypeCode,
                         DisplayTypeIDGenerator.SAMPLE_DETAILS_GRID);
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/dto/ListSampleDisplayCriteria.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/dto/ListSampleDisplayCriteria.java
index c592d169933cf4b0fce5a38877e79f93058abca4..849cb3b9485266cc56fb922609f17d25ab634e0f 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/dto/ListSampleDisplayCriteria.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/dto/ListSampleDisplayCriteria.java
@@ -46,6 +46,11 @@ public class ListSampleDisplayCriteria extends DefaultResultSetConfig<String, Sa
         return new ListSampleDisplayCriteria(ListSampleCriteria.createForParent(parentSampleId));
     }
 
+    public static ListSampleDisplayCriteria createForChild(final TechId childSampleId)
+    {
+        return new ListSampleDisplayCriteria(ListSampleCriteria.createForChild(childSampleId));
+    }
+
     public static ListSampleDisplayCriteria createForExperiment(final TechId experimentId)
     {
         return new ListSampleDisplayCriteria(ListSampleCriteria.createForExperiment(experimentId));
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/public/generic-dictionary.js b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/public/generic-dictionary.js
index 1aaf86fda5bd7cfbd4937f132322e037b8848f85..69513aabbd05939b20573382629b1a94db7c1cc7 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/public/generic-dictionary.js
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/public/generic-dictionary.js
@@ -14,6 +14,7 @@ var generic = {
   sample_properties_heading: "Sample Properties",
   part_of_heading: "Components",
   derived_samples_heading: "Derived Samples",
+  parent_samples_heading: "Parent Samples",
   derived_sample: "Derived Sample",
   external_data_heading: "Data Sets",
   show_only_directly_connected: "directly connected",
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/CommonServerLogger.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/CommonServerLogger.java
index 8bc6b3b66f5672cad90c24cd7e7d5e5a466c4ea5..f4c4e9f313d376d127c03202309c9525b7372e81 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/CommonServerLogger.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/CommonServerLogger.java
@@ -197,22 +197,25 @@ final class CommonServerLogger extends AbstractServerLogger implements ICommonSe
         if (criteria.isIncludeSpace())
         {
             logAccess(sessionToken, "list_samples",
-                    "TYPE(%s) OWNERS(space=%s) CONTAINER(%s) PARENT(%s) EXPERIMENT(%s)", criteria
-                            .getSampleType(), criteria.getSpaceCode(), criteria
+                    "TYPE(%s) OWNERS(space=%s) CONTAINER(%s) PARENT(%s) CHILD(%s) EXPERIMENT(%s)",
+                    criteria.getSampleType(), criteria.getSpaceCode(), criteria
                             .getContainerSampleId(), criteria.getParentSampleId(), criteria
-                            .getExperimentId());
+                            .getChildSampleId(), criteria.getExperimentId());
         } else if (criteria.isIncludeInstance())
         {
-            logAccess(sessionToken, "list_samples",
-                    "TYPE(%s) OWNERS(instance=%s) CONTAINER(%s) PARENT(%s) EXPERIMENT(%s)",
+            logAccess(
+                    sessionToken,
+                    "list_samples",
+                    "TYPE(%s) OWNERS(instance=%s) CONTAINER(%s) PARENT(%s) CHILD(%s) EXPERIMENT(%s)",
                     criteria.getSampleType(), criteria.getSampleType().getDatabaseInstance(),
                     criteria.getContainerSampleId(), criteria.getParentSampleId(), criteria
-                            .getExperimentId());
+                            .getChildSampleId(), criteria.getExperimentId());
         } else
         {
             logAccess(sessionToken, "list_samples",
-                    "TYPE(%s) CONTAINER(%s) PARENT(%s) EXPERIMENT(%s)", criteria.getSampleType(),
-                    criteria.getContainerSampleId(), criteria.getParentSampleId(), criteria
+                    "TYPE(%s) CONTAINER(%s) PARENT(%s) CHILD(%s) EXPERIMENT(%s)", criteria
+                            .getSampleType(), criteria.getContainerSampleId(), criteria
+                            .getParentSampleId(), criteria.getChildSampleId(), criteria
                             .getExperimentId());
         }
         return null;
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/samplelister/ISampleListingQuery.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/samplelister/ISampleListingQuery.java
index 6ec477f15a5c35753631cf40d864df84f6baa1e6..1f1f5afcfdba16697e35becee0ea95da37a9f801 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/samplelister/ISampleListingQuery.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/samplelister/ISampleListingQuery.java
@@ -213,7 +213,7 @@ public interface ISampleListingQuery extends TransactionQuery, IPropertyListingQ
     public DataIterator<SampleRecord> getSamplesForContainer(long sampleContainerId);
 
     //
-    // Samples for parent
+    // Samples for parent/child
     //
 
     /**
@@ -225,6 +225,15 @@ public interface ISampleListingQuery extends TransactionQuery, IPropertyListingQ
     public DataIterator<SampleRecord> getChildrenSamplesForParent(long relationshipId,
             long sampleParentId);
 
+    /**
+     * Returns the parent samples for the given ids of relationship and child sample.
+     */
+    @Select(sql = SELECT_FROM_SAMPLES_S + " WHERE s.id IN "
+            + "     (SELECT sample_id_parent FROM sample_relationships "
+            + "      WHERE relationship_id=?{1} AND sample_id_child=?{2})", fetchSize = FETCH_SIZE)
+    public DataIterator<SampleRecord> getParentSamplesForChild(long relationshipId,
+            long sampleChildId);
+
     //
     // New samples of type
     //
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 e9a1968868e6adc270d4339394a8df1a074987ee..83dc9a079d0475dae293a0c929d5ff0b5771ede8 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
@@ -230,6 +230,7 @@ final class SampleListingWorker
         retrievePrimaryBasicSamples(tryGetIteratorForExperimentSamples());
         retrievePrimaryBasicSamples(tryGetIteratorForContainedSamples());
         retrievePrimaryBasicSamples(tryGetIteratorForParentSamples());
+        retrievePrimaryBasicSamples(tryGetIteratorForChildSamples());
         retrievePrimaryBasicSamples(tryGetIteratorForNewTrackedSamples());
         if (operationLog.isDebugEnabled())
         {
@@ -459,7 +460,7 @@ final class SampleListingWorker
         return query.getSamplesForContainer(containerTechId.getId());
     }
 
-    private Iterable<SampleRecord> tryGetIteratorForParentSamples()
+    private Iterable<SampleRecord> tryGetIteratorForChildSamples()
     {
         final TechId parentTechId = criteria.getParentSampleId();
         if (parentTechId == null)
@@ -469,6 +470,16 @@ final class SampleListingWorker
         return query.getChildrenSamplesForParent(parentRelationhipTypeId, parentTechId.getId());
     }
 
+    private Iterable<SampleRecord> tryGetIteratorForParentSamples()
+    {
+        final TechId childTechId = criteria.getChildSampleId();
+        if (childTechId == null)
+        {
+            return null;
+        }
+        return query.getParentSamplesForChild(parentRelationhipTypeId, childTechId.getId());
+    }
+
     private Iterable<SampleRecord> tryGetIteratorForSharedSamples()
     {
         if (criteria.isIncludeInstance() == false)
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/authorization/predicate/ListSampleCriteriaPredicate.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/authorization/predicate/ListSampleCriteriaPredicate.java
index f2b4b4f298faf8e5f1066713c67dfee60f852c3c..e3a56fe9d0c9543ed9cfbaf4f7175b33434024ae 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/authorization/predicate/ListSampleCriteriaPredicate.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/authorization/predicate/ListSampleCriteriaPredicate.java
@@ -57,28 +57,30 @@ public class ListSampleCriteriaPredicate extends AbstractGroupPredicate<ListSamp
     }
 
     @Override
-    protected
-    Status doEvaluation(PersonPE person, List<RoleWithIdentifier> allowedRoles,
+    protected Status doEvaluation(PersonPE person, List<RoleWithIdentifier> allowedRoles,
             ListSampleCriteria value)
     {
         Status status = Status.OK;
-        if (value.getExperimentId() != null && status == Status.OK)
+        if (value.getExperimentId() != null)
         {
             status =
                     experimentTechIdPredicate.doEvaluation(person, allowedRoles, value
                             .getExperimentId());
-        }
-        if (value.getContainerSampleId() != null && status == Status.OK)
+        } else if (value.getContainerSampleId() != null)
         {
             status =
                     sampleTechIdPredicate.doEvaluation(person, allowedRoles, value
                             .getContainerSampleId());
-        }
-        if (value.getParentSampleId() != null && status == Status.OK)
+        } else if (value.getParentSampleId() != null)
         {
             status =
                     sampleTechIdPredicate.doEvaluation(person, allowedRoles, value
                             .getParentSampleId());
+        } else if (value.getChildSampleId() != null)
+        {
+            status =
+                    sampleTechIdPredicate.doEvaluation(person, allowedRoles, value
+                            .getChildSampleId());
         }
         if (value.isIncludeSpace() && status == Status.OK)
         {
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/ListOrSearchSampleCriteria.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/ListOrSearchSampleCriteria.java
index 6a6befb462490b2c80a7d54f9f3eb697349d4f9f..76e20600337e7a6d350e05cd4d41b568750d3a85 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/ListOrSearchSampleCriteria.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/ListOrSearchSampleCriteria.java
@@ -44,7 +44,7 @@ public final class ListOrSearchSampleCriteria extends ListSampleCriteria
     private Collection<Long> sampleIds;
 
     private final String[] sampleCodes;
-    
+
     private final String[] permIds;
 
     private boolean enrichDependentSamplesWithProperties = false;
@@ -86,7 +86,7 @@ public final class ListOrSearchSampleCriteria extends ListSampleCriteria
         {
             this.sampleCodes = null;
             this.permIds = codes;
-            
+
         } else
         {
             this.sampleCodes = codes;
@@ -159,6 +159,12 @@ public final class ListOrSearchSampleCriteria extends ListSampleCriteria
         return listCriteria == null ? null : listCriteria.getParentSampleId();
     }
 
+    @Override
+    public TechId getChildSampleId()
+    {
+        return listCriteria == null ? null : listCriteria.getChildSampleId();
+    }
+
     @Override
     public TechId getExperimentId()
     {
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/ListSampleCriteria.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/ListSampleCriteria.java
index c5f3982d570f78593f7f97341d1acebe1124bed3..a40364ce7ba69571c2cc5f2ec921286462bff144 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/ListSampleCriteria.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/ListSampleCriteria.java
@@ -29,6 +29,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.TechId;
  * <li>samples of particular type in a specified space and/or shared
  * <li>samples belonging to a container sample
  * <li>samples derived from a parent sample
+ * <li>samples connected with a child sample
  * <li>samples from the experiment
  * </ol>
  * 
@@ -58,6 +59,9 @@ public class ListSampleCriteria implements IsSerializable, Serializable
     private TechId parentSampleId;
 
     // --------- filter 4 fields
+    private TechId childSampleId;
+
+    // --------- filter 5 fields
     private TechId experimentId;
 
     // ----
@@ -76,6 +80,13 @@ public class ListSampleCriteria implements IsSerializable, Serializable
         return criteria;
     }
 
+    public static ListSampleCriteria createForChild(final TechId childSampleId)
+    {
+        final ListSampleCriteria criteria = new ListSampleCriteria();
+        criteria.setChildId(childSampleId);
+        return criteria;
+    }
+
     public static ListSampleCriteria createForExperiment(final TechId experimentId)
     {
         final ListSampleCriteria criteria = new ListSampleCriteria();
@@ -103,6 +114,16 @@ public class ListSampleCriteria implements IsSerializable, Serializable
         this.parentSampleId = parentSampleId;
     }
 
+    public TechId getChildSampleId()
+    {
+        return childSampleId;
+    }
+
+    private final void setChildId(final TechId childSampleId)
+    {
+        this.childSampleId = childSampleId;
+    }
+
     public SampleType getSampleType()
     {
         return sampleType;
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/DerivedSamplesSection.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/DerivedSamplesSection.java
index bc589b4ff0283cca194706e8d712116314574e5d..dec4db41f9afe6627f351a1e05d54dba0a029f2c 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/DerivedSamplesSection.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/DerivedSamplesSection.java
@@ -46,9 +46,9 @@ public class DerivedSamplesSection extends DisposableSectionPanel
     }
 
     // @Private
-    static String createGridId(TechId containerId)
+    static String createGridId(TechId parentId)
     {
-        return SampleBrowserGrid.createGridId(createBrowserId(containerId));
+        return SampleBrowserGrid.createGridId(createBrowserId(parentId));
     }
 
     private static String createBrowserId(TechId parentId)
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/GenericSampleViewer.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/GenericSampleViewer.java
index 118883e09af1a2033a8cf293c356e1b0eee2ff4d..dac17af93c1b30af6be0a2cc0a0696e5cd4da32e 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/GenericSampleViewer.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/GenericSampleViewer.java
@@ -110,6 +110,8 @@ abstract public class GenericSampleViewer extends AbstractViewer<Sample> impleme
 
     private DisposableSectionPanel derivedSamplesSection;
 
+    private DisposableSectionPanel parentSamplesSection;
+
     private DisposableSectionPanel dataSetBrowser;
 
     private PropertyGrid propertyGrid;
@@ -196,7 +198,7 @@ abstract public class GenericSampleViewer extends AbstractViewer<Sample> impleme
         {
             container.addPanel(panel);
         }
-        // Container samples
+        // Contained samples
         containerSamplesSection = new ContainerSamplesSection(viewContext, generator);
         containerSamplesSection.setDisplayID(DisplayTypeIDGenerator.CONTAINER_SAMPLES_SECTION,
                 displayIdSuffix);
@@ -206,6 +208,11 @@ abstract public class GenericSampleViewer extends AbstractViewer<Sample> impleme
         derivedSamplesSection.setDisplayID(DisplayTypeIDGenerator.DERIVED_SAMPLES_SECTION,
                 displayIdSuffix);
         container.addPanel(derivedSamplesSection);
+        // Parent samples
+        parentSamplesSection = new ParentSamplesSection(viewContext, generator);
+        parentSamplesSection.setDisplayID(DisplayTypeIDGenerator.PARENT_SAMPLES_SECTION,
+                displayIdSuffix);
+        container.addPanel(parentSamplesSection);
         // Data Sets
         CheckBox showOnlyDirectlyConnectedCheckBox = createShowOnlyDirectlyConnectedCheckBox();
         dataSetBrowser =
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/ParentSamplesSection.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/ParentSamplesSection.java
new file mode 100644
index 0000000000000000000000000000000000000000..503ce7c013ba9346d8c786567a14cdb40c7e5c8d
--- /dev/null
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/ParentSamplesSection.java
@@ -0,0 +1,67 @@
+/*
+ * Copyright 2008 ETH Zuerich, CISD
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package ch.systemsx.cisd.openbis.plugin.generic.client.web.client.application.sample;
+
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.Dict;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.DisposableSectionPanel;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.GenericConstants;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.IViewContext;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.SingleSectionPanel;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.IDisposableComponent;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.sample.SampleBrowserGrid;
+import ch.systemsx.cisd.openbis.generic.shared.basic.TechId;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Sample;
+
+/**
+ * {@link SingleSectionPanel} containing samples with specified child sample.
+ * 
+ * @author Piotr Buczek
+ */
+public class ParentSamplesSection extends DisposableSectionPanel
+{
+    private static final String PREFIX = "parent-samples-section_";
+
+    public static final String ID_PREFIX = GenericConstants.ID_PREFIX + PREFIX;
+
+    private final Sample child;
+
+    public ParentSamplesSection(final IViewContext<?> viewContext, final Sample child)
+    {
+        super(viewContext.getMessage(Dict.PARENT_SAMPLES_HEADING), viewContext);
+        this.child = child;
+    }
+
+    // @Private
+    static String createGridId(TechId childId)
+    {
+        return SampleBrowserGrid.createGridId(createBrowserId(childId));
+    }
+
+    private static String createBrowserId(TechId childId)
+    {
+        return ID_PREFIX + childId + "-browser";
+    }
+
+    @Override
+    protected IDisposableComponent createDisposableContent()
+    {
+        TechId childId = TechId.create(child);
+        return SampleBrowserGrid.createGridForParentSamples(viewContext.getCommonViewContext(),
+                childId, createBrowserId(childId), child.getSampleType());
+    }
+
+}