diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/DisposableTabContent.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/DisposableTabContent.java
index 35319a32152bbbe46cd363298e7fa6c66082cd39..f7e2160abd2a2fa03589507869ae8e18efa83fbf 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/DisposableTabContent.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/DisposableTabContent.java
@@ -37,9 +37,9 @@ abstract public class DisposableTabContent extends TabContent
     /**
      * Creates section with specified header.
      */
-    public DisposableTabContent(String header, IViewContext<?> viewContext, IIdHolder ownerId)
+    public DisposableTabContent(String header, IViewContext<?> viewContext, IIdHolder ownerIdOrNull)
     {
-        super(header, viewContext, ownerId);
+        super(header, viewContext, ownerIdOrNull);
     }
 
     public IDatabaseModificationObserver tryGetDatabaseModificationObserver()
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/data/ProcessingPluginSelectionWidget.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/data/ProcessingPluginSelectionWidget.java
index 99948e7afd6b505010c5df77e917c335087b3880..7432176c7fa8d7dce77eedfa0364b4b9cf918cd9 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/data/ProcessingPluginSelectionWidget.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/data/ProcessingPluginSelectionWidget.java
@@ -44,10 +44,12 @@ public class ProcessingPluginSelectionWidget extends
     private final IViewContext<?> viewContext;
 
     public ProcessingPluginSelectionWidget(final IViewContext<?> viewContext,
-            final IIdHolder ownerId)
+            final IIdHolder ownerIdOrNull)
     {
-        super(viewContext, (ownerId.getId() + "_data-set_processing-plugins"), Dict.BUTTON_PROCESS,
-                ModelDataPropertyNames.LABEL, "action", "actions");
+        super(
+                viewContext,
+                (((ownerIdOrNull != null) ? ownerIdOrNull.getId().toString() : "") + "_data-set_processing-plugins"),
+                Dict.BUTTON_PROCESS, ModelDataPropertyNames.LABEL, "action", "actions");
         this.viewContext = viewContext;
         addPostRefreshCallback(createHideOnNoServicesAction());
     }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/data/ReportingPluginSelectionWidget.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/data/ReportingPluginSelectionWidget.java
index 009d3e2e022bbc67fb6dc27059aec892f224c082..217ae2ca1161461c10b8cebec58cb64cf06354dd 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/data/ReportingPluginSelectionWidget.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/data/ReportingPluginSelectionWidget.java
@@ -45,10 +45,13 @@ public class ReportingPluginSelectionWidget extends
 
     private final IViewContext<?> viewContext;
 
