diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/SpaceSelectionWidget.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/SpaceSelectionWidget.java
index 9ddf2a80b16cc06e48485d295f511031b8ce38fa..417d580c62e771a5fb37c5eb547946bdac36a7ba 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/SpaceSelectionWidget.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/SpaceSelectionWidget.java
@@ -175,6 +175,7 @@ public class SpaceSelectionWidget extends DropDownList<SpaceModel, Space>
                         viewContext.getMessage(Dict.GROUPS)));
                 setReadOnly(true);
             }
+            removeResultSetFromCache();
         }
 
         int getSpaceGroupIndex(ListStore<SpaceModel> spaceStore)
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 487b46f41f119af738c89a63adb8a1d8f82e0be1..75b06d1ef780d4d25ec3db24ec47488ecdf17e14 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
@@ -1858,19 +1858,19 @@ public abstract class TypedTableGrid<T extends Serializable> extends LayoutConta
         debug("saving new cache key");
     }
 
-    private void disposeCache()
+    protected void disposeCache()
     {
-        if (resultSetKeyOrNull != null)
-        {
-            removeResultSet(resultSetKeyOrNull);
-            resultSetKeyOrNull = null;
-        }
+        removeResultSet(resultSetKeyOrNull);
+        resultSetKeyOrNull = null;
     }
 
-    private void removeResultSet(String resultSetKey)
+    protected void removeResultSet(String resultSetKey)
     {
-        viewContext.getService().removeResultSet(resultSetKey,
-                new VoidAsyncCallback<Void>(viewContext));
+        if (resultSetKey != null)
+        {
+            viewContext.getService().removeResultSet(resultSetKey,
+                    new VoidAsyncCallback<Void>(viewContext));
+        }
     }
 
     /**
@@ -2334,7 +2334,8 @@ public abstract class TypedTableGrid<T extends Serializable> extends LayoutConta
      * implementation does nothing.
      */
     protected void applyModifications(BaseEntityModel<TableModelRowWithObject<T>> model,
-            String resultSetKey, List<IModification> modifications, AsyncCallback<IUpdateResult> callBack)
+            String resultSetKey, List<IModification> modifications,
+            AsyncCallback<IUpdateResult> callBack)
     {
     }
 
@@ -2359,7 +2360,8 @@ public abstract class TypedTableGrid<T extends Serializable> extends LayoutConta
                 {
                     @Override
                     public void applyModifications(
-                            BaseEntityModel<TableModelRowWithObject<T>> model, List<IModification> modifications)
+                            BaseEntityModel<TableModelRowWithObject<T>> model,
+                            List<IModification> modifications)
                     {
                         AsyncCallback<IUpdateResult> callBack =
                                 createApplyModificationsCallback(model, modifications);
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/experiment/ProjectSelectionWidget.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/experiment/ProjectSelectionWidget.java
index c157e2656ccac9a0654bca5e7e7218923a1e5579..f5e90c86e2b13010d389c0ddb400bd609df4bb1b 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/experiment/ProjectSelectionWidget.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/experiment/ProjectSelectionWidget.java
@@ -118,7 +118,8 @@ public final class ProjectSelectionWidget extends
         return selected instanceof Project ? (Project) selected : null;
     }
 
