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 25bac186c03e89bb1584e15cf58e1e04b9a8a465..b7688a0b7a6ea9fc89462a785aa708f8a961a10e 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
@@ -51,15 +51,25 @@ public interface IClientService extends RemoteService
     public SessionContext tryToLogin(String userID, String password) throws UserFailureException;
 
     /**
-     * Sets the base URL that the client uses to connect the web server. 
+     * Sets the base URL that the client uses to connect the web server.
      */
     public void setBaseURL(String baseURL);
-    
+
     /**
      * Updates display settings on the server.
      */
     public void updateDisplaySettings(DisplaySettings displaySettings);
 
+    /**
+     * Resets display settings of the logged user to the default settings.
+     * <p>
+     * NOTE: this changes user display settings only on the DB level. Old settings are still in the
+     * session and needs to be updated with the settings returned by this function.
+     * 
+     * @return default display settings
+     */
+    public DisplaySettings resetDisplaySettings();
+
     /**
      * Changes logged user home group on the server.
      */
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 bddcf7519d52371c971ac564a3eb24b74fe000d7..758a230bebb0cb9f5b0b04cb730650b53d871c97 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
@@ -40,10 +40,13 @@ 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#resetDisplaySettings() */
+    public void resetDisplaySettings(AsyncCallback<DisplaySettings> resetUserSettingsCallback);
+
     /** @see IClientService#changeUserHomeGroup(TechId) */
     public void changeUserHomeGroup(TechId groupIdOrNull, AsyncCallback<Void> callback);
 
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 f567564f47ed57e268ed6007604c4a76571de73d..452e3c551aefa970e123b8afd2caa668e33cb286 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
@@ -81,7 +81,9 @@ public final class CommonViewContext implements IViewContext<ICommonClientServic
 
     public void initDisplaySettingsManager()
     {
-        displaySettingsManager = createDisplaySettingsManager();
+        final DisplaySettings loggedUserDisplaySettings =
+                viewModel.getSessionContext().getDisplaySettings();
+        displaySettingsManager = createDisplaySettingsManager(loggedUserDisplaySettings);
     }
 
     public DisplaySettingsManager getDisplaySettingsManager()
@@ -90,9 +92,9 @@ public final class CommonViewContext implements IViewContext<ICommonClientServic
         return displaySettingsManager;
     }
 
