diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/renderer/LinkRenderer.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/renderer/LinkRenderer.java
index 87a8793f6b2cefa57f16e3d8db81dbacdf36dbbf..5cf5d7a8776826c330be052174ce5f92c9fc3c98 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/renderer/LinkRenderer.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/renderer/LinkRenderer.java
@@ -53,9 +53,11 @@ public class LinkRenderer
 
     private static final String LINK_STYLE = "link-style";
 
-    @Deprecated 
-    public static GridCellRenderer<BaseEntityModel<?>> createLinkRenderer(
-            final boolean renderOriginalValueForEmptyToken)
+    /**
+     * @deprecated doesn't support invalidation; use {@link #createLinkRenderer(boolean, int)}
+     */
+    @Deprecated
+    public static GridCellRenderer<BaseEntityModel<?>> createLinkRenderer()
     {
         return new GridCellRenderer<BaseEntityModel<?>>()
             {
@@ -70,9 +72,7 @@ public class LinkRenderer
                     {
                         String originalValue = model.get(property).toString();
                         String tokenOrNull = model.tryGetLink(property);
-                        if (tokenOrNull == null
-                                && (renderOriginalValueForEmptyToken || ClientStaticState
-                                        .isSimpleMode()))
+                        if (tokenOrNull == null && ClientStaticState.isSimpleMode())
                         {
                             return new MultilineHTML(originalValue).toString();
                         } else
@@ -147,11 +147,6 @@ public class LinkRenderer
             };
     }
 
-    public static GridCellRenderer<BaseEntityModel<?>> createLinkRenderer()
-    {
-        return createLinkRenderer(false);
-    }
-
     public static GridCellRenderer<BaseEntityModel<?>> createExternalLinkRenderer(
             final String overridenLinkTextOrNull)
     {
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/AbstractViewerWithVerticalSplit.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/AbstractViewerWithVerticalSplit.java
index e778665ee723c3ae2d899002d0e0c9cbee517333..8a689fd08a7fe14b53535a8ed20f034484c351d0 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/AbstractViewerWithVerticalSplit.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/AbstractViewerWithVerticalSplit.java
@@ -39,7 +39,7 @@ public abstract class AbstractViewerWithVerticalSplit<D extends IEntityInformati
 {
     private final static String LEFT_PANEL_PREFIX = "left_panel_";
 
-    private final static int INITIAL_LEFT_PANEL_SIZE = 300;
+    private final static int INITIAL_LEFT_PANEL_SIZE = 330;
 
     protected AbstractViewerWithVerticalSplit(IViewContext<?> viewContext, String id)
     {
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/TypedTableGrid.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/TypedTableGrid.java
index 8850177845a7d1f3290b9aea717932ef1c715a29..4020a976ef06469e3bc88ee0eb1d39ba0918c605 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/TypedTableGrid.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/TypedTableGrid.java
@@ -131,7 +131,7 @@ public abstract class TypedTableGrid<T extends ISerializable>
             if (value instanceof EntityTableCell)
             {
                 EntityTableCell entityTableCell = (EntityTableCell) value;
-                if (entityTableCell.isMissing())
+                if (entityTableCell.isMissing() || entityTableCell.isFake())
                 {
                     return null;
                 }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/experiment/ExperimentBrowserGrid.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/experiment/ExperimentBrowserGrid.java
index 57c2aac5855836bd7b1023ce5d09db6334359ba3..89da2303b88ab5cb085d59fd11ca0d3666280f61 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/experiment/ExperimentBrowserGrid.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/experiment/ExperimentBrowserGrid.java
@@ -25,7 +25,6 @@ import com.extjs.gxt.ui.client.event.SelectionListener;
 import com.extjs.gxt.ui.client.widget.Dialog;
 import com.extjs.gxt.ui.client.widget.LayoutContainer;
 import com.extjs.gxt.ui.client.widget.button.Button;
-import com.extjs.gxt.ui.client.widget.grid.GridCellRenderer;
 import com.google.gwt.user.client.rpc.AsyncCallback;
 
 import ch.systemsx.cisd.openbis.generic.client.web.client.ICommonClientServiceAsync;
@@ -37,7 +36,6 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.IViewConte
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.ComponentProvider;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.DispatcherHelper;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.DisplayTypeIDGenerator;
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.model.BaseEntityModel;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.renderer.LinkRenderer;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.renderer.PersonRenderer;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.DisplayedAndSelectedEntities;
@@ -317,9 +315,6 @@ public class ExperimentBrowserGrid extends AbstractEntityGrid<Experiment>
     {
         ColumnDefsAndConfigs<TableModelRowWithObject<Experiment>> schema =
                 super.createColumnsDefinition();
-        GridCellRenderer<BaseEntityModel<?>> linkCellRenderer = createInternalLinkCellRenderer();
-        schema.setGridCellRendererFor(ExperimentBrowserGridColumnIDs.EXPERIMENT_IDENTIFIER,
-                linkCellRenderer);
         schema.setGridCellRendererFor(ExperimentBrowserGridColumnIDs.REGISTRATOR,
                 PersonRenderer.REGISTRATOR_RENDERER);
         schema.setGridCellRendererFor(ExperimentBrowserGridColumnIDs.SHOW_DETAILS_LINK,
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/experiment/ExperimentListDeletionConfirmationDialog.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/experiment/ExperimentListDeletionConfirmationDialog.java
index 2b8812ea398e37aff0f77ac4b3efb02676cf7d2e..f8ac9e658d3b703e821551ee6acb8ff3c9ed95b7 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/experiment/ExperimentListDeletionConfirmationDialog.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/experiment/ExperimentListDeletionConfirmationDialog.java
@@ -29,6 +29,7 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.experim
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.widget.AbstractDataListDeletionConfirmationDialog;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.WidgetUtils;
 import ch.systemsx.cisd.openbis.generic.client.web.client.dto.DisplayedOrSelectedIdHolderCriteria;
+import ch.systemsx.cisd.openbis.generic.shared.basic.InvalidationUtils;
 import ch.systemsx.cisd.openbis.generic.shared.basic.TechId;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DeletionType;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityKind;
@@ -64,7 +65,10 @@ public final class ExperimentListDeletionConfirmationDialog extends
             AbstractAsyncCallback<Void> invalidationCallback, Experiment experiment)
     {
         super(viewContext, Collections.singletonList(experiment), deletionCallback);
-        this.withInvalidation(invalidationCallback);
+        if (InvalidationUtils.isInvalid(experiment) == false)
+        {
+            this.withInvalidation(invalidationCallback);
+        }
         this.viewContext = viewContext;
         this.singleDataOrNull = experiment;
         this.selectedAndDisplayedItemsOrNull = null;
@@ -73,8 +77,7 @@ public final class ExperimentListDeletionConfirmationDialog extends
     @Override
     protected void executeDeletion(AsyncCallback<Void> deletionCallback)
     {
-        DeletionType deletionType =
-                isPermanentDeletion() ? DeletionType.PERMANENT : DeletionType.INVALIDATION;
+        final DeletionType deletionType = getDeletionType();
         if (selectedAndDisplayedItemsOrNull != null)
         {
             final DisplayedOrSelectedIdHolderCriteria<TableModelRowWithObject<Experiment>> uploadCriteria =
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 fb52ef297adfcc7ffecdb35b037d96d57d8cfe76..05e71004143902c1acee494d9367673c6444c66e 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
@@ -324,7 +324,6 @@ public class SampleBrowserGrid extends AbstractEntityGrid<Sample>
         propertyTypesAndCriteriaProvider = criteriaProvider;
         // NOTE: links to sample, container and experiment are handled by EntityTableCell
         linkProject();
-        linkParent();
     }
 
     @Override
@@ -376,45 +375,6 @@ public class SampleBrowserGrid extends AbstractEntityGrid<Sample>
                     });
     }
 
-    private void linkParent()
-    {
-        registerListenerAndLinkGenerator(SampleGridColumnIDs.PARENTS,
-                new ICellListenerAndLinkGenerator<Sample>()
-                    {
-                        public void handle(TableModelRowWithObject<Sample> rowItem,
-                                boolean specialKeyPressed)
-                        {
-                            Sample parent = getParentOrNull(rowItem.getObjectOrNull());
-                            if (parent != null)
-                            {
-                                showEntityInformationHolderViewer(parent, false, specialKeyPressed);
-                            }
-                        }
-
-                        public String tryGetLink(Sample entity,
-                                ISerializableComparable comparableValue)
-                        {
-                            Sample parent = getParentOrNull(entity);
-                            return LinkExtractor.tryExtract(parent);
-                        }
-
-                        private Sample getParentOrNull(Sample entity)
-                        {
-                            if (entity.getParents().size() == 1)
-                            {
-                                return entity.getGeneratedFrom();
-                            }
-                            return null;
-                        }
-                    });
-    }
-
-    @Override
-    protected GridCellRenderer<BaseEntityModel<?>> createInternalLinkCellRenderer()
-    {
-        return LinkRenderer.createLinkRenderer(true);
-    }
-
     @Override
     protected String translateColumnIdToDictionaryKey(String columnID)
     {
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/sample/SampleListDeletionConfirmationDialog.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/sample/SampleListDeletionConfirmationDialog.java
index 2c7e4593d40f3fe129f69610d691bbb827b9895f..3b2aac533eb86a2d6b781e29335158b8edcf5896 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/sample/SampleListDeletionConfirmationDialog.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/sample/SampleListDeletionConfirmationDialog.java
@@ -31,6 +31,7 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.widget.
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.WidgetUtils;
 import ch.systemsx.cisd.openbis.generic.client.web.client.dto.DisplayedOrSelectedIdHolderCriteria;
 import ch.systemsx.cisd.openbis.generic.shared.basic.IIdHolder;
+import ch.systemsx.cisd.openbis.generic.shared.basic.InvalidationUtils;
 import ch.systemsx.cisd.openbis.generic.shared.basic.TechId;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DeletionType;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityKind;
@@ -64,7 +65,10 @@ public final class SampleListDeletionConfirmationDialog<T extends IIdHolder> ext
             AbstractAsyncCallback<Void> invalidationCallback, T sample)
     {
         super(viewContext, data, deletionCallback);
-        this.withInvalidation(invalidationCallback);
+        if (InvalidationUtils.isInvalid(sample) == false)
+        {
+            this.withInvalidation(invalidationCallback);
+        }
         this.viewContext = viewContext;
         this.singleDataOrNull = sample;
         this.selectedAndDisplayedItemsOrNull = null;
@@ -73,8 +77,7 @@ public final class SampleListDeletionConfirmationDialog<T extends IIdHolder> ext
     @Override
     protected void executeDeletion(AsyncCallback<Void> deletionCallback)
     {
-        DeletionType deletionType =
-                isPermanentDeletion() ? DeletionType.PERMANENT : DeletionType.INVALIDATION;
+        final DeletionType deletionType = getDeletionType();
         if (selectedAndDisplayedItemsOrNull != null)
         {
             final DisplayedOrSelectedIdHolderCriteria<T> uploadCriteria =
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/resultset/SampleProvider.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/resultset/SampleProvider.java
index ad4fa6589695d5e77de7501b34f696ab4f82e86d..a09bf9132eaebbc165f7eebd27c621510d712535 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/resultset/SampleProvider.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/resultset/SampleProvider.java
@@ -45,6 +45,8 @@ import ch.systemsx.cisd.openbis.generic.shared.ICommonServer;
 import ch.systemsx.cisd.openbis.generic.shared.basic.InvalidationUtils;
 import ch.systemsx.cisd.openbis.generic.shared.basic.SimpleYesNoRenderer;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DatabaseInstance;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityKind;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityTableCell;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Experiment;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Sample;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.SampleType;
@@ -118,7 +120,20 @@ public class SampleProvider extends AbstractCommonTableModelProvider<Sample>
             builder.column(PROJECT).addString(getProjectCode(sample));
             builder.column(PERM_ID).addString(sample.getPermId());
             builder.column(SHOW_DETAILS_LINK_COLUMN_NAME).addString(sample.getPermlink());
-            builder.column(PARENTS).addString(getParents(sample));
+            final Sample parentOrNull = tryGetParent(sample);
+            if (parentOrNull != null)
+            {
+                final Sample parent = parentOrNull;
+                builder.column(PARENTS).addEntityLink(parent, parent.getIdentifier());
+            } else
+            {
+                // WORKAROUND we have no way to create cells with multiple links.
+                // This is an ugly way not to display multiple parents as single link.
+                EntityTableCell fakeEntityTableCell =
+                        new EntityTableCell(EntityKind.SAMPLE, getParentsString(sample));
+                fakeEntityTableCell.setFake(true);
+                builder.column(PARENTS).addValue(fakeEntityTableCell);
+            }
             final Sample containerOrNull = sample.getContainer();
             if (containerOrNull != null)
             {
@@ -152,14 +167,10 @@ public class SampleProvider extends AbstractCommonTableModelProvider<Sample>
         return sampleTypMap;
     }
 
-    private String getParents(Sample sample)
+    private String getParentsString(Sample sample)
     {
         Set<Sample> parents = sample.getParents();
         int parentsSize = parents.size();
-        if (parentsSize == 1)
-        {
-            return sample.getGeneratedFrom().getIdentifier();
-        }
         StringBuilder builder = new StringBuilder();
         int counter = 0;
         for (Sample parent : parents)
@@ -175,6 +186,11 @@ public class SampleProvider extends AbstractCommonTableModelProvider<Sample>
         return builder.toString();
     }
 
+    private Sample tryGetParent(Sample sample)
+    {
+        return (sample.getParents().size() == 1) ? sample.getGeneratedFrom() : null;
+    }
+
     private String getProjectCode(Sample sample)
     {
         Experiment experiment = sample.getExperiment();
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 2b0ec87efd36d0c6befdd2a86fdd0a853ecc9262..5ea414f58b910f6ffe9c542860be88ef8811e3d6 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
@@ -576,6 +576,7 @@ final class SampleListingWorker extends AbstractLister
                 return null;
             }
         }
+        enrichWithInvalidation(sample, row); // this is cheap even for dependent samples
         // set properties needed for primary samples
         // (dependent samples too if they need to be enriched e.g. for entity tracking)
         if (primarySample || enrichDependentSamples)
@@ -586,12 +587,6 @@ final class SampleListingWorker extends AbstractLister
                     row.perm_id));
             sample.setRegistrationDate(row.registration_timestamp);
             sample.setModificationDate(row.modification_timestamp);
-            if (row.inva_id != null)
-            {
-                // NOTE: this just marks the sample as invalid without any details
-                final Invalidation invalidation = new Invalidation();
-                sample.setInvalidation(invalidation);
-            }
             sample.setRegistrator(getOrCreateRegistrator(row.pers_id_registerer));
             if (row.expe_id != null)
             {
@@ -621,6 +616,16 @@ final class SampleListingWorker extends AbstractLister
         return sample;
     }
 
+    // NOTE: this just marks the sample as invalid without loading any details
+    private void enrichWithInvalidation(final Sample sample, SampleRecord row)
+    {
+        if (row.inva_id != null)
+        {
+            final Invalidation invalidation = new Invalidation();
+            sample.setInvalidation(invalidation);
+        }
+    }
+
     private void setSpace(final Sample sample, final Space space)
     {
         sample.setSpace(space);
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/ExperimentDAO.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/ExperimentDAO.java
index f0aea06842a6bb082df684c132d82cf470cf83f7..a2f2ed52498c17cbffd9c7a656940e11ee583a89 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/ExperimentDAO.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/ExperimentDAO.java
@@ -307,8 +307,10 @@ public class ExperimentDAO extends AbstractGenericEntityWithPropertiesDAO<Experi
         for (TechId experimentId : experimentIds)
         {
             ExperimentPE experiment = loadByTechId(experimentId);
-            experiment.setInvalidation(invalidation);
-            getHibernateTemplate().update(experiment);
+            if (experiment.getInvalidation() == null)
+            {
+                experiment.setInvalidation(invalidation);
+            }
         }
 
         getHibernateTemplate().flush();
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/SampleDAO.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/SampleDAO.java
index 35f280dcb7b8bf9234a0e1e823cf11b553485690..a25ec3bb15c4b27e7765f9f725421ba71783fd48 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/SampleDAO.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/SampleDAO.java
@@ -447,8 +447,10 @@ public class SampleDAO extends AbstractGenericEntityWithPropertiesDAO<SamplePE>
         for (TechId sampleId : sampleIds)
         {
             SamplePE sample = loadByTechId(sampleId);
-            sample.setInvalidation(invalidation);
-            getHibernateTemplate().update(sample);
+            if (sample.getInvalidation() == null)
+            {
+                sample.setInvalidation(invalidation);
+            }
         }
 
         getHibernateTemplate().flush();
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/EntityTableCell.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/EntityTableCell.java
index 91491c5917f2b6ace5bf5b50d54c481613083a6b..330a95018bbe8d88316106c783fc63dfd03c038d 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/EntityTableCell.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/EntityTableCell.java
@@ -37,6 +37,8 @@ public class EntityTableCell implements ISerializableComparable
 
     private boolean invalid = false;
 
+    private boolean fake = false;
+
     public EntityTableCell(EntityKind entityKind, String permId)
     {
         this(entityKind, permId, permId);
@@ -124,6 +126,16 @@ public class EntityTableCell implements ISerializableComparable
         this.invalid = invalid;
     }
 
+    public boolean isFake()
+    {
+        return fake;
+    }
+
+    public void setFake(boolean fake)
+    {
+        this.fake = fake;
+    }
+
     @Override
     public String toString()
     {
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/server/resultset/SampleProviderTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/server/resultset/SampleProviderTest.java
index 59a27236fadcd4f4bfcb22272d841624f777ef94..ba6175cc1b41d38b72ffa004a25cc22009e4d9d1 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/server/resultset/SampleProviderTest.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/server/resultset/SampleProviderTest.java
@@ -92,7 +92,7 @@ public class SampleProviderTest extends AbstractProviderTest
         assertEquals(
                 "[null, null, VARCHAR, VARCHAR, null, VARCHAR, "
                         + "VARCHAR, VARCHAR, VARCHAR, TIMESTAMP, null, null, VARCHAR, "
-                        + "VARCHAR, VARCHAR, VARCHAR, null, REAL, TIMESTAMP, VARCHAR, MATERIAL, MULTILINE_VARCHAR]",
+                        + "VARCHAR, VARCHAR, null, null, REAL, TIMESTAMP, VARCHAR, MATERIAL, MULTILINE_VARCHAR]",
                 getHeaderDataTypes(tableModel).toString());
         assertEquals("[SAMPLE, SAMPLE, null, null, SAMPLE, null, "
                 + "null, null, null, null, null, null, null, "
@@ -120,13 +120,13 @@ public class SampleProviderTest extends AbstractProviderTest
         final SampleBuilder s1 = new SampleBuilder("DB:/S1").id(1).type("ALPHA").permID("123-45");
         s1.registrator(new PersonBuilder().name("Albert", "Einstein").getPerson());
         s1.invalidate().date(new Date(4711));
-        Sample p1 = new SampleBuilder("/AB/CD").getSample();
+        Sample p1 = new SampleBuilder("/AB/CD").permID("p-123").getSample();
         s1.property("NAME", "hello").permLink("http").childOf(p1);
         final SampleBuilder s2 =
                 new SampleBuilder("DB:/MY-SPACE/S:2").id(2).type("BETA").permID("234-56");
         s2.experiment(new ExperimentBuilder().identifier("DB:/SPACE1/P1/EXP1").permID("e-123")
                 .getExperiment());
-        Sample p2 = new SampleBuilder("/DE/FG").getSample();
+        Sample p2 = new SampleBuilder("/DE/FG").permID("p-456").getSample();
         s2.partOf(new SampleBuilder("DB:/A/B").permID("c-456").getSample()).childOf(p1, p2);
         context.checking(new Expectations()
             {
@@ -147,11 +147,11 @@ public class SampleProviderTest extends AbstractProviderTest
                 getHeaderIDs(tableModel).toString());
         assertEquals("[null, null, VARCHAR, VARCHAR, null, VARCHAR, "
                 + "VARCHAR, VARCHAR, VARCHAR, TIMESTAMP, null, null, VARCHAR, "
-                + "VARCHAR, VARCHAR, VARCHAR, null, VARCHAR, TIMESTAMP, REAL, MULTILINE_VARCHAR]",
+                + "VARCHAR, VARCHAR, null, null, VARCHAR, TIMESTAMP, REAL, MULTILINE_VARCHAR]",
                 getHeaderDataTypes(tableModel).toString());
         assertEquals("[SAMPLE, SAMPLE, null, null, SAMPLE, null, "
                 + "null, null, null, null, EXPERIMENT, EXPERIMENT, null, "
-                + "null, null, null, SAMPLE, null, null, null, null]",
+                + "null, null, SAMPLE, SAMPLE, null, null, null, null]",
                 getHeaderEntityKinds(tableModel).toString());
         List<TableModelRowWithObject<Sample>> rows = tableModel.getRows();
         assertSame(s1.getSample(), rows.get(0).getObjectOrNull());