-    private final class ListProjectsCallback extends AbstractAsyncCallback<TypedTableResultSet<Project>>
+    private final class ListProjectsCallback extends
+            AbstractAsyncCallback<TypedTableResultSet<Project>>
     {
         ListProjectsCallback(final IViewContext<?> viewContext)
         {
@@ -128,9 +129,11 @@ public final class ProjectSelectionWidget extends
         @Override
         protected void process(final TypedTableResultSet<Project> result)
         {
+            resultSetKey = result.getResultSet().getResultSetKey();
             final ListStore<ProjectComboModel> projectStore = getStore();
             projectStore.removeAll();
-            projectStore.add(convertItems(result.getResultSet().getList().extractOriginalObjects()));
+            projectStore
+                    .add(convertItems(result.getResultSet().getList().extractOriginalObjects()));
             if (projectStore.getCount() > 0)
             {
                 setEmptyText(viewContext.getMessage(Dict.COMBO_BOX_CHOOSE, CHOOSE_SUFFIX));
@@ -143,6 +146,7 @@ public final class ProjectSelectionWidget extends
             applyEmptyText();
             dataLoaded = true;
             selectProjectAndUpdateOriginal(initialProjectIdentifierOrNull);
+            removeResultSetFromCache();
         }
 
     }
@@ -184,15 +188,15 @@ public final class ProjectSelectionWidget extends
     @Override
     protected void loadData(AbstractAsyncCallback<List<TableModelRowWithObject<Project>>> callback)
     {
-        DefaultResultSetConfig<String, TableModelRowWithObject<Project>> config = DefaultResultSetConfig.createFetchAll();
+        DefaultResultSetConfig<String, TableModelRowWithObject<Project>> config =
+                DefaultResultSetConfig.createFetchAll();
         viewContext.getCommonService().listProjects(config, new ListProjectsCallback(viewContext));
         callback.ignore();
     }
 
     public void trySelectByIdentifier(String projectIdentifier)
     {
-        GWTUtils
-                .setSelectedItem(this, ModelDataPropertyNames.PROJECT_IDENTIFIER, projectIdentifier);
+        GWTUtils.setSelectedItem(this, ModelDataPropertyNames.PROJECT_IDENTIFIER, projectIdentifier);
     }
 
     @Override
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/property_type/PropertyTypeSelectionWidget.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/property_type/PropertyTypeSelectionWidget.java
index 27542047d9cb04406ef73ac5539b5a64f977207d..49c0a18f15a9eafb6124b23c547bcf41f0952ac1 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/property_type/PropertyTypeSelectionWidget.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/property_type/PropertyTypeSelectionWidget.java
@@ -32,6 +32,7 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.renderer.P
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.widget.DropDownList;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.GWTUtils;
 import ch.systemsx.cisd.openbis.generic.client.web.client.dto.DefaultResultSetConfig;
+import ch.systemsx.cisd.openbis.generic.client.web.client.dto.ResultSet;
 import ch.systemsx.cisd.openbis.generic.client.web.client.dto.TypedTableResultSet;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DatabaseModificationKind;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DatabaseModificationKind.ObjectKind;
@@ -103,10 +104,12 @@ public final class PropertyTypeSelectionWidget extends
         @Override
         protected void process(final TypedTableResultSet<PropertyType> result)
         {
+            ResultSet<TableModelRowWithObject<PropertyType>> resultSet = result.getResultSet();
+            resultSetKey = resultSet.getResultSetKey();
             final ListStore<PropertyTypeComboModel> propertyTypeStore = getStore();
             propertyTypeStore.removeAll();
             List<TableModelRowWithObject<PropertyType>> rows =
-                    result.getResultSet().getList().extractOriginalObjects();
+                    resultSet.getList().extractOriginalObjects();
             ArrayList<PropertyType> types = new ArrayList<PropertyType>();
             for (TableModelRowWithObject<PropertyType> row : rows)
             {
@@ -123,6 +126,7 @@ public final class PropertyTypeSelectionWidget extends
                 setReadOnly(true);
             }
             applyEmptyText();
+            removeResultSetFromCache();
         }
     }
 
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/search/DetailedSearchFieldsSelectionWidget.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/search/DetailedSearchFieldsSelectionWidget.java
index 3da7e0d2cb60eb1bcd1851a93177e0e0485bcf61..45cddb8c021282f82b108860230737197c5e5689 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/search/DetailedSearchFieldsSelectionWidget.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/search/DetailedSearchFieldsSelectionWidget.java
@@ -35,6 +35,7 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.en
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.widget.DropDownList;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.GWTUtils;
 import ch.systemsx.cisd.openbis.generic.client.web.client.dto.DefaultResultSetConfig;
+import ch.systemsx.cisd.openbis.generic.client.web.client.dto.ResultSet;
 import ch.systemsx.cisd.openbis.generic.client.web.client.dto.TypedTableResultSet;
 import ch.systemsx.cisd.openbis.generic.shared.basic.AttributeSearchFieldKindProvider;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DatabaseModificationKind;
@@ -157,6 +158,8 @@ public final class DetailedSearchFieldsSelectionWidget extends
         @Override
         protected void process(final TypedTableResultSet<PropertyType> result)
         {
+            ResultSet<TableModelRowWithObject<PropertyType>> resultSet = result.getResultSet();
+            resultSetKey = resultSet.getResultSetKey();
             List<TableModelRowWithObject<PropertyType>> rows =
                     result.getResultSet().getList().extractOriginalObjects();
             propertyTypes = new ArrayList<PropertyType>();
@@ -181,6 +184,7 @@ public final class DetailedSearchFieldsSelectionWidget extends
             setValue(findAnyFieldItem(items));
 
             dataLoaded = true;
+            removeResultSetFromCache();
         }
     }
 
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/vocabulary/VocabularySelectionWidget.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/vocabulary/VocabularySelectionWidget.java
index dd67cb9a5bb9cc26096a7c3f14441afadf901857..1d6ed7464005e139b86ed7cf7467830ee3accfe8 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/vocabulary/VocabularySelectionWidget.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/vocabulary/VocabularySelectionWidget.java
@@ -30,6 +30,7 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.IViewConte
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.model.ModelDataPropertyNames;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.widget.DropDownList;
 import ch.systemsx.cisd.openbis.generic.client.web.client.dto.DefaultResultSetConfig;
