diff --git a/openbis/dist/server/web-client.properties b/openbis/dist/server/web-client.properties
index 14d50a0e7c06d923383b2f149a9c318dc2028bbb..fe408435c107642294b93a4715aeb724ec7cbdbb 100644
--- a/openbis/dist/server/web-client.properties
+++ b/openbis/dist/server/web-client.properties
@@ -1,3 +1,7 @@
+# Experimental: Enable moving entities to trash (non-permanent deletion).
+# Default value: false
+#enable-trash = true
+
 # Default view mode that should be used if user doesn't have it specified in URL. 
 # Options: 
 #  'NORMAL' (standard mode - default), 
diff --git a/openbis/etc/web-client.properties b/openbis/etc/web-client.properties
index 80f1f99e8b21e16b10f03c86a0e4019802a07d3a..f946e8e9637b650d76c5bb464b0dffb5d75843af 100644
--- a/openbis/etc/web-client.properties
+++ b/openbis/etc/web-client.properties
@@ -1,3 +1,7 @@
+# Experimental: Enable moving entities to trash (non-permanent deletion).
+# Default value: false
+enable-trash = true
+
 # Default view mode that should be used if user doesn't have it specified in URL. 
 # Options: 'NORMAL' (standard mode - default), 'SIMPLE' (readonly mode with simplified GUI). 
 #
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 ae9bf247e8eada6a8ae597fa2576dc4bd3ebc784..1be451d3979869add42b747189ba376e053001c3 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
@@ -124,7 +124,11 @@ public class TopMenu extends LayoutContainer
         toolBar.add(new SearchWidget(viewContext));
         toolBar.add(new SeparatorToolItem());
         toolBar.add(new InfoButton(viewContext));
-        toolBar.add(new TrashButton(viewContext, componentProvider));
+        if (viewContext.getModel().getApplicationInfo().getWebClientConfiguration()
+                .getEnableTrash())
+        {
+            toolBar.add(new TrashButton(viewContext, componentProvider));
+        }
         toolBar.add(new LoggedUserMenu(viewContext, componentProvider));
     }
 
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/AbstractViewer.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/AbstractViewer.java
index 222125a708a28437e907836f5d12198bbadd96ab..75761a861837f79fb2cb9b93844a6c1727550e5d 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/AbstractViewer.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/AbstractViewer.java
@@ -310,6 +310,12 @@ public abstract class AbstractViewer<D extends IEntityInformationHolder> extends
         return BorderLayoutDataFactory.create(region);
     }
 
