diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/ICommonClientService.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/ICommonClientService.java
index 1581955c3a797312ab0de6628f6790f14a5b2711..237890b965a2f68d57d599a11b17e7966b7579f1 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/ICommonClientService.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/ICommonClientService.java
@@ -60,6 +60,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataSetType;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataStoreServiceKind;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataType;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DatastoreServiceDescription;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Deletion;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DeletionType;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DetailedSearchCriteria;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DynamicPropertyEvaluationInfo;
@@ -347,6 +348,13 @@ public interface ICommonClientService extends IClientService
             DefaultResultSetConfig<String, TableModelRowWithObject<Project>> criteria)
             throws UserFailureException;
 
+    /**
+     * Returns a list of all deletions.
+     */
+    public TypedTableResultSet<Deletion> listDeletions(
+            DefaultResultSetConfig<String, TableModelRowWithObject<Deletion>> criteria)
+            throws UserFailureException;
+
     /**
      * Like {@link #prepareExportSamples(TableExportCriteria)}, but for projects.
      */
@@ -354,6 +362,13 @@ public interface ICommonClientService extends IClientService
             final TableExportCriteria<TableModelRowWithObject<Project>> criteria)
             throws UserFailureException;
 
+    /**
+     * Like {@link #prepareExportSamples(TableExportCriteria)}, but for deletions.
+     */
+    public String prepareExportDeletions(
+            final TableExportCriteria<TableModelRowWithObject<Deletion>> criteria)
+            throws UserFailureException;
+
     /**
      * Returns a list of all vocabularies.
      * <p>
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/ICommonClientServiceAsync.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/ICommonClientServiceAsync.java
index 77931500a1820a0778e7dabce847124376ea2995..045e0e58b99707810673038b50222c67a3898976 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/ICommonClientServiceAsync.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/ICommonClientServiceAsync.java
@@ -62,6 +62,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataSetType;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataStoreServiceKind;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataType;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DatastoreServiceDescription;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Deletion;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DeletionType;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DetailedSearchCriteria;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DynamicPropertyEvaluationInfo;
@@ -289,11 +290,21 @@ public interface ICommonClientServiceAsync extends IClientServiceAsync
             DefaultResultSetConfig<String, TableModelRowWithObject<Project>> criteria,
             final AsyncCallback<TypedTableResultSet<Project>> asyncCallback);
 
+    /** @see ICommonClientService#listDeletions(DefaultResultSetConfig) */
+    public void listDeletions(
+            DefaultResultSetConfig<String, TableModelRowWithObject<Deletion>> criteria,
+            final AsyncCallback<TypedTableResultSet<Deletion>> asyncCallback);
+
     /** @see ICommonClientService#prepareExportProjects(TableExportCriteria) */
     public void prepareExportProjects(
             TableExportCriteria<TableModelRowWithObject<Project>> exportCriteria,
             AsyncCallback<String> callback);
 
+    /** @see ICommonClientService#prepareExportDeletions(TableExportCriteria) */
+    public void prepareExportDeletions(
+            TableExportCriteria<TableModelRowWithObject<Deletion>> exportCriteria,
+            AsyncCallback<String> callback);
+
     /**
      * @see ICommonClientService#listVocabularies(boolean, boolean, DefaultResultSetConfig)
      */
@@ -899,14 +910,16 @@ public interface ICommonClientServiceAsync extends IClientServiceAsync
     /**
      * @see ICommonClientService#listGridCustomColumns(String, DefaultResultSetConfig)
      */
-    public void listGridCustomColumns(String gridId,
+    public void listGridCustomColumns(
+            String gridId,
             DefaultResultSetConfig<String, TableModelRowWithObject<GridCustomColumn>> resultSetConfig,
             AsyncCallback<TypedTableResultSet<GridCustomColumn>> callback);
 
     /**
      * @see ICommonClientService#prepareExportColumns(TableExportCriteria)
      */
-    public void prepareExportColumns(final TableExportCriteria<TableModelRowWithObject<GridCustomColumn>> criteria,
+    public void prepareExportColumns(
+            final TableExportCriteria<TableModelRowWithObject<GridCustomColumn>> criteria,
             AsyncCallback<String> asyncCallback);
 
     /** @see ICommonClientService#registerColumn(NewColumnOrFilter) */
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/Dict.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/Dict.java
index fe3ba287f1f3913c0f3d5a7c493152d2c98fc6fb..c7f489f94b0ebc568ce478e8de6bfe362859fa62 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/Dict.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/Dict.java
@@ -514,6 +514,12 @@ public abstract class Dict
     public static final String CANNOT_MODIFY_DELETED_ENTITY_MSG =
             "cannot_modify_deleted_entity_msg";
 
+    public static final String DELETION_BROWSER = "deletion_browser";
+
+    public static final String BUTTON_REVERT_DELETION = "button_revert_deletion";
+
+    public static final String BUTTON_DELETE_PERMANENTLY = "button_delete_permanently";
+
     //
     // Sample Viewer
     //
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/framework/ComponentProvider.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/framework/ComponentProvider.java
index 7664ceff6058d8d54e4c40815653e9c2092de81a..326ca8e8905d2655d9f5fa18795f01599f36d6de 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/framework/ComponentProvider.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/framework/ComponentProvider.java
@@ -35,6 +35,7 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.data.Da
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.data.DataSetTypeGrid;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.data.DataSetUploadForm;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.data.FileFormatTypeGrid;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.deletion.DeletionGrid;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.experiment.ExperimentBatchRegistrationPanel;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.experiment.ExperimentBrowserGrid;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.experiment.ExperimentRegistrationPanel;
@@ -953,6 +954,44 @@ public final class ComponentProvider
             };
     }
 