+import ch.systemsx.cisd.openbis.generic.client.web.client.dto.ResultSet;
 import ch.systemsx.cisd.openbis.generic.client.web.client.dto.TypedTableResultSet;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DatabaseModificationKind;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DatabaseModificationKind.ObjectKind;
@@ -105,14 +106,18 @@ public class VocabularySelectionWidget extends DropDownList<BaseModelData, Vocab
                         @Override
                         public void onSuccess(TypedTableResultSet<Vocabulary> result)
                         {
+                            ResultSet<TableModelRowWithObject<Vocabulary>> resultSet =
+                                    result.getResultSet();
+                            resultSetKey = resultSet.getResultSetKey();
                             List<TableModelRowWithObject<Vocabulary>> rows =
-                                    result.getResultSet().getList().extractOriginalObjects();
+                                    resultSet.getList().extractOriginalObjects();
                             List<Vocabulary> vocabularies = new ArrayList<Vocabulary>();
                             for (TableModelRowWithObject<Vocabulary> row : rows)
                             {
                                 vocabularies.add(row.getObjectOrNull());
                             }
                             callback.onSuccess(vocabularies);
+                            removeResultSetFromCache();
                         }
                     });
     }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/widget/DropDownList.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/widget/DropDownList.java
index 663bf53ea1affc0c26703ae30dda1bec93ab8a74..07d171f300a3476d9b47335a1b1aa9919f110a2e 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/widget/DropDownList.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/widget/DropDownList.java
@@ -226,6 +226,11 @@ abstract public class DropDownList<M extends ModelData, E> extends ComboBox<M> i
 
     @Override
     public void dispose()
