diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/server/ScreeningClientService.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/server/ScreeningClientService.java
index 6c7aad01fe97e35f28122eb4b4455e99eff15028..2eaa07227b295dd18515ee4b1f27a0a8f8724d6a 100644
--- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/server/ScreeningClientService.java
+++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/server/ScreeningClientService.java
@@ -16,7 +16,9 @@
 
 package ch.systemsx.cisd.openbis.plugin.screening.client.web.server;
 
+import java.util.HashSet;
 import java.util.List;
+import java.util.Set;
 
 import javax.annotation.Resource;
 
@@ -24,6 +26,7 @@ import org.springframework.stereotype.Component;
 
 import ch.rinn.restrictions.Private;
 import ch.systemsx.cisd.common.servlet.IRequestContextProvider;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.columns.specific.GenericTableRowColumnDefinition;
 import ch.systemsx.cisd.openbis.generic.client.web.client.dto.ExperimentIdentifier;
 import ch.systemsx.cisd.openbis.generic.client.web.client.dto.GenericTableResultSet;
 import ch.systemsx.cisd.openbis.generic.client.web.client.dto.IResultSetConfig;
@@ -33,8 +36,10 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.exception.UserFailureE
 import ch.systemsx.cisd.openbis.generic.client.web.server.AbstractClientService;
 import ch.systemsx.cisd.openbis.generic.client.web.server.translator.UserFailureExceptionTranslator;
 import ch.systemsx.cisd.openbis.generic.shared.IServer;
+import ch.systemsx.cisd.openbis.generic.shared.basic.IColumnDefinition;
 import ch.systemsx.cisd.openbis.generic.shared.basic.TechId;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ExternalData;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.GenericTableColumnHeader;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.GenericTableRow;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Material;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.SampleParentWithDerived;
@@ -175,10 +180,38 @@ public final class ScreeningClientService extends AbstractClientService implemen
     {
         PlateMetadataProvider dataProvider =
                 new PlateMetadataProvider(server, getSessionToken(), sampleId);
+        // This is a different kind of query because the criteria does not define which columns
+        // are available -- the provider does. Thus, inform the criteria which columns are
+        // available.
+        updateResultSetColumnsFromProvider(criteria, dataProvider);
         ResultSet<GenericTableRow> resultSet = listEntities(criteria, dataProvider);
         return new GenericTableResultSet(resultSet, dataProvider.getHeaders());
     }
 
+    /**
+     * In the plate metadata query, the result set does not define which columns are available --
+     * the provider does. This method informs the result set about the columns availible in the
+     * provider.
+     */
+    private void updateResultSetColumnsFromProvider(
+            IResultSetConfig<String, GenericTableRow> criteria, PlateMetadataProvider dataProvider)
+    {
+        Set<IColumnDefinition<GenericTableRow>> columns = criteria.getAvailableColumns();
+        Set<String> identifiers = new HashSet<String>();
+        for (IColumnDefinition<GenericTableRow> colDef : columns)
+        {
+            identifiers.add(colDef.getIdentifier());
+        }
+
+        List<GenericTableColumnHeader> headers = dataProvider.getHeaders();
+        for (GenericTableColumnHeader header : headers)
+        {
+            // the header's code is the same as the definition's identifier
+            if (!identifiers.contains(header.getCode()))
+                columns.add(new GenericTableRowColumnDefinition(header, header.getTitle()));
+        }
+    }
+
     public String prepareExportPlateMetadata(TableExportCriteria<GenericTableRow> criteria)
             throws UserFailureException
     {