+    protected final boolean isTrashEnabled()
+    {
+        return viewContext.getModel().getApplicationInfo().getWebClientConfiguration()
+                .getEnableTrash();
+    }
+
     protected final AbstractAsyncCallback<Void> createPermanentDeletionCallback()
     {
         return new CloseViewerCallback(viewContext);
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/data/DataSetListDeletionConfirmationDialog.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/data/DataSetListDeletionConfirmationDialog.java
index 984e2a0e733b4b0dc056272bbc14e7854acf4317..514b51702fcd52009748a785a6a4b476b90ee992 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/data/DataSetListDeletionConfirmationDialog.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/data/DataSetListDeletionConfirmationDialog.java
@@ -22,21 +22,20 @@ import com.extjs.gxt.ui.client.widget.form.RadioGroup;
 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.IViewContext;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.data.AbstractExternalDataGrid.SelectedAndDisplayedItems;
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.widget.AbstractDataListTrashDeletionConfirmationDialog;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.widget.AbstractDataListDeletionConfirmationDialog;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.WidgetUtils;
 import ch.systemsx.cisd.openbis.generic.client.web.client.dto.DisplayedOrSelectedDatasetCriteria;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DeletionType;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityKind;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ExternalData;
 
+// TODO extend AbstractDataListTrashDeletionConfirmationDialog when trash is working properly
 public final class DataSetListDeletionConfirmationDialog extends
-        AbstractDataListTrashDeletionConfirmationDialog<ExternalData>
+        AbstractDataListDeletionConfirmationDialog<ExternalData>
 {
-
     private final IViewContext<ICommonClientServiceAsync> viewContext;
 
     private final SelectedAndDisplayedItems selectedAndDisplayedItemsOrNull;
@@ -44,8 +43,7 @@ public final class DataSetListDeletionConfirmationDialog extends
     private final ExternalData singleData;
 
     public DataSetListDeletionConfirmationDialog(
-            IViewContext<ICommonClientServiceAsync> viewContext,
-            AbstractAsyncCallback<Void> callback,
+            IViewContext<ICommonClientServiceAsync> viewContext, AsyncCallback<Void> callback,
             SelectedAndDisplayedItems selectedAndDisplayedItems)
     {
         super(viewContext, selectedAndDisplayedItems.getSelectedItems(), callback);
@@ -57,7 +55,7 @@ public final class DataSetListDeletionConfirmationDialog extends
 
     public DataSetListDeletionConfirmationDialog(
             IViewContext<ICommonClientServiceAsync> viewContext,
-            AbstractAsyncCallback<Void> deletionCallback, ExternalData data)
+            AsyncCallback<Void> deletionCallback, ExternalData data)
     {
         super(viewContext, Collections.singletonList(data), deletionCallback);
         this.viewContext = viewContext;
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/experiment/ExperimentListDeletionConfirmationDialog.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/experiment/ExperimentListDeletionConfirmationDialog.java
index c68192fc957e2474f28022b53df5be74aaf2fb1d..968726b147d8eac9328fa404b5335ef0bfdb3695 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/experiment/ExperimentListDeletionConfirmationDialog.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/experiment/ExperimentListDeletionConfirmationDialog.java
@@ -22,11 +22,10 @@ import com.extjs.gxt.ui.client.widget.form.RadioGroup;
 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.IViewContext;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.experiment.ExperimentBrowserGrid.DisplayedAndSelectedExperiments;
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.widget.AbstractDataListTrashDeletionConfirmationDialog;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.widget.AbstractDataListDeletionConfirmationDialog;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.WidgetUtils;
 import ch.systemsx.cisd.openbis.generic.client.web.client.dto.DisplayedOrSelectedIdHolderCriteria;
 import ch.systemsx.cisd.openbis.generic.shared.basic.TechId;
@@ -35,8 +34,9 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityKind;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Experiment;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.TableModelRowWithObject;
 
+// TODO extend AbstractDataListTrashDeletionConfirmationDialog when trash is working properly
 public final class ExperimentListDeletionConfirmationDialog extends
-        AbstractDataListTrashDeletionConfirmationDialog<Experiment>
+        AbstractDataListDeletionConfirmationDialog<Experiment>
 {
 
     private final IViewContext<ICommonClientServiceAsync> viewContext;
@@ -46,8 +46,7 @@ public final class ExperimentListDeletionConfirmationDialog extends
     private final Experiment singleDataOrNull;
 
     public ExperimentListDeletionConfirmationDialog(
-            IViewContext<ICommonClientServiceAsync> viewContext,
-            AbstractAsyncCallback<Void> callback,
+            IViewContext<ICommonClientServiceAsync> viewContext, AsyncCallback<Void> callback,
             DisplayedAndSelectedExperiments selectedAndDisplayedItems)
     {
         super(viewContext, selectedAndDisplayedItems.getExperiments(), callback);
@@ -59,7 +58,7 @@ public final class ExperimentListDeletionConfirmationDialog extends
 
     public ExperimentListDeletionConfirmationDialog(
             IViewContext<ICommonClientServiceAsync> viewContext,
-            AbstractAsyncCallback<Void> deletionCallback, Experiment experiment)
+            AsyncCallback<Void> deletionCallback, Experiment experiment)
     {
         super(viewContext, Collections.singletonList(experiment), deletionCallback);
         this.viewContext = viewContext;
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/sample/SampleListDeletionConfirmationDialog.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/sample/SampleListDeletionConfirmationDialog.java
index a3f59bddbdb0947c5727c1d43a0af8e57c9d362a..cc53c1fdaec584e7f2e7acce1df08fa254c88e60 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/sample/SampleListDeletionConfirmationDialog.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/sample/SampleListDeletionConfirmationDialog.java
@@ -23,11 +23,10 @@ import com.extjs.gxt.ui.client.widget.form.RadioGroup;
 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.IViewContext;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.DisplayedAndSelectedEntities;
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.widget.AbstractDataListTrashDeletionConfirmationDialog;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.widget.AbstractDataListDeletionConfirmationDialog;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.WidgetUtils;
 import ch.systemsx.cisd.openbis.generic.client.web.client.dto.DisplayedOrSelectedIdHolderCriteria;
 import ch.systemsx.cisd.openbis.generic.shared.basic.IIdHolder;
@@ -35,8 +34,9 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.TechId;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DeletionType;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityKind;
 
+//TODO extend AbstractDataListTrashDeletionConfirmationDialog when trash is working properly
 public final class SampleListDeletionConfirmationDialog<T extends IIdHolder> extends
-        AbstractDataListTrashDeletionConfirmationDialog<T>
+        AbstractDataListDeletionConfirmationDialog<T>
 {
 
     private final IViewContext<ICommonClientServiceAsync> viewContext;
@@ -47,8 +47,7 @@ public final class SampleListDeletionConfirmationDialog<T extends IIdHolder> ext
 
     public SampleListDeletionConfirmationDialog(
             IViewContext<ICommonClientServiceAsync> viewContext, List<T> data,
-            AbstractAsyncCallback<Void> callback,
-            DisplayedAndSelectedEntities<T> selectedAndDisplayedItems)
+            AsyncCallback<Void> callback, DisplayedAndSelectedEntities<T> selectedAndDisplayedItems)
     {
         super(viewContext, data, callback);
         this.withRadio();
@@ -59,7 +58,7 @@ public final class SampleListDeletionConfirmationDialog<T extends IIdHolder> ext
 
     public SampleListDeletionConfirmationDialog(
             IViewContext<ICommonClientServiceAsync> viewContext, List<T> data,
-            AbstractAsyncCallback<Void> deletionCallback, T sample)
+            AsyncCallback<Void> deletionCallback, T sample)
     {
         super(viewContext, data, deletionCallback);
         this.viewContext = viewContext;
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/widget/AbstractDataListDeletionConfirmationDialog.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/widget/AbstractDataListDeletionConfirmationDialog.java
index b371b36f162ab4691e722fbcca64312a549f0256..4a521da11c371c02022a1dc454a558242e95a771 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/widget/AbstractDataListDeletionConfirmationDialog.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/widget/AbstractDataListDeletionConfirmationDialog.java
@@ -22,12 +22,12 @@ import com.extjs.gxt.ui.client.widget.form.Radio;
 import com.extjs.gxt.ui.client.widget.form.RadioGroup;
 import com.google.gwt.user.client.rpc.AsyncCallback;
 
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.AbstractAsyncCallback;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.AsyncCallbackWithProgressBar;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.Dict;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.IViewContext;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.field.ReasonField;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.WidgetUtils;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DeletionType;
 
 /**
  * {@link AbstractDataConfirmationDialog} abstract implementation for deleting given list of data on
@@ -48,7 +48,7 @@ public abstract class AbstractDataListDeletionConfirmationDialog<T> extends
 
     protected final IViewContext<?> viewContext;
 
-    private final AbstractAsyncCallback<Void> deletionCallback;
+    private final AsyncCallback<Void> deletionCallback;
 
     private boolean withRadio = false;
 
@@ -57,7 +57,7 @@ public abstract class AbstractDataListDeletionConfirmationDialog<T> extends
     protected ReasonField reason;
 
     public AbstractDataListDeletionConfirmationDialog(IViewContext<?> viewContext, List<T> data,
-            AbstractAsyncCallback<Void> deletionCallback)
+            AsyncCallback<Void> deletionCallback)
     {
         super(viewContext, data, viewContext.getMessage(Dict.DELETE_CONFIRMATION_TITLE));
         this.viewContext = viewContext;
@@ -110,9 +110,32 @@ public abstract class AbstractDataListDeletionConfirmationDialog<T> extends
 
     protected abstract void executeDeletion(AsyncCallback<Void> callback);
 
-    abstract String getOperationName();
+    // property based enabling of trash is only a temporary solution
 
-    abstract String getProgressMessage();
+    protected DeletionType getDeletionType()
+    {
+        return isTrashEnabled() ? DeletionType.TRASH : DeletionType.PERMANENT;
+    }
+
+    String getOperationName()
+    {
+        final String dictKey = isTrashEnabled() ? Dict.DELETING : Dict.DELETING_PERMANENTLY;
+        return viewContext.getMessage(dictKey);
+    }
+
+    String getProgressMessage()
+    {
+        final String dictKey =
+                isTrashEnabled() ? Dict.DELETE_PROGRESS_MESSAGE
+                        : Dict.DELETE_PERMANENTLY_PROGRESS_MESSAGE;
+        return viewContext.getMessage(dictKey);
+    }
+
+    private final boolean isTrashEnabled()
+    {
+        return viewContext.getModel().getApplicationInfo().getWebClientConfiguration()
+                .getEnableTrash();
+    }
 
     @Override
     protected final void executeConfirmedAction()
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/widget/AbstractDataListPermanentDeletionConfirmationDialog.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/widget/AbstractDataListPermanentDeletionConfirmationDialog.java
index 1ad5174950aec6e0435b09b7e08faecbe42fab67..162c6e9875cfa91312bd2161491de765a603a62e 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/widget/AbstractDataListPermanentDeletionConfirmationDialog.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/widget/AbstractDataListPermanentDeletionConfirmationDialog.java
@@ -18,7 +18,8 @@ package ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.widget
 
 import java.util.List;
 
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.AbstractAsyncCallback;
+import com.google.gwt.user.client.rpc.AsyncCallback;
+
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.Dict;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.IViewContext;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DeletionType;
@@ -33,12 +34,13 @@ public abstract class AbstractDataListPermanentDeletionConfirmationDialog<T> ext
         AbstractDataListDeletionConfirmationDialog<T>
 {
     public AbstractDataListPermanentDeletionConfirmationDialog(IViewContext<?> viewContext,
-            List<T> data, AbstractAsyncCallback<Void> deletionCallback)
+            List<T> data, AsyncCallback<Void> deletionCallback)
     {
         super(viewContext, data, deletionCallback);
     }
 
-    protected final DeletionType getDeletionType()
+    @Override
+    protected DeletionType getDeletionType()
     {
         return DeletionType.PERMANENT;
     }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/widget/AbstractDataListTrashDeletionConfirmationDialog.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/widget/AbstractDataListTrashDeletionConfirmationDialog.java
index e19c35c365f4ea55ad694a25272a8f36da3d6395..7af2733fd41c1d8eea78b2e956417a40d251add4 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/widget/AbstractDataListTrashDeletionConfirmationDialog.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/widget/AbstractDataListTrashDeletionConfirmationDialog.java
@@ -38,7 +38,8 @@ public abstract class AbstractDataListTrashDeletionConfirmationDialog<T> extends
         super(viewContext, data, deletionCallback);
     }
 
-    protected final DeletionType getDeletionType()
+    @Override
+    protected DeletionType getDeletionType()
     {
         return DeletionType.TRASH;
     }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/WebClientConfigurationProvider.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/WebClientConfigurationProvider.java
index 25046d5a59a842b43e5dd4c02979fab1dba5b883..590ebd9526872518442b6bdcc37f58b6f8a30cc3 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/WebClientConfigurationProvider.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/WebClientConfigurationProvider.java
@@ -74,6 +74,10 @@ public class WebClientConfigurationProvider
 
     private static final boolean DEFAULT_ALLOW_ADDING_UNOFFICIAL_TERMS = false;
 
+    private static final String ENABLE_TRASH = "enable-trash";
+
+    private static final boolean DEFAULT_ENABLE_TRASH = false;
+
     static final String TECHNOLOGIES = "technologies";
 
     private WebClientConfiguration webClientConfiguration = new WebClientConfiguration();
@@ -101,6 +105,7 @@ public class WebClientConfigurationProvider
         webClientConfiguration.setMaxVisibleColumns(DEFAULT_MAX_VISIBLE_COLUMNS);
         webClientConfiguration.setMaxEntityVisits(DEFAULT_MAX_ENTITY_VISITS);
         webClientConfiguration.setAllowAddingUnofficialTerms(DEFAULT_ALLOW_ADDING_UNOFFICIAL_TERMS);
+        webClientConfiguration.setEnableTrash(DEFAULT_ENABLE_TRASH);
     }
 
     private void init(Properties properties)
@@ -115,6 +120,7 @@ public class WebClientConfigurationProvider
         webClientConfiguration
                 .setDataSetTypesWithImageOverview(extractDataSetTypesWithImageOverview(properties));
         webClientConfiguration.setViews(extractHiddenSections(properties));
+        webClientConfiguration.setEnableTrash(extractEnableTrash(properties));
         SectionProperties[] props =
                 PropertyParametersUtil.extractSectionProperties(properties, TECHNOLOGIES, false);
         for (SectionProperties sectionProperties : props)
@@ -221,6 +227,11 @@ public class WebClientConfigurationProvider
                 DEFAULT_ALLOW_ADDING_UNOFFICIAL_TERMS);
     }
 
+    private boolean extractEnableTrash(Properties properties)
+    {
+        return PropertyUtils.getBoolean(properties, ENABLE_TRASH, DEFAULT_ENABLE_TRASH);
+    }
+
     public WebClientConfiguration getWebClientConfiguration()
     {
         return webClientConfiguration;
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/WebClientConfiguration.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/WebClientConfiguration.java
index 50dce4f327356932e5e481a6f8fb499cebbe6763..7705c3ac1e026726cf38b44c3cb1882fffd3a5c6 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/WebClientConfiguration.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/WebClientConfiguration.java
@@ -53,6 +53,8 @@ public class WebClientConfiguration implements ISerializable
 
     private int maxEntityVisits;
 
+    private boolean enableTrash;
+
     private boolean allowAddingUnofficielTerms;
 
     public String getPropertyOrNull(String technology, String key)
@@ -136,6 +138,16 @@ public class WebClientConfiguration implements ISerializable
         this.allowAddingUnofficielTerms = allowAddingUnofficialTerms;
     }
 
+    public boolean getEnableTrash()
+    {
+        return enableTrash;
+    }
+
+    public void setEnableTrash(boolean enableTrash)
+    {
+        this.enableTrash = enableTrash;
+    }
+
     public WebClientConfiguration()
     {
     }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/dataset/GenericDataSetViewer.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/dataset/GenericDataSetViewer.java
index babe33785f83926b9e5272cabc9a7ad9b35462a1..081c0fbd020f16946eca87face78a490e37f9c0e 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/dataset/GenericDataSetViewer.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/dataset/GenericDataSetViewer.java
@@ -146,8 +146,11 @@ abstract public class GenericDataSetViewer extends AbstractViewerWithVerticalSpl
             {
                 public void execute()
                 {
+                    final AsyncCallback<Void> callback =
+                            isTrashEnabled() ? createDeletionCallback()
+                                    : createPermanentDeletionCallback();
                     new DataSetListDeletionConfirmationDialog(viewContext.getCommonViewContext(),
-                            createDeletionCallback(), getOriginalData()).show();
+                            callback, getOriginalData()).show();
                 }
 
             }));
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/experiment/GenericExperimentViewer.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/experiment/GenericExperimentViewer.java
index bca0633a55f2ba0394633f651bbd7ce90748d1ba..79d3fd3aa88cfc08eaff3d67e81a09e10fc8a830 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/experiment/GenericExperimentViewer.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/experiment/GenericExperimentViewer.java
@@ -24,6 +24,7 @@ import java.util.Set;
 import com.extjs.gxt.ui.client.widget.Component;
 import com.extjs.gxt.ui.client.widget.Html;
 import com.extjs.gxt.ui.client.widget.layout.BorderLayout;
+import com.google.gwt.user.client.rpc.AsyncCallback;
 import com.google.gwt.user.client.ui.Widget;
 
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.AbstractAsyncCallback;
@@ -128,9 +129,11 @@ public class GenericExperimentViewer extends AbstractViewerWithVerticalSplit<Exp
             {
                 public void execute()
                 {
+                    final AsyncCallback<Void> callback =
+                            isTrashEnabled() ? createDeletionCallback()
+                                    : createPermanentDeletionCallback();
                     new ExperimentListDeletionConfirmationDialog(
-                            viewContext.getCommonViewContext(), createDeletionCallback(),
-                            getOriginalData()).show();
+                            viewContext.getCommonViewContext(), callback, getOriginalData()).show();
                 }
             }));
         addToolBarButton(createRevertDeletionButton(new IDelegatedAction()
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/GenericSampleViewer.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/GenericSampleViewer.java
index 29734c47a433e8b24542c1f0c3bae5abc6ba7689..ebd80bdb8ffd3331381e9a6b27a52884460af165 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/GenericSampleViewer.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/GenericSampleViewer.java
@@ -162,9 +162,11 @@ abstract public class GenericSampleViewer extends AbstractViewerWithVerticalSpli
                 @SuppressWarnings("unchecked")
                 public void execute()
                 {
+                    final AsyncCallback<Void> callback =
+                            isTrashEnabled() ? createDeletionCallback()
+                                    : createPermanentDeletionCallback();
                     new SampleListDeletionConfirmationDialog(viewContext.getCommonViewContext(),
-                            getOriginalDataAsSingleton(), createDeletionCallback(),
-                            getOriginalData()).show();
+                            getOriginalDataAsSingleton(), callback, getOriginalData()).show();
                 }
             }));
         addToolBarButton(createRevertDeletionButton(new IDelegatedAction()