+    {
+        removeResultSetFromCache();
+    }
+
+    protected void removeResultSetFromCache()
     {
         if (resultSetKey != null && viewContextOrNull != null)
         {
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/resultset/CachedResultSetManager.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/resultset/CachedResultSetManager.java
index 43821c22b4de6877a9fc768e27146b0c82dd3ce0..46e815f264f31a825377bea567f785d2a5b5988a 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/resultset/CachedResultSetManager.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/resultset/CachedResultSetManager.java
@@ -1033,10 +1033,6 @@ public final class CachedResultSetManager<K> implements IResultSetManager<K>, Se
         if (cache.remove(resultSetKey) != null)
         {
             debug(String.format("Result set for key '%s' has been removed.", resultSetKey));
-        } else
-        {
-            operationLog.warn(String.format("No result set for key '%s' could be found.",
-                    resultSetKey));
         }
     }
 
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/query/client/web/client/application/QuerySectionPanel.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/query/client/web/client/application/QuerySectionPanel.java
index de129d4e26eab2023cd146cd2ebfe6462bdb7537..c30e48d37202d761c232f6e9a8ef3937c4469bdc 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/query/client/web/client/application/QuerySectionPanel.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/query/client/web/client/application/QuerySectionPanel.java
@@ -24,6 +24,7 @@ import com.extjs.gxt.ui.client.widget.Component;
 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.DatabaseModificationAwareComponent;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.IDatabaseModificationObserver;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.IDisposableComponent;
 import ch.systemsx.cisd.openbis.generic.shared.basic.IEntityInformationHolderWithPermId;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DatabaseModificationKind;
@@ -77,6 +78,11 @@ final class QuerySectionPanel extends DisposableTabContent
                 @Override
                 public void dispose()
                 {
+                    IDatabaseModificationObserver mobserver = viewer.getModificationObserver();
+                    if (mobserver instanceof IDisposableComponent)
+                    {
+                        ((IDisposableComponent) mobserver).dispose();
+                    }
                 }
 
                 @Override
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/query/client/web/client/application/module/QueryBrowserGrid.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/query/client/web/client/application/module/QueryBrowserGrid.java
index 65ef16ec674084d6db207da4a22437c766b647ae..4e6ed101a76b5ca673f28d3fdbc321e934073a03 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/query/client/web/client/application/module/QueryBrowserGrid.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/query/client/web/client/application/module/QueryBrowserGrid.java
@@ -109,12 +109,14 @@ public class QueryBrowserGrid extends TypedTableGrid<QueryExpression>
             IViewContext<IQueryClientServiceAsync> viewContext)
     {
         QueryBrowserGrid browser = new QueryBrowserGrid(viewContext);
-        return new DatabaseModificationAwareComponent(browser, browser);
+        return new DatabaseModificationAwareComponent(browser, browser.asDisposableWithoutToolbar());
     }
 
     @SuppressWarnings("hiding")
     private final IViewContext<IQueryClientServiceAsync> viewContext;
 
+    private QueryEditor queryEditor;
+
     QueryBrowserGrid(IViewContext<IQueryClientServiceAsync> viewContext)
     {
         super(viewContext.getCommonViewContext(), BROWSER_ID, true,
@@ -123,6 +125,16 @@ public class QueryBrowserGrid extends TypedTableGrid<QueryExpression>
         extendBottomToolbar();
     }
 
+    @Override
+    protected void disposeCache()
+    {
+        if (queryEditor != null)
+        {
+            queryEditor.dispose();
+        }
+        super.disposeCache();
+    }
+
     private void extendBottomToolbar()
     {
         addEntityOperationsLabel();
@@ -133,8 +145,11 @@ public class QueryBrowserGrid extends TypedTableGrid<QueryExpression>
                                 @Override
                                 public void componentSelected(ButtonEvent ce)
                                 {
-                                    new QueryEditor(viewContext, null, createRefreshGridAction(),
-                                            getWidth(), getHeight()).show();
+                                    queryEditor =
+                                            new QueryEditor(viewContext, null,
+                                                    createRefreshGridAction(), getWidth(),
+                                                    getHeight());
+                                    queryEditor.show();
                                 }
 
                             });
