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 051a6a544afece93694ada335010c60eadff35a7..56fe063e06aa86f0a4447c6da96d75bfd0ebb222 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
@@ -322,6 +322,28 @@ public abstract class Dict
 
     public static final String PART_OF_SAMPLE = "part_of_sample";
 
+    //
+    // Menu Titles
+    //
+
+    public static final String MENU_ADMINISTRATION = "menu_administration";
+
+    public static final String MENU_AUTHORIZATION = "menu_authorization";
+
+    public static final String MENU_PROJECT = "menu_project";
+
+    public static final String MENU_PROPERTY_TYPES = "menu_property_types";
+
+    public static final String MENU_VOCABULARY = "menu_vocabulary";
+
+    public static final String MENU_DATA_SET = "menu_data_set";
+
+    public static final String MENU_EXPERIMENT = "menu_experiment";
+
+    public static final String MENU_MATERIAL = "menu_material";
+
+    public static final String MENU_SAMPLE = "menu_sample";
+
     //
     // Tab Titles
     //
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/menu/ActionMenu.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/menu/ActionMenu.java
index b12e2344a540067147fb2f060cb3811788ad1de5..f0f107152ea07b53ddcd740990bf4dbc1be408bb 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/menu/ActionMenu.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/menu/ActionMenu.java
@@ -23,9 +23,10 @@ import com.extjs.gxt.ui.client.widget.menu.MenuItem;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.DispatcherHelper;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.ITabItemFactory;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.menu.TopMenu.ActionMenuKind;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.IMessageProvider;
 
 /**
- * {@link MenuItem} with action fired on click.
+ * {@link MenuItem} with action fired on selection.
  * 
  * @author Izabela Adamczyk
  * @author Piotr Buczek
@@ -33,16 +34,15 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.menu.TopMe
 public class ActionMenu extends MenuItem
 {
 
-    private ActionMenu(final ActionMenuKind action, final String text)
+    private ActionMenu(final String id, final String text)
     {
         super(text);
-        setId(TopMenu.ID + "_" + action.name());
+        setId(id);
     }
 
-    public ActionMenu(final ActionMenuKind action, final String name,
-            final ITabItemFactory tabToOpen)
+    private ActionMenu(final String id, final String name, final ITabItemFactory tabToOpen)
     {
-        this(action, name);
+        this(id, name);
         addSelectionListener(new SelectionListener<ComponentEvent>()
             {
 
@@ -54,4 +54,10 @@ public class ActionMenu extends MenuItem
             });
     }
 
+    public ActionMenu(final ActionMenuKind action, IMessageProvider messageProvider,
+            final ITabItemFactory tabToOpen)
+    {
+        this(action.getMenuId(), action.getMenuText(messageProvider), tabToOpen);
+    }
+
 }
\ No newline at end of file
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 c354dc9c4c9b7d44539f4041da743e50688b7e70..351a6bb9b6ddcf72d33d488619d6540622372373 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
@@ -40,6 +40,7 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.menu.datas
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.menu.experiment.ExperimentMenu;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.menu.material.MaterialMenu;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.menu.sample.SampleMenu;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.IMessageProvider;
 import ch.systemsx.cisd.openbis.generic.client.web.client.dto.SessionContext;
 import ch.systemsx.cisd.openbis.generic.client.web.client.dto.User;
 
@@ -56,11 +57,16 @@ public class TopMenu extends LayoutContainer
 
     public static final String LOGOUT_BUTTON_ID = GenericConstants.ID_PREFIX + "logout-button";
 
+    public static final String ICON_STYLE = "icon-menu-show";
+
+    /** {@link ActionMenu} kind enum with names matching dictionary keys */
     public static enum ActionMenuKind
     {
-        ADMINISTRATION_MENU_MANAGE_GROUPS, AUTHORIZATION_MENU_USERS, AUTHORIZATION_MENU_ROLES,
+        ADMINISTRATION_MENU_MANAGE_GROUPS,
+
+        AUTHORIZATION_MENU_USERS, AUTHORIZATION_MENU_ROLES,
 
-        DATA_SET_MENU_SEARCH, DATA_SET_MENU_IMPORT,
+        DATA_SET_MENU_SEARCH,
 
         EXPERIMENT_MENU_BROWSE, EXPERIMENT_MENU_NEW, EXPERIMENT_MENU_TYPES,
 
@@ -68,13 +74,23 @@ public class TopMenu extends LayoutContainer
 
         SAMPLE_MENU_BROWSE, SAMPLE_MENU_NEW, SAMPLE_MENU_IMPORT, SAMPLE_MENU_TYPES,
 
-        PROJECT_MENU_NEW, PROJECT_MENU_BROWSE,
+        PROJECT_MENU_BROWSE, PROJECT_MENU_NEW,
 
         PROPERTY_TYPES_MENU_BROWSE_PROPERTY_TYPES, PROPERTY_TYPES_MENU_BROWSE_ASSIGNMENTS,
         PROPERTY_TYPES_MENU_NEW_PROPERTY_TYPES, PROPERTY_TYPES_MENU_ASSIGN_TO_EXPERIMENT_TYPE,
         PROPERTY_TYPES_MENU_ASSIGN_TO_SAMPLE_TYPE,
 
-        VOCABULARY_MENU_BROWSE, VOCABULARY_MENU_NEW,
+        VOCABULARY_MENU_BROWSE, VOCABULARY_MENU_NEW;
+
+        public String getMenuId()
+        {
+            return ID + "_" + this.name();
+        }
+
+        public String getMenuText(IMessageProvider messageProvider)
+        {
+            return messageProvider.getMessage(this.name());
+        }
     }
 
     private final ToolBar toolBar;
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 e44d2e01247f46dd56c8b0d59b5242dc10512f6e..f604e0856c15466ac5c250ddb13d1e8e5895b2d3 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
@@ -18,6 +18,7 @@ package ch.systemsx.cisd.openbis.generic.client.web.client.application.menu.admi
 
 import com.extjs.gxt.ui.client.widget.menu.Menu;
 
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.Dict;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.ComponentProvider;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.menu.ActionMenu;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.menu.TopMenu;
@@ -31,16 +32,14 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.IMess
  */
 public class AdministrationMenu extends TopMenuItem
 {
-    // TODO 2009-03-16, Piotr Buczek: use messageProvider for Strings
-
     public AdministrationMenu(IMessageProvider messageProvider, ComponentProvider componentProvider)
     {
-        super("Administration");
-        setId(TopMenu.ID);
-        setIconStyle("icon-menu-show");
+        super(messageProvider.getMessage(Dict.MENU_ADMINISTRATION));
+        setIconStyle(TopMenu.ICON_STYLE);
+
         Menu menu = new Menu();
         menu.add(new ActionMenu(TopMenu.ActionMenuKind.ADMINISTRATION_MENU_MANAGE_GROUPS,
-                "Manage Groups", componentProvider.getGroupsView()));
+                messageProvider, componentProvider.getGroupsView()));
         menu.add(new ProjectMenu(messageProvider, componentProvider));
         menu.add(new VocabularyMenu(messageProvider, componentProvider));
         menu.add(new PropertyTypesMenu(messageProvider, componentProvider));
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/menu/administration/AuthorizationMenu.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/menu/administration/AuthorizationMenu.java
index c2a87de2ce08e4c2297b9fad286b2964ebded74a..1b38bc41a11d50a29ffacee64b44fc2d8b9a81d5 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/menu/administration/AuthorizationMenu.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/menu/administration/AuthorizationMenu.java
@@ -19,6 +19,7 @@ package ch.systemsx.cisd.openbis.generic.client.web.client.application.menu.admi
 import com.extjs.gxt.ui.client.widget.menu.Menu;
 import com.extjs.gxt.ui.client.widget.menu.MenuItem;
 
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.Dict;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.ComponentProvider;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.menu.ActionMenu;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.menu.TopMenu;
@@ -34,12 +35,13 @@ public class AuthorizationMenu extends MenuItem
 
     public AuthorizationMenu(IMessageProvider messageProvider, ComponentProvider componentProvider)
     {
-        super("Authorization");
-        setIconStyle("icon-menu-show");
+        super(messageProvider.getMessage(Dict.MENU_AUTHORIZATION));
+        setIconStyle(TopMenu.ICON_STYLE);
+
         Menu menu = new Menu();
-        menu.add(new ActionMenu(TopMenu.ActionMenuKind.AUTHORIZATION_MENU_USERS, "Users",
+        menu.add(new ActionMenu(TopMenu.ActionMenuKind.AUTHORIZATION_MENU_USERS, messageProvider,
                 componentProvider.getPersonsView()));
-        menu.add(new ActionMenu(TopMenu.ActionMenuKind.AUTHORIZATION_MENU_ROLES, "Roles",
+        menu.add(new ActionMenu(TopMenu.ActionMenuKind.AUTHORIZATION_MENU_ROLES, messageProvider,
                 componentProvider.getRolesView()));
         setSubMenu(menu);
     }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/menu/administration/ProjectMenu.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/menu/administration/ProjectMenu.java
index f63a460a4b32864f6e7be0dc2abdbac97f07045e..1fbccda67903b3f4f8e813571d6c6aa31842b324 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/menu/administration/ProjectMenu.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/menu/administration/ProjectMenu.java
@@ -19,6 +19,7 @@ package ch.systemsx.cisd.openbis.generic.client.web.client.application.menu.admi
 import com.extjs.gxt.ui.client.widget.menu.Menu;
 import com.extjs.gxt.ui.client.widget.menu.MenuItem;
 
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.Dict;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.ComponentProvider;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.menu.ActionMenu;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.menu.TopMenu;
@@ -34,13 +35,14 @@ public class ProjectMenu extends MenuItem
 
     public ProjectMenu(IMessageProvider messageProvider, ComponentProvider componentProvider)
     {
-        super("Project");
-        setIconStyle("icon-menu-show");
+        super(messageProvider.getMessage(Dict.MENU_PROJECT));
+        setIconStyle(TopMenu.ICON_STYLE);
+
         Menu menu = new Menu();
-        menu.add(new ActionMenu(TopMenu.ActionMenuKind.PROJECT_MENU_BROWSE, "Browse",
+        menu.add(new ActionMenu(TopMenu.ActionMenuKind.PROJECT_MENU_BROWSE, messageProvider,
                 componentProvider.getProjectBrowser()));
-        menu.add(new ActionMenu(TopMenu.ActionMenuKind.PROJECT_MENU_NEW, "New", componentProvider
-                .getProjectRegistration()));
+        menu.add(new ActionMenu(TopMenu.ActionMenuKind.PROJECT_MENU_NEW, messageProvider,
+                componentProvider.getProjectRegistration()));
         setSubMenu(menu);
     }
 }
\ No newline at end of file
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/menu/administration/PropertyTypesMenu.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/menu/administration/PropertyTypesMenu.java
index fc44e3587867976859bc18fb2d7eacc946034055..e19c424edad1a9fa0c6020b19bfaca14a6437d25 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/menu/administration/PropertyTypesMenu.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/menu/administration/PropertyTypesMenu.java
@@ -19,6 +19,7 @@ package ch.systemsx.cisd.openbis.generic.client.web.client.application.menu.admi
 import com.extjs.gxt.ui.client.widget.menu.Menu;
 import com.extjs.gxt.ui.client.widget.menu.MenuItem;
 
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.Dict;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.ComponentProvider;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.menu.ActionMenu;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.menu.TopMenu;
@@ -34,22 +35,21 @@ public class PropertyTypesMenu extends MenuItem
 
     public PropertyTypesMenu(IMessageProvider messageProvider, ComponentProvider componentProvider)
     {
-        super("Property Type");
-        setIconStyle("icon-menu-show");
+        super(messageProvider.getMessage(Dict.MENU_PROPERTY_TYPES));
+        setIconStyle(TopMenu.ICON_STYLE);
+
         Menu menu = new Menu();
         menu.add(new ActionMenu(TopMenu.ActionMenuKind.PROPERTY_TYPES_MENU_BROWSE_PROPERTY_TYPES,
-                "Browse Property Types", componentProvider.getPropertyTypeBrowser()));
+                messageProvider, componentProvider.getPropertyTypeBrowser()));
         menu.add(new ActionMenu(TopMenu.ActionMenuKind.PROPERTY_TYPES_MENU_BROWSE_ASSIGNMENTS,
-                "Browse Assignments", componentProvider.getPropertyTypeAssignmentBrowser()));
+                messageProvider, componentProvider.getPropertyTypeAssignmentBrowser()));
         menu.add(new ActionMenu(TopMenu.ActionMenuKind.PROPERTY_TYPES_MENU_NEW_PROPERTY_TYPES,
-                "New Property Type", componentProvider.getPropertyTypeRegistration()));
+                messageProvider, componentProvider.getPropertyTypeRegistration()));
         menu.add(new ActionMenu(
                 TopMenu.ActionMenuKind.PROPERTY_TYPES_MENU_ASSIGN_TO_EXPERIMENT_TYPE,
-                "Assign to Experiment Type", componentProvider
-                        .getPropertyTypeExperimentTypeAssignmentForm()));
+                messageProvider, componentProvider.getPropertyTypeExperimentTypeAssignmentForm()));
         menu.add(new ActionMenu(TopMenu.ActionMenuKind.PROPERTY_TYPES_MENU_ASSIGN_TO_SAMPLE_TYPE,
-                "Assign to Sample Type", componentProvider
-                        .getPropertyTypeSampleTypeAssignmentForm()));
+                messageProvider, componentProvider.getPropertyTypeSampleTypeAssignmentForm()));
         setSubMenu(menu);
     }
 }