-    public ReportingPluginSelectionWidget(final IViewContext<?> viewContext, final IIdHolder ownerId)
+    public ReportingPluginSelectionWidget(final IViewContext<?> viewContext,
+            final IIdHolder ownerIdOrNull)
     {
-        super(viewContext, (ownerId.getId() + "_data-set_reporting-plugins"), Dict.BUTTON_PROCESS,
-                ModelDataPropertyNames.LABEL, "report", "reports");
+        super(
+                viewContext,
+                (((ownerIdOrNull != null) ? ownerIdOrNull.getId().toString() : "") + "_data-set_reporting-plugins"),
+                Dict.BUTTON_PROCESS, ModelDataPropertyNames.LABEL, "report", "reports");
         setAutoSelectFirst(true);
         this.viewContext = viewContext;
         addPostRefreshCallback(createHideOnNoServicesAction());
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/grid/AbstractBrowserGrid.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/grid/AbstractBrowserGrid.java
index ff2e12a18a3a0ed082a3cea1da0b0b1f79dd4581..4ea4f5ce0074ef852e3368379d159dab43b1d045 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/grid/AbstractBrowserGrid.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/grid/AbstractBrowserGrid.java
@@ -1047,7 +1047,7 @@ public abstract class AbstractBrowserGrid<T/* Entity */, M extends BaseEntityMod
     /**
      * Returns all models of selected items or an empty list if nothing selected.
      */
-    protected final List<M> getSelectedItems()
+    public final List<M> getSelectedItems()
     {
         return grid.getSelectionModel().getSelectedItems();
     }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/dataset/AbstractDataSetsSection.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/dataset/AbstractDataSetsSection.java
new file mode 100644
index 0000000000000000000000000000000000000000..0165d77b222aeaa7b4639c8281103a29be81cced
--- /dev/null
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/dataset/AbstractDataSetsSection.java
@@ -0,0 +1,188 @@
+/*
+ * Copyright 2010 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.dataset;
+
+import com.extjs.gxt.ui.client.event.SelectionChangedEvent;
+import com.extjs.gxt.ui.client.event.SelectionChangedListener;
+
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.DisposableTabContent;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.IViewContext;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.DisplayTypeIDGenerator;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.data.AbstractExternalDataGrid;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.data.AbstractExternalDataGrid.SelectedAndDisplayedItems;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.data.DataSetComputeUtils;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.data.DataSetReportGenerator;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.data.DatastoreServiceDescriptionModel;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.data.ProcessingPluginSelectionWidget;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.data.ReportingPluginSelectionWidget;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.IDisposableComponent;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.report.ReportGeneratedCallback.IOnReportComponentGeneratedAction;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.widget.DropDownList;
+import ch.systemsx.cisd.openbis.generic.client.web.client.dto.DisplayedOrSelectedDatasetCriteria;
+import ch.systemsx.cisd.openbis.generic.shared.basic.IIdHolder;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DatastoreServiceDescription;
+
+/**
+ * @author Piotr Buczek
+ */
+public abstract class AbstractDataSetsSection extends DisposableTabContent
+{
+    protected final DropDownList<DatastoreServiceDescriptionModel, DatastoreServiceDescription> reportSelectionWidget;
+
+    protected final DropDownList<DatastoreServiceDescriptionModel, DatastoreServiceDescription> processingSelectionWidget;
+
+    protected final IOnReportComponentGeneratedAction reportGeneratedAction;
+
+    private IDisposableComponent metadataComponent;
+
+    public AbstractDataSetsSection(final String header, final IViewContext<?> viewContext,
+            IIdHolder ownerIdOrNull)
+    {
+        super(header, viewContext, ownerIdOrNull);
+        this.reportSelectionWidget = new ReportingPluginSelectionWidget(viewContext, ownerIdOrNull);
+        this.processingSelectionWidget =
+                new ProcessingPluginSelectionWidget(viewContext, ownerIdOrNull);
+        this.reportGeneratedAction = new IOnReportComponentGeneratedAction()
+            {
+                public void execute(IDisposableComponent gridComponent)
+                {
+                    replaceContent(gridComponent);
+                }
+            };
+        setIds(DisplayTypeIDGenerator.DATA_SETS_SECTION);
+    }
+
+    protected abstract IDisposableComponent createDatasetBrowserComponent();
+
+    protected void initWidgets()
+    {
+        getHeader().addTool(reportSelectionWidget);
+        getHeader().addTool(processingSelectionWidget);
+    }
+
+    @Override
+    protected final IDisposableComponent createDisposableContent()
+    {
+        initWidgets();
+        metadataComponent = createDatasetBrowserComponent();
+
+        SelectionChangedListener<DatastoreServiceDescriptionModel> serviceChangedListener =
+                createServiceSelectionChangedListener(viewContext, metadataComponent,
+                        reportGeneratedAction);
+        reportSelectionWidget.addSelectionChangedListener(serviceChangedListener);
+        processingSelectionWidget.addSelectionChangedListener(serviceChangedListener);
+        return metadataComponent;
+    }
+
+    @Override
+    protected final void replaceContent(IDisposableComponent content)
+    {
+        if (content != null)
+        {
+            removeAll();
+            if (disposableComponentOrNull != null
+                    && disposableComponentOrNull.getComponent().equals(
+                            metadataComponent.getComponent()) == false)
+            {
+                super.disposeComponents(); // don't dispose metadata component
+            }
+            updateContent(content, true);
+        }
+    }
+
+    @Override
+    public final void disposeComponents()
+    {
+        // when tab is closed dispose also the metadata component
+        super.disposeComponents();
+        metadataComponent.dispose(); // NOTE: second dispose on a grid does nothing
+    }
+
+    private static SelectionChangedListener<DatastoreServiceDescriptionModel> createServiceSelectionChangedListener(
+            final IViewContext<?> viewContext, final IDisposableComponent metadataComponent,
+            final IOnReportComponentGeneratedAction reportGeneratedAction)
+    {
+        final AbstractExternalDataGrid browser =
+                (AbstractExternalDataGrid) metadataComponent.getComponent();
+        return new SelectionChangedListener<DatastoreServiceDescriptionModel>()
+            {
+
+                @Override
+                public void selectionChanged(
+                        SelectionChangedEvent<DatastoreServiceDescriptionModel> se)
+                {
+                    final DatastoreServiceDescriptionModel selectedItem = se.getSelectedItem();
+                    if (selectedItem != null)
+                    {
+                        DatastoreServiceDescription service = selectedItem.getBaseObject();
+
+                        if (service.getLabel().equals(ReportingPluginSelectionWidget.METADATA))
+                        {
+                            showMetadataView();
+                        } else
+                        {
+                            switch (service.getServiceKind())
+                            {
+                                case PROCESSING:
+                                    process(service);
+                                    break;
+                                case QUERIES:
+                                    showGeneratedReportComponentView(service);
+                                    break;
+                            }
+                        }
+                    }
+
+                }
+
+                private void process(DatastoreServiceDescription service)
+                {
+                    SelectedAndDisplayedItems items =
+                            browser.getSelectedAndDisplayedItemsAction().execute();
+                    DataSetComputeUtils.createComputeAction(viewContext.getCommonViewContext(),
+                            items, service, service.getServiceKind(), reportGeneratedAction)
+                            .execute();
+                }
+
+                private void showMetadataView()
+                {
+                    reportGeneratedAction.execute(metadataComponent);
+                }
+
+                private void showGeneratedReportComponentView(DatastoreServiceDescription service)
+                {
+                    SelectedAndDisplayedItems items =
+                            browser.getSelectedAndDisplayedItemsAction().execute();
+
+                    if (browser.getSelectedItems().isEmpty())
+                    {
+                        // when no data sets were selected perform query without asking
+                        DisplayedOrSelectedDatasetCriteria criteria = items.createCriteria(false);
+                        DataSetReportGenerator.generateAndInvoke(
+                                viewContext.getCommonViewContext(), service, criteria,
+                                reportGeneratedAction);
+                    } else
+                    {
+                        DataSetComputeUtils.createComputeAction(viewContext.getCommonViewContext(),
+                                items, service, service.getServiceKind(), reportGeneratedAction)
+                                .execute();
+                    }
+                }
+            };
+
+    }
+}
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/dataset/DataSetChildrenSection.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/dataset/DataSetChildrenSection.java
index 91f28c01b573f0c65ff7332067ad7af2e59e0c8c..370116b75b2d499c92df0b87f4fcd7b1faef3bda 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/dataset/DataSetChildrenSection.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/dataset/DataSetChildrenSection.java
@@ -16,7 +16,6 @@
 
 package ch.systemsx.cisd.openbis.plugin.generic.client.web.client.application.dataset;
 
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.DisposableTabContent;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.IViewContext;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.DisplayTypeIDGenerator;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.IDisposableComponent;
@@ -27,7 +26,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ExternalData;
 /**
  * @author Piotr Buczek
  */
-class DataSetChildrenSection extends DisposableTabContent
+class DataSetChildrenSection extends AbstractDataSetsSection
 {
     private final ExternalData dataset;
 
@@ -39,7 +38,7 @@ class DataSetChildrenSection extends DisposableTabContent
     }
 
     @Override
-    protected IDisposableComponent createDisposableContent()
+    protected IDisposableComponent createDatasetBrowserComponent()
     {
         return DataSetRelationshipBrowser.create(viewContext, TechId.create(dataset),
                 DataSetRelationshipRole.PARENT, dataset.getDataSetType());
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/dataset/DataSetParentsSection.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/dataset/DataSetParentsSection.java
index db770c9ea49e2f25a48cd0c868dbd2ff733a82d1..26592ba9aa0b5be58132c774e9b66809b8574374 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/dataset/DataSetParentsSection.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/dataset/DataSetParentsSection.java
@@ -16,7 +16,6 @@
 
 package ch.systemsx.cisd.openbis.plugin.generic.client.web.client.application.dataset;
 
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.DisposableTabContent;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.IViewContext;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.DisplayTypeIDGenerator;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.IDisposableComponent;
@@ -27,7 +26,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ExternalData;
 /**
  * @author Piotr Buczek
  */
-class DataSetParentsSection extends DisposableTabContent
+class DataSetParentsSection extends AbstractDataSetsSection
 {
     private final ExternalData dataset;
 
@@ -39,7 +38,7 @@ class DataSetParentsSection extends DisposableTabContent
     }
 
     @Override
-    protected IDisposableComponent createDisposableContent()
+    protected IDisposableComponent createDatasetBrowserComponent()
     {
         return DataSetRelationshipBrowser.create(viewContext, TechId.create(dataset),
                 DataSetRelationshipRole.CHILD, dataset.getDataSetType());
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/experiment/GenericExperimentViewer.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/experiment/GenericExperimentViewer.java
index 84019eda56a300774a957d60fd321d5cc98f21ec..0a187a28ef5c67a031bce6f5d7b7106d6af90a4b 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/experiment/GenericExperimentViewer.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/experiment/GenericExperimentViewer.java
@@ -49,6 +49,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.BasicEntityType;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DatabaseModificationKind;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Experiment;
 import ch.systemsx.cisd.openbis.plugin.generic.client.web.client.IGenericClientServiceAsync;
+import ch.systemsx.cisd.openbis.plugin.generic.client.web.client.application.dataset.AbstractDataSetsSection;
 
 /**
  * The <i>generic</i> experiment viewer.
@@ -237,10 +238,10 @@ public class GenericExperimentViewer extends AbstractViewerWithVerticalSplit<Exp
 
     private DisposableTabContent createExperimentDataSetSection()
     {
-        return new DisposableTabContent("Data Sets", viewContext, experimentId)
+        return new AbstractDataSetsSection("Data Sets", viewContext, experimentId)
             {
                 @Override
-                protected IDisposableComponent createDisposableContent()
+                protected IDisposableComponent createDatasetBrowserComponent()
                 {
                     return ExperimentDataSetBrowser.create(viewContext, new TechId(experimentId),
                             experimentType);
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/SampleDataSetBrowser.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/SampleDataSetBrowser.java
index e6251a840383b82e03ec57a71996c71b866751c7..060c51e16707b770cd1d292892106b4c4a1e0712 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/SampleDataSetBrowser.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/SampleDataSetBrowser.java
@@ -16,28 +16,17 @@
 
 package ch.systemsx.cisd.openbis.plugin.generic.client.web.client.application.sample;
 
-import com.extjs.gxt.ui.client.event.SelectionChangedEvent;
-import com.extjs.gxt.ui.client.event.SelectionChangedListener;
-
 import ch.systemsx.cisd.openbis.generic.client.web.client.ICommonClientServiceAsync;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.AbstractAsyncCallback;
 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.framework.DisplayTypeIDGenerator;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.data.AbstractExternalDataGrid;
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.data.DataSetComputeUtils;
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.data.DataSetReportGenerator;
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.data.DatastoreServiceDescriptionModel;
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.data.ReportingPluginSelectionWidget;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.IDisposableComponent;
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.report.ReportGeneratedCallback.IOnReportComponentGeneratedAction;
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.widget.DropDownList;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.IDelegatedAction;
 import ch.systemsx.cisd.openbis.generic.client.web.client.dto.DefaultResultSetConfig;
-import ch.systemsx.cisd.openbis.generic.client.web.client.dto.DisplayedOrSelectedDatasetCriteria;
 import ch.systemsx.cisd.openbis.generic.client.web.client.dto.ResultSetWithEntityTypes;
 import ch.systemsx.cisd.openbis.generic.shared.basic.TechId;
-import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DatastoreServiceDescription;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ExternalData;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.SampleType;
 import ch.systemsx.cisd.openbis.plugin.generic.client.web.client.application.sample.GenericSampleViewer.DataSetConnectionTypeProvider;
@@ -53,14 +42,8 @@ class SampleDataSetBrowser extends AbstractExternalDataGrid
 
     private final DataSetConnectionTypeProvider connectionTypeProvider;
 
-    public static IDisposableComponent create(
-            IViewContext<?> viewContext,
-            TechId sampleId,
-            final SampleType sampleType,
-            final DataSetConnectionTypeProvider connectionTypeProvider,
-            DropDownList<DatastoreServiceDescriptionModel, DatastoreServiceDescription> reportSelectionWidget,
-            DropDownList<DatastoreServiceDescriptionModel, DatastoreServiceDescription> processingSelectionWidget,
-            IOnReportComponentGeneratedAction reportGeneratedAction)
+    public static IDisposableComponent create(IViewContext<?> viewContext, TechId sampleId,
+            final SampleType sampleType, final DataSetConnectionTypeProvider connectionTypeProvider)
     {
         IViewContext<ICommonClientServiceAsync> commonViewContext =
                 viewContext.getCommonViewContext();
@@ -75,10 +58,6 @@ class SampleDataSetBrowser extends AbstractExternalDataGrid
                         }
 
                     };
-        SelectionChangedListener<DatastoreServiceDescriptionModel> serviceChangedListener =
-                createServiceSelectionChangedListener(viewContext, browser, reportGeneratedAction);
-        reportSelectionWidget.addSelectionChangedListener(serviceChangedListener);
-        processingSelectionWidget.addSelectionChangedListener(serviceChangedListener);
         return browser.asDisposableWithoutToolbar();
     }
 
@@ -101,78 +80,6 @@ class SampleDataSetBrowser extends AbstractExternalDataGrid
             });
     }
 
-    private static SelectionChangedListener<DatastoreServiceDescriptionModel> createServiceSelectionChangedListener(
-            final IViewContext<?> viewContext, final SampleDataSetBrowser browser,
-            final IOnReportComponentGeneratedAction reportGeneratedAction)
-    {
-        return new SelectionChangedListener<DatastoreServiceDescriptionModel>()
-            {
-
-                @Override
-                public void selectionChanged(
-                        SelectionChangedEvent<DatastoreServiceDescriptionModel> se)
-                {
-                    final DatastoreServiceDescriptionModel selectedItem = se.getSelectedItem();
-                    if (selectedItem != null)
-                    {
-                        DatastoreServiceDescription service = selectedItem.getBaseObject();
-
-                        if (service.getLabel().equals(ReportingPluginSelectionWidget.METADATA))
-                        {
-                            showMetadataView();
-                        } else
-                        {
-                            switch (service.getServiceKind())
-                            {
-                                case PROCESSING:
-                                    process(service);
-                                    break;
-                                case QUERIES:
-                                    showGeneratedReportComponentView(service);
-                                    break;
-                            }
-                        }
-                    }
-
-                }
-
-                private void process(DatastoreServiceDescription service)
-                {
-                    SelectedAndDisplayedItems items =
-                            browser.getSelectedAndDisplayedItemsAction().execute();
-                    DataSetComputeUtils.createComputeAction(viewContext.getCommonViewContext(),
-                            items, service, service.getServiceKind(), reportGeneratedAction)
-                            .execute();
-                }
-
-                private void showMetadataView()
-                {
-                    reportGeneratedAction.execute(browser.asDisposableWithoutToolbar());
-                }
-
-                private void showGeneratedReportComponentView(DatastoreServiceDescription service)
-                {
-                    SelectedAndDisplayedItems items =
-                            browser.getSelectedAndDisplayedItemsAction().execute();
-
-                    if (browser.getSelectedItems().isEmpty())
-                    {
-                        // when no data sets were selected perform query without asking
-                        DisplayedOrSelectedDatasetCriteria criteria = items.createCriteria(false);
-                        DataSetReportGenerator.generateAndInvoke(
-                                viewContext.getCommonViewContext(), service, criteria,
-                                reportGeneratedAction);
-                    } else
-                    {
-                        DataSetComputeUtils.createComputeAction(viewContext.getCommonViewContext(),
-                                items, service, service.getServiceKind(), reportGeneratedAction)
-                                .execute();
-                    }
-                }
-            };
-
-    }
-
     public static final String createGridId(TechId sampleId)
     {
         return createBrowserId(sampleId) + "-grid";
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/SampleDataSetsSection.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/SampleDataSetsSection.java
index d5b45b32ad3c65d266a49737748d57e908292e5c..0afa3811c45eca72116efc6eddfc5cae23707148 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/SampleDataSetsSection.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/SampleDataSetsSection.java
@@ -21,54 +21,41 @@ import com.extjs.gxt.ui.client.event.SelectionChangedListener;
 import com.extjs.gxt.ui.client.widget.form.CheckBox;
 
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.Dict;
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.DisposableTabContent;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.IViewContext;
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.DisplayTypeIDGenerator;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.data.DatastoreServiceDescriptionModel;
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.data.ProcessingPluginSelectionWidget;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.data.ReportingPluginSelectionWidget;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.IDisposableComponent;
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.report.ReportGeneratedCallback.IOnReportComponentGeneratedAction;
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.widget.DropDownList;
 import ch.systemsx.cisd.openbis.generic.shared.basic.TechId;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DatastoreServiceDescription;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.SampleType;
+import ch.systemsx.cisd.openbis.plugin.generic.client.web.client.application.dataset.AbstractDataSetsSection;
 import ch.systemsx.cisd.openbis.plugin.generic.client.web.client.application.sample.GenericSampleViewer.DataSetConnectionTypeProvider;
 
 /**
  * @author Chandrasekhar Ramakrishnan
  */
-public class SampleDataSetsSection extends DisposableTabContent
+public class SampleDataSetsSection extends AbstractDataSetsSection
 {
     private final CheckBox showOnlyDirectlyConnectedCheckBox;
 
-    private final DropDownList<DatastoreServiceDescriptionModel, DatastoreServiceDescription> reportSelectionWidget;
-
-    private final DropDownList<DatastoreServiceDescriptionModel, DatastoreServiceDescription> processingSelectionWidget;
-
     private final TechId sampleId;
 
     private final SampleType sampleType;
 
-    private IDisposableComponent metadataComponent;
-
     public SampleDataSetsSection(final IViewContext<?> viewContext,
-            CheckBox showOnlyDirectlyConnectedCheckBox, TechId sampleId, SampleType sampleType)
+            final CheckBox showOnlyDirectlyConnectedCheckBox, TechId sampleId, SampleType sampleType)
     {
         super(viewContext.getMessage(Dict.EXTERNAL_DATA_HEADING), viewContext, sampleId);
         this.showOnlyDirectlyConnectedCheckBox = showOnlyDirectlyConnectedCheckBox;
-        this.reportSelectionWidget = new ReportingPluginSelectionWidget(viewContext, sampleId);
-        this.processingSelectionWidget = new ProcessingPluginSelectionWidget(viewContext, sampleId);
         this.sampleId = sampleId;
         this.sampleType = sampleType;
-        setIds(DisplayTypeIDGenerator.DATA_SETS_SECTION);
     }
 
     @Override
-    protected IDisposableComponent createDisposableContent()
+    protected void initWidgets()
     {
+        // first add check box
         getHeader().addTool(showOnlyDirectlyConnectedCheckBox);
-        getHeader().addTool(reportSelectionWidget);
         reportSelectionWidget
                 .addSelectionChangedListener(new SelectionChangedListener<DatastoreServiceDescriptionModel>()
                     {
@@ -93,43 +80,14 @@ public class SampleDataSetsSection extends DisposableTabContent
                             }
                         }
                     });
-        getHeader().addTool(processingSelectionWidget);
-        final IOnReportComponentGeneratedAction gridGeneratedAction =
-                new IOnReportComponentGeneratedAction()
-                    {
-                        public void execute(IDisposableComponent gridComponent)
-                        {
-                            replaceContent(gridComponent);
-                        }
-                    };
-        metadataComponent =
-                SampleDataSetBrowser.create(viewContext, sampleId, sampleType,
-                        new DataSetConnectionTypeProvider(showOnlyDirectlyConnectedCheckBox),
-                        reportSelectionWidget, processingSelectionWidget, gridGeneratedAction);
-        return metadataComponent;
+        super.initWidgets();
     }
 
     @Override
-    protected void replaceContent(IDisposableComponent content)
+    protected IDisposableComponent createDatasetBrowserComponent()
     {
-        if (content != null)
-        {
-            removeAll();
-            if (disposableComponentOrNull != null
-                    && disposableComponentOrNull.getComponent().equals(
-                            metadataComponent.getComponent()) == false)
-            {
-                super.disposeComponents(); // don't dispose metadata component
-            }
-            updateContent(content, true);
-        }
+        return SampleDataSetBrowser.create(viewContext, sampleId, sampleType,
+                new DataSetConnectionTypeProvider(showOnlyDirectlyConnectedCheckBox));
     }
 
-    @Override
-    public void disposeComponents()
-    {
-        // when tab is closed dispose also the metadata component
-        super.disposeComponents();
-        metadataComponent.dispose(); // NOTE: second dispose on a grid does nothing
-    }
 }