@@ -152,15 +167,19 @@ public class QueryBrowserGrid extends TypedTableGrid<QueryExpression>
                                 {
                                     QueryExpression query =
                                             selectedItem.getBaseObject().getObjectOrNull();
-                                    new QueryEditor(viewContext, query, createRefreshGridAction(),
-                                            getWidth(), getHeight()).show();
+                                    queryEditor =
+                                            new QueryEditor(viewContext, query,
+                                                    createRefreshGridAction(), getWidth(),
+                                                    getHeight());
+                                    queryEditor.show();
                                 }
 
                             });
         addButton(editButton);
         Button deleteButton =
                 createSelectedItemsButton(
-                        viewContext.getMessage(ch.systemsx.cisd.openbis.generic.client.web.client.application.Dict.BUTTON_DELETE),
+                        viewContext
+                                .getMessage(ch.systemsx.cisd.openbis.generic.client.web.client.application.Dict.BUTTON_DELETE),
                         new AbstractCreateDialogListener()
                             {
                                 @Override
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/query/client/web/client/application/module/QueryEditor.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/query/client/web/client/application/module/QueryEditor.java
index f15ff750bb922ae40d73c76ea16f651e62058782..c48fc2c81d7431dec5865b082bf4210c73990950 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/query/client/web/client/application/module/QueryEditor.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/query/client/web/client/application/module/QueryEditor.java
@@ -28,6 +28,7 @@ import com.extjs.gxt.ui.client.event.Events;
 import com.extjs.gxt.ui.client.event.Listener;
 import com.extjs.gxt.ui.client.event.SelectionChangedEvent;
 import com.extjs.gxt.ui.client.event.SelectionListener;
+import com.extjs.gxt.ui.client.widget.Component;
 import com.extjs.gxt.ui.client.widget.Dialog;
 import com.extjs.gxt.ui.client.widget.Window;
 import com.extjs.gxt.ui.client.widget.button.Button;
@@ -78,7 +79,7 @@ import ch.systemsx.cisd.openbis.plugin.query.shared.basic.dto.QueryParameterBind
 /**
  * @author Franz-Josef Elmer
  */
-public class QueryEditor extends Dialog
+public class QueryEditor extends Dialog implements IDisposableComponent
 {
     public static final String ID = Constants.QUERY_ID_PREFIX + "_query_editor";
 
@@ -196,6 +197,8 @@ public class QueryEditor extends Dialog
 
     private final QueryDatabaseSelectionWidget queryDatabaseSelectionWidget;
 
+    private IDisposableComponent reportAsDisposable;
+
     // entity type selection widgets (not more than one will be shown at the same time)
 
     private MaterialTypeSelectionWidget materialTypeField;
@@ -279,6 +282,21 @@ public class QueryEditor extends Dialog
         setWidth(parentWidth);
     }
 
+    @Override
+    public Component getComponent()
+    {
+        return this;
+    }
+
+    @Override
+    public void dispose()
+    {
+        if (reportAsDisposable != null)
+        {
+            reportAsDisposable.dispose();
+        }
+    }
+
     private void createEntityTypeFields()
     {
         final IViewContext<ICommonClientServiceAsync> commonViewContext =
@@ -484,11 +502,13 @@ public class QueryEditor extends Dialog
         return testButton;
     }
 
+    @Override
     public DatabaseModificationKind[] getRelevantModifications()
     {
         return new DatabaseModificationKind[0];
     }
 
+    @Override
     public void update(Set<DatabaseModificationKind> observedModifications)
     {
     }
@@ -571,7 +591,9 @@ public class QueryEditor extends Dialog
                 public void execute(final IDisposableComponent reportComponent)
                 {
                     removeAll();
+                    dispose();
                     add(reportComponent.getComponent());
+                    reportAsDisposable = reportComponent;
                     if (getHeight() < parentHeight)
                     {
                         setHeight(parentHeight);
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/query/client/web/client/application/module/QueryViewer.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/query/client/web/client/application/module/QueryViewer.java
index b89b98e0b9d07bab25df8b135b5e60b4cfe00d57..d13001d451bdb71c5573dcc99517ac5705e6e906 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/query/client/web/client/application/module/QueryViewer.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/query/client/web/client/application/module/QueryViewer.java
@@ -43,7 +43,8 @@ import ch.systemsx.cisd.openbis.plugin.query.shared.basic.dto.QueryParameterBind
 /**
  * @author Piotr Buczek
  */
-public class QueryViewer extends ContentPanel implements IDatabaseModificationObserver
+public class QueryViewer extends ContentPanel implements IDatabaseModificationObserver,
+        IDisposableComponent
 {
 
     public static DatabaseModificationAwareComponent create(
@@ -57,6 +58,8 @@ public class QueryViewer extends ContentPanel implements IDatabaseModificationOb
 
     private final IViewContext<IQueryClientServiceAsync> viewContext;
 
+    private IDisposableComponent currentGridAsDisposable;
+
     private Component currentGridOrNull;
 
     private final IQueryProvider queryProvider;
@@ -130,6 +133,21 @@ public class QueryViewer extends ContentPanel implements IDatabaseModificationOb
         queryProvider.update(observedModifications);
     }
 
+    @Override
+    public Component getComponent()
+    {
+        return this;
+    }
+
+    @Override
+    public void dispose()
+    {
+        if (currentGridAsDisposable != null)
+        {
+            currentGridAsDisposable.dispose();
+        }
+    }
+
     private IReportInformationProvider createReportInformationProvider(final String sqlQuery,
             final Long queryIdOrNull)
     {
@@ -169,7 +187,9 @@ public class QueryViewer extends ContentPanel implements IDatabaseModificationOb
                     if (currentGridOrNull != null)
                     {
                         remove(currentGridOrNull);
+                        dispose();
                     }
+                    currentGridAsDisposable = reportComponent;
                     currentGridOrNull = reportComponent.getComponent();
                     add(currentGridOrNull);
                     layout();
diff --git a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/proteomics/client/web/client/application/ExperimentViewer.java b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/proteomics/client/web/client/application/ExperimentViewer.java
index 6d978a9d45200af81cd3b42c74c72b9b900b4f7f..6c68e0977c755c6317fae9ac98af242a47901116 100644
--- a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/proteomics/client/web/client/application/ExperimentViewer.java
+++ b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/proteomics/client/web/client/application/ExperimentViewer.java
@@ -35,6 +35,7 @@ import com.google.gwt.user.client.ui.Widget;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.AbstractAsyncCallback;
 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.VoidAsyncCallback;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.DatabaseModificationAwareComponent;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.renderer.LinkRenderer;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.data.ProcessingDisplayCallback;
@@ -42,6 +43,7 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.ID
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.lang.StringEscapeUtils;
 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.ResultSet;
 import ch.systemsx.cisd.openbis.generic.client.web.client.dto.TypedTableResultSet;
 import ch.systemsx.cisd.openbis.generic.shared.basic.GridRowModel;
 import ch.systemsx.cisd.openbis.generic.shared.basic.IIdAndCodeHolder;
@@ -131,8 +133,12 @@ public class ExperimentViewer extends GenericExperimentViewer
     private AsyncCallback<List<DatastoreServiceDescription>> createCallback(
             final ContentPanel contentPanel, TypedTableResultSet<AbstractExternalData> result)
     {
+        ResultSet<TableModelRowWithObject<AbstractExternalData>> resultSet = result.getResultSet();
+        String resultSetKey = resultSet.getResultSetKey();
+        viewContext.getCommonService().removeResultSet(resultSetKey,
+                new VoidAsyncCallback<Void>(viewContext));
         final List<String> dataSetCodes = new ArrayList<String>();
-        for (GridRowModel<TableModelRowWithObject<AbstractExternalData>> gridRowModel : result.getResultSet().getList())
+        for (GridRowModel<TableModelRowWithObject<AbstractExternalData>> gridRowModel : resultSet.getList())
         {
             dataSetCodes.add(gridRowModel.getOriginalObject().getObjectOrNull().getCode());
         }