+    public final AbstractTabItemFactory getDeletionBrowser()
+    {
+        return new AbstractTabItemFactory()
+            {
+                @Override
+                public ITabItem create()
+                {
+                    IDisposableComponent component = DeletionGrid.create(viewContext);
+                    return createTab(getTabTitle(), component);
+                }
+
+                @Override
+                public String getId()
+                {
+                    return DeletionGrid.BROWSER_ID;
+                }
+
+                @Override
+                public HelpPageIdentifier getHelpPageIdentifier()
+                {
+                    return HelpPageIdentifier.createSpecific(getMessage(Dict.DELETION_BROWSER));
+                }
+
+                @Override
+                public String getTabTitle()
+                {
+                    return getMessage(Dict.DELETION_BROWSER);
+                }
+
+                @Override
+                public String tryGetLink()
+                {
+                    return null;
+                }
+
+            };
+    }
+
     public AbstractTabItemFactory getExperimentBrowser(final String initialSpaceOrNull,
             final String initialProjectOrNull, final String initialExperimentTypeOrNull)
     {
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/framework/DisplayTypeIDGenerator.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/framework/DisplayTypeIDGenerator.java
index 3b2075b08ac016e569506aab19ef79a6f826737a..19be3afc5618cb5bdf4cd854ee89098a3daff263 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/framework/DisplayTypeIDGenerator.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/framework/DisplayTypeIDGenerator.java
@@ -48,6 +48,8 @@ public enum DisplayTypeIDGenerator implements IDisplayTypeIDGenerator
 
     PROJECT_BROWSER_GRID("project-browser-grid"),
 
+    DELETION_BROWSER_GRID("deletion-browser-grid"),
+
     FILTER_BROWSER_GRID("filter-browser-grid"),
 
     CUSTOM_GRID_COLUMN_GRID("custom-grid-column-browser-grid"),
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/menu/TopMenu.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/menu/TopMenu.java
index 67623d3a69f474de70acd13d0f12d0072468a0e6..8dcf4440cf9da966ec33b4c019f85bac85d9c7f8 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/menu/TopMenu.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/menu/TopMenu.java
@@ -55,7 +55,7 @@ public class TopMenu extends LayoutContainer
         AUTHORIZATION_MENU_USERS, AUTHORIZATION_MENU_ROLES,
         AUTHORIZATION_MENU_AUTHORIZATION_GROUPS,
 
-        LOGGING_CONSOLE,
+        TRASH, LOGGING_CONSOLE,
 
         DATA_SET_MENU_SEARCH, DATA_SET_MENU_TYPES, DATA_SET_MENU_FILE_FORMATS,
         DATA_SET_MENU_UPLOAD, DATA_SET_MENU_UPLOAD_CLIENT, DATA_SET_MENU_MASS_UPDATE,
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/menu/administration/AdministrationMenu.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/menu/administration/AdministrationMenu.java
index e20df7990c37477cf8dd22212302b62f04f4aeba..2623232c7220868437a986248347d804db7020a1 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/menu/administration/AdministrationMenu.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/menu/administration/AdministrationMenu.java
@@ -51,6 +51,8 @@ public class AdministrationMenu extends TopMenuItem
         submenu.add(new AuthorizationMenu(messageProvider, componentProvider));
         submenu.add(new ActionMenu(TopMenu.ActionMenuKind.DATA_SET_MENU_FILE_FORMATS,
                 messageProvider, componentProvider.getFileFormatTypeBrowser()));
+        submenu.add(new ActionMenu(TopMenu.ActionMenuKind.TRASH, messageProvider, componentProvider
+                .getDeletionBrowser()));
         if (viewContext.isLoggingEnabled())
         {
             submenu.add(new ActionMenu(TopMenu.ActionMenuKind.LOGGING_CONSOLE, messageProvider,
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/deletion/DeletionGrid.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/deletion/DeletionGrid.java
new file mode 100644
index 0000000000000000000000000000000000000000..0687e35f454f18e59f372f0ac12be19a77cc809e
--- /dev/null
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/deletion/DeletionGrid.java
@@ -0,0 +1,163 @@
+/*
+ * Copyright 2009 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.generic.client.web.client.application.ui.deletion;
+
+import java.util.Arrays;
+import java.util.List;
+
+import com.extjs.gxt.ui.client.widget.MessageBox;
+import com.extjs.gxt.ui.client.widget.button.Button;
+import com.google.gwt.user.client.rpc.AsyncCallback;
+
+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.Dict;
+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.model.BaseEntityModel;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.renderer.PersonRenderer;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.TypedTableGrid;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.ColumnDefsAndConfigs;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.IDisposableComponent;
+import ch.systemsx.cisd.openbis.generic.client.web.client.dto.DefaultResultSetConfig;
+import ch.systemsx.cisd.openbis.generic.client.web.client.dto.DeletionGridColumnIDs;
+import ch.systemsx.cisd.openbis.generic.client.web.client.dto.TableExportCriteria;
+import ch.systemsx.cisd.openbis.generic.client.web.client.dto.TypedTableResultSet;
+import ch.systemsx.cisd.openbis.generic.client.web.client.exception.UserFailureException;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DatabaseModificationKind;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DatabaseModificationKind.ObjectKind;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Deletion;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.TableModelRowWithObject;
+
+/**
+ * Grid displaying deletions.
+ * 
+ * @author Piotr Buczek
+ */
+public class DeletionGrid extends TypedTableGrid<Deletion>
+{
+    // browser consists of the grid and the paging toolbar
+    public static final String BROWSER_ID = GenericConstants.ID_PREFIX + "deletion-browser";
+
+    public static final String GRID_ID = BROWSER_ID + TypedTableGrid.GRID_POSTFIX;
+
+    public static IDisposableComponent create(
+            final IViewContext<ICommonClientServiceAsync> viewContext)
+    {
+        final DeletionGrid grid = new DeletionGrid(viewContext);
+        grid.extendBottomToolbar();
+        return grid.asDisposableWithoutToolbar();
+    }
+
+    private DeletionGrid(IViewContext<ICommonClientServiceAsync> viewContext)
+    {
+        super(viewContext, BROWSER_ID, true, DisplayTypeIDGenerator.DELETION_BROWSER_GRID);
+    }
+
+    private void extendBottomToolbar()
+    {
+        addEntityOperationsLabel();
+
+        Button revertButton =
+                createSelectedItemButton(
+                        viewContext.getMessage(Dict.BUTTON_REVERT_DELETION),
+                        new ISelectedEntityInvoker<BaseEntityModel<TableModelRowWithObject<Deletion>>>()
+                            {
+                                public void invoke(
+                                        BaseEntityModel<TableModelRowWithObject<Deletion>> selectedItem,
+                                        boolean keyPressed)
+                                {
+                                    // TODO
+                                    MessageBox.info("Not implemented yet", "", null);
+                                }
+                            });
+        addButton(revertButton);
+
+        Button deletePermanentlyButton =
+                createSelectedItemButton(
+                        viewContext.getMessage(Dict.BUTTON_DELETE_PERMANENTLY),
+                        new ISelectedEntityInvoker<BaseEntityModel<TableModelRowWithObject<Deletion>>>()
+                            {
+                                public void invoke(
+                                        BaseEntityModel<TableModelRowWithObject<Deletion>> selectedItem,
+                                        boolean keyPressed)
+                                {
+                                    // TODO
+                                    MessageBox.info("Not implemented yet", "", null);
+                                }
+                            });
+        addButton(deletePermanentlyButton);
+        allowMultipleSelection(); // we allow deletion/revert of multiple deletions
+
+        addEntityOperationsSeparator();
+    }
+
+    @Override
+    protected String translateColumnIdToDictionaryKey(String columnID)
+    {
+        return columnID.toLowerCase();
+    }
+
+    @Override
+    protected ColumnDefsAndConfigs<TableModelRowWithObject<Deletion>> createColumnsDefinition()
+    {
+        ColumnDefsAndConfigs<TableModelRowWithObject<Deletion>> schema =
+                super.createColumnsDefinition();
+        schema.setGridCellRendererFor(DeletionGridColumnIDs.REASON,
+                createMultilineStringCellRenderer());
+        schema.setGridCellRendererFor(DeletionGridColumnIDs.REGISTRATOR,
+                PersonRenderer.REGISTRATOR_RENDERER);
+        return schema;
+    }
+
+    @Override
+    protected void listTableRows(
+            DefaultResultSetConfig<String, TableModelRowWithObject<Deletion>> resultSetConfig,
+            AsyncCallback<TypedTableResultSet<Deletion>> callback)
+    {
+        viewContext.getService().listDeletions(resultSetConfig, callback);
+    }
+
+    @Override
+    protected void prepareExportEntities(
+            TableExportCriteria<TableModelRowWithObject<Deletion>> exportCriteria,
+            AbstractAsyncCallback<String> callback)
+    {
+        viewContext.getService().prepareExportDeletions(exportCriteria, callback);
+    }
+
+    @Override
+    protected List<String> getColumnIdsOfFilters()
+    {
+        return Arrays.asList(DeletionGridColumnIDs.REGISTRATOR, DeletionGridColumnIDs.REASON);
+    }
+
+    @Override
+    protected void showEntityViewer(final TableModelRowWithObject<Deletion> row, boolean editMode,
+            boolean inBackground)
+    {
+        throw new UserFailureException("Operation is not supported.");
+    }
+
+    @Override
+    public DatabaseModificationKind[] getRelevantModifications()
+    {
+        return new DatabaseModificationKind[]
+            { DatabaseModificationKind.createOrDelete(ObjectKind.DELETION) };
+    }
+}
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/dto/DeletionGridColumnIDs.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/dto/DeletionGridColumnIDs.java
new file mode 100644
index 0000000000000000000000000000000000000000..97683c8beb5e8a8f6579c3a9a8f23dfcb4dec6a7
--- /dev/null
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/dto/DeletionGridColumnIDs.java
@@ -0,0 +1,34 @@
+/*
+ * Copyright 2011 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.generic.client.web.client.dto;
+
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.deletion.DeletionGrid;
+
+/**
+ * IDs of column of {@link DeletionGrid}.
+ * 
+ * @author Piotr Buczek
+ */
+public class DeletionGridColumnIDs
+{
+    public static final String REASON = "REASON";
+
+    public static final String REGISTRATOR = "REGISTRATOR";
+
+    public static final String REGISTRATION_DATE = "REGISTRATION_DATE";
+
+}
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/CommonClientService.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/CommonClientService.java
index 54af012ef0f5c091806d560ecca40d564a062834..12e5b0036f206276b920e71c1dd633571cf63a68 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/CommonClientService.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/CommonClientService.java
@@ -72,6 +72,7 @@ import ch.systemsx.cisd.openbis.generic.client.web.server.resultset.Authorizatio
 import ch.systemsx.cisd.openbis.generic.client.web.server.resultset.CacheManager;
 import ch.systemsx.cisd.openbis.generic.client.web.server.resultset.CustomGridColumnProvider;
 import ch.systemsx.cisd.openbis.generic.client.web.server.resultset.DataSetTypeProvider;
+import ch.systemsx.cisd.openbis.generic.client.web.server.resultset.DeletionsProvider;
 import ch.systemsx.cisd.openbis.generic.client.web.server.resultset.EntityTypeProvider;
 import ch.systemsx.cisd.openbis.generic.client.web.server.resultset.ExperimentProvider;
 import ch.systemsx.cisd.openbis.generic.client.web.server.resultset.FileFormatTypesProvider;
@@ -118,6 +119,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataSetTypePropertyType
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataStoreServiceKind;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataType;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DatastoreServiceDescription;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Deletion;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DeletionType;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DetailedSearchCriteria;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DynamicPropertyEvaluationInfo;
@@ -400,6 +402,12 @@ public final class CommonClientService extends AbstractClientService implements
         return prepareExportEntities(criteria);
     }
 
+    public String prepareExportDeletions(
+            TableExportCriteria<TableModelRowWithObject<Deletion>> criteria)
+    {
+        return prepareExportEntities(criteria);
+    }
+
     public String prepareExportVocabularies(
             final TableExportCriteria<TableModelRowWithObject<Vocabulary>> criteria)
     {
@@ -661,6 +669,15 @@ public final class CommonClientService extends AbstractClientService implements
         return listEntities(projectsProvider, criteria);
     }
 
+    public TypedTableResultSet<Deletion> listDeletions(
+            DefaultResultSetConfig<String, TableModelRowWithObject<Deletion>> criteria)
+            throws ch.systemsx.cisd.openbis.generic.client.web.client.exception.UserFailureException
+    {
+        DeletionsProvider deletionsProvider =
+                new DeletionsProvider(commonServer, getSessionToken());
+        return listEntities(deletionsProvider, criteria);
+    }
+
     public TypedTableResultSet<Vocabulary> listVocabularies(boolean withTerms,
             boolean excludeInternal,
             DefaultResultSetConfig<String, TableModelRowWithObject<Vocabulary>> criteria)
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/resultset/DeletionsProvider.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/resultset/DeletionsProvider.java
new file mode 100644
index 0000000000000000000000000000000000000000..11ec9dbc9095408c776144c14f8cf09e894db813
--- /dev/null
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/resultset/DeletionsProvider.java
@@ -0,0 +1,60 @@
+/*
+ * Copyright 2011 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.generic.client.web.server.resultset;
+
+import static ch.systemsx.cisd.openbis.generic.client.web.client.dto.DeletionGridColumnIDs.REASON;
+import static ch.systemsx.cisd.openbis.generic.client.web.client.dto.DeletionGridColumnIDs.REGISTRATION_DATE;
+import static ch.systemsx.cisd.openbis.generic.client.web.client.dto.DeletionGridColumnIDs.REGISTRATOR;
+
+import java.util.List;
+
+import ch.systemsx.cisd.openbis.generic.shared.ICommonServer;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Deletion;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.TypedTableModel;
+import ch.systemsx.cisd.openbis.generic.shared.util.TypedTableModelBuilder;
+
+/**
+ * Table model provider of {@link Deletion} instances.
+ * 
+ * @author Piotr Buczek
+ */
+public class DeletionsProvider extends AbstractCommonTableModelProvider<Deletion>
+{
+    public DeletionsProvider(ICommonServer commonServer, String sessionToken)
+    {
+        super(commonServer, sessionToken);
+    }
+
+    @Override
+    protected TypedTableModel<Deletion> createTableModel()
+    {
+        List<Deletion> deletions = commonServer.listDeletions(sessionToken);
+        TypedTableModelBuilder<Deletion> builder = new TypedTableModelBuilder<Deletion>();
+        builder.addColumn(REGISTRATION_DATE).withDefaultWidth(300);
+        builder.addColumn(REGISTRATOR).withDefaultWidth(200);
+        builder.addColumn(REASON).withDefaultWidth(500);
+        for (Deletion deletion : deletions)
+        {
+            builder.addRow(deletion);
+            builder.column(REGISTRATION_DATE).addDate(deletion.getRegistrationDate());
+            builder.column(REGISTRATOR).addPerson(deletion.getRegistrator());
+            builder.column(REASON).addString(deletion.getReason());
+        }
+        return builder.getModel();
+    }
+
+}
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/CommonServer.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/CommonServer.java
index 91f8738751d62de2a134d9119e2feb6e518a5fac..47c0c90045a26e00d4eb67f2fa6ee81be8dff100 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/CommonServer.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/CommonServer.java
@@ -103,6 +103,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataStoreServiceKind;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataType;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DatastoreServiceDescription;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DeletedDataSet;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Deletion;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DeletionType;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DetailedSearchCriteria;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DynamicPropertyEvaluationInfo;
@@ -173,6 +174,7 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.DataStorePE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.DataStoreServicePE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.DataTypePE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.DatabaseInstancePE;
+import ch.systemsx.cisd.openbis.generic.shared.dto.DeletionPE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.EntityPropertyPE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.EntityTypePE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.EntityTypePropertyTypePE;
@@ -216,10 +218,10 @@ import ch.systemsx.cisd.openbis.generic.shared.translator.DataSetTranslator;
 import ch.systemsx.cisd.openbis.generic.shared.translator.DataSetTypeTranslator;
 import ch.systemsx.cisd.openbis.generic.shared.translator.DataStoreServiceTranslator;
 import ch.systemsx.cisd.openbis.generic.shared.translator.DataTypeTranslator;
+import ch.systemsx.cisd.openbis.generic.shared.translator.DeletionTranslator;
 import ch.systemsx.cisd.openbis.generic.shared.translator.DtoConverters;
 import ch.systemsx.cisd.openbis.generic.shared.translator.ExperimentTranslator;
 import ch.systemsx.cisd.openbis.generic.shared.translator.GridCustomExpressionTranslator.GridCustomFilterTranslator;
-import ch.systemsx.cisd.openbis.generic.shared.translator.GroupTranslator;
 import ch.systemsx.cisd.openbis.generic.shared.translator.MaterialTranslator;
 import ch.systemsx.cisd.openbis.generic.shared.translator.MaterialTypeTranslator;
 import ch.systemsx.cisd.openbis.generic.shared.translator.PersonTranslator;
@@ -229,6 +231,7 @@ import ch.systemsx.cisd.openbis.generic.shared.translator.RoleAssignmentTranslat
 import ch.systemsx.cisd.openbis.generic.shared.translator.SampleTranslator;
 import ch.systemsx.cisd.openbis.generic.shared.translator.SampleTypeTranslator;
 import ch.systemsx.cisd.openbis.generic.shared.translator.ScriptTranslator;
+import ch.systemsx.cisd.openbis.generic.shared.translator.SpaceTranslator;
 import ch.systemsx.cisd.openbis.generic.shared.translator.TypeTranslator;
 import ch.systemsx.cisd.openbis.generic.shared.translator.VocabularyTermTranslator;
 import ch.systemsx.cisd.openbis.generic.shared.translator.VocabularyTranslator;
@@ -306,20 +309,28 @@ public final class CommonServer extends AbstractCommonServer<ICommonServerForInt
     // IGenericServer
     //
 
+    public final List<Deletion> listDeletions(final String sessionToken)
+    {
+        checkSession(sessionToken);
+        final List<DeletionPE> deletions = getDAOFactory().getDeletionDAO().listAllEntities();
+        Collections.sort(deletions);
+        return DeletionTranslator.translate(deletions);
+    }
+
     public final List<Space> listSpaces(final String sessionToken,
             final DatabaseInstanceIdentifier identifier)
     {
         final Session session = getSession(sessionToken);
         final DatabaseInstancePE databaseInstance =
                 GroupIdentifierHelper.getDatabaseInstance(identifier, getDAOFactory());
-        final List<SpacePE> groups = getDAOFactory().getSpaceDAO().listSpaces(databaseInstance);
-        final SpacePE homeGroupOrNull = session.tryGetHomeGroup();
-        for (final SpacePE group : groups)
+        final List<SpacePE> spaces = getDAOFactory().getSpaceDAO().listSpaces(databaseInstance);
+        final SpacePE homeSpaceOrNull = session.tryGetHomeGroup();
+        for (final SpacePE space : spaces)
         {
-            group.setHome(group.equals(homeGroupOrNull));
+            space.setHome(space.equals(homeSpaceOrNull));
         }
-        Collections.sort(groups);
-        return GroupTranslator.translate(groups);
+        Collections.sort(spaces);
+        return SpaceTranslator.translate(spaces);
     }
 
     public final void registerSpace(final String sessionToken, final String spaceCode,
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/CommonServerLogger.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/CommonServerLogger.java
index 0f9a000dce0c1cd5cc67c9add2eeeddaa57c47bd..dda316c338bb6755102b77fce5582f1c7c012693 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/CommonServerLogger.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/CommonServerLogger.java
@@ -41,6 +41,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataSetUpdateResult;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataStoreServiceKind;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataType;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DatastoreServiceDescription;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Deletion;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DeletionType;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DetailedSearchCriteria;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DynamicPropertyEvaluationInfo;
@@ -1125,4 +1126,9 @@ final class CommonServerLogger extends AbstractServerLogger implements ICommonSe
         return null;
     }
 
+    public List<Deletion> listDeletions(String sessionToken)
+    {
+        logAccess(sessionToken, "listDeletions");
+        return null;
+    }
 }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/ETLService.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/ETLService.java
index 76781234873662ac3aa02d91ea5e38d4e668073c..f2cc86e2880c491335a8771c6a40ba330f1f6fa2 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/ETLService.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/ETLService.java
@@ -154,7 +154,7 @@ import ch.systemsx.cisd.openbis.generic.shared.translator.EntityPropertyTranslat
 import ch.systemsx.cisd.openbis.generic.shared.translator.ExperimentTranslator;
 import ch.systemsx.cisd.openbis.generic.shared.translator.ExperimentTranslator.LoadableFields;
 import ch.systemsx.cisd.openbis.generic.shared.translator.ExperimentTypeTranslator;
-import ch.systemsx.cisd.openbis.generic.shared.translator.GroupTranslator;
+import ch.systemsx.cisd.openbis.generic.shared.translator.SpaceTranslator;
 import ch.systemsx.cisd.openbis.generic.shared.translator.MaterialTranslator;
 import ch.systemsx.cisd.openbis.generic.shared.translator.PersonTranslator;
 import ch.systemsx.cisd.openbis.generic.shared.translator.ProjectTranslator;
@@ -1099,7 +1099,7 @@ public class ETLService extends AbstractCommonServer<IETLLIMSService> implements
         try
         {
             groupBO.load(identifier);
-            return GroupTranslator.translate(groupBO.getGroup());
+            return SpaceTranslator.translate(groupBO.getGroup());
         } catch (UserFailureException ufe)
         {
             // space does not exist
@@ -1173,7 +1173,7 @@ public class ETLService extends AbstractCommonServer<IETLLIMSService> implements
                     registerSpaceInternal(session, newSpace, operationDetails.tryUserIdOrNull());
             spacePEsCreated.add(spacePE);
         }
-        return GroupTranslator.translate(spacePEsCreated);
+        return SpaceTranslator.translate(spacePEsCreated);
     }
 
     private List<Material> createMaterials(Session session,
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/InvalidationDAO.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/DeletionDAO.java
similarity index 98%
rename from openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/InvalidationDAO.java
rename to openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/DeletionDAO.java
index af281fe5d730d200eff866e6ab37cc4b4c83383e..ff6713ec3fd12b0d5aeafd33a45f07fcced13b9b 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/InvalidationDAO.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/DeletionDAO.java
@@ -33,8 +33,7 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.DeletionPE;
  * 
  * @author Christian Ribeaud
  */
-final class DeletionDAO extends AbstractGenericEntityDAO<DeletionPE> implements
-        IDeletionDAO
+final class DeletionDAO extends AbstractGenericEntityDAO<DeletionPE> implements IDeletionDAO
 {
 
     /**
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/HibernateSearchDataProvider.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/HibernateSearchDataProvider.java
index 2f78138485b48cd1033e7b45143c0b693e16ce0a..00c94c0bb6ee1403a10aae34318b3712e2bce41b 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/HibernateSearchDataProvider.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/dataaccess/db/HibernateSearchDataProvider.java
@@ -23,7 +23,7 @@ import java.util.Map;
 import ch.systemsx.cisd.openbis.generic.server.dataaccess.IDAOFactory;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Space;
 import ch.systemsx.cisd.openbis.generic.shared.dto.SpacePE;
-import ch.systemsx.cisd.openbis.generic.shared.translator.GroupTranslator;
+import ch.systemsx.cisd.openbis.generic.shared.translator.SpaceTranslator;
 
 /**
  * Encapsulates data provided to {@link HibernateSearchDAO} by other DAOs.
@@ -40,7 +40,7 @@ public class HibernateSearchDataProvider
         groupsById = new HashMap<String, Space>();
         for (SpacePE group : groups)
         {
-            groupsById.put(group.getId().toString(), GroupTranslator.translate(group));
+            groupsById.put(group.getId().toString(), SpaceTranslator.translate(group));
         }
     }
 
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/ICommonServer.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/ICommonServer.java
index 7a9be171becf15533ff53d32771ea8cc3cd79f5b..8d2ed5673eb6e92f33c3e4cb6f764ae155315b9f 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/ICommonServer.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/ICommonServer.java
@@ -45,6 +45,7 @@ import ch.systemsx.cisd.openbis.generic.shared.authorization.predicate.SampleTec
 import ch.systemsx.cisd.openbis.generic.shared.authorization.predicate.SampleTechIdPredicate;
 import ch.systemsx.cisd.openbis.generic.shared.authorization.predicate.SampleUpdatesPredicate;
 import ch.systemsx.cisd.openbis.generic.shared.authorization.predicate.SpaceIdentifierPredicate;
+import ch.systemsx.cisd.openbis.generic.shared.authorization.validator.DeletionValidator;
 import ch.systemsx.cisd.openbis.generic.shared.authorization.validator.ExpressionValidator;
 import ch.systemsx.cisd.openbis.generic.shared.authorization.validator.ExternalDataValidator;
 import ch.systemsx.cisd.openbis.generic.shared.authorization.validator.MatchingEntityValidator;
@@ -68,6 +69,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataStoreServiceKind;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataType;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DatabaseModificationKind.ObjectKind;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DatastoreServiceDescription;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Deletion;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DeletionType;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DetailedSearchCriteria;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DynamicPropertyEvaluationInfo;
@@ -159,7 +161,7 @@ public interface ICommonServer extends IServer
             EntityKind entityKindOrNull);
 
     /**
-     * Returns all spaces which belong to the specified database instance. *
+     * Returns deletions which belong to the specified database instance. *
      * 
      * @return a sorted list of {@link Space}.
      */
@@ -753,7 +755,8 @@ public interface ICommonServer extends IServer
      */
     @Transactional
     @RolesAllowed(RoleWithHierarchy.SPACE_POWER_USER)
-    @DatabaseCreateOrDeleteModification(value = ObjectKind.DATA_SET)
+    @DatabaseCreateOrDeleteModification(value =
+        { ObjectKind.DATA_SET, ObjectKind.DELETION })
     public void deleteDataSets(String sessionToken,
             @AuthorizationGuard(guardClass = DataSetCodePredicate.class) List<String> dataSetCodes,
             String reason, DeletionType type);
@@ -763,7 +766,8 @@ public interface ICommonServer extends IServer
      */
     @Transactional
     @RolesAllowed(RoleWithHierarchy.SPACE_POWER_USER)
-    @DatabaseCreateOrDeleteModification(value = ObjectKind.SAMPLE)
+    @DatabaseCreateOrDeleteModification(value =
+        { ObjectKind.SAMPLE, ObjectKind.DELETION })
     public void deleteSamples(
             String sessionToken,
             @AuthorizationGuard(guardClass = SampleTechIdCollectionPredicate.class) List<TechId> sampleIds,
@@ -774,7 +778,8 @@ public interface ICommonServer extends IServer
      */
     @Transactional
     @RolesAllowed(RoleWithHierarchy.SPACE_POWER_USER)
-    @DatabaseCreateOrDeleteModification(value = ObjectKind.EXPERIMENT)
+    @DatabaseCreateOrDeleteModification(value =
+        { ObjectKind.EXPERIMENT, ObjectKind.DELETION })
     public void deleteExperiments(
             String sessionToken,
             @AuthorizationGuard(guardClass = ExperimentTechIdPredicate.class) List<TechId> experimentIds,
@@ -1424,4 +1429,14 @@ public interface ICommonServer extends IServer
     public void updateMaterialProperties(String sessionToken, TechId entityId,
             List<PropertyUpdates> modifiedProperties);
 
+    /**
+     * Returns all deletions.
+     * 
+     * @return a sorted list of {@link Deletion}.
+     */
+    @Transactional(readOnly = true)
+    @RolesAllowed(RoleWithHierarchy.SPACE_USER)
+    @ReturnValueFilter(validatorClass = DeletionValidator.class)
+    public List<Deletion> listDeletions(String sessionToken);
+
 }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/authorization/validator/DeletionValidator.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/authorization/validator/DeletionValidator.java
new file mode 100644
index 0000000000000000000000000000000000000000..ca764177d9d3a5b63f3af3d728c98ee996c26831
--- /dev/null
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/authorization/validator/DeletionValidator.java
@@ -0,0 +1,68 @@
+/*
+ * Copyright 2008 ETH Zuerich, CISD
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package ch.systemsx.cisd.openbis.generic.shared.authorization.validator;
+
+import java.util.Set;
+
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Deletion;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Person;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.RoleWithHierarchy.RoleCode;
+import ch.systemsx.cisd.openbis.generic.shared.dto.DatabaseInstancePE;
+import ch.systemsx.cisd.openbis.generic.shared.dto.PersonPE;
+import ch.systemsx.cisd.openbis.generic.shared.dto.RoleAssignmentPE;
+
+/**
+ * A {@link IValidator} implementation for a {@link Deletion}.
+ * 
+ * @author Izabela Adamczyk
+ */
+public final class DeletionValidator extends AbstractValidator<Deletion>
+{
+    //
+    // IValidator
+    //
+
+    @Override
+    public final boolean doValidation(final PersonPE person, final Deletion value)
+    {
+        // only creator of deletion and instance admin can see it
+        return isRegistrator(person, value) || isInstanceAdmin(person);
+    }
+
+    private boolean isRegistrator(final PersonPE person, final Deletion value)
+    {
+        Person registrator = value.getRegistrator();
+        return person.getUserId().equals(registrator.getUserId())
+                && person.getDatabaseInstance().getCode()
+                        .equals(registrator.getDatabaseInstance().getCode());
+    }
+
+    private static boolean isInstanceAdmin(final PersonPE person)
+    {
+        final Set<RoleAssignmentPE> roleAssignments = person.getAllPersonRoles();
+        for (final RoleAssignmentPE roleAssignment : roleAssignments)
+        {
+            final DatabaseInstancePE roleInstance = roleAssignment.getDatabaseInstance();
+            if (roleInstance != null && roleAssignment.getRole().equals(RoleCode.ADMIN))
+            {
+                return true;
+            }
+        }
+        return false;
+    }
+
+}
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/DatabaseModificationKind.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/DatabaseModificationKind.java
index ff0fb02698444d9467758c18dd11cd79ad26c704..a2c14cd880c311eaee43fd4085eae449d1fccf03 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/DatabaseModificationKind.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/DatabaseModificationKind.java
@@ -40,7 +40,7 @@ public class DatabaseModificationKind implements ISerializable
         AUTHORIZATION_GROUP, SAMPLE, EXPERIMENT, MATERIAL, DATA_SET, SAMPLE_TYPE, EXPERIMENT_TYPE,
         MATERIAL_TYPE, DATASET_TYPE, FILE_FORMAT_TYPE, PROJECT, SPACE, PROPERTY_TYPE,
         PROPERTY_TYPE_ASSIGNMENT, VOCABULARY, VOCABULARY_TERM, ROLE_ASSIGNMENT, PERSON,
-        GRID_CUSTOM_FILTER, GRID_CUSTOM_COLUMN, SCRIPT,
+        GRID_CUSTOM_FILTER, GRID_CUSTOM_COLUMN, SCRIPT, DELETION,
         // TODO 2010-02-19, PTR: no easy way to extend current modification notification solution in
         // modules
         QUERY
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/DeletionPE.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/DeletionPE.java
index acf01af7d9f0017cecf6021a0128a3f214cfe0fc..074a474e733963af00770d7d32d03f5fb21251d2 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/DeletionPE.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/DeletionPE.java
@@ -43,7 +43,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.IIdHolder;
 @Entity
 @Table(name = TableNames.DELETIONS_TABLE)
 public class DeletionPE extends HibernateAbstractRegistrationHolder implements IIdHolder,
-        Serializable
+        Serializable, Comparable<DeletionPE>
 {
     private static final long serialVersionUID = IServer.VERSION;
 
@@ -106,4 +106,13 @@ public class DeletionPE extends HibernateAbstractRegistrationHolder implements I
         return ToStringBuilder.reflectionToString(this,
                 ModifiedShortPrefixToStringStyle.MODIFIED_SHORT_PREFIX_STYLE);
     }
+
+    //
+    // Comparable - registration date based
+    //
+
+    public final int compareTo(final DeletionPE o)
+    {
+        return this.getRegistrationDate().compareTo(o.getRegistrationDate());
+    }
 }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/translator/DataSetTranslator.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/translator/DataSetTranslator.java
index 8c983621afb7cd0817128e30b9b65694ec690e1c..0a0d867e6c64fbf65e19836d80d7069effc9f696 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/translator/DataSetTranslator.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/translator/DataSetTranslator.java
@@ -234,7 +234,7 @@ public class DataSetTranslator
         sample.setIdentifier(samplePE.getSampleIdentifier().toString());
         sample.setRegistrationDate(samplePE.getRegistrationDate());
         sample.setRegistrator(PersonTranslator.translate(samplePE.getRegistrator()));
-        sample.setSpace(GroupTranslator.translate(samplePE.getSpace()));
+        sample.setSpace(SpaceTranslator.translate(samplePE.getSpace()));
         if (loadSampleProperties)
         {
             sample.setProperties(EntityPropertyTranslator.translate(samplePE.getProperties(),
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/translator/DeletionTranslator.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/translator/DeletionTranslator.java
index aa5a8f8f16de396d1a2c234b51f0a1f3a9bd939d..09e8eb1d8a37698ab68b3125f70b3f586e081112 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/translator/DeletionTranslator.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/translator/DeletionTranslator.java
@@ -16,6 +16,9 @@
 
 package ch.systemsx.cisd.openbis.generic.shared.translator;
 
+import java.util.ArrayList;
+import java.util.List;
+
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Deletion;
 import ch.systemsx.cisd.openbis.generic.shared.dto.DeletionPE;
 
@@ -32,6 +35,16 @@ public final class DeletionTranslator
         // Can not be instantiated.
     }
 
+    public final static List<Deletion> translate(final List<DeletionPE> deletions)
+    {
+        final List<Deletion> result = new ArrayList<Deletion>();
+        for (final DeletionPE deletion : deletions)
+        {
+            result.add(translate(deletion));
+        }
+        return result;
+    }
+
     public final static Deletion translate(final DeletionPE deletion)
     {
         if (deletion == null)
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/translator/ProjectTranslator.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/translator/ProjectTranslator.java
index 457ea9f2260fbe16731d3823825b078594c2e250..994388cd2df9dcee46bdac79203ba4494a73f1ed 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/translator/ProjectTranslator.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/translator/ProjectTranslator.java
@@ -61,7 +61,7 @@ public final class ProjectTranslator
         result.setModificationDate(project.getModificationDate());
         result.setCode(project.getCode());
         result.setDescription(project.getDescription());
-        result.setSpace(GroupTranslator.translate(project.getSpace()));
+        result.setSpace(SpaceTranslator.translate(project.getSpace()));
         result.setProjectLeader(PersonTranslator.translate(project.getProjectLeader()));
         result.setRegistrator(PersonTranslator.translate(project.getRegistrator()));
         result.setRegistrationDate(project.getRegistrationDate());
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/translator/RoleAssignmentTranslator.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/translator/RoleAssignmentTranslator.java
index 6409fd7a7dc4d1589c20d0b68d05a2d55003e9be..3bb46d41df4c51211495cbce166ec8d4fea6a501 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/translator/RoleAssignmentTranslator.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/translator/RoleAssignmentTranslator.java
@@ -53,7 +53,7 @@ public final class RoleAssignmentTranslator
             return null;
         }
         final RoleAssignment result = new RoleAssignment();
-        result.setSpace(GroupTranslator.translate(role.getSpace()));
+        result.setSpace(SpaceTranslator.translate(role.getSpace()));
         result.setInstance(DatabaseInstanceTranslator.translate(role.getDatabaseInstance()));
         result.setPerson(PersonTranslator.translate(role.getPerson()));
         result.setAuthorizationGroup(AuthorizationGroupTranslator.translate(role
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/translator/SampleTranslator.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/translator/SampleTranslator.java
index b3eca0dbc92c60eb23696b3217b3aaa78250e94a..8baf95917482bed472b991cfe69fe2368f534e67 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/translator/SampleTranslator.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/translator/SampleTranslator.java
@@ -99,7 +99,7 @@ public final class SampleTranslator
                 new HashMap<PropertyTypePE, PropertyType>()));
         if (withDetails)
         {
-            result.setSpace(GroupTranslator.translate(samplePE.getSpace()));
+            result.setSpace(SpaceTranslator.translate(samplePE.getSpace()));
             result.setDatabaseInstance(DatabaseInstanceTranslator.translate(samplePE
                     .getDatabaseInstance()));
             result.setRegistrator(PersonTranslator.translate(samplePE.getRegistrator()));
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/translator/GroupTranslator.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/translator/SpaceTranslator.java
similarity index 73%
rename from openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/translator/GroupTranslator.java
rename to openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/translator/SpaceTranslator.java
index cbf2b928f51342ac539272acc038ff20fbf229c0..1b9272b0fbe5903d8732174a7d4a06f46108e683 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/translator/GroupTranslator.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/translator/SpaceTranslator.java
@@ -29,37 +29,37 @@ import ch.systemsx.cisd.openbis.generic.shared.util.HibernateUtils;
  * 
  * @author Franz-Josef Elmer
  */
-public final class GroupTranslator
+public final class SpaceTranslator
 {
-    private GroupTranslator()
+    private SpaceTranslator()
     {
         // Can not be instantiated.
     }
 
-    public final static List<Space> translate(final List<SpacePE> groups)
+    public final static List<Space> translate(final List<SpacePE> spaces)
     {
         final List<Space> result = new ArrayList<Space>();
-        for (final SpacePE group : groups)
+        for (final SpacePE space : spaces)
         {
-            result.add(GroupTranslator.translate(group));
+            result.add(SpaceTranslator.translate(space));
         }
         return result;
     }
 
-    public static Space translate(final SpacePE group)
+    public static Space translate(final SpacePE space)
     {
-        if (group == null)
+        if (space == null)
         {
             return null;
         }
         final Space result = new Space();
-        result.setId(HibernateUtils.getId(group));
-        result.setCode(group.getCode());
-        result.setDescription(group.getDescription());
-        result.setInstance(DatabaseInstanceTranslator.translate(group.getDatabaseInstance()));
-        result.setRegistrationDate(group.getRegistrationDate());
-        result.setRegistrator(PersonTranslator.translate(group.getRegistrator()));
-        result.setIdentifier(IdentifierHelper.createGroupIdentifier(group).toString());
+        result.setId(HibernateUtils.getId(space));
+        result.setCode(space.getCode());
+        result.setDescription(space.getDescription());
+        result.setInstance(DatabaseInstanceTranslator.translate(space.getDatabaseInstance()));
+        result.setRegistrationDate(space.getRegistrationDate());
+        result.setRegistrator(PersonTranslator.translate(space.getRegistrator()));
+        result.setIdentifier(IdentifierHelper.createGroupIdentifier(space).toString());
         return result;
     }
 }
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/CommonServerTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/CommonServerTest.java
index e7723b0d5f4cada627e755445cb56aa35b8d39b9..8673d8ad09ad42e65ff3c09eae7656de69bfe8a0 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/CommonServerTest.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/CommonServerTest.java
@@ -96,7 +96,7 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.ProjectIdentifier;
 import ch.systemsx.cisd.openbis.generic.shared.translator.DataSetTranslator;
 import ch.systemsx.cisd.openbis.generic.shared.translator.DtoConverters;
 import ch.systemsx.cisd.openbis.generic.shared.translator.ExperimentTranslator;
-import ch.systemsx.cisd.openbis.generic.shared.translator.GroupTranslator;
+import ch.systemsx.cisd.openbis.generic.shared.translator.SpaceTranslator;
 import ch.systemsx.cisd.openbis.generic.shared.translator.MaterialTypeTranslator;
 import ch.systemsx.cisd.openbis.generic.shared.translator.PersonTranslator;
 
@@ -357,8 +357,8 @@ public final class CommonServerTest extends AbstractServerTestCase
 
         final List<Space> groups = createServer().listSpaces(SESSION_TOKEN, identifier);
 
-        assertEquals(GroupTranslator.translate(g1), groups.get(0));
-        assertEquals(GroupTranslator.translate(g2), groups.get(1));
+        assertEquals(SpaceTranslator.translate(g1), groups.get(0));
+        assertEquals(SpaceTranslator.translate(g2), groups.get(1));
         assertEquals(2, groups.size());
         assertEquals(true, g1.isHome().booleanValue());
         assertEquals(false, g2.isHome().booleanValue());
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/authorization/validator/GroupValidatorTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/authorization/validator/GroupValidatorTest.java
index c4cf4e9b884da13dab04c7be8c6f9cbe339a9cb5..e268d6764624045ba7dc7e13c6c02999949720cc 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/authorization/validator/GroupValidatorTest.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/authorization/validator/GroupValidatorTest.java
@@ -23,7 +23,7 @@ import ch.systemsx.cisd.openbis.generic.shared.authorization.AuthorizationTestCa
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Space;
 import ch.systemsx.cisd.openbis.generic.shared.dto.SpacePE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.PersonPE;
-import ch.systemsx.cisd.openbis.generic.shared.translator.GroupTranslator;
+import ch.systemsx.cisd.openbis.generic.shared.translator.SpaceTranslator;
 
 /**
  * Test cases for corresponding {@link SpaceValidator} class.
@@ -53,7 +53,7 @@ public final class GroupValidatorTest extends AuthorizationTestCase
         final SpaceValidator groupValidator = new SpaceValidator();
         final PersonPE personPE = createPerson();
         final SpacePE groupPE = createGroup();
-        final Space space = GroupTranslator.translate(groupPE);
+        final Space space = SpaceTranslator.translate(groupPE);
         
         assertFalse(groupValidator.isValid(personPE, space));
 
@@ -66,7 +66,7 @@ public final class GroupValidatorTest extends AuthorizationTestCase
         final SpaceValidator groupValidator = new SpaceValidator();
         final PersonPE personPE = createPersonWithRoleAssignments();
         final SpacePE groupPE = createAnotherGroup();
-        final Space space = GroupTranslator.translate(groupPE);
+        final Space space = SpaceTranslator.translate(groupPE);
         assertTrue(groupValidator.isValid(personPE, space));
         context.assertIsSatisfied();
     }
@@ -77,7 +77,7 @@ public final class GroupValidatorTest extends AuthorizationTestCase
         final SpaceValidator groupValidator = new SpaceValidator();
         final PersonPE personPE = createPersonWithRoleAssignments();
         final SpacePE groupPE = createGroup();
-        final Space space = GroupTranslator.translate(groupPE);
+        final Space space = SpaceTranslator.translate(groupPE);
         assertTrue(groupValidator.isValid(personPE, space));
         context.assertIsSatisfied();
     }
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/authorization/validator/MatchingEntityValidatorTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/authorization/validator/MatchingEntityValidatorTest.java
index 89fa66997371aeabeb5e5438c9871b500c84b70d..3bfdbb31a80f9cb63aa5e09fe1071c99de6445ed 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/authorization/validator/MatchingEntityValidatorTest.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/authorization/validator/MatchingEntityValidatorTest.java
@@ -28,7 +28,7 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.IMatchingEntity;
 import ch.systemsx.cisd.openbis.generic.shared.dto.PersonPE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.SamplePE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.properties.EntityKind;
-import ch.systemsx.cisd.openbis.generic.shared.translator.GroupTranslator;
+import ch.systemsx.cisd.openbis.generic.shared.translator.SpaceTranslator;
 
 /**
  * Test cases for corresponding {@link MatchingEntityValidator} class.
@@ -45,7 +45,7 @@ public final class MatchingEntityValidatorTest extends AuthorizationTestCase
     private static MatchingEntity asMatchingEntityStub(IMatchingEntity matchingEntity)
     {
         final MatchingEntity result = new MatchingEntity();
-        result.setSpace(GroupTranslator.translate(tryGetGroup(matchingEntity)));
+        result.setSpace(SpaceTranslator.translate(tryGetGroup(matchingEntity)));
         return result;
     }