diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/IClientService.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/IClientService.java
index 1c4c7246bf5e17ebb308a0dfc03758b31ac5709a..abd23d8ad845a31d9f4de6901e9d0460ed921a08 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/IClientService.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/IClientService.java
@@ -26,6 +26,7 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.exception.UserFailureE
 import ch.systemsx.cisd.openbis.generic.shared.basic.TechId;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.CustomImport;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DisplaySettings;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.displaysettings.IDisplaySettingsUpdate;
 
 /**
  * The basic <i>GWT</i> client service interface.
@@ -70,7 +71,7 @@ public interface IClientService extends RemoteService
     /**
      * Updates display settings on the server.
      */
-    public void updateDisplaySettings(DisplaySettings displaySettings);
+    public void updateDisplaySettings(IDisplaySettingsUpdate update);
 
     /**
      * Resets display settings of the logged user to the default settings.
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/IClientServiceAsync.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/IClientServiceAsync.java
index 95c6d57e71ae987e5c41c8dc13a5a9e0289cf89e..6ff0dc4c7ab056b26e495f8a9ae754509f1e32bf 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/IClientServiceAsync.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/IClientServiceAsync.java
@@ -25,6 +25,7 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.dto.SessionContext;
 import ch.systemsx.cisd.openbis.generic.shared.basic.TechId;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.CustomImport;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DisplaySettings;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.displaysettings.IDisplaySettingsUpdate;
 
 /**
  * @author Christian Ribeaud
@@ -51,8 +52,8 @@ public interface IClientServiceAsync
     /** @see IClientService#setBaseURL(String) */
     public void setBaseURL(String baseURL, AsyncCallback<SessionContext> callback);
 
-    /** @see IClientService#updateDisplaySettings(DisplaySettings) */
-    public void updateDisplaySettings(DisplaySettings displaySettings, AsyncCallback<Void> callback);
+    /** @see IClientService#updateDisplaySettings(IDisplaySettingsUpdate) */
+    public void updateDisplaySettings(IDisplaySettingsUpdate update, AsyncCallback<Void> callback);
 
     /** @see IClientService#resetDisplaySettings() */
     public void resetDisplaySettings(AsyncCallback<DisplaySettings> resetUserSettingsCallback);
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/CommonViewContext.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/CommonViewContext.java
index 52fdf7258f172829e8f10a781e7c8e1ed95fe07f..e54c00d67e175fa56423a77caa5673e5d9d1523c 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/CommonViewContext.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/CommonViewContext.java
@@ -20,17 +20,18 @@ import java.util.List;
 
 import ch.systemsx.cisd.openbis.generic.client.web.client.ICommonClientServiceAsync;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.DisplaySettingsManager;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.DisplaySettingsManager.IDisplaySettingsUpdater;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.locator.ViewLocatorResolverRegistry;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.plugin.IClientPluginFactoryProvider;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.CompositeMessageProvider;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.DictonaryBasedMessageProvider;
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.IDelegatedAction;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.IMessageProvider;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.log.IProfilingTable;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.log.ProfilingTable;
 import ch.systemsx.cisd.openbis.generic.shared.basic.ViewMode;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DisplaySettings;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.WebClientConfiguration;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.displaysettings.IDisplaySettingsUpdate;
 
 /**
  * The <i>generic</i> {@link IViewContext} implementation.
@@ -168,12 +169,12 @@ public final class CommonViewContext implements IViewContext<ICommonClientServic
     private DisplaySettingsManager createDisplaySettingsManager(
             final DisplaySettings displaySettings, WebClientConfiguration webClientConfigurationDTO)
     {
-        IDelegatedAction settingsUpdater = new IDelegatedAction()
+        IDisplaySettingsUpdater settingsUpdater = new IDisplaySettingsUpdater()
             {
                 @Override
-                public void execute()
+                public void execute(IDisplaySettingsUpdate update)
                 {
-                    service.updateDisplaySettings(displaySettings, new VoidAsyncCallback<Void>(
+                    service.updateDisplaySettings(update, new VoidAsyncCallback<Void>(
                             CommonViewContext.this));
                 }
             };
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/framework/DisplaySettingsManager.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/framework/DisplaySettingsManager.java
index e066628e5e4678508ae783f130bd71cfbab6f99e..bb96dfeca57aa747b32f47710979490436fc777f 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/framework/DisplaySettingsManager.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/framework/DisplaySettingsManager.java
@@ -33,7 +33,6 @@ import com.extjs.gxt.ui.client.widget.grid.ColumnConfig;
 import com.extjs.gxt.ui.client.widget.grid.ColumnModel;
 
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.IViewContext;
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.IDelegatedAction;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ColumnSetting;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DetailViewConfiguration;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DisplaySettings;
@@ -43,6 +42,9 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.RealNumberFormatingPara
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.SortInfo;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.SortInfo.SortDir;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.WebClientConfiguration;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.displaysettings.AllDisplaySettingsUpdate;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.displaysettings.ColumnDisplaySettingsUpdate;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.displaysettings.IDisplaySettingsUpdate;
 
 /**
  * Manager of {@link DisplaySettings}. The manager itself is stateless. It only changes the wrapped
@@ -58,36 +60,42 @@ public class DisplaySettingsManager
 
     private final DisplaySettings displaySettings;
 
-    private final IDelayedUpdater updater;
+    private final IDisplaySettingsDelayedUpdater updater;
 
     private final WebClientConfiguration webClientConfiguration;
 
+    public interface IDisplaySettingsUpdater
+    {
+        void execute(IDisplaySettingsUpdate update);
+    }
+
     /**
      * Private, we need this interface to make tests easier. We wrap {@link DelayedTask} which
      * requires the access to the browser.
      */