\ No newline at end of file
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/menu/administration/VocabularyMenu.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/menu/administration/VocabularyMenu.java
index a9448f20da84f850aae6bbb77808702c3cee2276..ac831b95e2dc26c107e702340767658491c18fe1 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/menu/administration/VocabularyMenu.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/menu/administration/VocabularyMenu.java
@@ -19,6 +19,7 @@ package ch.systemsx.cisd.openbis.generic.client.web.client.application.menu.admi
 import com.extjs.gxt.ui.client.widget.menu.Menu;
 import com.extjs.gxt.ui.client.widget.menu.MenuItem;
 
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.Dict;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.ComponentProvider;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.menu.ActionMenu;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.menu.TopMenu;
@@ -34,12 +35,13 @@ public class VocabularyMenu extends MenuItem
 
     public VocabularyMenu(IMessageProvider messageProvider, ComponentProvider componentProvider)
     {
-        super("Vocabulary");
-        setIconStyle("icon-menu-show");
+        super(messageProvider.getMessage(Dict.MENU_VOCABULARY));
+        setIconStyle(TopMenu.ICON_STYLE);
+
         Menu menu = new Menu();
-        menu.add(new ActionMenu(TopMenu.ActionMenuKind.VOCABULARY_MENU_BROWSE, "Browse",
+        menu.add(new ActionMenu(TopMenu.ActionMenuKind.VOCABULARY_MENU_BROWSE, messageProvider,
                 componentProvider.getVocabularyBrowser()));
-        menu.add(new ActionMenu(TopMenu.ActionMenuKind.VOCABULARY_MENU_NEW, "New",
+        menu.add(new ActionMenu(TopMenu.ActionMenuKind.VOCABULARY_MENU_NEW, messageProvider,
                 componentProvider.getVocabularyRegistration()));
         setSubMenu(menu);
     }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/menu/dataset/DataSetMenu.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/menu/dataset/DataSetMenu.java
index f4963f6c716a5dd14c32fc2351a80c94a7d2fda4..97bfbc0499ddf98ea517822834804b73a4481183 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/menu/dataset/DataSetMenu.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/menu/dataset/DataSetMenu.java
@@ -18,6 +18,7 @@ package ch.systemsx.cisd.openbis.generic.client.web.client.application.menu.data
 
 import com.extjs.gxt.ui.client.widget.menu.Menu;
 
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.Dict;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.ComponentProvider;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.menu.ActionMenu;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.menu.TopMenu;
@@ -34,13 +35,12 @@ public class DataSetMenu extends TopMenuItem
 
     public DataSetMenu(IMessageProvider messageProvider, ComponentProvider componentProvider)
     {
-        super("Data Set");
-        setIconStyle("icon-menu-show");
+        super(messageProvider.getMessage(Dict.MENU_DATA_SET));
+        setIconStyle(TopMenu.ICON_STYLE);
+
         Menu menu = new Menu();
-        menu.add(new ActionMenu(TopMenu.ActionMenuKind.DATA_SET_MENU_SEARCH, "Search",
+        menu.add(new ActionMenu(TopMenu.ActionMenuKind.DATA_SET_MENU_SEARCH, messageProvider,
                 componentProvider.getDataSetSearch()));
-        menu.add(new ActionMenu(TopMenu.ActionMenuKind.DATA_SET_MENU_IMPORT, "Import",
-                componentProvider.getDummyComponent()));
         setMenu(menu);
     }
 }
\ No newline at end of file
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/menu/experiment/ExperimentMenu.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/menu/experiment/ExperimentMenu.java
index 676395288982dfd19460397118f617d47d3b57b7..68db2a96dcf35f1953aa0bc5967b26f5c19f5a1d 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/menu/experiment/ExperimentMenu.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/menu/experiment/ExperimentMenu.java
@@ -18,6 +18,7 @@ package ch.systemsx.cisd.openbis.generic.client.web.client.application.menu.expe
 
 import com.extjs.gxt.ui.client.widget.menu.Menu;
 
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.Dict;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.ComponentProvider;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.menu.ActionMenu;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.menu.TopMenu;
@@ -33,17 +34,16 @@ public class ExperimentMenu extends TopMenuItem
 {
     public ExperimentMenu(IMessageProvider messageProvider, ComponentProvider componentProvider)
     {
-        super("Experiment");
-        setIconStyle("icon-menu-show");
+        super(messageProvider.getMessage(Dict.MENU_EXPERIMENT));
+        setIconStyle(TopMenu.ICON_STYLE);
 
         Menu menu = new Menu();
-        menu.add(new ActionMenu(TopMenu.ActionMenuKind.EXPERIMENT_MENU_BROWSE, "Browse",
+        menu.add(new ActionMenu(TopMenu.ActionMenuKind.EXPERIMENT_MENU_BROWSE, messageProvider,
                 componentProvider.getExperimentBrowser()));
-        menu.add(new ActionMenu(TopMenu.ActionMenuKind.EXPERIMENT_MENU_NEW, "New",
+        menu.add(new ActionMenu(TopMenu.ActionMenuKind.EXPERIMENT_MENU_NEW, messageProvider,
                 componentProvider.getExperimentRegistration()));
-        menu.add(new ActionMenu(TopMenu.ActionMenuKind.EXPERIMENT_MENU_TYPES, "Types",
+        menu.add(new ActionMenu(TopMenu.ActionMenuKind.EXPERIMENT_MENU_TYPES, messageProvider,
                 componentProvider.getExperimentTypeBrowser()));
-
         setMenu(menu);
     }
 
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/menu/material/MaterialMenu.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/menu/material/MaterialMenu.java
index c1fb9819e1d29c585e2003d1b0e6b49f05220a89..a157bbb6f1bc0f102c3718631d4653a6087e4d63 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/menu/material/MaterialMenu.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/menu/material/MaterialMenu.java
@@ -18,6 +18,7 @@ package ch.systemsx.cisd.openbis.generic.client.web.client.application.menu.mate
 
 import com.extjs.gxt.ui.client.widget.menu.Menu;
 
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.Dict;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.ComponentProvider;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.menu.ActionMenu;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.menu.TopMenu;
@@ -34,14 +35,15 @@ public class MaterialMenu extends TopMenuItem
 
     public MaterialMenu(IMessageProvider messageProvider, ComponentProvider componentProvider)
     {
-        super("Material");
-        setIconStyle("icon-menu-show");
+        super(messageProvider.getMessage(Dict.MENU_MATERIAL));
+        setIconStyle(TopMenu.ICON_STYLE);
+
         Menu menu = new Menu();
-        menu.add(new ActionMenu(TopMenu.ActionMenuKind.MATERIAL_MENU_BROWSE, "Browse",
+        menu.add(new ActionMenu(TopMenu.ActionMenuKind.MATERIAL_MENU_BROWSE, messageProvider,
                 componentProvider.getMaterialBrowser()));
-        menu.add(new ActionMenu(TopMenu.ActionMenuKind.MATERIAL_MENU_IMPORT, "Import",
+        menu.add(new ActionMenu(TopMenu.ActionMenuKind.MATERIAL_MENU_IMPORT, messageProvider,
                 componentProvider.getMaterialBatchRegistration()));
-        menu.add(new ActionMenu(TopMenu.ActionMenuKind.MATERIAL_MENU_TYPES, "Types",
+        menu.add(new ActionMenu(TopMenu.ActionMenuKind.MATERIAL_MENU_TYPES, messageProvider,
                 componentProvider.getMaterialTypeBrowser()));
         setMenu(menu);
     }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/menu/sample/SampleMenu.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/menu/sample/SampleMenu.java
index 584ffa3c2729b8d4e2e5b91a8f8a333f77149c2f..6bf594d13dea6100cd137344f3ecf56d5e28fa42 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/menu/sample/SampleMenu.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/menu/sample/SampleMenu.java
@@ -19,6 +19,7 @@ package ch.systemsx.cisd.openbis.generic.client.web.client.application.menu.samp
 import com.extjs.gxt.ui.client.widget.menu.Menu;
 import com.extjs.gxt.ui.client.widget.menu.SeparatorMenuItem;
 
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.Dict;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.ComponentProvider;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.menu.ActionMenu;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.menu.TopMenu;
@@ -35,16 +36,17 @@ public class SampleMenu extends TopMenuItem
 
     public SampleMenu(IMessageProvider messageProvider, ComponentProvider componentProvider)
     {
-        super("Sample");
-        setIconStyle("icon-menu-show");
+        super(messageProvider.getMessage(Dict.MENU_SAMPLE));
+        setIconStyle(TopMenu.ICON_STYLE);
+
         Menu menu = new Menu();
-        menu.add(new ActionMenu(TopMenu.ActionMenuKind.SAMPLE_MENU_BROWSE, "Browse",
+        menu.add(new ActionMenu(TopMenu.ActionMenuKind.SAMPLE_MENU_BROWSE, messageProvider,
                 componentProvider.getSampleBrowser()));
-        menu.add(new ActionMenu(TopMenu.ActionMenuKind.SAMPLE_MENU_NEW, "New", componentProvider
-                .getSampleRegistration()));
-        menu.add(new ActionMenu(TopMenu.ActionMenuKind.SAMPLE_MENU_IMPORT, "Import",
+        menu.add(new ActionMenu(TopMenu.ActionMenuKind.SAMPLE_MENU_NEW, messageProvider,
+                componentProvider.getSampleRegistration()));
+        menu.add(new ActionMenu(TopMenu.ActionMenuKind.SAMPLE_MENU_IMPORT, messageProvider,
                 componentProvider.getSampleBatchRegistration()));
-        menu.add(new ActionMenu(TopMenu.ActionMenuKind.SAMPLE_MENU_TYPES, "Types",
+        menu.add(new ActionMenu(TopMenu.ActionMenuKind.SAMPLE_MENU_TYPES, messageProvider,
                 componentProvider.getSampleTypeBrowser()));
         menu.add(new SeparatorMenuItem());
         setMenu(menu);
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 8557ad9c1a07ebd3153ee7bd8e1946fc2ec5dea6..5a2e434117e2dbcf02d137e8f8e54c39f1a7c90b 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
@@ -151,6 +151,51 @@ var common = {
   default_value_tooltip: "The value of the assigned property for all currently existing entities.",
   entity_type_assignments: "{0} Type Assignment{1}",
   
+  //
+  // Menu Titles
+  //
+  
+  menu_administration: "Administration",
+  ADMINISTRATION_MENU_MANAGE_GROUPS: "Manage Groups",
+  
+  menu_authorization: "Authorization",
+  AUTHORIZATION_MENU_USERS: "Users",
+  AUTHORIZATION_MENU_ROLES: "Roles",
+
+  menu_data_set: "Data Set",
+  DATA_SET_MENU_SEARCH: "Search",
+  
+  menu_experiment: "Experiment",
+  EXPERIMENT_MENU_BROWSE: "Browse",
+  EXPERIMENT_MENU_NEW: "New",
+  EXPERIMENT_MENU_TYPES: "Types",
+  
+  menu_material: "Material",
+  MATERIAL_MENU_BROWSE: "Browse",
+  MATERIAL_MENU_IMPORT: "Import",
+  MATERIAL_MENU_TYPES: "Types",
+   
+  menu_sample: "Sample",
+  SAMPLE_MENU_BROWSE: "Browse",
+  SAMPLE_MENU_NEW: "New",
+  SAMPLE_MENU_IMPORT: "Import",
+  SAMPLE_MENU_TYPES: "Types",
+  
+  menu_project: "Project",
+  PROJECT_MENU_BROWSE: "Browse",
+  PROJECT_MENU_NEW: "New",
+  
+  menu_property_types: "Property Types",
+  PROPERTY_TYPES_MENU_BROWSE_PROPERTY_TYPES: "Browse Property Types",
+  PROPERTY_TYPES_MENU_BROWSE_ASSIGNMENTS: "Browse Assignments",
+  PROPERTY_TYPES_MENU_NEW_PROPERTY_TYPES: "New Property Types",
+  PROPERTY_TYPES_MENU_ASSIGN_TO_EXPERIMENT_TYPE: "Assign To Experiment Type",
+  PROPERTY_TYPES_MENU_ASSIGN_TO_SAMPLE_TYPE: "Assign To Sample Type",
+  
+  menu_vocabulary: "Vocabulary",
+  VOCABULARY_MENU_BROWSE: "Browse",
+  VOCABULARY_MENU_NEW: "New",
+    
   //
   // Tab Titles
   //
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/AuthorizationManagementConsolTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/AuthorizationManagementConsolTest.java
index 2afcff58d4dc2c608c4542b0bda918ccdaa284b8..8a0f413ae35194c05bcede154ed7a142cb150743 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/AuthorizationManagementConsolTest.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/AuthorizationManagementConsolTest.java
@@ -16,7 +16,7 @@
 
 package ch.systemsx.cisd.openbis.generic.client.web.client.application;
 
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.CategoriesBuilder;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.menu.TopMenu.ActionMenuKind;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.amc.AddPersonDialog;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.amc.CheckGroup;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.amc.CheckPerson;
@@ -44,8 +44,7 @@ public class AuthorizationManagementConsolTest extends AbstractGWTTestCase
     public final void testCreateGroup()
     {
         final String groupCode = TEST_GROUP;
-        loginAndGotoTab(CategoriesBuilder.MenuCategoryKind.GROUPS,
-                CategoriesBuilder.MenuElementKind.BROWSE);
+        loginAndGotoTab(ActionMenuKind.ADMINISTRATION_MENU_MANAGE_GROUPS);
         remoteConsole.prepare(new CreateGroup(groupCode));
         remoteConsole.prepare(new CheckGroup(groupCode.toUpperCase()));
 
@@ -56,8 +55,7 @@ public class AuthorizationManagementConsolTest extends AbstractGWTTestCase
     {
         // This userId must be one of the ones located on 'etc/passwd' (file based authentication).
         final String userId = USER_ID;
-        loginAndGotoTab(CategoriesBuilder.MenuCategoryKind.PERSONS,
-                CategoriesBuilder.MenuElementKind.BROWSE);
+        loginAndGotoTab(ActionMenuKind.AUTHORIZATION_MENU_USERS);
         remoteConsole.prepare(new CreatePerson(userId));
         remoteConsole.prepare(new CheckPerson(userId));
 
@@ -66,8 +64,7 @@ public class AuthorizationManagementConsolTest extends AbstractGWTTestCase
 
     public final void testCreateRole()
     {
-        loginAndGotoTab(CategoriesBuilder.MenuCategoryKind.ROLES,
-                CategoriesBuilder.MenuElementKind.BROWSE);
+        loginAndGotoTab(ActionMenuKind.AUTHORIZATION_MENU_ROLES);
         remoteConsole.prepare(new CreateRole(TEST_GROUP.toUpperCase(), USER_ID,
                 RoleSetCode.OBSERVER.toString()));
         remoteConsole.prepare(new CheckRole(TEST_GROUP.toUpperCase(), USER_ID, RoleSetCode.OBSERVER
@@ -82,8 +79,7 @@ public class AuthorizationManagementConsolTest extends AbstractGWTTestCase
      */
     public final void testCreatePersonByAnUnauthorizedUser()
     {
-        loginAndGotoTab("o",
-                "o", CategoriesBuilder.MenuCategoryKind.PERSONS, CategoriesBuilder.MenuElementKind.BROWSE);
+        loginAndGotoTab("o", "o", ActionMenuKind.AUTHORIZATION_MENU_USERS);
         final String userId = "u";
         remoteConsole.prepare(new CreatePerson(userId));
         FailureExpectation failureExpectation =
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/DataSetSearchTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/DataSetSearchTest.java
index 285f3561229f1def45ccce6bbcd1257c1a4d9bfa..b739d65dcf7c976d3dd24a671a71862cd538853f 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/DataSetSearchTest.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/DataSetSearchTest.java
@@ -16,7 +16,7 @@
 
 package ch.systemsx.cisd.openbis.generic.client.web.client.application;
 
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.CategoriesBuilder;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.menu.TopMenu.ActionMenuKind;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.columns.specific.data.DataSetSearchHitColDefKind;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.data.AbstractExternalDataGrid;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.data.DataSetSearchHitGrid;
@@ -103,7 +103,6 @@ public class DataSetSearchTest extends AbstractGWTTestCase
 
     private void loginAndGotoTab()
     {
-        loginAndGotoTab(CategoriesBuilder.MenuCategoryKind.DATA_SETS,
-                CategoriesBuilder.MenuElementKind.SEARCH);
+        loginAndGotoTab(ActionMenuKind.DATA_SET_MENU_SEARCH);
     }
 }
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/EntityTypeBrowserTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/EntityTypeBrowserTest.java
index 6fb64094349d15288c55d237be368a5b3194ee2b..71dc00ac4b28934985c7f592b7c479e44a207e5e 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/EntityTypeBrowserTest.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/EntityTypeBrowserTest.java
@@ -16,8 +16,7 @@
 
 package ch.systemsx.cisd.openbis.generic.client.web.client.application;
 
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.CategoriesBuilder.MenuCategoryKind;
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.CategoriesBuilder.MenuElementKind;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.menu.TopMenu.ActionMenuKind;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.columns.specific.EntityTypeColDefKind;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.experiment.ExperimentTypeGrid;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.material.MaterialTypeGrid;
@@ -36,7 +35,7 @@ public class EntityTypeBrowserTest extends AbstractGWTTestCase
 
     public final void testListMaterialTypes()
     {
-        loginAndGotoTab(MenuCategoryKind.MATERIALS, MenuElementKind.BROWSE_TYPES);
+        loginAndGotoTab(ActionMenuKind.MATERIAL_MENU_TYPES);
         CheckTableCommand table =
                 new CheckTableCommand(MaterialTypeGrid.GRID_ID,
                         MaterialTypeGrid.ListEntitiesCallback.class);
@@ -45,7 +44,7 @@ public class EntityTypeBrowserTest extends AbstractGWTTestCase
 
     public final void testListSampleTypes()
     {
-        loginAndGotoTab(MenuCategoryKind.SAMPLES, MenuElementKind.BROWSE_TYPES);
+        loginAndGotoTab(ActionMenuKind.SAMPLE_MENU_TYPES);
         CheckTableCommand table =
                 new CheckTableCommand(SampleTypeGrid.GRID_ID,
                         SampleTypeGrid.ListEntitiesCallback.class);
@@ -54,7 +53,7 @@ public class EntityTypeBrowserTest extends AbstractGWTTestCase
 
     public final void testListExperimentTypes()
     {
-        loginAndGotoTab(MenuCategoryKind.EXPERIMENTS, MenuElementKind.BROWSE_TYPES);
+        loginAndGotoTab(ActionMenuKind.EXPERIMENT_MENU_TYPES);
         CheckTableCommand table =
                 new CheckTableCommand(ExperimentTypeGrid.GRID_ID,
                         ExperimentTypeGrid.ListEntitiesCallback.class);
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/EntityTypePropertyTypeAssignmentTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/EntityTypePropertyTypeAssignmentTest.java
index 5715ea0587ac21a7b2d9d4482fb2b6a8eeb05207..c277b88635d750098d842fbfe181596de08fa280 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/EntityTypePropertyTypeAssignmentTest.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/EntityTypePropertyTypeAssignmentTest.java
@@ -16,7 +16,7 @@
 
 package ch.systemsx.cisd.openbis.generic.client.web.client.application;
 
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.CategoriesBuilder;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.menu.TopMenu.ActionMenuKind;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.OpenTab;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.columns.framework.renderers.SimpleYesNoRenderer;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.columns.specific.PropertyTypeAssignmentColDefKind;
@@ -57,8 +57,7 @@ public class EntityTypePropertyTypeAssignmentTest extends AbstractGWTTestCase
     private final void prepareListingAfterAssignment(String propertyTypeCode,
             String entityTypeCode, EntityKind entityKind, int expectedEntries, boolean isMandatory)
     {
-        remoteConsole.prepare(new OpenTab(CategoriesBuilder.MenuCategoryKind.PROPERTY_TYPES,
-                CategoriesBuilder.MenuElementKind.LIST_ASSIGNMENTS,
+        remoteConsole.prepare(new OpenTab(ActionMenuKind.PROPERTY_TYPES_MENU_BROWSE_ASSIGNMENTS,
                 PropertyTypeAssignmentForm.AssignPropertyTypeCallback.class));
         CheckPropertyTypeAssignmentTable table = new CheckPropertyTypeAssignmentTable();
         table.expectedRow(new Row().withCell(
@@ -73,8 +72,7 @@ public class EntityTypePropertyTypeAssignmentTest extends AbstractGWTTestCase
 
     public final void testAssignExperimentPropertyType()
     {
-        loginAndGotoTab(CategoriesBuilder.MenuCategoryKind.PROPERTY_TYPES,
-                CategoriesBuilder.MenuElementKind.ASSIGN_ETPT);
+        loginAndGotoTab(ActionMenuKind.PROPERTY_TYPES_MENU_ASSIGN_TO_EXPERIMENT_TYPE);
         final boolean mandatory = true;
         remoteConsole.prepare(new FillPropertyTypeAssignmentForm(mandatory, USER_COMMENT,
                 COMPOUND_HCS, "a comment", EXPERIMENT));
@@ -84,12 +82,10 @@ public class EntityTypePropertyTypeAssignmentTest extends AbstractGWTTestCase
 
     public final void testGlobalValueAssignmentSamplePropertyType()
     {
-        loginAndGotoTab(CategoriesBuilder.MenuCategoryKind.PROPERTY_TYPES,
-                CategoriesBuilder.MenuElementKind.ASSIGN_STPT);
+        loginAndGotoTab(ActionMenuKind.PROPERTY_TYPES_MENU_ASSIGN_TO_SAMPLE_TYPE);
         remoteConsole.prepare(new FillPropertyTypeAssignmentForm(false, USER_COMMENT,
                 CONTROL_LAYOUT, NO_COMMENT, SAMPLE));
-        remoteConsole.prepare(new OpenTab(CategoriesBuilder.MenuCategoryKind.SAMPLES,
-                CategoriesBuilder.MenuElementKind.BROWSE,
+        remoteConsole.prepare(new OpenTab(ActionMenuKind.SAMPLE_MENU_BROWSE,
                 PropertyTypeAssignmentForm.AssignPropertyTypeCallback.class));
         remoteConsole.prepare(new ListSamples(CISD, CONTROL_LAYOUT));
         CheckSampleTable table = new CheckSampleTable();
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ExperimentBrowserTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ExperimentBrowserTest.java
index 62d1d618e3ad7aadb34b6f3ce971f2dff6d6fd0e..a4dcb8795378b0ebce3ce08d6cbf630ebe661d1a 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ExperimentBrowserTest.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ExperimentBrowserTest.java
@@ -16,8 +16,7 @@
 
 package ch.systemsx.cisd.openbis.generic.client.web.client.application;
 
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.CategoriesBuilder.MenuCategoryKind;
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.CategoriesBuilder.MenuElementKind;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.menu.TopMenu.ActionMenuKind;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.experiment.CheckExperimentTable;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.experiment.ExperimentRow;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.experiment.ListExperiments;
@@ -33,7 +32,7 @@ public class ExperimentBrowserTest extends AbstractGWTTestCase
 
     public final void testListExperiments()
     {
-        loginAndGotoTab(MenuCategoryKind.EXPERIMENTS, MenuElementKind.BROWSE);
+        loginAndGotoTab(ActionMenuKind.EXPERIMENT_MENU_BROWSE);
         remoteConsole.prepare(new ListExperiments("DEFAULT (CISD)", "SIRNA_HCS"));
         CheckExperimentTable table = new CheckExperimentTable();
         table.expectedRow(new ExperimentRow("EXP-REUSE").valid());
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/MaterialBrowserTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/MaterialBrowserTest.java
index 0cfaa506f7622225e6588550bd19bf93860a883a..657295ea0ff5ad41a38ef78ba654e42f2e63a06b 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/MaterialBrowserTest.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/MaterialBrowserTest.java
@@ -16,7 +16,7 @@
 
 package ch.systemsx.cisd.openbis.generic.client.web.client.application;
 
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.CategoriesBuilder;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.menu.TopMenu.ActionMenuKind;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.material.CheckMaterialTable;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.material.ListMaterials;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.material.MaterialRow;
@@ -32,9 +32,8 @@ public class MaterialBrowserTest extends AbstractGWTTestCase
 
     public final void testListMaterials()
     {
-        loginAndGotoTab(CategoriesBuilder.MenuCategoryKind.MATERIALS,
-                CategoriesBuilder.MenuElementKind.BROWSE);
-
+        loginAndGotoTab(ActionMenuKind.MATERIAL_MENU_BROWSE);
+        
         remoteConsole.prepare(new ListMaterials("BACTERIUM"));
         CheckMaterialTable table = new CheckMaterialTable();
         table.expectedRow(new MaterialRow("BACTERIUM-X").userProperty("ORGANISM", "FLY"));
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ProjectRegistrationTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ProjectRegistrationTest.java
index dcd5843f31bc0ba40643289ef7b6f8076b7eb37e..e2a278fdd07dc557ed4af0cbde1f6b46b4b54295 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ProjectRegistrationTest.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ProjectRegistrationTest.java
@@ -16,7 +16,7 @@
 
 package ch.systemsx.cisd.openbis.generic.client.web.client.application;
 
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.CategoriesBuilder;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.menu.TopMenu;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.OpenTab;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.columns.specific.ProjectColDefKind;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.project.CheckProjectTable;
@@ -38,13 +38,11 @@ public class ProjectRegistrationTest extends AbstractGWTTestCase
 
     public final void testRegisterProject()
     {
-        loginAndGotoTab(CategoriesBuilder.MenuCategoryKind.PROJECTS,
-                CategoriesBuilder.MenuElementKind.REGISTER);
+        loginAndGotoTab(TopMenu.ActionMenuKind.PROJECT_MENU_NEW);
         remoteConsole.prepare(new FillProjectRegistrationForm(PROJECT_CODE_HER_MAJESTY, "CISD",
                 DESCRIPTION_PROJECT_007));
 
-        remoteConsole.prepare(new OpenTab(CategoriesBuilder.MenuCategoryKind.PROJECTS,
-                CategoriesBuilder.MenuElementKind.BROWSE,
+        remoteConsole.prepare(new OpenTab(TopMenu.ActionMenuKind.PROJECT_MENU_BROWSE,
                 ProjectRegistrationForm.ProjectRegistrationCallback.class));
         final CheckProjectTable table = new CheckProjectTable();
         table.expectedRow(new Row().withCell(ProjectColDefKind.CODE.id(), PROJECT_CODE_HER_MAJESTY)
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/PropertyTypeAssignmentBrowserTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/PropertyTypeAssignmentBrowserTest.java
index deeb93eee27b762cb49f141ab91e66f52d7d2e52..87fd000c4e4b3f774bc4ddf9260df1c49818568b 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/PropertyTypeAssignmentBrowserTest.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/PropertyTypeAssignmentBrowserTest.java
@@ -16,7 +16,7 @@
 
 package ch.systemsx.cisd.openbis.generic.client.web.client.application;
 
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.CategoriesBuilder;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.menu.TopMenu.ActionMenuKind;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.columns.specific.PropertyTypeAssignmentColDefKind;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.property_type.CheckPropertyTypeAssignmentTable;
 import ch.systemsx.cisd.openbis.generic.client.web.client.testframework.AbstractGWTTestCase;
@@ -32,8 +32,7 @@ public class PropertyTypeAssignmentBrowserTest extends AbstractGWTTestCase
 
     public final void testListAssignments()
     {
-        loginAndGotoTab(CategoriesBuilder.MenuCategoryKind.PROPERTY_TYPES,
-                CategoriesBuilder.MenuElementKind.LIST_ASSIGNMENTS);
+        loginAndGotoTab(ActionMenuKind.PROPERTY_TYPES_MENU_BROWSE_ASSIGNMENTS);
         CheckPropertyTypeAssignmentTable table = new CheckPropertyTypeAssignmentTable();
         table.expectedRow(new Row().withCell(
                 PropertyTypeAssignmentColDefKind.PROPERTY_TYPE_CODE.id(), "USER.DESCRIPTION")
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/PropertyTypeBrowserTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/PropertyTypeBrowserTest.java
index 48d6f143e0571551ae3da6039ce2a81eaee4a3c4..dd638d14738f9761fabbf208bd3665637677139f 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/PropertyTypeBrowserTest.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/PropertyTypeBrowserTest.java
@@ -16,7 +16,7 @@
 
 package ch.systemsx.cisd.openbis.generic.client.web.client.application;
 
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.CategoriesBuilder;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.menu.TopMenu.ActionMenuKind;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.columns.specific.PropertyTypeColDefKind;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.property_type.CheckPropertyTypeTable;
 import ch.systemsx.cisd.openbis.generic.client.web.client.testframework.AbstractGWTTestCase;
@@ -32,8 +32,7 @@ public class PropertyTypeBrowserTest extends AbstractGWTTestCase
 
     public final void testListPropertyTypes()
     {
-        loginAndGotoTab(CategoriesBuilder.MenuCategoryKind.PROPERTY_TYPES,
-                CategoriesBuilder.MenuElementKind.BROWSE);
+        loginAndGotoTab(ActionMenuKind.PROPERTY_TYPES_MENU_BROWSE_PROPERTY_TYPES);
         CheckPropertyTypeTable table = new CheckPropertyTypeTable();
         table.expectedRow(new Row().withCell(PropertyTypeColDefKind.CODE.id(), "PLATE_GEOMETRY"));
         remoteConsole.prepare(table.expectedSize(14));
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/PropertyTypeRegistrationTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/PropertyTypeRegistrationTest.java
index edbb06a726c6614333bb2c775ac67402653c3a83..c3cc6c8781caaa93ece9175ff7cb6f40849c296b 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/PropertyTypeRegistrationTest.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/PropertyTypeRegistrationTest.java
@@ -16,7 +16,7 @@
 
 package ch.systemsx.cisd.openbis.generic.client.web.client.application;
 
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.CategoriesBuilder;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.menu.TopMenu.ActionMenuKind;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.OpenTab;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.columns.specific.PropertyTypeColDefKind;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.property_type.CheckPropertyTypeTable;
@@ -46,12 +46,10 @@ public class PropertyTypeRegistrationTest extends AbstractGWTTestCase
 
     public final void testRegisterPropertyType()
     {
-        loginAndGotoTab(CategoriesBuilder.MenuCategoryKind.PROPERTY_TYPES,
-                CategoriesBuilder.MenuElementKind.REGISTER);
+        loginAndGotoTab(ActionMenuKind.PROPERTY_TYPES_MENU_NEW_PROPERTY_TYPES);
         remoteConsole.prepare(createFillPropertyTypeRegistrationForm());
 
-        remoteConsole.prepare(new OpenTab(CategoriesBuilder.MenuCategoryKind.PROPERTY_TYPES,
-                CategoriesBuilder.MenuElementKind.BROWSE,
+        remoteConsole.prepare(new OpenTab(ActionMenuKind.PROPERTY_TYPES_MENU_BROWSE_PROPERTY_TYPES,
                 PropertyTypeRegistrationForm.PropertyTypeRegistrationCallback.class));
         final CheckPropertyTypeTable table = new CheckPropertyTypeTable();
         table.expectedRow(new Row().withCell(PropertyTypeColDefKind.CODE.id(),
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/SampleBrowserTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/SampleBrowserTest.java
index 424d465054244d69f370938016d4ef64e48a815c..47ac365618f4da7c4b372cbae7b916977d50feeb 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/SampleBrowserTest.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/SampleBrowserTest.java
@@ -16,7 +16,7 @@
 
 package ch.systemsx.cisd.openbis.generic.client.web.client.application;
 
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.CategoriesBuilder;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.menu.TopMenu.ActionMenuKind;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.GroupSelectionWidget;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.sample.CheckSampleTable;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.sample.ExportSamplesTestCommand;
@@ -104,7 +104,6 @@ public class SampleBrowserTest extends AbstractGWTTestCase
 
     private void loginAndGotoListSamplesTab()
     {
-        loginAndGotoTab(CategoriesBuilder.MenuCategoryKind.SAMPLES,
-                CategoriesBuilder.MenuElementKind.BROWSE);
+        loginAndGotoTab(ActionMenuKind.SAMPLE_MENU_BROWSE);
     }
 }
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/VocabularyBrowserTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/VocabularyBrowserTest.java
index 90a9aa8907c71b32f861befd1431f562dd6d7c7f..01bb019823c5c293fdbe54f73c552b7cd7d14687 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/VocabularyBrowserTest.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/VocabularyBrowserTest.java
@@ -19,7 +19,7 @@ package ch.systemsx.cisd.openbis.generic.client.web.client.application;
 import com.extjs.gxt.ui.client.widget.grid.Grid;
 import com.google.gwt.user.client.ui.Widget;
 
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.CategoriesBuilder;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.menu.TopMenu.ActionMenuKind;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.columns.specific.VocabularyColDefKind;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.columns.specific.VocabularyTermColDefKind;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.util.GridTestUtils;
@@ -42,8 +42,7 @@ public class VocabularyBrowserTest extends AbstractGWTTestCase
 
     public final void testListVocabularies()
     {
-        loginAndGotoTab(CategoriesBuilder.MenuCategoryKind.VOCABULARIES,
-                CategoriesBuilder.MenuElementKind.BROWSE);
+        loginAndGotoTab(ActionMenuKind.VOCABULARY_MENU_BROWSE);
         CheckTableCommand table =
                 new CheckTableCommand(VocabularyGrid.GRID_ID,
                         VocabularyGrid.ListEntitiesCallback.class);
@@ -55,9 +54,8 @@ public class VocabularyBrowserTest extends AbstractGWTTestCase
 
     public final void testShowTermDetails()
     {
-        loginAndGotoTab(CategoriesBuilder.MenuCategoryKind.VOCABULARIES,
-                CategoriesBuilder.MenuElementKind.BROWSE);
-
+        loginAndGotoTab(ActionMenuKind.VOCABULARY_MENU_BROWSE);
+        
         remoteConsole.prepare(new ClickOnVocabularyCmd(VOCABULARY_CODE));
 
         CheckTableCommand termsTable =
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/VocabularyRegistrationTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/VocabularyRegistrationTest.java
index 6cdd06c305385bf470fe70de1758ca2bdd431337..54211b5d6fee49bf54a3fb2e7e69ded229508ed3 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/VocabularyRegistrationTest.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/VocabularyRegistrationTest.java
@@ -16,7 +16,7 @@
 
 package ch.systemsx.cisd.openbis.generic.client.web.client.application;
 
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.CategoriesBuilder;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.menu.TopMenu.ActionMenuKind;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.vocabulary.FillVocabularyRegistrationForm;
 import ch.systemsx.cisd.openbis.generic.client.web.client.testframework.AbstractGWTTestCase;
 
@@ -37,8 +37,7 @@ public class VocabularyRegistrationTest extends AbstractGWTTestCase
 
     public final void testRegisterVocabulary()
     {
-        loginAndGotoTab(CategoriesBuilder.MenuCategoryKind.VOCABULARIES,
-                CategoriesBuilder.MenuElementKind.REGISTER);
+        loginAndGotoTab(ActionMenuKind.VOCABULARY_MENU_NEW);
         remoteConsole.prepare(createFillVocabularyRegistrationForm());
 
         // TODO 2008-12-22, Christian Ribeaud: Finish this once we have list vocabularies.
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/OpenTab.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/OpenTab.java
index ffb1d94fa527e8d4b2d0d9beeb031b7d468124b4..56eede514e4f1f20c910383a2118b2d0e8c4e292 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/OpenTab.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/OpenTab.java
@@ -19,46 +19,21 @@ package ch.systemsx.cisd.openbis.generic.client.web.client.application.ui;
 import com.google.gwt.user.client.rpc.AsyncCallback;
 
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.SessionContextCallback;
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.LeftMenu;
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.CategoriesBuilder.MenuCategoryKind;
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.CategoriesBuilder.MenuElementKind;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.menu.ActionMenu;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.menu.TopMenu.ActionMenuKind;
 import ch.systemsx.cisd.openbis.generic.client.web.client.testframework.AbstractDefaultTestCommand;
 import ch.systemsx.cisd.openbis.generic.client.web.client.testframework.GWTTestUtil;
 
 /**
- * A {@link AbstractDefaultTestCommand} extension for choosing a roles menu element.
+ * A {@link AbstractDefaultTestCommand} extension for opening a tab by selecting an
+ * {@link ActionMenu}.
  * 
  * @author Izabela Adamczyk
+ * @author Piotr Buczek
  */
 public final class OpenTab extends AbstractDefaultTestCommand
 {
-    private String category;
-
-    private String option;
-
-    // TODO 2009-03-16, Piotr Buczek: change to final and remove category/option
-    @SuppressWarnings("unused")
-    private String action;
-
-    public OpenTab(final MenuCategoryKind category, final MenuElementKind option,
-            final Class<? extends AsyncCallback<?>> callbackClass)
-    {
-        if (callbackClass == null)
-        {
-            addCallbackClass(SessionContextCallback.class);
-        } else
-        {
-            addCallbackClass(callbackClass);
-        }
-        this.category = category.name();
-        this.option = option.name();
-    }
-
-    public OpenTab(final MenuCategoryKind category, final MenuElementKind option)
-    {
-        this(category, option, null);
-    }
+    private final ActionMenuKind action;
 
     public OpenTab(final ActionMenuKind action,
             final Class<? extends AsyncCallback<?>> callbackClass)
@@ -70,7 +45,7 @@ public final class OpenTab extends AbstractDefaultTestCommand
         {
             addCallbackClass(callbackClass);
         }
-        this.action = action.name();
+        this.action = action;
     }
 
     public OpenTab(final ActionMenuKind action)
@@ -84,9 +59,6 @@ public final class OpenTab extends AbstractDefaultTestCommand
 
     public final void execute()
     {
-        // TODO 2009-03-16, Piotr Buczek: change to use TopMenu
-        // GWTTestUtil.selectTopMenuWithID(TopMenu.ID, action);
-        GWTTestUtil.selectMenuCategoryWithID(LeftMenu.ID, category);
-        GWTTestUtil.selectMenuWithID(LeftMenu.ID, category, option);
+        GWTTestUtil.selectTopActionMenu(action);
     }
 }
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/client/testframework/AbstractGWTTestCase.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/client/testframework/AbstractGWTTestCase.java
index e621ea5e80019a2bb41e60aec153e436bb0ef12f..40c9f36cca8c974360f57514d3678f140823b177 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/client/testframework/AbstractGWTTestCase.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/client/testframework/AbstractGWTTestCase.java
@@ -28,8 +28,7 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.ICommonClientServiceAs
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.AbstractAsyncCallback;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.Client;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.IViewContext;
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.CategoriesBuilder.MenuCategoryKind;
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.CategoriesBuilder.MenuElementKind;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.menu.ActionMenu;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.menu.TopMenu.ActionMenuKind;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.Login;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.OpenTab;
@@ -140,30 +139,13 @@ public abstract class AbstractGWTTestCase extends GWTTestCase
 
     // ----------
 
-    /** login default user in and go to the specified tab */
-    protected final void loginAndGotoTab(MenuCategoryKind menuCategoryKind,
-            MenuElementKind menuElementKind)
-    {
-        loginAndGotoTab("test", "a", menuCategoryKind, menuElementKind);
-    }
-
-    /** login specified user in and go to the specified tab */
-    protected final void loginAndGotoTab(String userName, String passwd,
-            MenuCategoryKind menuCategoryKind, MenuElementKind menuElementKind)
-    {
-        remoteConsole.prepare(new Login(userName, passwd));
-        remoteConsole.prepare(new OpenTab(menuCategoryKind, menuElementKind));
-    }
-
-    // ----
-
-    /** login default user in and go to the specified tab (fire specified action menu) */
+    /** login default user in and open tab by {@link ActionMenu} */
     protected final void loginAndGotoTab(ActionMenuKind actionMenuKind)
     {
         loginAndGotoTab("test", "a", actionMenuKind);
     }
 
-    /** login specified user in and go to the specified tab (fire specified action menu) */
+    /** login specified user in and open tab by {@link ActionMenu} */
     protected final void loginAndGotoTab(String userName, String passwd,
             ActionMenuKind actionMenuKind)
     {
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/client/testframework/GWTTestUtil.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/client/testframework/GWTTestUtil.java
index 3ea85163a52b13227fb7fb18bb4d38035b3b7d83..eb8c127d2ff6365f482d874969276159286b25cd 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/client/testframework/GWTTestUtil.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/client/testframework/GWTTestUtil.java
@@ -45,14 +45,15 @@ import com.extjs.gxt.ui.client.widget.toolbar.ToolItem;
 import com.extjs.gxt.ui.client.widget.tree.Tree;
 import com.extjs.gxt.ui.client.widget.tree.TreeItem;
 import com.google.gwt.user.client.Element;
-import com.google.gwt.user.client.Event;
 import com.google.gwt.user.client.ui.ComplexPanel;
 import com.google.gwt.user.client.ui.ListBox;
 import com.google.gwt.user.client.ui.RootPanel;
 import com.google.gwt.user.client.ui.Widget;
 
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.GenericConstants;
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.LeftMenu;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.menu.ActionMenu;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.menu.TopMenuItem;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.menu.TopMenu.ActionMenuKind;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.widget.PagingToolBarAdapter;
 
 /**
@@ -68,44 +69,14 @@ public final class GWTTestUtil
     }
 
     /**
-     * Clicks on the menu category with specified id.
+     * Clicks on the {@link ActionMenu} specified by {@link ActionMenuKind}.
      */
-    public static void selectMenuCategoryWithID(final String menu, final String category)
+    public static void selectTopActionMenu(final ActionMenuKind action)
     {
-        final String id = menu + "_" + category;
-        final Widget widget = tryToFindByID(id);
-        assertWidgetFound("Menu category", id, widget);
-        Assert.assertTrue("Widget '" + id + "' isn't a ContentPanel (menu category): "
-                + widget.getClass(), widget instanceof ContentPanel);
-        ((ContentPanel) widget).fireEvent(Events.Select);
-    }
-
-    /**
-     * Clicks on the menu option with specified id.
-     */
-    public static void selectMenuWithID(final String menu, final String category,
-            final String option)
-    {
-        final String id = menu + "_" + category + "_" + option;
+        final String id = action.getMenuId();
         final Widget item = tryToFindByID(id);
         assertWidgetFound("Menu element", id, item);
-        final Widget tree = tryToFindByID(menu + "_" + category + LeftMenu.TREE_SUFFIX);
-        assertWidgetFound("Menu element tree", id + LeftMenu.TREE_SUFFIX, tree);
-        ((Tree) tree).setSelectedItem((TreeItem) item);
-        ((Tree) tree).fireEvent(Event.ONCLICK);
-
-    }
-
-    /**
-     * Clicks on the menu option with specified id.
-     */
-    public static void selectTopMenuWithID(final String menu, final String action)
-    {
-        final String id = menu + "_" + action;
-        final Widget item = tryToFindByID(id);
-        assertWidgetFound("Menu element", id, item);
-        ((MenuItem) item).fireEvent(Event.ONCLICK);
-
+        ((MenuItem) item).fireEvent(Events.Select);
     }
 
     /**
@@ -344,6 +315,12 @@ public final class GWTTestUtil
             if (widget instanceof ComplexPanel)
             {
                 return new ComplexPanelHandler(this).handle((ComplexPanel) widget);
+            } else if (widget instanceof TopMenuItem)
+            {
+                return new TopMenuItemHandler(this).handle((TopMenuItem) widget);
+            } else if (widget instanceof MenuItem)
+            {
+                return new MenuItemHandler(this).handle((MenuItem) widget);
             } else if (widget instanceof Menu)
             {
                 return new MenuHandler(this).handle((Menu) widget);
@@ -411,6 +388,56 @@ public final class GWTTestUtil
         }
     }
 
+    /** Handle for handling {@link TopMenuItem} widget. */
+    private static final class TopMenuItemHandler implements IWidgetHandler<TopMenuItem>
+    {
+        private final IWidgetHandler<Widget> handler;
+
+        TopMenuItemHandler(final IWidgetHandler<Widget> handler)
+        {
+            this.handler = handler;
+        }
+
+        //
+        // IWidgetHandler
+        //
+
+        public final boolean handle(final TopMenuItem topMenuItem)
+        {
+            if (handler.handle(topMenuItem.getMenu()))
+            {
+                return true;
+            }
+            return false;
+        }
+
+    }
+
+    /** Handle for handling {@link MenuItem} widget. */
+    private static final class MenuItemHandler implements IWidgetHandler<MenuItem>
+    {
+        private final IWidgetHandler<Widget> handler;
+
+        MenuItemHandler(final IWidgetHandler<Widget> handler)
+        {
+            this.handler = handler;
+        }
+
+        //
+        // IWidgetHandler
+        //
+
+        public final boolean handle(final MenuItem menuItem)
+        {
+            if (handler.handle(menuItem.getSubMenu()))
+            {
+                return true;
+            }
+            return false;
+        }
+
+    }
+
     /** Handle for handling {@link Menu} widget. */
     private static final class MenuHandler implements IWidgetHandler<Menu>
     {
@@ -427,17 +454,19 @@ public final class GWTTestUtil
 
         public final boolean handle(final Menu menu)
         {
-
-            for (final Item i : menu.getItems())
+            if (menu != null)
             {
-                if (handler.handle(i))
+                for (final Item i : menu.getItems())
                 {
-                    return true;
+                    if (handler.handle(i))
+                    {
+                        return true;
+                    }
                 }
-
             }
             return false;
         }
+
     }
 
     private static final class TreeHandler implements IWidgetHandler<Tree>
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/experiment/GenericExperimentAttachmentDownloadTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/experiment/GenericExperimentAttachmentDownloadTest.java
index fbc124cf762bb4a17293cdbb12caa2fe1c4eb79b..683b7ecb7e5da516094f63eb18eacf315f92822f 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/experiment/GenericExperimentAttachmentDownloadTest.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/experiment/GenericExperimentAttachmentDownloadTest.java
@@ -27,7 +27,7 @@ import com.google.gwt.http.client.Response;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.AbstractAsyncCallback;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.IViewContext;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.AppEvents;
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.CategoriesBuilder;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.menu.TopMenu.ActionMenuKind;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.experiment.ListExperiments;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.experiment.ShowExperiment;
 import ch.systemsx.cisd.openbis.generic.client.web.client.testframework.AbstractDefaultTestCommand;
@@ -49,8 +49,7 @@ public class GenericExperimentAttachmentDownloadTest extends AbstractGWTTestCase
     private void prepareShowExperiment(final String projectName, final String experimentTypeName,
             final String experimentCode)
     {
-        loginAndGotoTab(CategoriesBuilder.MenuCategoryKind.EXPERIMENTS,
-                CategoriesBuilder.MenuElementKind.BROWSE);
+        loginAndGotoTab(ActionMenuKind.EXPERIMENT_MENU_BROWSE);
         remoteConsole.prepare(new ListExperiments(projectName, experimentTypeName));
         remoteConsole.prepare(new ShowExperiment(experimentCode));
     }
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/experiment/GenericExperimentRegistrationTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/experiment/GenericExperimentRegistrationTest.java
index 4906cfd2d3d726402658e31fcd83bdc094e62582..3bb539184ee7bb20834ca5a80c684cdff7e4af2e 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/experiment/GenericExperimentRegistrationTest.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/experiment/GenericExperimentRegistrationTest.java
@@ -16,7 +16,8 @@
 
 package ch.systemsx.cisd.openbis.plugin.generic.client.web.client.application.experiment;
 
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.CategoriesBuilder;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.menu.TopMenu;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.menu.TopMenu.ActionMenuKind;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.OpenTab;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.experiment.CheckExperimentTable;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.experiment.ChooseTypeOfNewExperiment;
@@ -38,8 +39,7 @@ public class GenericExperimentRegistrationTest extends AbstractGWTTestCase
 
     private final void loginAndPreprareRegistration(final String sampleType)
     {
-        loginAndGotoTab(CategoriesBuilder.MenuCategoryKind.EXPERIMENTS,
-                CategoriesBuilder.MenuElementKind.REGISTER);
+        loginAndGotoTab(ActionMenuKind.EXPERIMENT_MENU_NEW);
         remoteConsole.prepare(new ChooseTypeOfNewExperiment(sampleType));
     }
 
@@ -56,8 +56,9 @@ public class GenericExperimentRegistrationTest extends AbstractGWTTestCase
                                 "MALE")).addProperty(
                         new PropertyField(GenericExperimentRegistrationForm.ID
                                 + "user-purchase-date", "2008-12-17")));
-        remoteConsole.prepare(new OpenTab(CategoriesBuilder.MenuCategoryKind.EXPERIMENTS,
-                CategoriesBuilder.MenuElementKind.BROWSE,
+        remoteConsole.prepare(new OpenTab(TopMenu.ActionMenuKind.EXPERIMENT_MENU_BROWSE,
+        // CategoriesBuilder.MenuCategoryKind.EXPERIMENTS,
+                // CategoriesBuilder.MenuElementKind.BROWSE,
                 GenericExperimentRegistrationForm.RegisterExperimentCallback.class));
         remoteConsole.prepare(new ListExperiments("DEFAULT", experimentTypeCode));
         remoteConsole.prepare(new CheckExperimentTable()
@@ -80,8 +81,9 @@ public class GenericExperimentRegistrationTest extends AbstractGWTTestCase
                 .addProperty(
                         new PropertyField(GenericExperimentRegistrationForm.ID
                                 + "user-purchase-date", "2008-12-18")));
-        remoteConsole.prepare(new OpenTab(CategoriesBuilder.MenuCategoryKind.SAMPLES,
-                CategoriesBuilder.MenuElementKind.BROWSE,
+        remoteConsole.prepare(new OpenTab(TopMenu.ActionMenuKind.SAMPLE_MENU_BROWSE,
+        // CategoriesBuilder.MenuCategoryKind.SAMPLES,
+                // CategoriesBuilder.MenuElementKind.BROWSE,
                 GenericExperimentRegistrationForm.RegisterExperimentCallback.class));
         remoteConsole.prepare(new ListSamples("CISD", "CELL_PLATE"));
         CheckSampleTable table = new CheckSampleTable();
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/experiment/GenericExperimentViewerTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/experiment/GenericExperimentViewerTest.java
index a83a7d48b042b8975fa2d356141ffbbc407349a0..7ab25a570ef94bc5f6304a8c5c32624c4af93b68 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/experiment/GenericExperimentViewerTest.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/experiment/GenericExperimentViewerTest.java
@@ -20,7 +20,7 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.ICommonClientServiceAs
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.AbstractAsyncCallback;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.IViewContext;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.SessionContextCallback;
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.CategoriesBuilder;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.menu.TopMenu.ActionMenuKind;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.model.ModelDataPropertyNames;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.Login;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.data.columns.DataSetRow;
@@ -200,8 +200,7 @@ public class GenericExperimentViewerTest extends AbstractGWTTestCase
     private void prepareShowExperiment(final String projectName, final String experimentTypeName,
             final String experimentCode)
     {
-        loginAndGotoTab(CategoriesBuilder.MenuCategoryKind.EXPERIMENTS,
-                CategoriesBuilder.MenuElementKind.BROWSE);
+        loginAndGotoTab(ActionMenuKind.EXPERIMENT_MENU_BROWSE);
         remoteConsole.prepare(new ListExperiments(projectName, experimentTypeName));
         remoteConsole.prepare(new ShowExperiment(experimentCode));
     }
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/GenericSampleRegistrationTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/GenericSampleRegistrationTest.java
index fa8428c1de7fbac060c6f05fd927b04f54856061..2b1985a870484e2f60418989e1ddc40ecdd9e7f0 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/GenericSampleRegistrationTest.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/GenericSampleRegistrationTest.java
@@ -16,7 +16,8 @@
 
 package ch.systemsx.cisd.openbis.plugin.generic.client.web.client.application.sample;
 
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.CategoriesBuilder;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.menu.TopMenu;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.menu.TopMenu.ActionMenuKind;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.GroupSelectionWidget;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.OpenTab;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.columns.specific.sample.CommonSampleColDefKind;
@@ -48,8 +49,7 @@ public class GenericSampleRegistrationTest extends AbstractGWTTestCase
 
     private final void loginAndPreprareRegistration(final String sampleType)
     {
-        loginAndGotoTab(CategoriesBuilder.MenuCategoryKind.SAMPLES,
-                CategoriesBuilder.MenuElementKind.REGISTER);
+        loginAndGotoTab(ActionMenuKind.SAMPLE_MENU_NEW);
         remoteConsole.prepare(new ChooseTypeOfNewSample(sampleType));
     }
 
@@ -60,8 +60,7 @@ public class GenericSampleRegistrationTest extends AbstractGWTTestCase
         remoteConsole.prepare(new FillSampleRegistrationForm("CISD", GROUP_CL)
                 .addProperty(new PropertyField(GenericSampleRegistrationForm.ID + "plate-geometry",
                         "1536_WELLS_32X48")));
-        remoteConsole.prepare(new OpenTab(CategoriesBuilder.MenuCategoryKind.SAMPLES,
-                CategoriesBuilder.MenuElementKind.BROWSE,
+        remoteConsole.prepare(new OpenTab(TopMenu.ActionMenuKind.SAMPLE_MENU_BROWSE,
                 GenericSampleRegistrationForm.RegisterSampleCallback.class));
         remoteConsole.prepare(new ListSamples("CISD", sampleTypeCode));
         remoteConsole.prepare(new CheckSampleTable().expectedRow(new SampleRow(GROUP_CL)
@@ -75,8 +74,7 @@ public class GenericSampleRegistrationTest extends AbstractGWTTestCase
      */
     public final void testRegisterSampleByAnUnauthorizedUser()
     {
-        loginAndGotoTab("observer",
-                "observer", CategoriesBuilder.MenuCategoryKind.SAMPLES, CategoriesBuilder.MenuElementKind.REGISTER);
+        loginAndGotoTab("observer", "observer", ActionMenuKind.SAMPLE_MENU_NEW);
         remoteConsole.prepare(new ChooseTypeOfNewSample(SampleTypeCode.CONTROL_LAYOUT.getCode()));
         remoteConsole.prepare(new FillSampleRegistrationForm("TESTGROUP", GROUP_CL + "1")
                 .addProperty(new PropertyField(GenericSampleRegistrationForm.ID + "plate-geometry",
@@ -97,8 +95,7 @@ public class GenericSampleRegistrationTest extends AbstractGWTTestCase
         loginAndPreprareRegistration(sampleTypeCode);
         remoteConsole.prepare(new FillSampleRegistrationForm("CISD", sampleCode)
                 .parent("MP1-MIXED"));
-        remoteConsole.prepare(new OpenTab(CategoriesBuilder.MenuCategoryKind.SAMPLES,
-                CategoriesBuilder.MenuElementKind.BROWSE,
+        remoteConsole.prepare(new OpenTab(TopMenu.ActionMenuKind.SAMPLE_MENU_BROWSE,
                 GenericSampleRegistrationForm.RegisterSampleCallback.class));
         remoteConsole.prepare(new ListSamples("CISD", sampleTypeCode));
         remoteConsole.prepare(new CheckSampleTable().expectedRow(new SampleRow(sampleCode
@@ -114,8 +111,7 @@ public class GenericSampleRegistrationTest extends AbstractGWTTestCase
         loginAndPreprareRegistration(sampleTypeCode);
         remoteConsole.prepare(new FillSampleRegistrationForm("CISD", sampleCode)
                 .container(containerCode));
-        remoteConsole.prepare(new OpenTab(CategoriesBuilder.MenuCategoryKind.SAMPLES,
-                CategoriesBuilder.MenuElementKind.BROWSE,
+        remoteConsole.prepare(new OpenTab(TopMenu.ActionMenuKind.SAMPLE_MENU_BROWSE,
                 GenericSampleRegistrationForm.RegisterSampleCallback.class));
         remoteConsole.prepare(new ListSamples("CISD", SampleTypeCode.CELL_PLATE.getCode()));
         remoteConsole.prepare(new ShowSample(containerCode));
@@ -131,8 +127,7 @@ public class GenericSampleRegistrationTest extends AbstractGWTTestCase
     public final void testRegisterSharedSample()
     {
         final String sampleTypeCode = SampleTypeCode.CONTROL_LAYOUT.getCode();
-        loginAndGotoTab(CategoriesBuilder.MenuCategoryKind.SAMPLES,
-                CategoriesBuilder.MenuElementKind.REGISTER);
+        loginAndGotoTab(ActionMenuKind.SAMPLE_MENU_NEW);
         remoteConsole.prepare(new ChooseTypeOfNewSample(sampleTypeCode));
         final String description = "A very nice control layout.";
         remoteConsole.prepare(new FillSampleRegistrationForm(
@@ -141,8 +136,7 @@ public class GenericSampleRegistrationTest extends AbstractGWTTestCase
                         description)).addProperty(
                 new PropertyField(GenericSampleRegistrationForm.ID + "plate-geometry",
                         "1536_WELLS_32X48")));
-        remoteConsole.prepare(new OpenTab(CategoriesBuilder.MenuCategoryKind.SAMPLES,
-                CategoriesBuilder.MenuElementKind.BROWSE,
+        remoteConsole.prepare(new OpenTab(TopMenu.ActionMenuKind.SAMPLE_MENU_BROWSE,
                 GenericSampleRegistrationForm.RegisterSampleCallback.class));
         remoteConsole.prepare(new ListSamples(GroupSelectionWidget.SHARED_GROUP_CODE,
                 sampleTypeCode));
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/GenericSampleViewerTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/GenericSampleViewerTest.java
index fe547bd9a0b01bc5781445e846089d3c49ff8349..758c8d6df6d609dfdbb27962d7940ab89e932697 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/GenericSampleViewerTest.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/sample/GenericSampleViewerTest.java
@@ -31,7 +31,7 @@ import com.extjs.gxt.ui.client.widget.grid.Grid;
 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.framework.CategoriesBuilder;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.menu.TopMenu.ActionMenuKind;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.model.ExternalDataModel;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.columns.specific.sample.CommonSampleColDefKind;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.data.columns.DataSetRow;
@@ -60,8 +60,7 @@ public class GenericSampleViewerTest extends AbstractGWTTestCase
 
     public final void testShowMasterPlateView()
     {
-        loginAndGotoTab(CategoriesBuilder.MenuCategoryKind.SAMPLES,
-                CategoriesBuilder.MenuElementKind.BROWSE);
+        loginAndGotoTab(ActionMenuKind.SAMPLE_MENU_BROWSE);
         remoteConsole.prepare(new ListSamples("CISD", "CONTROL_LAYOUT"));
         remoteConsole.prepare(new ShowSample(CONTROL_LAYOUT_EXAMPLE));
         final CheckSample checkSample = new CheckSample(GROUP_IDENTIFIER, CONTROL_LAYOUT_EXAMPLE);
@@ -84,8 +83,7 @@ public class GenericSampleViewerTest extends AbstractGWTTestCase
 
     public final void testShowCellPlateView()
     {
-        loginAndGotoTab(CategoriesBuilder.MenuCategoryKind.SAMPLES,
-                CategoriesBuilder.MenuElementKind.BROWSE);
+        loginAndGotoTab(ActionMenuKind.SAMPLE_MENU_BROWSE);
         remoteConsole.prepare(new ListSamples("CISD", "CELL_PLATE"));
         remoteConsole.prepare(new ShowSample(CELL_PLATE_EXAMPLE));
         final CheckSample checkSample = new CheckSample(GROUP_IDENTIFIER, CELL_PLATE_EXAMPLE);
@@ -158,7 +156,7 @@ public class GenericSampleViewerTest extends AbstractGWTTestCase
                             }
                         };
                 }
-        
+
             });
 
         launchTest(60000);