-    private DisplaySettingsManager createDisplaySettingsManager()
+    private DisplaySettingsManager createDisplaySettingsManager(
+            final DisplaySettings displaySettings)
     {
-        final DisplaySettings displaySettings = viewModel.getSessionContext().getDisplaySettings();
         IDelegatedAction settingsUpdater = new IDelegatedAction()
             {
                 public void execute()
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 f15629a685522e78faad7878516492d299d24780..607684508b9352f0fafea6f25baab1bb87b15497 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
@@ -732,6 +732,11 @@ public abstract class Dict
     public static final String USE_WILDCARD_SEARCH_MODE_TOOLTIP =
             "use_wildcard_search_mode_tooltip";
 
+    public static final String RESET_USER_SETTINGS_BUTTON = "reset_user_settings_button";
+
+    public static final String RESET_USER_SETTINGS_CONFIRMATION_MSG =
+            "reset_user_settings_confirmation_msg";
+
     //
     // Unclassified
     //
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/user/ChangeUserSettingsDialog.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/user/ChangeUserSettingsDialog.java
index 3ec7bb11cea9dc72a74921d3ee1c6c38fad63549..4b82e87f14da43c09898aa938cb5f5d4a0dd55e3 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/user/ChangeUserSettingsDialog.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/user/ChangeUserSettingsDialog.java
@@ -16,9 +16,17 @@
 
 package ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.user;
 
+import com.extjs.gxt.ui.client.event.ButtonEvent;
+import com.extjs.gxt.ui.client.event.Listener;
+import com.extjs.gxt.ui.client.event.MessageBoxEvent;
+import com.extjs.gxt.ui.client.event.SelectionListener;
+import com.extjs.gxt.ui.client.widget.Dialog;
+import com.extjs.gxt.ui.client.widget.MessageBox;
 import com.extjs.gxt.ui.client.widget.Window;
+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.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;
@@ -28,6 +36,7 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.widget.
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.widget.FieldUtil;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.IDelegatedAction;
 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.Group;
 
 /**
@@ -59,8 +68,13 @@ public class ChangeUserSettingsDialog extends AbstractSaveDialog
 
         addField(homeGroupField = createHomeGroupField());
         addField(useWildcardSearchModeCheckbox = createUseWildcardSearchModeField());
+        fbar.insert(createResetButton(), 1); // inserting Reset button in between Save and Cancel
     }
 
+    //
+    // Change
+    //
+
     private final GroupSelectionWidget createHomeGroupField()
     {
         GroupSelectionWidget field = new GroupSelectionWidget(viewContext, GROUP_FIELD_ID, false);
@@ -95,4 +109,56 @@ public class ChangeUserSettingsDialog extends AbstractSaveDialog
     {
         return useWildcardSearchModeCheckbox.getValue();
     }
+
+    //
+    // Reset
+    //
+
+    private Button createResetButton()
+    {
+        final String buttonTitle = viewContext.getMessage(Dict.RESET_USER_SETTINGS_BUTTON);
+        final Button button = new Button(buttonTitle, new SelectionListener<ButtonEvent>()
+            {
+                @Override
+                public final void componentSelected(ButtonEvent ce)
+                {
+                    final String title = viewContext.getMessage(Dict.CONFIRM_TITLE);
+                    final String msg =
+                            viewContext.getMessage(Dict.RESET_USER_SETTINGS_CONFIRMATION_MSG);
+                    MessageBox.confirm(title, msg, new Listener<MessageBoxEvent>()
+                        {
+                            public void handleEvent(MessageBoxEvent messageEvent)
+                            {
+                                if (messageEvent.getButtonClicked().getItemId().equals(Dialog.YES))
+                                {
+                                    resetUserSettings();
+                                }
+                            }
+                        });
+                }
+            });
+        return button;
+    }
+
+    private void resetUserSettings()
+    {
+        viewContext.getService().resetDisplaySettings(new ResetUserSettingsCallback(viewContext));
+    }
+
+    public final class ResetUserSettingsCallback extends AbstractAsyncCallback<DisplaySettings>
+    {
+        private ResetUserSettingsCallback(IViewContext<?> viewContext)
+        {
+            super(viewContext);
+        }
+
+        @Override
+        public final void process(final DisplaySettings defaultDisplaySettings)
+        {
+            // reinitialize DisplaySettingsManager with updated SessionContext
+            viewContext.getModel().getSessionContext().setDisplaySettings(defaultDisplaySettings);
+            viewContext.initDisplaySettingsManager();
+            hide();
+        }
+    }
 }
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 d141d3a6b1de086b622f020e01138b843a4f60c9..b460408a72dfefd670ae707ca13c601300e792b0 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
@@ -399,6 +399,25 @@ public abstract class AbstractClientService implements IClientService,
         }
     }
 
+    public DisplaySettings resetDisplaySettings()
+    {
+        try
+        {
+            final String sessionToken = getSessionToken();
+            IServer server = getServer();
+            final DisplaySettings defaultSettings = server.getDefaultDisplaySettings(sessionToken);
+            updateDisplaySettings(defaultSettings);
+            return defaultSettings;
+        } catch (InvalidSessionException e)
+        {
+            // ignored
+        } catch (final ch.systemsx.cisd.common.exceptions.UserFailureException e)
+        {
+            throw UserFailureExceptionTranslator.translate(e);
+        }
+        return null;
+    }
+
     public void changeUserHomeGroup(TechId groupIdOrNull)
     {
         try
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 83e3432008bf6ae1dbe70ca2066ef27234379185..64df17fdcf026723faf621be68cce474928821f5 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
@@ -313,6 +313,18 @@ public abstract class AbstractServer<T extends IServer> extends AbstractServiceW
         }
     }
 
+    public DisplaySettings getDefaultDisplaySettings(String sessionToken)
+    {
+        PersonPE systemUser =
+                getDAOFactory().getPersonDAO().tryFindPersonByUserId(PersonPE.SYSTEM_USER_ID);
+        if (systemUser == null)
+        {
+            throw new UserFailureException(
+                    "Couldn't find system user with default settings in the DB.");
+        }
+        return systemUser.getDisplaySettings();
+    }
+
     public void changeUserHomeGroup(String sessionToken, TechId groupIdOrNull)
     {
         final Session session = getSessionManager().getSession(sessionToken);
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/AbstractServerLogger.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/AbstractServerLogger.java
index 1d0c414bcbfd0fb4c551219197bb962302777731..b8ff35b341d00c2630cc0aa7f4dbc892d21cd8af 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/AbstractServerLogger.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/AbstractServerLogger.java
@@ -167,6 +167,12 @@ public abstract class AbstractServerLogger implements IServer
         logTracking(sessionToken, "save_display_settings", "");
     }
 
+    public DisplaySettings getDefaultDisplaySettings(String sessionToken)
+    {
+        logTracking(sessionToken, "get_default_display_settings", "");
+        return null;
+    }
+
     public void changeUserHomeGroup(String sessionToken, TechId groupIdOrNull)
     {
         String groupId = groupIdOrNull == null ? "null" : groupIdOrNull.toString();
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 b4e999484d25ad68f060535899b6a267230af3cc..3d93c154f3553c0be1d8750e294c592f99acb344 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
@@ -64,6 +64,9 @@ public interface IServer extends ISessionProvider
     @Transactional
     public void setBaseIndexURL(String sessionToken, String baseIndexURL);
 
+    @Transactional
+    public DisplaySettings getDefaultDisplaySettings(String sessionToken);
+
     @Transactional
     public void saveDisplaySettings(String sessionToken, DisplaySettings displaySettings);
 
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/public/common-dictionary.js b/openbis/source/java/ch/systemsx/cisd/openbis/public/common-dictionary.js
index 3d5290cfc3785cc84613f245da786d2a26af3226..c2e958aebfb592c624eb22f3ef585b2d6d10a8e4 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/public/common-dictionary.js
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/public/common-dictionary.js
@@ -338,6 +338,8 @@ var common = {
   home_group_label: "Home Group",
   use_wildcard_search_mode_label: "Search with Wildcards",
   use_wildcard_search_mode_tooltip: "Check to treat '*' and '?' as wildcards in searched text. Note, that only whole words will match if you don't add '*' at the beginning and at the end of the text.",
+  reset_user_settings_button: "Restore Default",
+  reset_user_settings_confirmation_msg: "Are you sure that you want to restore default settings?<br><br>Every setting you changed in this application apart from home group, e.g. hiding/showing certain columns in a browser, will be lost.",
     
   //
   // Role View