-    public interface IDelayedUpdater
+    public interface IDisplaySettingsDelayedUpdater
     {
         /** Cancels any running timers and starts a new one. */
-        void executeDelayed(int delayMs);
+        void executeDelayed(IDisplaySettingsUpdate update, int delayMs);
+
     }
 
     public DisplaySettingsManager(DisplaySettings displaySettings,
-            IDelegatedAction settingsUpdater, IViewContext<?> viewContext)
+            IDisplaySettingsUpdater settingsUpdater, IViewContext<?> viewContext)
     {
         this(displaySettings, createDelayedUpdater(settingsUpdater, viewContext), viewContext
                 .getModel().getApplicationInfo().getWebClientConfiguration());
     }
 
-    private static IDelayedUpdater createDelayedUpdater(final IDelegatedAction settingsUpdater,
-            IViewContext<?> viewContext)
+    private static IDisplaySettingsDelayedUpdater createDelayedUpdater(
+            final IDisplaySettingsUpdater settingsUpdater, IViewContext<?> viewContext)
     {
         if (viewContext.getModel().isDisplaySettingsSaving() == false)
         {
-            return new IDelayedUpdater()
+            return new IDisplaySettingsDelayedUpdater()
                 {
                     @Override
-                    public void executeDelayed(int delayMs)
+                    public void executeDelayed(IDisplaySettingsUpdate update, int delayMs)
                     {
                         // in simple view mode or anonymous login settings are temporary - don't
                         // save them at all
@@ -95,20 +103,20 @@ public class DisplaySettingsManager
                 };
         } else
         {
-            final DelayedTask delayedTask = new DelayedTask(new Listener<BaseEvent>()
-                {
-                    @Override
-                    public void handleEvent(BaseEvent event)
-                    {
-                        settingsUpdater.execute();
-                    }
-                });
-            return new IDelayedUpdater()
+            return new IDisplaySettingsDelayedUpdater()
                 {
                     @Override
-                    public void executeDelayed(int delayMs)
+                    public void executeDelayed(final IDisplaySettingsUpdate update,
+                            final int delayMs)
                     {
-                        delayedTask.delay(delayMs);
+                        new DelayedTask(new Listener<BaseEvent>()
+                            {
+                                @Override
+                                public void handleEvent(BaseEvent event)
+                                {
+                                    settingsUpdater.execute(update);
+                                }
+                            }).delay(delayMs);
                     }
                 };
         }
@@ -117,7 +125,8 @@ public class DisplaySettingsManager
     /**
      * Private, for tests only
      */
-    public DisplaySettingsManager(DisplaySettings displaySettings, final IDelayedUpdater updater,
+    public DisplaySettingsManager(DisplaySettings displaySettings,
+            final IDisplaySettingsDelayedUpdater updater,
             WebClientConfiguration webClientConfiguration)
     {
         if (displaySettings == null)
@@ -415,7 +424,8 @@ public class DisplaySettingsManager
             Object modifier)
     {
         updateActiveTabSettings(tabGroupDisplayID, selectedTabDisplayID, modifier);
-        updater.executeDelayed(QUITE_TIME_BEFORE_SETTINGS_SAVED_MS);
+        updater.executeDelayed(new AllDisplaySettingsUpdate(displaySettings),
+                QUITE_TIME_BEFORE_SETTINGS_SAVED_MS);
     }
 
     private <C> void storeSettings(String displayTypeID, ColumnModel columnModel,
@@ -424,18 +434,20 @@ public class DisplaySettingsManager
         List<ColumnSetting> columnSettings =
                 createColumnsSettings(columnModel, filteredColumnIds, sortInfo);
         updateColumnSettings(displayTypeID, columnSettings, modifier);
-        updater.executeDelayed(delayMs);
+        updater.executeDelayed(new ColumnDisplaySettingsUpdate(displayTypeID, columnSettings),
+                delayMs);
     }
 
     public void storeDropDownSettings(String dropDownSettingsID, String newValue)
     {
         updateDropDownSettings(dropDownSettingsID, newValue);
-        updater.executeDelayed(QUITE_TIME_BEFORE_SETTINGS_SAVED_MS);
+        updater.executeDelayed(new AllDisplaySettingsUpdate(displaySettings),
+                QUITE_TIME_BEFORE_SETTINGS_SAVED_MS);
     }
 
     public void storeSettings()
     {
-        updater.executeDelayed(1); // 0 not allowed
+        updater.executeDelayed(new AllDisplaySettingsUpdate(displaySettings), 1); // 0 not allowed
     }
 
     private static List<ColumnSetting> createColumnsSettings(ColumnModel columnModel,
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/AbstractClientService.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/AbstractClientService.java
index 5a70b64107039c3812e71bbef04a2ff809bbdc43..4b8708d2f2d3355c3024037d840431feb65a68e6 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/AbstractClientService.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/AbstractClientService.java
@@ -85,6 +85,8 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.TableModelColumnHeader;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.TableModelRowWithObject;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.WebApp;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.WebClientConfiguration;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.displaysettings.AllDisplaySettingsUpdate;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.displaysettings.IDisplaySettingsUpdate;
 import ch.systemsx.cisd.openbis.generic.shared.dto.SessionContextDTO;
 import ch.systemsx.cisd.openbis.generic.shared.util.ServerUtils;
 
@@ -636,14 +638,14 @@ public abstract class AbstractClientService implements IClientService,
     }
 
     @Override
-    public void updateDisplaySettings(DisplaySettings displaySettings)
+    public void updateDisplaySettings(IDisplaySettingsUpdate displaySettingsUpdate)
     {
         try
         {
             final String sessionToken = getSessionToken();
             IServer server = getServer();
             int maxEntityVisits = getWebClientConfiguration().getMaxEntityVisits();
-            server.saveDisplaySettings(sessionToken, displaySettings, maxEntityVisits);
+            server.updateDisplaySettings(sessionToken, displaySettingsUpdate, maxEntityVisits);
         } catch (InvalidSessionException e)
         {
             // ignored
@@ -661,7 +663,7 @@ public abstract class AbstractClientService implements IClientService,
             final String sessionToken = getSessionToken();
             IServer server = getServer();
             final DisplaySettings defaultSettings = server.getDefaultDisplaySettings(sessionToken);
-            updateDisplaySettings(defaultSettings);
+            updateDisplaySettings(new AllDisplaySettingsUpdate(defaultSettings));
             return defaultSettings;
         } catch (InvalidSessionException e)
         {
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/AbstractServer.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/AbstractServer.java
index 5a8eac1d2d1a2cad9c873521106b3446e7a1e856..77a91d3173e379093530654b03e6cdaad6fabca5 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/AbstractServer.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/AbstractServer.java
@@ -71,6 +71,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.NewSample;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.NewSamplesWithTypes;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.RoleWithHierarchy.RoleCode;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.SampleType;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.displaysettings.IDisplaySettingsUpdate;
 import ch.systemsx.cisd.openbis.generic.shared.dto.DataPE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.DataSetTypePE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.DataStorePE;
@@ -705,6 +706,36 @@ public abstract class AbstractServer<T> extends AbstractServiceWithLogger<T> imp
         }
     }
 
+    @Override
+    public void updateDisplaySettings(String sessionToken,
+            IDisplaySettingsUpdate displaySettingsUpdate, int maxEntityVisits)
+    {
+        if (displaySettingsUpdate == null)
+        {
+            throw new IllegalArgumentException("Display settings update cannot be null");
+        }
+
+        try
+        {
+            final Session session = getSession(sessionToken);
+            PersonPE person = session.tryGetPerson();
+            if (person != null)
+            {
+                synchronized (displaySettingsProvider)
+                {
+                    DisplaySettings currentDisplaySettings =
+                            displaySettingsProvider.getCurrentDisplaySettings(person);
+                    DisplaySettings newDisplaySettings =
+                            displaySettingsUpdate.update(currentDisplaySettings);
+                    saveDisplaySettings(sessionToken, newDisplaySettings, maxEntityVisits);
+                }
+            }
+        } catch (InvalidSessionException e)
+        {
+            // ignore the situation when session is not available
+        }
+    }
+
     private void sortAndRemoveMultipleVisits(List<EntityVisit> visits)
     {
         Collections.sort(visits, new EntityVisitComparatorByTimeStamp());
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/DisplaySettingsProvider.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/DisplaySettingsProvider.java
index e7cd55ec780afc724f2cccd7275b9b08aaa07f33..e940319feb4b8be5563f9557bdc13147b0cedc9e 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/DisplaySettingsProvider.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/DisplaySettingsProvider.java
@@ -44,6 +44,18 @@ public class DisplaySettingsProvider
         }
     }
 
+    public synchronized DisplaySettings getCurrentDisplaySettings(PersonPE person)
+    {
+        DisplaySettings settings = displaySettingsMap.get(person.getUserId());
+        if (settings == null)
+        {
+            settings = person.getDisplaySettings();
+            displaySettingsMap.put(person.getUserId(), settings);
+        }
+        settings = new DisplaySettings(settings);
+        return settings;
+    }
+
     @SuppressWarnings("deprecation")
     public synchronized DisplaySettings getRegularDisplaySettings(PersonPE person)
     {
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/AbstractServerLogger.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/AbstractServerLogger.java
index fb09e406eddca49d79a03172afcacd2c3bd772f3..32c6a49b3b201f815d382e6c5669424831bd12d5 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/AbstractServerLogger.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/AbstractServerLogger.java
@@ -33,6 +33,7 @@ import ch.systemsx.cisd.common.spring.IInvocationLoggerContext;
 import ch.systemsx.cisd.openbis.generic.shared.basic.TechId;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DisplaySettings;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.GridCustomColumn;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.displaysettings.IDisplaySettingsUpdate;
 import ch.systemsx.cisd.openbis.generic.shared.dto.IAuthSession;
 import ch.systemsx.cisd.openbis.generic.shared.dto.Session;
 import ch.systemsx.cisd.openbis.generic.shared.dto.SessionContextDTO;
@@ -279,6 +280,13 @@ public abstract class AbstractServerLogger implements IServer
         logTracking(sessionToken, "save_display_settings", "");
     }
 
+    @Override
+    public void updateDisplaySettings(String sessionToken,
+            IDisplaySettingsUpdate displaySettingsUpdate, int maxEntityVisits)
+    {
+        logTracking(sessionToken, "update_display_settings", "UPDATE (%s)", displaySettingsUpdate);
+    }
+
     @Override
     public DisplaySettings getDefaultDisplaySettings(String sessionToken)
     {
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/IServer.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/IServer.java
index 4808ff2dd66a3b36588208a1557614c1edb4f0ea..960740555109b40541e81e5d9d7aae3cabed33e5 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/IServer.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/IServer.java
@@ -31,6 +31,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DisplaySettings;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.GridCustomColumn;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.RoleWithHierarchy;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ServiceVersionHolder;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.displaysettings.IDisplaySettingsUpdate;
 import ch.systemsx.cisd.openbis.generic.shared.dto.SessionContextDTO;
 
 /**
@@ -95,6 +96,10 @@ public interface IServer extends ISessionProvider
     public void saveDisplaySettings(String sessionToken, DisplaySettings displaySettings,
             int maxEntityVisits);
 
+    @Transactional
+    public void updateDisplaySettings(String sessionToken,
+            IDisplaySettingsUpdate displaySettingsUpdate, int maxEntityVisits);
+
     /**
      * Lists grid custom columns for a given grid id.
      */
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/displaysettings/AllDisplaySettingsUpdate.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/displaysettings/AllDisplaySettingsUpdate.java
new file mode 100644
index 0000000000000000000000000000000000000000..bdf2db02a287fae6ce6ab6563ad64525ba7d6b02
--- /dev/null
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/displaysettings/AllDisplaySettingsUpdate.java
@@ -0,0 +1,58 @@
+/*
+ * Copyright 2012 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.basic.dto.displaysettings;
+
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DisplaySettings;
+
+/**
+ * @author pkupczyk
+ */
+public class AllDisplaySettingsUpdate implements IDisplaySettingsUpdate
+{
+
+    private static final long serialVersionUID = 1L;
+
+    private DisplaySettings newDisplaySettings;
+
+    // GWT
+    @SuppressWarnings("unused")
+    private AllDisplaySettingsUpdate()
+    {
+    }
+
+    public AllDisplaySettingsUpdate(DisplaySettings newDisplaySettings)
+    {
+        if (newDisplaySettings == null)
+        {
+            throw new IllegalArgumentException("New display settings cannot be null");
+        }
+        this.newDisplaySettings = newDisplaySettings;
+    }
+
+    @Override
+    public DisplaySettings update(DisplaySettings displaySettings)
+    {
+        return newDisplaySettings;
+    }
+
+    @Override
+    public String toString()
+    {
+        return "update of all display settings";
+    }
+
+}
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/displaysettings/ColumnDisplaySettingsUpdate.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/displaysettings/ColumnDisplaySettingsUpdate.java
new file mode 100644
index 0000000000000000000000000000000000000000..a75b7d555189487fd974285f0a7a24278c819a57
--- /dev/null
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/displaysettings/ColumnDisplaySettingsUpdate.java
@@ -0,0 +1,65 @@
+/*
+ * Copyright 2012 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.basic.dto.displaysettings;
+
+import java.util.List;
+
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ColumnSetting;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DisplaySettings;
+
+/**
+ * @author pkupczyk
+ */
+public class ColumnDisplaySettingsUpdate implements IDisplaySettingsUpdate
+{
+
+    private static final long serialVersionUID = 1L;
+
+    private String displayTypeId;
+
+    private List<ColumnSetting> columnSettings;
+
+    // GWT
+    @SuppressWarnings("unused")
+    private ColumnDisplaySettingsUpdate()
+    {
+    }
+
+    public ColumnDisplaySettingsUpdate(String displayTypeId, List<ColumnSetting> columnSettings)
+    {
+        if (displayTypeId == null)
+        {
+            throw new IllegalArgumentException("Display type id cannot be null");
+        }
+        this.displayTypeId = displayTypeId;
+        this.columnSettings = columnSettings;
+    }
+
+    @SuppressWarnings("deprecation")
+    @Override
+    public DisplaySettings update(DisplaySettings displaySettings)
+    {
+        displaySettings.getColumnSettings().put(displayTypeId, columnSettings);
+        return displaySettings;
+    }
+
+    @Override
+    public String toString()
+    {
+        return "update of column settings for: " + displayTypeId;
+    }
+}
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/displaysettings/IDisplaySettingsUpdate.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/displaysettings/IDisplaySettingsUpdate.java
new file mode 100644
index 0000000000000000000000000000000000000000..2ed5cea0ce43a7567bf3b4b9e9d7072987bf4259
--- /dev/null
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/displaysettings/IDisplaySettingsUpdate.java
@@ -0,0 +1,31 @@
+/*
+ * Copyright 2012 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.basic.dto.displaysettings;
+
+import java.io.Serializable;
+
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DisplaySettings;
+
+/**
+ * @author pkupczyk
+ */
+public interface IDisplaySettingsUpdate extends Serializable
+{
+
+    public DisplaySettings update(DisplaySettings displaySettings);
+
+}
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/clientnonjs/DisplaySettingsManagerTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/clientnonjs/DisplaySettingsManagerTest.java
index ba0f81d5325931acaab4bc93302b45d6f56fdb12..91640c2ca319d37434cfdee4be26e21a5ebeb493 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/clientnonjs/DisplaySettingsManagerTest.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/clientnonjs/DisplaySettingsManagerTest.java
@@ -35,11 +35,12 @@ import com.extjs.gxt.ui.client.widget.grid.ColumnModel;
 
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.DisplaySettingsManager;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.DisplaySettingsManager.GridDisplaySettings;
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.DisplaySettingsManager.IDelayedUpdater;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.DisplaySettingsManager.IDisplaySettingsDelayedUpdater;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.IDisplaySettingsGetter;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ColumnSetting;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DisplaySettings;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.WebClientConfiguration;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.displaysettings.IDisplaySettingsUpdate;
 
 /**
  * @author Franz-Josef Elmer
@@ -81,7 +82,7 @@ public class DisplaySettingsManagerTest extends AssertJUnit
 
     private Mockery context;
 
-    private IDelayedUpdater updater;
+    private IDisplaySettingsDelayedUpdater updater;
 
     private IDisplaySettingsGetter grid;
 
@@ -97,7 +98,7 @@ public class DisplaySettingsManagerTest extends AssertJUnit
     public void setUp()
     {
         context = new Mockery();
-        updater = context.mock(IDelayedUpdater.class);
+        updater = context.mock(IDisplaySettingsDelayedUpdater.class);
         grid = context.mock(IDisplaySettingsGetter.class);
         displaySettings = new DisplaySettings();
         webClientConfiguration = new WebClientConfiguration();
@@ -266,7 +267,8 @@ public class DisplaySettingsManagerTest extends AssertJUnit
                     allowing(grid).getSortState();
                     will(returnValue(null));
 
-                    one(updater).executeDelayed(with(any(Integer.class)));
+                    one(updater).executeDelayed(with(any(IDisplaySettingsUpdate.class)),
+                            with(any(Integer.class)));
                 }
             });
 
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/server/CommonClientServiceTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/server/CommonClientServiceTest.java
index ad857582c1fc3f1fc124ac188e3d6d89e6342234..7d39f646fdd8f15d1ce9972670d5bd0cf4aba213 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/server/CommonClientServiceTest.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/server/CommonClientServiceTest.java
@@ -73,6 +73,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.SampleType;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.TableModelRowWithObject;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Vocabulary;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.builders.DataSetBuilder;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.displaysettings.AllDisplaySettingsUpdate;
 import ch.systemsx.cisd.openbis.generic.shared.dto.DataSetTypePE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.DataStorePE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.FileFormatTypePE;
@@ -552,7 +553,7 @@ public final class CommonClientServiceTest extends AbstractClientServiceTest
                     one(commonServer).saveDisplaySettings(SESSION_TOKEN, displaySettings, 20);
                 }
             });
-        commonClientService.updateDisplaySettings(displaySettings);
+        commonClientService.updateDisplaySettings(new AllDisplaySettingsUpdate(displaySettings));
 
         context.assertIsSatisfied();
     }