diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/MatchingEntitiesPanel.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/MatchingEntitiesPanel.java
index 5eb3fce17305636fb8a77cfece074c589566736f..b1775852a4a07a56709f4f49b97a288de6632d56 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/MatchingEntitiesPanel.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/MatchingEntitiesPanel.java
@@ -29,9 +29,9 @@ import com.extjs.gxt.ui.client.widget.LayoutContainer;
 import com.extjs.gxt.ui.client.widget.button.Button;
 
 import ch.systemsx.cisd.openbis.generic.client.web.client.ICommonClientServiceAsync;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.AbstractTabItemFactory;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.DispatcherHelper;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.DisplayTypeIDGenerator;
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.ITabItemFactory;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.model.BaseEntityModel;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.model.MatchingEntityModel;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.model.MatchingEntityModel.MatchingEntityColumnKind;
@@ -95,9 +95,9 @@ final class MatchingEntitiesPanel extends AbstractBrowserGrid<MatchingEntity, Ma
         registerLinkClickListenerFor(MatchingEntityColumnKind.IDENTIFIER.id(),
                 new ICellListener<MatchingEntity>()
                     {
-                        public void handle(MatchingEntity rowItem)
+                        public void handle(MatchingEntity rowItem, boolean keyPressed)
                         {
-                            showEntityViewer(rowItem, false);
+                            showEntityViewer(rowItem, false, keyPressed);
                         }
                     });
         extendBottomToolbar();
@@ -149,7 +149,7 @@ final class MatchingEntitiesPanel extends AbstractBrowserGrid<MatchingEntity, Ma
     }
 
     @Override
-    protected void showEntityViewer(MatchingEntity matchingEntity, boolean editMode)
+    protected void showEntityViewer(MatchingEntity matchingEntity, boolean editMode, boolean inBackground)
     {
         final EntityKind entityKind = matchingEntity.getEntityKind();
         BasicEntityType entityType = matchingEntity.getEntityType();
@@ -158,8 +158,9 @@ final class MatchingEntitiesPanel extends AbstractBrowserGrid<MatchingEntity, Ma
                         entityType);
         final IClientPlugin<BasicEntityType, IIdentifiable> createClientPlugin =
                 clientPluginFactory.createClientPlugin(entityKind);
-        final ITabItemFactory tabView =
+        final AbstractTabItemFactory tabView =
                 createClientPlugin.createEntityViewer(entityType, matchingEntity.asIdentifiable());
+        tabView.setInBackground(inBackground);
         DispatcherHelper.dispatchNaviEvent(tabView);
     }
 
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ProjectViewer.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ProjectViewer.java
index 893f03d47328a3ba691971e22d5f28c8c621238b..466ee4f3db6ddfed5526ee16c2486036c049a3f8 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ProjectViewer.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ProjectViewer.java
@@ -181,10 +181,10 @@ public final class ProjectViewer extends AbstractViewer<IEntityInformationHolder
     }
 
     @Override
-    protected void showEntityEditor()
+    protected void showEntityEditor(boolean inBackground)
     {
         assert originalProject != null;
-        ProjectGrid.showEntityViewer(originalProject, true, viewContext);
+        ProjectGrid.showEntityViewer(originalProject, true, viewContext, inBackground);
     }
 
     public void update(Set<DatabaseModificationKind> observedModifications)
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/SearchWidget.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/SearchWidget.java
index 60bf60fcb99a4e7025087aa84bd932be5da0859b..e01f7c8eb4af14dbc785649e34a3d71800ce7786 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/SearchWidget.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/SearchWidget.java
@@ -22,10 +22,10 @@ import com.extjs.gxt.ui.client.widget.form.TextField;
 import com.extjs.gxt.ui.client.widget.layout.TableRowLayout;
 
 import ch.systemsx.cisd.openbis.generic.client.web.client.ICommonClientServiceAsync;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.AbstractTabItemFactory;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.DefaultTabItem;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.DispatcherHelper;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.ITabItem;
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.ITabItemFactory;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.help.HelpPageIdentifier;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.help.HelpPageIdentifier.HelpPageAction;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.help.HelpPageIdentifier.HelpPageDomain;
@@ -158,7 +158,7 @@ public final class SearchWidget extends LayoutContainer
                 new MatchingEntitiesPanel(viewContext, selectedSearchableEntityOrNull, queryText,
                         useWildcardSearchMode);
         String title = createTabTitle(queryText);
-        final ITabItemFactory tabFactory =
+        final AbstractTabItemFactory tabFactory =
                 createTabFactory(matchingEntitiesGrid, title, viewContext);
 
         matchingEntitiesGrid.refresh(new IDataRefreshCallback()
@@ -194,7 +194,7 @@ public final class SearchWidget extends LayoutContainer
         return viewContext.getMessage(Dict.GLOBAL_SEARCH, selectedText, queryText);
     }
 
-    private static ITabItemFactory createTabFactory(
+    private static AbstractTabItemFactory createTabFactory(
             final MatchingEntitiesPanel matchingEntitiesPanel, String title,
             IViewContext<?> viewContext)
     {
@@ -203,18 +203,21 @@ public final class SearchWidget extends LayoutContainer
                         viewContext);
         // this tab cannot be opened for the second time, so we can create it outside of the
         // factory
-        return new ITabItemFactory()
+        return new AbstractTabItemFactory()
             {
+                @Override
                 public ITabItem create()
                 {
                     return tab;
                 }
 
+                @Override
                 public String getId()
                 {
                     return matchingEntitiesPanel.getId();
                 }
 
+                @Override
                 public HelpPageIdentifier getHelpPageIdentifier()
                 {
                     return new HelpPageIdentifier(HelpPageDomain.SEARCH, HelpPageAction.ACTION);
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ShowRelatedDatasetsDialog.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ShowRelatedDatasetsDialog.java
index cb2fb7dfadfa0f5db6bfd443b0bb366fe2625f59..be5ed22ea7b8f163961e2e0463ec52a1570d3b45 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ShowRelatedDatasetsDialog.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ShowRelatedDatasetsDialog.java
@@ -23,10 +23,10 @@ import com.extjs.gxt.ui.client.widget.form.Radio;
 import com.extjs.gxt.ui.client.widget.form.RadioGroup;
 
 import ch.systemsx.cisd.openbis.generic.client.web.client.ICommonClientServiceAsync;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.AbstractTabItemFactory;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.DefaultTabItem;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.DispatcherHelper;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.ITabItem;
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.ITabItemFactory;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.help.HelpPageIdentifier;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.help.HelpPageIdentifier.HelpPageAction;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.help.HelpPageIdentifier.HelpPageDomain;
@@ -50,8 +50,9 @@ public final class ShowRelatedDatasetsDialog extends
             final IViewContext<ICommonClientServiceAsync> viewContext,
             final RelatedDataSetCriteria criteria)
     {
-        final ITabItemFactory tabFactory = new ITabItemFactory()
+        final AbstractTabItemFactory tabFactory = new AbstractTabItemFactory()
             {
+                @Override
                 public ITabItem create()
                 {
                     IDisposableComponent component =
@@ -59,6 +60,7 @@ public final class ShowRelatedDatasetsDialog extends
                     return DefaultTabItem.create(getTabTitle(), component, viewContext);
                 }
 
+                @Override
                 public String getId()
                 {
                     return RelatedDataSetGrid.BROWSER_ID + XDOM.getUniqueId();
@@ -69,6 +71,7 @@ public final class ShowRelatedDatasetsDialog extends
                     return "Related Data Sets";
                 }
 
+                @Override
                 public HelpPageIdentifier getHelpPageIdentifier()
                 {
                     return new HelpPageIdentifier(HelpPageDomain.RELATED_DATA_SETS,
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/framework/ITabItemFactory.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/framework/AbstractTabItemFactory.java
similarity index 74%
rename from openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/framework/ITabItemFactory.java
rename to openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/framework/AbstractTabItemFactory.java
index 60f40b7955d7138a4b5a1310b7f2a6a53f138d55..599732b908074fd8071a2fe738d44b205505952d 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/framework/ITabItemFactory.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/framework/AbstractTabItemFactory.java
@@ -24,10 +24,12 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.help.HelpP
  * 
  * @author Tomasz Pylak
  */
-public interface ITabItemFactory
+public abstract class AbstractTabItemFactory
 {
+    private boolean inBackground = false;
+
     /** Creates and initializes a new tab. */
-    ITabItem create();
+    public abstract ITabItem create();
 
     /**
      * Returns the unique identifier of this tab item. Note that the id should be unique among all
@@ -37,11 +39,24 @@ public interface ITabItemFactory
      * one already created will get the focus.
      * </p>
      */
-    public String getId();
+    public abstract String getId();
 
     /**
      * Returns the identifier of the help page for this tab item.
      */
-    public HelpPageIdentifier getHelpPageIdentifier();
+    public abstract HelpPageIdentifier getHelpPageIdentifier();
+
+    /**
+     * True if the tab should become active.
+     */
+    public boolean isInBackground()
+    {
+        return inBackground;
+    }
+
+    public void setInBackground(boolean inBackground)
+    {
+        this.inBackground = inBackground;
+    }
 
 }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/framework/AppView.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/framework/AppView.java
index f49b7fa0b62ab028b766242c54c3abcb0d93dcfd..a781cbde55cb430e0a0d8d44eb00c2d27609a5e8 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/framework/AppView.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/framework/AppView.java
@@ -53,12 +53,12 @@ final class AppView extends View
         this.viewContext = viewContext;
     }
 
-    private final ITabItemFactory getData(final AppEvent event)
+    private final AbstractTabItemFactory getData(final AppEvent event)
     {
         return event.getData();
     }
 
-    private final void activateTab(final ITabItemFactory tabItemFactory)
+    private final void activateTab(final AbstractTabItemFactory tabItemFactory)
     {
         center.openTab(tabItemFactory);
     }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/framework/ComponentProvider.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/framework/ComponentProvider.java
index 9842122f4a78033b0cc364dc38bc900657c5e08d..c0f3db1aeb0e64e5be16b25a2edd54a6471eff2b 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/framework/ComponentProvider.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/framework/ComponentProvider.java
@@ -102,11 +102,12 @@ public final class ComponentProvider
                 isCloseConfirmationNeeded);
     }
 
-    public ITabItemFactory getSampleBrowser(final String initialGroupOrNull,
+    public AbstractTabItemFactory getSampleBrowser(final String initialGroupOrNull,
             final String initialSampleTypeOrNull)
     {
-        return new ITabItemFactory()
+        return new AbstractTabItemFactory()
             {
+                @Override
                 public ITabItem create()
                 {
                     System.err.println(initialGroupOrNull + " " + initialSampleTypeOrNull);
@@ -117,11 +118,13 @@ public final class ComponentProvider
                     return createTab(Dict.SAMPLE_BROWSER, browser);
                 }
 
+                @Override
                 public String getId()
                 {
                     return SampleBrowserGrid.BROWSER_ID;
                 }
 
+                @Override
                 public HelpPageIdentifier getHelpPageIdentifier()
                 {
                     return new HelpPageIdentifier(HelpPageDomain.SAMPLE, HelpPageAction.BROWSE);
@@ -129,15 +132,16 @@ public final class ComponentProvider
             };
     }
 
-    public final ITabItemFactory getSampleBrowser()
+    public final AbstractTabItemFactory getSampleBrowser()
     {
         return getSampleBrowser(null, null);
     }
 
-    public final ITabItemFactory getMaterialBrowser()
+    public final AbstractTabItemFactory getMaterialBrowser()
     {
-        return new ITabItemFactory()
+        return new AbstractTabItemFactory()
             {
+                @Override
                 public ITabItem create()
                 {
                     IDisposableComponent browser =
@@ -145,33 +149,39 @@ public final class ComponentProvider
                     return createTab(Dict.MATERIAL_BROWSER, browser);
                 }
 
+                @Override
                 public String getId()
                 {
                     return MaterialBrowserGrid.BROWSER_ID;
                 }
 
+                @Override
                 public HelpPageIdentifier getHelpPageIdentifier()
                 {
                     return new HelpPageIdentifier(HelpPageDomain.MATERIAL, HelpPageAction.BROWSE);
                 }
+
             };
     }
 
-    public final ITabItemFactory getGroupBrowser()
+    public final AbstractTabItemFactory getGroupBrowser()
     {
-        return new ITabItemFactory()
+        return new AbstractTabItemFactory()
             {
+                @Override
                 public ITabItem create()
                 {
                     IDisposableComponent component = GroupGrid.create(viewContext);
                     return createTab(Dict.GROUP_BROWSER, component);
                 }
 
+                @Override
                 public String getId()
                 {
                     return GroupGrid.BROWSER_ID;
                 }
 
+                @Override
                 public HelpPageIdentifier getHelpPageIdentifier()
                 {
                     return new HelpPageIdentifier(HelpPageDomain.GROUP, HelpPageAction.BROWSE);
@@ -179,21 +189,24 @@ public final class ComponentProvider
             };
     }
 
-    public final ITabItemFactory getAuthorizationGroupBrowser()
+    public final AbstractTabItemFactory getAuthorizationGroupBrowser()
     {
-        return new ITabItemFactory()
+        return new AbstractTabItemFactory()
             {
+                @Override
                 public ITabItem create()
                 {
                     IDisposableComponent component = AuthorizationGroupGrid.create(viewContext);
                     return createTab(Dict.AUTHORIZATION_GROUP_BROWSER, component);
                 }
 
+                @Override
                 public String getId()
                 {
                     return AuthorizationGroupGrid.BROWSER_ID;
                 }
 
+                @Override
                 public HelpPageIdentifier getHelpPageIdentifier()
                 {
                     return new HelpPageIdentifier(HelpPageDomain.AUTHORIZATION_GROUPS,
@@ -202,21 +215,24 @@ public final class ComponentProvider
             };
     }
 
-    public final ITabItemFactory getRoleAssignmentBrowser()
+    public final AbstractTabItemFactory getRoleAssignmentBrowser()
     {
-        return new ITabItemFactory()
+        return new AbstractTabItemFactory()
             {
+                @Override
                 public ITabItem create()
                 {
                     IDisposableComponent component = RoleAssignmentGrid.create(viewContext);
                     return createTab(Dict.ROLE_ASSIGNMENT_BROWSER, component);
                 }
 
+                @Override
                 public String getId()
                 {
                     return RoleAssignmentGrid.BROWSER_ID;
                 }
 
+                @Override
                 public HelpPageIdentifier getHelpPageIdentifier()
                 {
                     return new HelpPageIdentifier(HelpPageDomain.ROLES, HelpPageAction.BROWSE);
@@ -224,21 +240,24 @@ public final class ComponentProvider
             };
     }
 
-    public final ITabItemFactory getPersonBrowser()
+    public final AbstractTabItemFactory getPersonBrowser()
     {
-        return new ITabItemFactory()
+        return new AbstractTabItemFactory()
             {
+                @Override
                 public ITabItem create()
                 {
                     IDisposableComponent component = PersonGrid.create(viewContext);
                     return createTab(Dict.PERSON_BROWSER, component);
                 }
 
+                @Override
                 public String getId()
                 {
                     return PersonGrid.createBrowserId();
                 }
 
+                @Override
                 public HelpPageIdentifier getHelpPageIdentifier()
                 {
                     return new HelpPageIdentifier(HelpPageDomain.USERS, HelpPageAction.BROWSE);
@@ -246,10 +265,11 @@ public final class ComponentProvider
             };
     }
 
-    public final ITabItemFactory getSampleRegistration()
+    public final AbstractTabItemFactory getSampleRegistration()
     {
-        return new ITabItemFactory()
+        return new AbstractTabItemFactory()
             {
+                @Override
                 public ITabItem create()
                 {
                     DatabaseModificationAwareComponent component =
@@ -257,11 +277,13 @@ public final class ComponentProvider
                     return createRegistrationTab(Dict.SAMPLE_REGISTRATION, component);
                 }
 
+                @Override
                 public String getId()
                 {
                     return SampleRegistrationPanel.ID;
                 }
 
+                @Override
                 public HelpPageIdentifier getHelpPageIdentifier()
                 {
                     return new HelpPageIdentifier(HelpPageDomain.SAMPLE, HelpPageAction.REGISTER);
@@ -269,10 +291,11 @@ public final class ComponentProvider
             };
     }
 
-    public final ITabItemFactory getExperimentRegistration()
+    public final AbstractTabItemFactory getExperimentRegistration()
     {
-        return new ITabItemFactory()
+        return new AbstractTabItemFactory()
             {
+                @Override
                 public ITabItem create()
                 {
                     DatabaseModificationAwareComponent component =
@@ -280,11 +303,13 @@ public final class ComponentProvider
                     return createRegistrationTab(Dict.EXPERIMENT_REGISTRATION, component);
                 }
 
+                @Override
                 public String getId()
                 {
                     return ExperimentRegistrationPanel.ID;
                 }
 
+                @Override
                 public HelpPageIdentifier getHelpPageIdentifier()
                 {
                     return new HelpPageIdentifier(HelpPageDomain.EXPERIMENT,
@@ -293,11 +318,12 @@ public final class ComponentProvider
             };
     }
 
-    public final ITabItemFactory getSampleBatchRegistration()
+    public final AbstractTabItemFactory getSampleBatchRegistration()
     {
         final boolean update = false;
-        return new ITabItemFactory()
+        return new AbstractTabItemFactory()
             {
+                @Override
                 public ITabItem create()
                 {
                     DatabaseModificationAwareComponent component =
@@ -305,11 +331,13 @@ public final class ComponentProvider
                     return createRegistrationTab(Dict.SAMPLE_BATCH_REGISTRATION, component);
                 }
 
+                @Override
                 public String getId()
                 {
                     return SampleBatchRegisterUpdatePanel.getId(update);
                 }
 
+                @Override
                 public HelpPageIdentifier getHelpPageIdentifier()
                 {
                     return new HelpPageIdentifier(HelpPageDomain.SAMPLE, HelpPageAction.IMPORT);
@@ -317,12 +345,13 @@ public final class ComponentProvider
             };
     }
 
-    public final ITabItemFactory getSampleBatchUpdate()
+    public final AbstractTabItemFactory getSampleBatchUpdate()
     {
         final boolean update = true;
 
-        return new ITabItemFactory()
+        return new AbstractTabItemFactory()
             {
+                @Override
                 public ITabItem create()
                 {
                     DatabaseModificationAwareComponent component =
@@ -330,11 +359,13 @@ public final class ComponentProvider
                     return createRegistrationTab(Dict.SAMPLE_BATCH_UPDATE, component);
                 }
 
+                @Override
                 public String getId()
                 {
                     return SampleBatchRegisterUpdatePanel.getId(update);
                 }
 
+                @Override
                 public HelpPageIdentifier getHelpPageIdentifier()
                 {
                     return new HelpPageIdentifier(HelpPageDomain.SAMPLE,
@@ -343,10 +374,11 @@ public final class ComponentProvider
             };
     }
 
-    public final ITabItemFactory getMaterialBatchRegistration()
+    public final AbstractTabItemFactory getMaterialBatchRegistration()
     {
-        return new ITabItemFactory()
+        return new AbstractTabItemFactory()
             {
+                @Override
                 public ITabItem create()
                 {
                     DatabaseModificationAwareComponent component =
@@ -354,11 +386,13 @@ public final class ComponentProvider
                     return createRegistrationTab(Dict.MATERIAL_IMPORT, component);
                 }
 
+                @Override
                 public String getId()
                 {
                     return MaterialBatchRegistrationPanel.ID;
                 }
 
+                @Override
                 public HelpPageIdentifier getHelpPageIdentifier()
                 {
                     return new HelpPageIdentifier(HelpPageDomain.MATERIAL, HelpPageAction.IMPORT);
@@ -366,21 +400,24 @@ public final class ComponentProvider
             };
     }
 
-    public final ITabItemFactory getVocabularyRegistration()
+    public final AbstractTabItemFactory getVocabularyRegistration()
     {
-        return new ITabItemFactory()
+        return new AbstractTabItemFactory()
             {
+                @Override
                 public ITabItem create()
                 {
                     Component component = new VocabularyRegistrationForm(viewContext);
                     return createSimpleTab(Dict.VOCABULARY_REGISTRATION, component, true);
                 }
 
+                @Override
                 public String getId()
                 {
                     return VocabularyRegistrationForm.ID;
                 }
 
+                @Override
                 public HelpPageIdentifier getHelpPageIdentifier()
                 {
                     return new HelpPageIdentifier(HelpPageDomain.VOCABULARY,
@@ -389,10 +426,11 @@ public final class ComponentProvider
             };
     }
 
-    public final ITabItemFactory getProjectRegistration()
+    public final AbstractTabItemFactory getProjectRegistration()
     {
-        return new ITabItemFactory()
+        return new AbstractTabItemFactory()
             {
+                @Override
                 public ITabItem create()
                 {
                     DatabaseModificationAwareComponent component =
@@ -400,11 +438,13 @@ public final class ComponentProvider
                     return createRegistrationTab(Dict.PROJECT_REGISTRATION, component);
                 }
 
+                @Override
                 public String getId()
                 {
                     return ProjectRegistrationForm.createId();
                 }
 
+                @Override
                 public HelpPageIdentifier getHelpPageIdentifier()
                 {
                     return new HelpPageIdentifier(HelpPageDomain.PROJECT, HelpPageAction.REGISTER);
@@ -412,21 +452,24 @@ public final class ComponentProvider
             };
     }
 
-    public final ITabItemFactory getVocabularyBrowser()
+    public final AbstractTabItemFactory getVocabularyBrowser()
     {
-        return new ITabItemFactory()
+        return new AbstractTabItemFactory()
             {
+                @Override
                 public ITabItem create()
                 {
                     IDisposableComponent component = VocabularyGrid.create(viewContext);
                     return createTab(Dict.VOCABULARY_BROWSER, component);
                 }
 
+                @Override
                 public String getId()
                 {
                     return VocabularyGrid.GRID_ID;
                 }
 
+                @Override
                 public HelpPageIdentifier getHelpPageIdentifier()
                 {
                     return new HelpPageIdentifier(HelpPageDomain.VOCABULARY, HelpPageAction.BROWSE);
@@ -434,21 +477,24 @@ public final class ComponentProvider
             };
     }
 
-    public final ITabItemFactory getProjectBrowser()
+    public final AbstractTabItemFactory getProjectBrowser()
     {
-        return new ITabItemFactory()
+        return new AbstractTabItemFactory()
             {
+                @Override
                 public ITabItem create()
                 {
                     IDisposableComponent component = ProjectGrid.create(viewContext);
                     return createTab(Dict.PROJECT_BROWSER, component);
                 }
 
+                @Override
                 public String getId()
                 {
                     return ProjectGrid.BROWSER_ID;
                 }
 
+                @Override
                 public HelpPageIdentifier getHelpPageIdentifier()
                 {
                     return new HelpPageIdentifier(HelpPageDomain.PROJECT, HelpPageAction.BROWSE);
@@ -456,11 +502,12 @@ public final class ComponentProvider
             };
     }
 
-    public ITabItemFactory getExperimentBrowser(final String initialProjectOrNull,
+    public AbstractTabItemFactory getExperimentBrowser(final String initialProjectOrNull,
             final String initialExperimentTypeOrNull)
     {
-        return new ITabItemFactory()
+        return new AbstractTabItemFactory()
             {
+                @Override
                 public ITabItem create()
                 {
                     IDisposableComponent browser =
@@ -469,11 +516,13 @@ public final class ComponentProvider
                     return createTab(Dict.EXPERIMENT_BROWSER, browser);
                 }
 
+                @Override
                 public String getId()
                 {
                     return ExperimentBrowserGrid.BROWSER_ID;
                 }
 
+                @Override
                 public HelpPageIdentifier getHelpPageIdentifier()
                 {
                     return new HelpPageIdentifier(HelpPageDomain.EXPERIMENT, HelpPageAction.BROWSE);
@@ -481,26 +530,29 @@ public final class ComponentProvider
             };
     }
 
-    public ITabItemFactory getExperimentBrowser()
+    public AbstractTabItemFactory getExperimentBrowser()
     {
         return getExperimentBrowser(null, null);
     }
 
-    public ITabItemFactory getPropertyTypeBrowser()
+    public AbstractTabItemFactory getPropertyTypeBrowser()
     {
-        return new ITabItemFactory()
+        return new AbstractTabItemFactory()
             {
+                @Override
                 public ITabItem create()
                 {
                     IDisposableComponent component = PropertyTypeGrid.create(viewContext);
                     return createTab(Dict.PROPERTY_TYPES, component);
                 }
 
+                @Override
                 public String getId()
                 {
                     return PropertyTypeGrid.BROWSER_ID;
                 }
 
+                @Override
                 public HelpPageIdentifier getHelpPageIdentifier()
                 {
                     return new HelpPageIdentifier(HelpPageDomain.PROPERTY_TYPE,
@@ -509,10 +561,11 @@ public final class ComponentProvider
             };
     }
 
-    public ITabItemFactory getPropertyTypeRegistration()
+    public AbstractTabItemFactory getPropertyTypeRegistration()
     {
-        return new ITabItemFactory()
+        return new AbstractTabItemFactory()
             {
+                @Override
                 public ITabItem create()
                 {
                     DatabaseModificationAwareComponent component =
@@ -520,11 +573,13 @@ public final class ComponentProvider
                     return createRegistrationTab(Dict.PROPERTY_TYPE_REGISTRATION, component);
                 }
 
+                @Override
                 public String getId()
                 {
                     return PropertyTypeRegistrationForm.ID;
                 }
 
+                @Override
                 public HelpPageIdentifier getHelpPageIdentifier()
                 {
                     return new HelpPageIdentifier(HelpPageDomain.PROPERTY_TYPE,
@@ -533,21 +588,24 @@ public final class ComponentProvider
             };
     }
 
-    public ITabItemFactory getPropertyTypeAssignmentBrowser()
+    public AbstractTabItemFactory getPropertyTypeAssignmentBrowser()
     {
-        return new ITabItemFactory()
+        return new AbstractTabItemFactory()
             {
+                @Override
                 public ITabItem create()
                 {
                     IDisposableComponent component = PropertyTypeAssignmentGrid.create(viewContext);
                     return createTab(Dict.PROPERTY_TYPE_ASSIGNMENTS, component);
                 }
 
+                @Override
                 public String getId()
                 {
                     return PropertyTypeAssignmentGrid.BROWSER_ID;
                 }
 
+                @Override
                 public HelpPageIdentifier getHelpPageIdentifier()
                 {
                     return new HelpPageIdentifier(HelpPageDomain.ASSIGNMENT, HelpPageAction.BROWSE);
@@ -555,34 +613,35 @@ public final class ComponentProvider
             };
     }
 
-    public ITabItemFactory getPropertyTypeExperimentTypeAssignmentForm()
+    public AbstractTabItemFactory getPropertyTypeExperimentTypeAssignmentForm()
     {
         return getPropertyTypeAssignmentForm(EntityKind.EXPERIMENT,
                 Dict.ASSIGN_EXPERIMENT_PROPERTY_TYPE);
     }
 
-    public ITabItemFactory getPropertyTypeMaterialTypeAssignmentForm()
+    public AbstractTabItemFactory getPropertyTypeMaterialTypeAssignmentForm()
     {
         return getPropertyTypeAssignmentForm(EntityKind.MATERIAL,
                 Dict.ASSIGN_MATERIAL_PROPERTY_TYPE);
     }
 
-    public ITabItemFactory getPropertyTypeDataSetTypeAssignmentForm()
+    public AbstractTabItemFactory getPropertyTypeDataSetTypeAssignmentForm()
     {
         return getPropertyTypeAssignmentForm(EntityKind.DATA_SET,
                 Dict.ASSIGN_DATA_SET_PROPERTY_TYPE);
     }
 
-    public ITabItemFactory getPropertyTypeSampleTypeAssignmentForm()
+    public AbstractTabItemFactory getPropertyTypeSampleTypeAssignmentForm()
     {
         return getPropertyTypeAssignmentForm(EntityKind.SAMPLE, Dict.ASSIGN_SAMPLE_PROPERTY_TYPE);
     }
 
-    private ITabItemFactory getPropertyTypeAssignmentForm(final EntityKind entityKind,
+    private AbstractTabItemFactory getPropertyTypeAssignmentForm(final EntityKind entityKind,
             final String messageKey)
     {
-        return new ITabItemFactory()
+        return new AbstractTabItemFactory()
             {
+                @Override
                 public ITabItem create()
                 {
                     DatabaseModificationAwareComponent component =
@@ -590,11 +649,13 @@ public final class ComponentProvider
                     return createRegistrationTab(messageKey, component);
                 }
 
+                @Override
                 public String getId()
                 {
                     return PropertyTypeAssignmentForm.createId(entityKind);
                 }
 
+                @Override
                 public HelpPageIdentifier getHelpPageIdentifier()
                 {
                     return new HelpPageIdentifier(HelpPageDomain.ASSIGNMENT,
@@ -603,21 +664,24 @@ public final class ComponentProvider
             };
     }
 
-    public ITabItemFactory getDataSetSearch()
+    public AbstractTabItemFactory getDataSetSearch()
     {
-        return new ITabItemFactory()
+        return new AbstractTabItemFactory()
             {
+                @Override
                 public ITabItem create()
                 {
                     IDisposableComponent browser = DataSetSearchHitGrid.create(viewContext);
                     return createTab(Dict.DATA_SET_SEARCH, browser);
                 }
 
+                @Override
                 public String getId()
                 {
                     return DataSetSearchHitGrid.BROWSER_ID;
                 }
 
+                @Override
                 public HelpPageIdentifier getHelpPageIdentifier()
                 {
                     return new HelpPageIdentifier(HelpPageDomain.DATA_SET, HelpPageAction.SEARCH);
@@ -625,21 +689,24 @@ public final class ComponentProvider
             };
     }
 
-    public ITabItemFactory getSampleSearch()
+    public AbstractTabItemFactory getSampleSearch()
     {
-        return new ITabItemFactory()
+        return new AbstractTabItemFactory()
             {
+                @Override
                 public ITabItem create()
                 {
                     IDisposableComponent browser = SampleSearchHitGrid.create(viewContext);
                     return createTab(Dict.SAMPLE_SEARCH, browser);
                 }
 
+                @Override
                 public String getId()
                 {
                     return SampleSearchHitGrid.SEARCH_BROWSER_ID;
                 }
 
+                @Override
                 public HelpPageIdentifier getHelpPageIdentifier()
                 {
                     return new HelpPageIdentifier(HelpPageDomain.SAMPLE, HelpPageAction.SEARCH);
@@ -647,21 +714,24 @@ public final class ComponentProvider
             };
     }
 
-    public ITabItemFactory getSampleTypeBrowser()
+    public AbstractTabItemFactory getSampleTypeBrowser()
     {
-        return new ITabItemFactory()
+        return new AbstractTabItemFactory()
             {
+                @Override
                 public ITabItem create()
                 {
                     IDisposableComponent component = SampleTypeGrid.create(viewContext);
                     return createTab(Dict.SAMPLE_TYPES, component);
                 }
 
+                @Override
                 public String getId()
                 {
                     return SampleTypeGrid.BROWSER_ID;
                 }
 
+                @Override
                 public HelpPageIdentifier getHelpPageIdentifier()
                 {
                     return new HelpPageIdentifier(HelpPageDomain.SAMPLE_TYPE, HelpPageAction.BROWSE);
@@ -670,21 +740,24 @@ public final class ComponentProvider
             };
     }
 
-    public ITabItemFactory getMaterialTypeBrowser()
+    public AbstractTabItemFactory getMaterialTypeBrowser()
     {
-        return new ITabItemFactory()
+        return new AbstractTabItemFactory()
             {
+                @Override
                 public ITabItem create()
                 {
                     IDisposableComponent component = MaterialTypeGrid.create(viewContext);
                     return createTab(Dict.MATERIAL_TYPES, component);
                 }
 
+                @Override
                 public String getId()
                 {
                     return MaterialTypeGrid.BROWSER_ID;
                 }
 
+                @Override
                 public HelpPageIdentifier getHelpPageIdentifier()
                 {
                     return new HelpPageIdentifier(HelpPageDomain.MATERIAL_TYPE,
@@ -693,21 +766,24 @@ public final class ComponentProvider
             };
     }
 
-    public ITabItemFactory getExperimentTypeBrowser()
+    public AbstractTabItemFactory getExperimentTypeBrowser()
     {
-        return new ITabItemFactory()
+        return new AbstractTabItemFactory()
             {
+                @Override
                 public ITabItem create()
                 {
                     IDisposableComponent component = ExperimentTypeGrid.create(viewContext);
                     return createTab(Dict.EXPERIMENT_TYPES, component);
                 }
 
+                @Override
                 public String getId()
                 {
                     return ExperimentTypeGrid.BROWSER_ID;
                 }
 
+                @Override
                 public HelpPageIdentifier getHelpPageIdentifier()
                 {
                     return new HelpPageIdentifier(HelpPageDomain.EXPERIMENT_TYPE,
@@ -716,21 +792,24 @@ public final class ComponentProvider
             };
     }
 
-    public ITabItemFactory getDataSetTypeBrowser()
+    public AbstractTabItemFactory getDataSetTypeBrowser()
     {
-        return new ITabItemFactory()
+        return new AbstractTabItemFactory()
             {
+                @Override
                 public ITabItem create()
                 {
                     IDisposableComponent component = DataSetTypeGrid.create(viewContext);
                     return createTab(Dict.DATA_SET_TYPES, component);
                 }
 
+                @Override
                 public String getId()
                 {
                     return DataSetTypeGrid.BROWSER_ID;
                 }
 
+                @Override
                 public HelpPageIdentifier getHelpPageIdentifier()
                 {
                     return new HelpPageIdentifier(HelpPageDomain.DATA_SET_TYPE,
@@ -739,10 +818,11 @@ public final class ComponentProvider
             };
     }
 
-    public ITabItemFactory getDataSetUploadTab()
+    public AbstractTabItemFactory getDataSetUploadTab()
     {
-        return new ITabItemFactory()
+        return new AbstractTabItemFactory()
             {
+                @Override
                 public ITabItem create()
                 {
                     DatabaseModificationAwareComponent component =
@@ -750,11 +830,13 @@ public final class ComponentProvider
                     return createRegistrationTab(Dict.DATA_SET_UPLOAD, component);
                 }
 
+                @Override
                 public String getId()
                 {
                     return DataSetUploadForm.ID;
                 }
 
+                @Override
                 public HelpPageIdentifier getHelpPageIdentifier()
                 {
                     return new HelpPageIdentifier(HelpPageDomain.DATA_SET, HelpPageAction.REGISTER);
@@ -762,21 +844,24 @@ public final class ComponentProvider
             };
     }
 
-    public ITabItemFactory getFileFormatTypeBrowser()
+    public AbstractTabItemFactory getFileFormatTypeBrowser()
     {
-        return new ITabItemFactory()
+        return new AbstractTabItemFactory()
             {
+                @Override
                 public ITabItem create()
                 {
                     IDisposableComponent component = FileFormatTypeGrid.create(viewContext);
                     return createTab(Dict.FILE_FORMAT_TYPES, component);
                 }
 
+                @Override
                 public String getId()
                 {
                     return FileFormatTypeGrid.BROWSER_ID;
                 }
 
+                @Override
                 public HelpPageIdentifier getHelpPageIdentifier()
                 {
                     return new HelpPageIdentifier(HelpPageDomain.FILE_TYPE, HelpPageAction.BROWSE);
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/framework/DispatcherHelper.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/framework/DispatcherHelper.java
index a4a3f884a354c423f525efab658a1a776f3b2783..722307a2992eebe2f8a2136b6c254a38ea3fa752 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/framework/DispatcherHelper.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/framework/DispatcherHelper.java
@@ -45,7 +45,7 @@ public final class DispatcherHelper
      * Creates and dispatches an event of type {@link AppEvents#NAVI_EVENT}. The event opens a new
      * tab.
      */
-    public final static void dispatchNaviEvent(final ITabItemFactory tabItemFactory)
+    public final static void dispatchNaviEvent(final AbstractTabItemFactory tabItemFactory)
     {
         AppEvent event = createEvent(AppEvents.NAVI_EVENT, tabItemFactory);
         Dispatcher.get().dispatch(event);
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/framework/MainTabPanel.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/framework/MainTabPanel.java
index ac075635da2d8fe3a0396490c181db050109a490..ad67f5da3f839d70fa7fa47370ba58da8def2d7c 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/framework/MainTabPanel.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/framework/MainTabPanel.java
@@ -96,7 +96,7 @@ public class MainTabPanel extends TabPanel
         return div.getString();
     }
 
-    private final MainTabItem tryFindTab(final ITabItemFactory tabItemFactory)
+    private final MainTabItem tryFindTab(final AbstractTabItemFactory tabItemFactory)
     {
         return openTabs.get(tabItemFactory.getId());
     }
@@ -108,12 +108,13 @@ public class MainTabPanel extends TabPanel
      * be generated out of given {@link ITabItem}.
      * </p>
      */
-    public final void openTab(final ITabItemFactory tabItemFactory)
+    public final void openTab(final AbstractTabItemFactory tabItemFactory)
     {
+        boolean inBackground = tabItemFactory.isInBackground();
         final MainTabItem tab = tryFindTab(tabItemFactory);
         if (tab != null)
         {
-            setSelection(tab);
+            maybeActivate(tab, inBackground);
         } else
         {
             final String tabId = tabItemFactory.getId();
@@ -125,7 +126,18 @@ public class MainTabPanel extends TabPanel
             final MainTabItem newTab = new MainTabItem(tabItemFactory.create(), tabId, helpId);
             add(newTab);
             openTabs.put(tabId, newTab);
-            setSelection(newTab);
+            maybeActivate(newTab, inBackground);
+        }
+    }
+
+    private void maybeActivate(MainTabItem tab, boolean inBackground)
+    {
+        if (inBackground == false)
+        {
+            setSelection(tab);
+        } else
+        {
+            // TODO 2010-03-18, IA: Shall we somehow inform the user?
         }
     }
 
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/locator/DataSetSearchLocatorResolver.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/locator/DataSetSearchLocatorResolver.java
index 2e9fafe4a06a4da3ed528f1f7d731326ba5537e8..39d1dd8ea1a7d2e354e4af75a29480a9b8b90b49 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/locator/DataSetSearchLocatorResolver.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/locator/DataSetSearchLocatorResolver.java
@@ -19,10 +19,10 @@ package ch.systemsx.cisd.openbis.generic.client.web.client.application.locator;
 import ch.systemsx.cisd.openbis.generic.client.web.client.ICommonClientServiceAsync;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.Dict;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.IViewContext;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.AbstractTabItemFactory;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.DefaultTabItem;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.DispatcherHelper;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.ITabItem;
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.ITabItemFactory;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.help.HelpPageIdentifier;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.help.HelpPageIdentifier.HelpPageAction;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.help.HelpPageIdentifier.HelpPageDomain;
@@ -50,11 +50,10 @@ public class DataSetSearchLocatorResolver
         // Open the search view using the provided criteria
         OpenEntitySearchGridTabAction searchAction =
                 new OpenEntitySearchGridTabAction(searchCriteria, viewContext);
-
         DispatcherHelper.dispatchNaviEvent(searchAction);
     }
 
-    private static class OpenEntitySearchGridTabAction implements ITabItemFactory
+    private static class OpenEntitySearchGridTabAction extends AbstractTabItemFactory
     {
         private final DetailedSearchCriteria searchCriteria;
 
@@ -78,6 +77,7 @@ public class DataSetSearchLocatorResolver
             return DefaultTabItem.create(title, component, viewContext);
         }
 
+        @Override
         public ITabItem create()
         {
             IDisposableComponent browser =
@@ -86,11 +86,13 @@ public class DataSetSearchLocatorResolver
             return createTab(Dict.DATA_SET_SEARCH, browser);
         }
 
+        @Override
         public String getId()
         {
             return DataSetSearchHitGrid.BROWSER_ID;
         }
 
+        @Override
         public HelpPageIdentifier getHelpPageIdentifier()
         {
             return new HelpPageIdentifier(HelpPageDomain.DATA_SET, HelpPageAction.SEARCH);
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/locator/SampleSearchLocatorResolver.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/locator/SampleSearchLocatorResolver.java
index a4fc2b6a5852292d3e3d9e42ac0f6a8c115ebac9..67db705835889fceb769c8bb7554e7f44b8abaf1 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/locator/SampleSearchLocatorResolver.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/locator/SampleSearchLocatorResolver.java
@@ -22,10 +22,10 @@ import com.google.gwt.user.client.rpc.AsyncCallback;
 import ch.systemsx.cisd.openbis.generic.client.web.client.ICommonClientServiceAsync;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.Dict;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.IViewContext;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.AbstractTabItemFactory;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.DefaultTabItem;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.DispatcherHelper;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.ITabItem;
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.ITabItemFactory;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.help.HelpPageIdentifier;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.help.HelpPageIdentifier.HelpPageAction;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.help.HelpPageIdentifier.HelpPageDomain;
@@ -104,7 +104,6 @@ public class SampleSearchLocatorResolver
                 default:
                     OpenEntitySearchGridTabAction searchAction =
                             new OpenEntitySearchGridTabAction(displayCriteria, viewContext);
-
                     DispatcherHelper.dispatchNaviEvent(searchAction);
 
                     break;
@@ -112,7 +111,7 @@ public class SampleSearchLocatorResolver
         }
     }
 
-    private static class OpenEntitySearchGridTabAction implements ITabItemFactory
+    private static class OpenEntitySearchGridTabAction extends AbstractTabItemFactory
     {
         private final ListSampleDisplayCriteria displayCriteria;
 
@@ -136,6 +135,7 @@ public class SampleSearchLocatorResolver
             return DefaultTabItem.create(title, component, viewContext);
         }
 
+        @Override
         public ITabItem create()
         {
             IDisposableComponent browser =
@@ -144,11 +144,13 @@ public class SampleSearchLocatorResolver
             return createTab(Dict.SAMPLE_SEARCH, browser);
         }
 
+        @Override
         public String getId()
         {
             return SampleSearchHitGrid.SEARCH_BROWSER_ID;
         }
 
+        @Override
         public HelpPageIdentifier getHelpPageIdentifier()
         {
             return new HelpPageIdentifier(HelpPageDomain.SAMPLE, HelpPageAction.SEARCH);
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 53acaa6d213f269082bca7f9133ffd023e435aaf..d8a30258687bc1163c41ccd020b6ef85ae3a2f41 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
@@ -20,8 +20,8 @@ import com.extjs.gxt.ui.client.event.MenuEvent;
 import com.extjs.gxt.ui.client.event.SelectionListener;
 import com.extjs.gxt.ui.client.widget.menu.MenuItem;
 
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.AbstractTabItemFactory;
 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.util.IDelegatedAction;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.IMessageProvider;
 
@@ -62,7 +62,7 @@ public class ActionMenu extends MenuItem
     }
 
     public ActionMenu(final IActionMenuItem actionMenu, IMessageProvider messageProvider,
-            final ITabItemFactory tabToOpen)
+            final AbstractTabItemFactory tabToOpen)
     {
         this(actionMenu, messageProvider, new IDelegatedAction()
             {
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/menu/TabActionMenuItemFactory.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/menu/TabActionMenuItemFactory.java
index 593c4cef8d4b1021fddb839a735ad5e4808f0b9e..f22ae7235020d8444b6ca650995e49b04dd21ef5 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/menu/TabActionMenuItemFactory.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/menu/TabActionMenuItemFactory.java
@@ -20,7 +20,7 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.IClientServiceAsync;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.IViewContext;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.DefaultTabItem;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.ITabItem;
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.ITabItemFactory;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.AbstractTabItemFactory;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.help.HelpPageIdentifier;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.IMessageProvider;
 
@@ -48,13 +48,15 @@ public class TabActionMenuItemFactory
                 }
             };
         final String tabLabelKey = definition.getName() + "_tab_label";
-        return new ActionMenu(menuItem, viewContext, new ITabItemFactory()
+        return new ActionMenu(menuItem, viewContext, new AbstractTabItemFactory()
             {
+                @Override
                 public String getId()
                 {
                     return widgetIDPrefix + "_" + tabLabelKey;
                 }
 
+                @Override
                 public ITabItem create()
                 {
                     String tabItemText = viewContext.getMessage(tabLabelKey);
@@ -62,6 +64,7 @@ public class TabActionMenuItemFactory
                             .createComponent(viewContext), viewContext, false);
                 }
 
+                @Override
                 public HelpPageIdentifier getHelpPageIdentifier()
                 {
                     return HelpPageIdentifier.createSpecific(definition.getHelpPageTitle());
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/plugin/ClientPluginAdapter.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/plugin/ClientPluginAdapter.java
index 5680ad308c9de8d3d6c75d71ae8944cb79c3f5ef..e7b729be8f4d0fa20705bdcad3a1b784c8ea37dd 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/plugin/ClientPluginAdapter.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/plugin/ClientPluginAdapter.java
@@ -19,7 +19,7 @@ package ch.systemsx.cisd.openbis.generic.client.web.client.application.plugin;
 import com.google.gwt.user.client.ui.Widget;
 
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.DatabaseModificationAwareWidget;
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.ITabItemFactory;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.AbstractTabItemFactory;
 import ch.systemsx.cisd.openbis.generic.shared.basic.IIdentifiable;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.BasicEntityType;
 
@@ -47,7 +47,7 @@ public class ClientPluginAdapter<E extends BasicEntityType, I extends IIdentifia
         throw new UnsupportedOperationException("Not yet implemented.");
     }
 
-    public ITabItemFactory createEntityViewer(final E entityType, final I identifiable)
+    public AbstractTabItemFactory createEntityViewer(final E entityType, final I identifiable)
     {
         throw new UnsupportedOperationException("Not yet implemented.");
     }
@@ -57,7 +57,7 @@ public class ClientPluginAdapter<E extends BasicEntityType, I extends IIdentifia
         throw new UnsupportedOperationException("Not yet implemented.");
     }
 
-    public ITabItemFactory createEntityEditor(final E entityType, I identifiable)
+    public AbstractTabItemFactory createEntityEditor(final E entityType, I identifiable)
     {
         throw new UnsupportedOperationException("Not yet implemented.");
     }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/plugin/IClientPlugin.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/plugin/IClientPlugin.java
index e03b5d85c6848956f21f83f999a8245f1a4d8ae7..cbc5a2b62710114bc49ce0d8fa7298b227bf946a 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/plugin/IClientPlugin.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/plugin/IClientPlugin.java
@@ -19,7 +19,7 @@ package ch.systemsx.cisd.openbis.generic.client.web.client.application.plugin;
 import com.google.gwt.user.client.ui.Widget;
 
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.DatabaseModificationAwareWidget;
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.ITabItemFactory;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.AbstractTabItemFactory;
 import ch.systemsx.cisd.openbis.generic.shared.basic.IIdentifiable;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.BasicEntityType;
 
@@ -40,7 +40,7 @@ public interface IClientPlugin<T extends BasicEntityType, I extends IIdentifiabl
     /**
      * Shows a detailed view of the entity specified by its <var>identifier</var>.
      */
-    public ITabItemFactory createEntityViewer(final T entityType, final I identifiable);
+    public AbstractTabItemFactory createEntityViewer(final T entityType, final I identifiable);
 
     /**
      * Shows a registration form for entities of given <var>entityType</var>.
@@ -60,5 +60,5 @@ public interface IClientPlugin<T extends BasicEntityType, I extends IIdentifiabl
     /**
      * Shows a editor of the specified entity..
      */
-    public ITabItemFactory createEntityEditor(final T entityType, final I identifiable);
+    public AbstractTabItemFactory createEntityEditor(final T entityType, final I identifiable);
 }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/AbstractViewer.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/AbstractViewer.java
index 8785fab34cb70e1d1e5bc3a79777c2ea2af90285..289eefdf663498a8e6e83679dd51790f71e84f96 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/AbstractViewer.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/AbstractViewer.java
@@ -22,6 +22,7 @@ import java.util.List;
 
 import com.extjs.gxt.ui.client.Style.LayoutRegion;
 import com.extjs.gxt.ui.client.event.BaseEvent;
+import com.extjs.gxt.ui.client.event.ButtonEvent;
 import com.extjs.gxt.ui.client.event.Events;
 import com.extjs.gxt.ui.client.event.Listener;
 import com.extjs.gxt.ui.client.widget.ContentPanel;
@@ -34,9 +35,9 @@ import com.extjs.gxt.ui.client.widget.toolbar.ToolBar;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.AbstractAsyncCallback;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.Dict;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.IViewContext;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.AbstractTabItemFactory;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.AppEvents;
 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.plugin.IClientPlugin;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.plugin.IClientPluginFactory;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.GWTUtils;
@@ -97,11 +98,11 @@ public abstract class AbstractViewer<D extends IEntityInformationHolder> extends
     {
         Button result = new Button(viewContext.getMessage(Dict.BUTTON_EDIT));
         result.setId(getId() + ID_EDIT_SUFFIX);
-        result.addListener(Events.Select, new Listener<BaseEvent>()
+        result.addListener(Events.Select, new Listener<ButtonEvent>()
             {
-                public void handleEvent(BaseEvent be)
+                public void handleEvent(ButtonEvent be)
                 {
-                    showEntityEditor();
+                    showEntityEditor(be.isShiftKey());
                 }
             });
         result.disable();
@@ -150,23 +151,25 @@ public abstract class AbstractViewer<D extends IEntityInformationHolder> extends
         return Collections.singletonList(getOriginalData());
     }
 
-    protected void showEntityEditor()
+    protected void showEntityEditor(boolean inBackground)
     {
         assert originalData != null : "data is not yet set";
-        showEntityEditor(originalData.getEntityKind(), originalData.getEntityType(), originalData);
+        showEntityEditor(originalData.getEntityKind(), originalData.getEntityType(), originalData,
+                inBackground);
     }
 
     private final void showEntityEditor(EntityKind entityKind, BasicEntityType type,
-            IIdentifiable identifiable)
+            IIdentifiable identifiable, boolean inBackground)
     {
         assert type != null : "entity type is not provided";
-        final ITabItemFactory tabView;
+        final AbstractTabItemFactory tabView;
         final IClientPluginFactory clientPluginFactory =
                 viewContext.getClientPluginFactoryProvider().getClientPluginFactory(entityKind,
                         type);
         final IClientPlugin<BasicEntityType, IIdentifiable> createClientPlugin =
                 clientPluginFactory.createClientPlugin(entityKind);
         tabView = createClientPlugin.createEntityEditor(type, identifiable);
+        tabView.setInBackground(inBackground);
         DispatcherHelper.dispatchNaviEvent(tabView);
     }
 
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/AuthorizationGroupGrid.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/AuthorizationGroupGrid.java
index 14af138e3cf04e56509aec6d67f266e81cae103c..ac9861e956efb68f42e758e0d46d9cee0a52abbd 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/AuthorizationGroupGrid.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/AuthorizationGroupGrid.java
@@ -30,11 +30,11 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.AbstractAs
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.Dict;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.GenericConstants;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.IViewContext;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.AbstractTabItemFactory;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.DefaultTabItem;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.DispatcherHelper;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.DisplayTypeIDGenerator;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.ITabItem;
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.ITabItemFactory;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.help.HelpPageIdentifier;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.help.HelpPageIdentifier.HelpPageAction;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.help.HelpPageIdentifier.HelpPageDomain;
@@ -105,9 +105,12 @@ public class AuthorizationGroupGrid extends AbstractSimpleBrowserGrid<Authorizat
                 createSelectedItemButton(viewContext.getMessage(Dict.BUTTON_SHOW_USERS),
                         new ISelectedEntityInvoker<BaseEntityModel<AuthorizationGroup>>()
                             {
-                                public void invoke(BaseEntityModel<AuthorizationGroup> selectedItem)
+                                public void invoke(
+                                        BaseEntityModel<AuthorizationGroup> selectedItem,
+                                        boolean keyPressed)
                                 {
-                                    showEntityViewer(selectedItem.getBaseObject(), false);
+                                    showEntityViewer(selectedItem.getBaseObject(), false,
+                                            keyPressed);
                                 }
                             });
         showDetailsButton.setId(USERS_BUTTON_ID);
@@ -133,7 +136,8 @@ public class AuthorizationGroupGrid extends AbstractSimpleBrowserGrid<Authorizat
                 new ISelectedEntityInvoker<BaseEntityModel<AuthorizationGroup>>()
                     {
 
-                        public void invoke(BaseEntityModel<AuthorizationGroup> selectedItem)
+                        public void invoke(BaseEntityModel<AuthorizationGroup> selectedItem,
+                                boolean keyPressed)
                         {
                             final AuthorizationGroup authGroup = selectedItem.getBaseObject();
                             createEditDialog(authGroup).show();
@@ -198,10 +202,11 @@ public class AuthorizationGroupGrid extends AbstractSimpleBrowserGrid<Authorizat
     }
 
     @Override
-    protected void showEntityViewer(final AuthorizationGroup group, boolean editMode)
+    protected void showEntityViewer(final AuthorizationGroup group, boolean editMode, boolean inBackground)
     {
-        final ITabItemFactory tabFactory = new ITabItemFactory()
+        final AbstractTabItemFactory tabFactory = new AbstractTabItemFactory()
             {
+                @Override
                 public ITabItem create()
                 {
                     IDisposableComponent component =
@@ -211,17 +216,20 @@ public class AuthorizationGroupGrid extends AbstractSimpleBrowserGrid<Authorizat
                     return DefaultTabItem.create(tabTitle, component, viewContext);
                 }
 
+                @Override
                 public String getId()
                 {
                     return PersonGrid.createBrowserId(group);
                 }
 
+                @Override
                 public HelpPageIdentifier getHelpPageIdentifier()
                 {
                     return new HelpPageIdentifier(HelpPageDomain.AUTHORIZATION_GROUPS,
                             HelpPageAction.VIEW);
                 }
             };
+        tabFactory.setInBackground(inBackground);
         DispatcherHelper.dispatchNaviEvent(tabFactory);
     }
 
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/GroupGrid.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/GroupGrid.java
index db07117449cd9c18be2b21c8a4eca8b415d28fd9..0b291c38181279f7e0b3faf05d649d54cd78702b 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/GroupGrid.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/GroupGrid.java
@@ -110,7 +110,8 @@ public class GroupGrid extends AbstractSimpleBrowserGrid<Space>
                 createSelectedItemButton(viewContext.getMessage(Dict.BUTTON_EDIT),
                         new ISelectedEntityInvoker<BaseEntityModel<Space>>()
                             {
-                                public void invoke(BaseEntityModel<Space> selectedItem)
+                                public void invoke(BaseEntityModel<Space> selectedItem,
+                                        boolean keyPressed)
                                 {
                                     Space space = selectedItem.getBaseObject();
                                     createEditDialog(space).show();
@@ -203,7 +204,7 @@ public class GroupGrid extends AbstractSimpleBrowserGrid<Space>
     }
 
     @Override
-    protected void showEntityViewer(final Space space, boolean editMode)
+    protected void showEntityViewer(final Space space, boolean editMode, boolean active)
     {
         assert false : "not implemented";
     }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/PersonGrid.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/PersonGrid.java
index f9a2c647e1b036bcff165cfb3ab329403afb0ec8..a92549eb15100847acfee966fdf1fd0db0ff4cce 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/PersonGrid.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/PersonGrid.java
@@ -207,7 +207,7 @@ public class PersonGrid extends AbstractSimpleBrowserGrid<Person>
     }
 
     @Override
-    protected void showEntityViewer(final Person person, boolean editMode)
+    protected void showEntityViewer(final Person person, boolean editMode, boolean active)
     {
         assert false : "not implemented";
     }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/RoleAssignmentGrid.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/RoleAssignmentGrid.java
index bd4329d3daa55ab81e92f9ec96286718299c6615..b4f0c7c89068017cd07d47525bab80712ca932f5 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/RoleAssignmentGrid.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/RoleAssignmentGrid.java
@@ -100,7 +100,8 @@ public class RoleAssignmentGrid extends AbstractSimpleBrowserGrid<RoleAssignment
                         new ISelectedEntityInvoker<BaseEntityModel<RoleAssignment>>()
                             {
 
-                                public void invoke(BaseEntityModel<RoleAssignment> selectedItem)
+                                public void invoke(BaseEntityModel<RoleAssignment> selectedItem,
+                                        boolean keyPressed)
                                 {
                                     RoleAssignment assignment = selectedItem.getBaseObject();
                                     new RemoveRoleDialog(assignment).show();
@@ -188,7 +189,8 @@ public class RoleAssignmentGrid extends AbstractSimpleBrowserGrid<RoleAssignment
     }
 
     @Override
-    protected void showEntityViewer(final RoleAssignment roleAssignment, boolean editMode)
+    protected void showEntityViewer(final RoleAssignment roleAssignment, boolean editMode,
+            boolean active)
     {
         assert false : "not implemented";
     }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/attachment/AttachmentBrowser.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/attachment/AttachmentBrowser.java
index 295e66fe0e974d7a601e5e904bc9c1be775915b3..d27496d2e624dc68daecb4a62041af4f1512d18b 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/attachment/AttachmentBrowser.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/attachment/AttachmentBrowser.java
@@ -45,11 +45,11 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.AbstractAs
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.Dict;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.GenericConstants;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.IViewContext;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.AbstractTabItemFactory;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.DefaultTabItem;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.DispatcherHelper;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.DisplayTypeIDGenerator;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.ITabItem;
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.ITabItemFactory;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.help.HelpPageIdentifier;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.help.HelpPageIdentifier.HelpPageAction;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.help.HelpPageIdentifier.HelpPageDomain;
@@ -122,7 +122,7 @@ public class AttachmentBrowser extends AbstractSimpleBrowserGrid<AttachmentVersi
         registerLinkClickListenerFor(AttachmentColDefKind.FILE_NAME.id(),
                 new ICellListener<AttachmentVersions>()
                     {
-                        public void handle(AttachmentVersions rowItem)
+                        public void handle(AttachmentVersions rowItem, boolean keyPressed)
                         {
                             // don't need to check whether the value is null
                             // because there will not be a link for null value
@@ -135,14 +135,14 @@ public class AttachmentBrowser extends AbstractSimpleBrowserGrid<AttachmentVersi
         registerLinkClickListenerFor(AttachmentColDefKind.VERSION.id(),
                 new ICellListener<AttachmentVersions>()
                     {
-                        public void handle(AttachmentVersions rowItem)
+                        public void handle(AttachmentVersions rowItem, boolean keyPressed)
                         {
                             // don't need to check whether the value is null
                             // because there will not be a link for null value
                             final String fileName = rowItem.getCurrent().getFileName();
                             final List<Attachment> versions = rowItem.getVersions();
 
-                            showVersionsPanel(fileName, versions);
+                            showVersionsPanel(fileName, versions, keyPressed);
                         }
                     });
     }
@@ -186,7 +186,8 @@ public class AttachmentBrowser extends AbstractSimpleBrowserGrid<AttachmentVersi
                 new ISelectedEntityInvoker<BaseEntityModel<AttachmentVersions>>()
                     {
 
-                        public void invoke(BaseEntityModel<AttachmentVersions> selectedItem)
+                        public void invoke(BaseEntityModel<AttachmentVersions> selectedItem,
+                                boolean keyPressed)
                         {
                             AttachmentVersions versions = selectedItem.getBaseObject();
                             createEditAttachmentDialog(versions).show();
@@ -214,7 +215,8 @@ public class AttachmentBrowser extends AbstractSimpleBrowserGrid<AttachmentVersi
     {
         return new ISelectedEntityInvoker<BaseEntityModel<AttachmentVersions>>()
             {
-                public void invoke(BaseEntityModel<AttachmentVersions> selectedItem)
+                public void invoke(BaseEntityModel<AttachmentVersions> selectedItem,
+                        boolean keyPressed)
                 {
                     AttachmentVersions versions = selectedItem.getBaseObject();
                     final String fileName = versions.getCurrent().getFileName();
@@ -260,7 +262,7 @@ public class AttachmentBrowser extends AbstractSimpleBrowserGrid<AttachmentVersi
     }
 
     @Override
-    protected void showEntityViewer(AttachmentVersions entity, boolean editMode)
+    protected void showEntityViewer(AttachmentVersions entity, boolean editMode, boolean active)
     {
         assert editMode == false : "edit mode is not implemented";
 
@@ -268,7 +270,7 @@ public class AttachmentBrowser extends AbstractSimpleBrowserGrid<AttachmentVersi
         final String fileName = entity.getCurrent().getFileName();
         final List<Attachment> versions = entity.getVersions();
 
-        showVersionsPanel(fileName, versions);
+        showVersionsPanel(fileName, versions, active);
     }
 
     private static void downloadAttachment(String fileName, int version, IAttachmentHolder holder)
@@ -291,14 +293,16 @@ public class AttachmentBrowser extends AbstractSimpleBrowserGrid<AttachmentVersi
         return methodWithParameters.toString();
     }
 
-    private void showVersionsPanel(final String fileName, final List<Attachment> versions)
+    private void showVersionsPanel(final String fileName, final List<Attachment> versions,
+            boolean inBackground)
     {
         assert versions != null : "versions not set!";
 
         final VersionsPanelHelper helper =
                 new VersionsPanelHelper(fileName, attachmentHolder, viewContext);
-        final ITabItemFactory tabFactory = new ITabItemFactory()
+        final AbstractTabItemFactory tabFactory = new AbstractTabItemFactory()
             {
+                @Override
                 public ITabItem create()
                 {
                     final String tabTitle = helper.createTabTitle();
@@ -306,16 +310,19 @@ public class AttachmentBrowser extends AbstractSimpleBrowserGrid<AttachmentVersi
                     return DefaultTabItem.createUnaware(tabTitle, component, false);
                 }
 
+                @Override
                 public String getId()
                 {
                     return helper.createTabId();
                 }
 
+                @Override
                 public HelpPageIdentifier getHelpPageIdentifier()
                 {
                     return new HelpPageIdentifier(HelpPageDomain.ATTACHMENTS, HelpPageAction.VIEW);
                 }
             };
+        tabFactory.setInBackground(inBackground);
         DispatcherHelper.dispatchNaviEvent(tabFactory);
     }
 
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/data/AbstractExternalDataGrid.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/data/AbstractExternalDataGrid.java
index 964bf561094bb1f113672c6119374239d7dbab96..587809bfca9345709ded7c5284812a7f7eaf78fd 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/data/AbstractExternalDataGrid.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/data/AbstractExternalDataGrid.java
@@ -218,10 +218,10 @@ public abstract class AbstractExternalDataGrid
     {
         protected abstract IEntityInformationHolder getEntity(ExternalData rowItem);
 
-        public final void handle(ExternalData rowItem)
+        public final void handle(ExternalData rowItem, boolean keyPressed)
         {
             final IEntityInformationHolder entity = getEntity(rowItem);
-            new OpenEntityDetailsTabAction(entity, viewContext).execute();
+            new OpenEntityDetailsTabAction(entity, viewContext, keyPressed).execute();
         }
 
     }
@@ -374,9 +374,9 @@ public abstract class AbstractExternalDataGrid
     }
 
     @Override
-    protected void showEntityViewer(ExternalData dataSet, boolean editMode)
+    protected void showEntityViewer(ExternalData dataSet, boolean editMode, boolean active)
     {
-        showEntityInformationHolderViewer(dataSet, editMode);
+        showEntityInformationHolderViewer(dataSet, editMode, active);
     }
 
     @Override
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/data/DataSetReportGenerator.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/data/DataSetReportGenerator.java
index 438a762f261638aebee9380fa72595b99d3f236e..f1f6b6f11a39c40375d133fd86677022e8f62643 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/data/DataSetReportGenerator.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/data/DataSetReportGenerator.java
@@ -18,10 +18,10 @@ package ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.data;
 
 import ch.systemsx.cisd.openbis.generic.client.web.client.ICommonClientServiceAsync;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.IViewContext;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.AbstractTabItemFactory;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.DefaultTabItem;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.DispatcherHelper;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.ITabItem;
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.ITabItemFactory;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.help.HelpPageIdentifier;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.help.HelpPageIdentifier.HelpPageAction;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.help.HelpPageIdentifier.HelpPageDomain;
@@ -72,8 +72,9 @@ public class DataSetReportGenerator
 
                 public void execute(final IDisposableComponent reportComponent)
                 {
-                    final ITabItemFactory tabFactory = new ITabItemFactory()
+                    final AbstractTabItemFactory tabFactory = new AbstractTabItemFactory()
                         {
+                            @Override
                             public ITabItem create()
                             {
                                 final String reportTitle = service.getLabel();
@@ -81,12 +82,14 @@ public class DataSetReportGenerator
                                         viewContext);
                             }
 
+                            @Override
                             public String getId()
                             {
                                 final String reportKey = service.getKey();
                                 return ReportGrid.createId(reportKey);
                             }
 
+                            @Override
                             public HelpPageIdentifier getHelpPageIdentifier()
                             {
                                 return new HelpPageIdentifier(HelpPageDomain.DATA_SET,
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/data/FileFormatTypeGrid.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/data/FileFormatTypeGrid.java
index 93d50f1015b8def75b98e463b998593a344b4acd..3845d121e53e9c1bad8ae31cacf4359b4eb1beae 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/data/FileFormatTypeGrid.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/data/FileFormatTypeGrid.java
@@ -103,7 +103,8 @@ public class FileFormatTypeGrid extends AbstractSimpleBrowserGrid<AbstractType>
                         new ISelectedEntityInvoker<BaseEntityModel<AbstractType>>()
                             {
 
-                                public void invoke(BaseEntityModel<AbstractType> selectedItem)
+                                public void invoke(BaseEntityModel<AbstractType> selectedItem,
+                                        boolean keyPressed)
                                 {
                                     AbstractType entityType = selectedItem.getBaseObject();
                                     createEditEntityTypeDialog(entityType).show();
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/entity_type/AbstractEntityTypeGrid.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/entity_type/AbstractEntityTypeGrid.java
index ffc69960235c0c309e903a631ee5d7a18cc7a33b..1c41f8ce7720e3eab0b266e1bf60579a65bcc36c 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/entity_type/AbstractEntityTypeGrid.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/entity_type/AbstractEntityTypeGrid.java
@@ -99,7 +99,8 @@ abstract public class AbstractEntityTypeGrid<T extends EntityType> extends
                         new ISelectedEntityInvoker<BaseEntityModel<T>>()
                             {
 
-                                public void invoke(BaseEntityModel<T> selectedItem)
+                                public void invoke(BaseEntityModel<T> selectedItem,
+                                        boolean keyPressed)
                                 {
                                     T entityType = selectedItem.getBaseObject();
                                     createEditEntityTypeDialog(entityKind, entityType).show();
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/experiment/ExperimentBrowserGrid.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/experiment/ExperimentBrowserGrid.java
index ae9581b0d59415f324220ba42c9dbddd59fd9d1b..5422ea5f314ef36ad6e93470b22736782ad1d08c 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/experiment/ExperimentBrowserGrid.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/experiment/ExperimentBrowserGrid.java
@@ -89,7 +89,8 @@ public class ExperimentBrowserGrid extends
         final ExperimentBrowserGrid browserGrid = new ExperimentBrowserGrid(viewContext, toolbar)
             {
                 @Override
-                protected void showEntityViewer(Experiment experiment, boolean editMode)
+                protected void showEntityViewer(Experiment experiment, boolean editMode,
+                        boolean active)
                 {
                     // do nothing - avoid showing the details after double click
                 }
@@ -133,9 +134,10 @@ public class ExperimentBrowserGrid extends
         registerLinkClickListenerFor(CommonSampleColDefKind.PROJECT.id(),
                 new ICellListener<Experiment>()
                     {
-                        public void handle(Experiment rowItem)
+                        public void handle(Experiment rowItem, boolean keyPressed)
                         {
-                            OpenEntityDetailsTabHelper.open(viewContext, rowItem.getProject());
+                            OpenEntityDetailsTabHelper.open(viewContext, rowItem.getProject(),
+                                    keyPressed);
                         }
                     });
         setId(BROWSER_ID);
@@ -209,9 +211,9 @@ public class ExperimentBrowserGrid extends
     }
 
     @Override
-    protected void showEntityViewer(Experiment experiment, boolean editMode)
+    protected void showEntityViewer(Experiment experiment, boolean editMode, boolean active)
     {
-        showEntityInformationHolderViewer(experiment, editMode);
+        showEntityInformationHolderViewer(experiment, editMode, active);
     }
 
     @Override
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/experiment/ProjectSelectionTreeGridContainer.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/experiment/ProjectSelectionTreeGridContainer.java
index f7bbad78fddd9ae1c23aa6db38594317f47e9c69..85b5612064b3f25c210437554bb4c025f6bd9293 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/experiment/ProjectSelectionTreeGridContainer.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/experiment/ProjectSelectionTreeGridContainer.java
@@ -58,6 +58,7 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.model.NonH
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.renderer.LinkRenderer;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.listener.OpenEntityDetailsTabHelper;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.GWTUtils;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.WidgetUtils;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.lang.StringEscapeUtils;
 import ch.systemsx.cisd.openbis.generic.client.web.client.dto.DefaultResultSetConfig;
 import ch.systemsx.cisd.openbis.generic.client.web.client.dto.ResultSet;
@@ -214,7 +215,9 @@ public final class ProjectSelectionTreeGridContainer extends LayoutContainer imp
 
                                             public void onClick(ClickEvent event)
                                             {
-                                                showProjectDetailsView(project);
+                                                showProjectDetailsView(project,
+                                                        WidgetUtils.ifSpecialKeyPressed(event
+                                                                .getNativeEvent()));
                                             }
 
                                         });
@@ -301,9 +304,9 @@ public final class ProjectSelectionTreeGridContainer extends LayoutContainer imp
         return columnConfig;
     }
 
-    private void showProjectDetailsView(final Project project)
+    private void showProjectDetailsView(final Project project, boolean keyPressed)
     {
-        OpenEntityDetailsTabHelper.open(viewContext, project);
+        OpenEntityDetailsTabHelper.open(viewContext, project, keyPressed);
     }
 
     /**
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/grid/AbstractBrowserGrid.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/grid/AbstractBrowserGrid.java
index 86645b2e58e52939bc2a9ba3249bf3f65548aad1..f7d1513d403af920970085658b9502bbe2bc9a84 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/grid/AbstractBrowserGrid.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/grid/AbstractBrowserGrid.java
@@ -67,12 +67,12 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.GenericCon
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.IViewContext;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ShowRelatedDatasetsDialog;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.VoidAsyncCallback;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.AbstractTabItemFactory;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.DispatcherHelper;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.DisplaySettingsManager;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.IDatabaseModificationObserver;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.IDisplaySettingsGetter;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.IDisplayTypeIDGenerator;
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.ITabItemFactory;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.DisplaySettingsManager.GridDisplaySettings;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.DisplaySettingsManager.Modification;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.model.BaseEntityModel;
@@ -122,7 +122,7 @@ public abstract class AbstractBrowserGrid<T/* Entity */, M extends BaseEntityMod
     /**
      * Shows the detail view for the specified entity
      */
-    abstract protected void showEntityViewer(T entity, boolean editMode);
+    abstract protected void showEntityViewer(T entity, boolean editMode, boolean active);
 
     abstract protected void listEntities(DefaultResultSetConfig<String, T> resultSetConfig,
             AbstractAsyncCallback<ResultSet<T>> callback);
@@ -268,9 +268,9 @@ public abstract class AbstractBrowserGrid<T/* Entity */, M extends BaseEntityMod
         columnListener = new ColumnListener<T, M>(grid);
         registerLinkClickListenerFor(Dict.CODE, new ICellListener<T>()
             {
-                public void handle(T rowItem)
+                public void handle(T rowItem, boolean keyPressed)
                 {
-                    showEntityViewer(rowItem, false);
+                    showEntityViewer(rowItem, false, keyPressed);
                 }
             });
 
@@ -281,10 +281,10 @@ public abstract class AbstractBrowserGrid<T/* Entity */, M extends BaseEntityMod
     }
 
     protected void showEntityInformationHolderViewer(IEntityInformationHolder entity,
-            boolean editMode)
+            boolean editMode, boolean inBackground)
     {
         final EntityKind entityKind = entity.getEntityKind();
-        final ITabItemFactory tabView;
+        final AbstractTabItemFactory tabView;
         BasicEntityType entityType = entity.getEntityType();
         final IClientPluginFactory clientPluginFactory =
                 viewContext.getClientPluginFactoryProvider().getClientPluginFactory(entityKind,
@@ -298,6 +298,7 @@ public abstract class AbstractBrowserGrid<T/* Entity */, M extends BaseEntityMod
         {
             tabView = createClientPlugin.createEntityViewer(entityType, entity);
         }
+        tabView.setInBackground(inBackground);
         DispatcherHelper.dispatchNaviEvent(tabView);
     }
 
@@ -764,18 +765,18 @@ public abstract class AbstractBrowserGrid<T/* Entity */, M extends BaseEntityMod
 
     protected static interface ISelectedEntityInvoker<M>
     {
-        void invoke(M selectedItem);
+        void invoke(M selectedItem, boolean keyPressed);
     }
 
     protected final ISelectedEntityInvoker<M> asShowEntityInvoker(final boolean editMode)
     {
         return new ISelectedEntityInvoker<M>()
             {
-                public void invoke(M selectedItem)
+                public void invoke(M selectedItem, boolean keyPressed)
                 {
                     if (selectedItem != null)
                     {
-                        showEntityViewer(selectedItem.getBaseObject(), editMode);
+                        showEntityViewer(selectedItem.getBaseObject(), editMode, keyPressed);
                     }
                 }
             };
@@ -785,7 +786,7 @@ public abstract class AbstractBrowserGrid<T/* Entity */, M extends BaseEntityMod
     {
         return new ISelectedEntityInvoker<M>()
             {
-                public void invoke(M selectedItem)
+                public void invoke(M selectedItem, boolean keyPressed)
                 {
                     MessageBox.alert(viewContext.getMessage(Dict.MESSAGEBOX_WARNING), viewContext
                             .getMessage(Dict.NOT_IMPLEMENTED), null);
@@ -829,7 +830,7 @@ public abstract class AbstractBrowserGrid<T/* Entity */, M extends BaseEntityMod
                     List<M> selectedItems = getSelectedItems();
                     if (selectedItems.isEmpty() == false)
                     {
-                        invoker.invoke(selectedItems.get(0));
+                        invoker.invoke(selectedItems.get(0), true);
                     }
                 }
             });
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/grid/AbstractSimpleBrowserGrid.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/grid/AbstractSimpleBrowserGrid.java
index dc294835d42f85f67e684a8c6d02743b72f593d1..bad17c998ca0e77488adfc810fc0bcc3d5013d4d 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/grid/AbstractSimpleBrowserGrid.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/grid/AbstractSimpleBrowserGrid.java
@@ -70,7 +70,7 @@ abstract public class AbstractSimpleBrowserGrid<T/* Entity */> extends
     }
 
     @Override
-    protected void showEntityViewer(T entity, boolean editMode)
+    protected void showEntityViewer(T entity, boolean editMode, boolean active)
     {
         // do nothing
     }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/grid/ColumnListener.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/grid/ColumnListener.java
index 6f733840a8f3a22f11f9c834e3186e38b7f95b58..1ea8ccd1ebc8fef372e77590f5c00e188fecca7e 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/grid/ColumnListener.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/grid/ColumnListener.java
@@ -26,6 +26,7 @@ import com.extjs.gxt.ui.client.store.ListStore;
 import com.extjs.gxt.ui.client.widget.grid.Grid;
 
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.model.BaseEntityModel;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.WidgetUtils;
 
 /**
  * Listener for a Grid which delegates click on a cell or link in a cell to a registered
@@ -59,9 +60,10 @@ public final class ColumnListener<T, M extends BaseEntityModel<T>> implements
     }
 
     /**
-     * Invokes {@link ICellListener#handle(Object)} with the base object of the row specified by the
-     * row index of the event. The cell listener is determined by the column index. This method does
-     * nothing if no cell listener has been registered for column determined by the event.
+     * Invokes {@link ICellListener#handle(Object,boolean)} with the base object of the row
+     * specified by the row index of the event. The cell listener is determined by the column index.
+     * This method does nothing if no cell listener has been registered for column determined by the
+     * event.
      */
     @SuppressWarnings("unchecked")
     public void handleEvent(GridEvent be)
@@ -70,7 +72,8 @@ public final class ColumnListener<T, M extends BaseEntityModel<T>> implements
         if (listener != null)
         {
             ListStore store = be.getGrid().getStore();
-            listener.handle(((BaseEntityModel<T>) store.getAt(be.getRowIndex())).getBaseObject());
+            listener.handle(((BaseEntityModel<T>) store.getAt(be.getRowIndex())).getBaseObject(),
+                    WidgetUtils.ifSpecialKeyPressed(be.getEvent()));
         }
     }
 
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/grid/GenericTableBrowserGrid.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/grid/GenericTableBrowserGrid.java
index d45d556da636325df4a6c6b9781fa7a5efe18d74..ea0b17e91fb2cd95fd731574db2a132189a65283 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/grid/GenericTableBrowserGrid.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/grid/GenericTableBrowserGrid.java
@@ -188,7 +188,7 @@ public abstract class GenericTableBrowserGrid extends
     }
 
     @Override
-    protected void showEntityViewer(GenericTableRow entity, boolean editMode)
+    protected void showEntityViewer(GenericTableRow entity, boolean editMode, boolean active)
     {
     }
 
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/grid/ICellListener.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/grid/ICellListener.java
index 1033f9b725586fadf2b296067334d3ae34af6592..b21ce1562e5349c2e808869031fe1cef4496f2e5 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/grid/ICellListener.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/grid/ICellListener.java
@@ -19,12 +19,12 @@ package ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid;
 /**
  * Listener interface for classes which could handle event on a cell of a grid.
  * 
- * @author     Franz-Josef Elmer
+ * @author Franz-Josef Elmer
  */
 public interface ICellListener<T>
 {
     /**
      * Handles the specified item.
      */
-    public void handle(T rowItem);
+    public void handle(T rowItem, boolean specialKeyPressed);
 }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/grid/expressions/column/GridCustomColumnGrid.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/grid/expressions/column/GridCustomColumnGrid.java
index e2ef0b7e0eced53e5077fd6349704d75d6764726..6b31ad47ea2ea191060d2b99f766a91a1ac1f731 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/grid/expressions/column/GridCustomColumnGrid.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/grid/expressions/column/GridCustomColumnGrid.java
@@ -113,7 +113,8 @@ public class GridCustomColumnGrid extends AbstractSimpleBrowserGrid<GridCustomCo
                 createSelectedItemButton(viewContext.getMessage(Dict.BUTTON_EDIT),
                         new ISelectedEntityInvoker<BaseEntityModel<GridCustomColumn>>()
                             {
-                                public void invoke(BaseEntityModel<GridCustomColumn> selectedItem)
+                                public void invoke(BaseEntityModel<GridCustomColumn> selectedItem,
+                                        boolean keyPressed)
                                 {
                                     final GridCustomColumn selected = selectedItem.getBaseObject();
                                     createEditDialog(selected).show();
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/grid/expressions/filter/GridCustomFilterGrid.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/grid/expressions/filter/GridCustomFilterGrid.java
index 66a2ffee061e84836c59a7d4da49b398a6549de9..17b250e726e0efe0e506286d120babfce33ea878 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/grid/expressions/filter/GridCustomFilterGrid.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/grid/expressions/filter/GridCustomFilterGrid.java
@@ -109,7 +109,8 @@ public class GridCustomFilterGrid extends AbstractSimpleBrowserGrid<GridCustomFi
                 createSelectedItemButton(viewContext.getMessage(Dict.BUTTON_EDIT),
                         new ISelectedEntityInvoker<BaseEntityModel<GridCustomFilter>>()
                             {
-                                public void invoke(BaseEntityModel<GridCustomFilter> selectedItem)
+                                public void invoke(BaseEntityModel<GridCustomFilter> selectedItem,
+                                        boolean keyPressed)
                                 {
                                     final GridCustomFilter selected = selectedItem.getBaseObject();
                                     createEditDialog(selected).show();
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/listener/OpenEntityDetailsTabAction.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/listener/OpenEntityDetailsTabAction.java
index b55004d821b138a0efc01e7da171a2747053abe5..cc5034dff67d28f9852249270e197477369ba7a0 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/listener/OpenEntityDetailsTabAction.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/listener/OpenEntityDetailsTabAction.java
@@ -17,8 +17,8 @@
 package ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.listener;
 
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.IViewContext;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.AbstractTabItemFactory;
 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.plugin.IClientPlugin;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.plugin.IClientPluginFactory;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.IDelegatedAction;
@@ -38,11 +38,20 @@ public final class OpenEntityDetailsTabAction implements IDelegatedAction
 
     private final IViewContext<?> viewContext;
 
+    private final boolean keyPressed;
+
     public OpenEntityDetailsTabAction(IEntityInformationHolder entity,
             final IViewContext<?> viewContext)
+    {
+        this(entity, viewContext, false);
+    }
+
+    public OpenEntityDetailsTabAction(IEntityInformationHolder entity,
+            final IViewContext<?> viewContext, boolean keyPressed)
     {
         this.entity = entity;
         this.viewContext = viewContext;
+        this.keyPressed = keyPressed;
     }
 
     public void execute()
@@ -54,8 +63,9 @@ public final class OpenEntityDetailsTabAction implements IDelegatedAction
                         entityType);
         final IClientPlugin<BasicEntityType, IIdentifiable> createClientPlugin =
                 clientPluginFactory.createClientPlugin(entityKind);
-        final ITabItemFactory tabView = createClientPlugin.createEntityViewer(entityType, entity);
-
+        final AbstractTabItemFactory tabView =
+                createClientPlugin.createEntityViewer(entityType, entity);
+        tabView.setInBackground(keyPressed);
         DispatcherHelper.dispatchNaviEvent(tabView);
     }
 }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/listener/OpenEntityDetailsTabClickListener.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/listener/OpenEntityDetailsTabClickListener.java
index f6a81ae88c5cb1f6326ecb61e8a663eb69c57185..dd2f1ec544d30d03f324e130416ccec0f1706ccc 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/listener/OpenEntityDetailsTabClickListener.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/listener/OpenEntityDetailsTabClickListener.java
@@ -20,7 +20,7 @@ import com.google.gwt.event.dom.client.ClickEvent;
 import com.google.gwt.event.dom.client.ClickHandler;
 
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.IViewContext;
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.IDelegatedAction;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.WidgetUtils;
 import ch.systemsx.cisd.openbis.generic.shared.basic.IEntityInformationHolder;
 
 /**
@@ -30,17 +30,21 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.IEntityInformationHolder;
  */
 public final class OpenEntityDetailsTabClickListener implements ClickHandler
 {
-    private final IDelegatedAction action;
+    private final IEntityInformationHolder entity;
+
+    private final IViewContext<?> viewContext;
 
     public OpenEntityDetailsTabClickListener(IEntityInformationHolder entity,
             final IViewContext<?> viewContext)
     {
         super();
-        this.action = new OpenEntityDetailsTabAction(entity, viewContext);
+        this.entity = entity;
+        this.viewContext = viewContext;
     }
 
     public void onClick(ClickEvent event)
     {
-        action.execute();
+        new OpenEntityDetailsTabAction(entity, viewContext, WidgetUtils.ifSpecialKeyPressed(event
+                .getNativeEvent())).execute();
     }
 }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/listener/OpenEntityDetailsTabHelper.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/listener/OpenEntityDetailsTabHelper.java
index fa3560f659c6e7ccecb59a89c5968eb004a2d91f..dc644bc606284e7bba600b64687897369b133b36 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/listener/OpenEntityDetailsTabHelper.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/listener/OpenEntityDetailsTabHelper.java
@@ -20,11 +20,11 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.AbstractAs
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.Dict;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.IViewContext;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ProjectViewer;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.AbstractTabItemFactory;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.DatabaseModificationAwareComponent;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.DefaultTabItem;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.DispatcherHelper;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.ITabItem;
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.ITabItemFactory;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.help.HelpPageIdentifier;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.help.HelpPageIdentifier.HelpPageAction;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.help.HelpPageIdentifier.HelpPageDomain;
@@ -71,12 +71,14 @@ public class OpenEntityDetailsTabHelper
         }
     }
 
-    public static void open(final IViewContext<?> viewContext, final Project project)
+    public static void open(final IViewContext<?> viewContext, final Project project,
+            boolean keyPressed)
     {
-        ITabItemFactory tabFactory;
+        AbstractTabItemFactory tabFactory;
         final TechId projectId = TechId.create(project);
-        tabFactory = new ITabItemFactory()
+        tabFactory = new AbstractTabItemFactory()
             {
+                @Override
                 public ITabItem create()
                 {
                     final DatabaseModificationAwareComponent viewer =
@@ -84,6 +86,7 @@ public class OpenEntityDetailsTabHelper
                     return DefaultTabItem.create(getViewerTitle(), viewer, viewContext, false);
                 }
 
+                @Override
                 public String getId()
                 {
                     return ProjectViewer.createId(projectId);
@@ -94,11 +97,13 @@ public class OpenEntityDetailsTabHelper
                     return AbstractViewer.getTitle(viewContext, Dict.PROJECT, project);
                 }
 
+                @Override
                 public HelpPageIdentifier getHelpPageIdentifier()
                 {
                     return new HelpPageIdentifier(HelpPageDomain.PROJECT, HelpPageAction.VIEW);
                 }
             };
+        tabFactory.setInBackground(keyPressed);
         DispatcherHelper.dispatchNaviEvent(tabFactory);
     }
 
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/material/MaterialBrowserGrid.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/material/MaterialBrowserGrid.java
index 3cde866e4c4b756f621ad1502086cfeb44eae9fd..2218b9c0d07ec501b5248432707244b72775842e 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/material/MaterialBrowserGrid.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/material/MaterialBrowserGrid.java
@@ -131,7 +131,8 @@ public class MaterialBrowserGrid extends
             return new MaterialBrowserGrid(viewContext, true, criteriaProvider)
                 {
                     @Override
-                    protected void showEntityViewer(Material material, boolean editMode)
+                    protected void showEntityViewer(Material material, boolean editMode,
+                            boolean active)
                     {
                         // do nothing - avoid showing the details after double click
                     }
@@ -266,9 +267,9 @@ public class MaterialBrowserGrid extends
     }
 
     @Override
-    protected void showEntityViewer(Material material, boolean editMode)
+    protected void showEntityViewer(Material material, boolean editMode, boolean active)
     {
-        showEntityInformationHolderViewer(material, editMode);
+        showEntityInformationHolderViewer(material, editMode, active);
     }
 
     @Override
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/project/ProjectGrid.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/project/ProjectGrid.java
index ced4ead7882846c6a189c392f5c3882bb798c35c..306211ba14822e13c707b0e5c2bf5593306083e7 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/project/ProjectGrid.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/project/ProjectGrid.java
@@ -29,13 +29,13 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.Dict;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.GenericConstants;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.IViewContext;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ProjectViewer;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.AbstractTabItemFactory;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.ComponentProvider;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.DatabaseModificationAwareComponent;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.DefaultTabItem;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.DispatcherHelper;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.DisplayTypeIDGenerator;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.ITabItem;
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.ITabItemFactory;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.help.HelpPageIdentifier;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.help.HelpPageIdentifier.HelpPageAction;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.help.HelpPageIdentifier.HelpPageDomain;
@@ -108,9 +108,11 @@ public class ProjectGrid extends AbstractSimpleBrowserGrid<Project>
                 createSelectedItemButton(viewContext.getMessage(Dict.BUTTON_SHOW_DETAILS),
                         new ISelectedEntityInvoker<BaseEntityModel<Project>>()
                             {
-                                public void invoke(BaseEntityModel<Project> selectedItem)
+                                public void invoke(BaseEntityModel<Project> selectedItem,
+                                        boolean keyPressed)
                                 {
-                                    showEntityViewer(selectedItem.getBaseObject(), false);
+                                    showEntityViewer(selectedItem.getBaseObject(), false,
+                                            keyPressed);
                                 }
                             });
         showDetailsButton.setId(SHOW_DETAILS_BUTTON_ID);
@@ -120,9 +122,10 @@ public class ProjectGrid extends AbstractSimpleBrowserGrid<Project>
                 createSelectedItemButton(viewContext.getMessage(Dict.BUTTON_EDIT),
                         new ISelectedEntityInvoker<BaseEntityModel<Project>>()
                             {
-                                public void invoke(BaseEntityModel<Project> selectedItem)
+                                public void invoke(BaseEntityModel<Project> selectedItem,
+                                        boolean keyPressed)
                                 {
-                                    showEntityViewer(selectedItem.getBaseObject(), true);
+                                    showEntityViewer(selectedItem.getBaseObject(), true, keyPressed);
                                 }
                             });
         editButton.setId(EDIT_BUTTON_ID);
@@ -185,20 +188,21 @@ public class ProjectGrid extends AbstractSimpleBrowserGrid<Project>
     }
 
     @Override
-    protected void showEntityViewer(final Project project, boolean editMode)
+    protected void showEntityViewer(final Project project, boolean editMode, boolean inBackground)
     {
-        showEntityViewer(project, editMode, viewContext);
+        showEntityViewer(project, editMode, viewContext, inBackground);
     }
 
     public static void showEntityViewer(final Project project, boolean editMode,
-            final IViewContext<ICommonClientServiceAsync> viewContext)
+            final IViewContext<ICommonClientServiceAsync> viewContext, boolean inBackground)
     {
-        ITabItemFactory tabFactory;
+        AbstractTabItemFactory tabFactory;
         final TechId projectId = TechId.create(project);
         if (editMode == false)
         {
-            tabFactory = new ITabItemFactory()
+            tabFactory = new AbstractTabItemFactory()
                 {
+                    @Override
                     public ITabItem create()
                     {
                         final DatabaseModificationAwareComponent viewer =
@@ -206,6 +210,7 @@ public class ProjectGrid extends AbstractSimpleBrowserGrid<Project>
                         return DefaultTabItem.create(getViewerTitle(), viewer, viewContext, false);
                     }
 
+                    @Override
                     public String getId()
                     {
                         return ProjectViewer.createId(projectId);
@@ -216,6 +221,7 @@ public class ProjectGrid extends AbstractSimpleBrowserGrid<Project>
                         return AbstractViewer.getTitle(viewContext, Dict.PROJECT, project);
                     }
 
+                    @Override
                     public HelpPageIdentifier getHelpPageIdentifier()
                     {
                         return new HelpPageIdentifier(HelpPageDomain.PROJECT, HelpPageAction.VIEW);
@@ -223,8 +229,9 @@ public class ProjectGrid extends AbstractSimpleBrowserGrid<Project>
                 };
         } else
         {
-            tabFactory = new ITabItemFactory()
+            tabFactory = new AbstractTabItemFactory()
                 {
+                    @Override
                     public ITabItem create()
                     {
                         DatabaseModificationAwareComponent component =
@@ -232,6 +239,7 @@ public class ProjectGrid extends AbstractSimpleBrowserGrid<Project>
                         return DefaultTabItem.create(getEditTitle(), component, viewContext, true);
                     }
 
+                    @Override
                     public String getId()
                     {
                         return ProjectEditForm.createId(projectId);
@@ -243,12 +251,14 @@ public class ProjectGrid extends AbstractSimpleBrowserGrid<Project>
                                 project);
                     }
 
+                    @Override
                     public HelpPageIdentifier getHelpPageIdentifier()
                     {
                         return new HelpPageIdentifier(HelpPageDomain.PROJECT, HelpPageAction.EDIT);
                     }
                 };
         }
+        tabFactory.setInBackground(inBackground);
         DispatcherHelper.dispatchNaviEvent(tabFactory);
     }
 
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/property_type/PropertyTypeAssignmentGrid.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/property_type/PropertyTypeAssignmentGrid.java
index 88fb857634ae4fe9b144e403a9ba4e1d359a0a72..a56f2ccce81756563e7d35f6a85fff5d002123b3 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/property_type/PropertyTypeAssignmentGrid.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/property_type/PropertyTypeAssignmentGrid.java
@@ -201,7 +201,8 @@ public class PropertyTypeAssignmentGrid extends
                 new ISelectedEntityInvoker<BaseEntityModel<EntityTypePropertyType<?>>>()
                     {
 
-                        public void invoke(BaseEntityModel<EntityTypePropertyType<?>> selectedItem)
+                        public void invoke(BaseEntityModel<EntityTypePropertyType<?>> selectedItem,
+                                boolean keyPressed)
                         {
                             final EntityTypePropertyType<?> etpt = selectedItem.getBaseObject();
                             if (etpt.isManagedInternally())
@@ -218,7 +219,8 @@ public class PropertyTypeAssignmentGrid extends
         addButton(createSelectedItemButton(viewContext.getMessage(Dict.UNASSIGN_BUTTON_LABEL),
                 new ISelectedEntityInvoker<BaseEntityModel<EntityTypePropertyType<?>>>()
                     {
-                        public void invoke(BaseEntityModel<EntityTypePropertyType<?>> selectedItem)
+                        public void invoke(BaseEntityModel<EntityTypePropertyType<?>> selectedItem,
+                                boolean keyPressed)
                         {
                             final EntityTypePropertyType<?> etpt = selectedItem.getBaseObject();
                             unassignPropertyType(etpt);
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/property_type/PropertyTypeGrid.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/property_type/PropertyTypeGrid.java
index d474e3f504504a99707c33d5ca5de48223f351fe..f6d32f5f64e62e6b003624abf9354e0d4848d60e 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/property_type/PropertyTypeGrid.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/property_type/PropertyTypeGrid.java
@@ -106,7 +106,8 @@ public class PropertyTypeGrid extends AbstractSimpleBrowserGrid<PropertyType>
                 new ISelectedEntityInvoker<BaseEntityModel<PropertyType>>()
                     {
 
-                        public void invoke(BaseEntityModel<PropertyType> selectedItem)
+                        public void invoke(BaseEntityModel<PropertyType> selectedItem,
+                                boolean keyPressed)
                         {
                             final PropertyType propertyType = selectedItem.getBaseObject();
                             if (propertyType.isManagedInternally())
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/report/ReportGrid.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/report/ReportGrid.java
index fa81593b04287de8f849ec40a888952df4458a35..9cf59c6e7edb5160cd18ac75ac89344efc0a7cb6 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/report/ReportGrid.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/report/ReportGrid.java
@@ -85,8 +85,9 @@ public class ReportGrid extends AbstractBrowserGrid<TableModelRow, BaseEntityMod
     public static class ReportColumnUI extends DataSetReportColumnDefinition implements
             IColumnDefinitionUI<TableModelRow>
     {
-        private boolean isHidden;
-        private int defaultColumnWidth;
+        private final boolean isHidden;
+
+        private final int defaultColumnWidth;
 
         public ReportColumnUI(TableModelColumnHeader columnHeader, String downloadURL,
                 String sessionID, int defaultColumnWidth, boolean isHidden)
@@ -207,7 +208,7 @@ public class ReportGrid extends AbstractBrowserGrid<TableModelRow, BaseEntityMod
     }
 
     @Override
-    protected void showEntityViewer(TableModelRow entity, boolean editMode)
+    protected void showEntityViewer(TableModelRow entity, boolean editMode, boolean active)
     {
         // do nothing
     }
@@ -238,7 +239,7 @@ public class ReportGrid extends AbstractBrowserGrid<TableModelRow, BaseEntityMod
                     registerLinkClickListenerFor(colDefinition.getIdentifier(),
                             new ICellListener<TableModelRow>()
                                 {
-                                    public void handle(TableModelRow rowItem)
+                                    public void handle(TableModelRow rowItem, boolean keyPressed)
                                     {
                                         ISerializableComparable cellValue =
                                                 rowItem.getValues().get(colIndex);
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/sample/SampleBrowserGrid.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/sample/SampleBrowserGrid.java
index f19e1de9a84b2fd2d70a55949b515e34ce6c7466..d6adf0de608f8d398ef7b4e4a6abfa68487aded5 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/sample/SampleBrowserGrid.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/sample/SampleBrowserGrid.java
@@ -110,7 +110,8 @@ public class SampleBrowserGrid extends
                         DisplayTypeIDGenerator.ENTITY_BROWSER_GRID)
                     {
                         @Override
-                        protected void showEntityViewer(Sample sample, boolean editMode)
+                        protected void showEntityViewer(Sample sample, boolean editMode,
+                                boolean active)
                         {
                             // do nothing - avoid showing the details after double click
                         }
@@ -318,10 +319,10 @@ public class SampleBrowserGrid extends
         registerLinkClickListenerFor(CommonSampleColDefKind.PROJECT.id(),
                 new ICellListener<Sample>()
                     {
-                        public void handle(Sample rowItem)
+                        public void handle(Sample rowItem, boolean keyPressed)
                         {
                             OpenEntityDetailsTabHelper.open(viewContext, rowItem.getExperiment()
-                                    .getProject());
+                                    .getProject(), keyPressed);
                         }
                     });
         setId(browserId);
@@ -331,12 +332,12 @@ public class SampleBrowserGrid extends
     {
         protected abstract IEntityInformationHolder getEntity(Sample rowItem);
 
-        public final void handle(Sample rowItem)
+        public final void handle(Sample rowItem, boolean keyPressed)
         {
             // don't need to check whether the value is null
             // because there will not be a link for null value
             final IEntityInformationHolder entity = getEntity(rowItem);
-            new OpenEntityDetailsTabAction(entity, viewContext).execute();
+            new OpenEntityDetailsTabAction(entity, viewContext, keyPressed).execute();
         }
     }
 
@@ -473,9 +474,9 @@ public class SampleBrowserGrid extends
     }
 
     @Override
-    protected void showEntityViewer(Sample sample, boolean editMode)
+    protected void showEntityViewer(Sample sample, boolean editMode, boolean active)
     {
-        showEntityInformationHolderViewer(sample, editMode);
+        showEntityInformationHolderViewer(sample, editMode, active);
     }
 
     @Override
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/vocabulary/VocabularyGrid.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/vocabulary/VocabularyGrid.java
index eae4bb2a9716b40cf6e010197b8fb042c75d8dfc..da26f99e68b77f2633e6ae7cb427fd033dafdff1 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/vocabulary/VocabularyGrid.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/vocabulary/VocabularyGrid.java
@@ -33,12 +33,12 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.AbstractAs
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.Dict;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.GenericConstants;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.IViewContext;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.AbstractTabItemFactory;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.ComponentProvider;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.DefaultTabItem;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.DispatcherHelper;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.DisplayTypeIDGenerator;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.ITabItem;
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.ITabItemFactory;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.help.HelpPageIdentifier;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.help.HelpPageIdentifier.HelpPageAction;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.help.HelpPageIdentifier.HelpPageDomain;
@@ -109,9 +109,11 @@ public class VocabularyGrid extends AbstractSimpleBrowserGrid<Vocabulary>
                 createSelectedItemButton(viewContext.getMessage(Dict.BUTTON_SHOW_DETAILS),
                         new ISelectedEntityInvoker<BaseEntityModel<Vocabulary>>()
                             {
-                                public void invoke(BaseEntityModel<Vocabulary> selectedItem)
+                                public void invoke(BaseEntityModel<Vocabulary> selectedItem,
+                                        boolean keyPressed)
                                 {
-                                    showEntityViewer(selectedItem.getBaseObject(), false);
+                                    showEntityViewer(selectedItem.getBaseObject(), false,
+                                            keyPressed);
                                 }
                             });
         showDetailsButton.setId(SHOW_DETAILS_BUTTON_ID);
@@ -121,7 +123,8 @@ public class VocabularyGrid extends AbstractSimpleBrowserGrid<Vocabulary>
                 new ISelectedEntityInvoker<BaseEntityModel<Vocabulary>>()
                     {
 
-                        public void invoke(BaseEntityModel<Vocabulary> selectedItem)
+                        public void invoke(BaseEntityModel<Vocabulary> selectedItem,
+                                boolean keyPressed)
                         {
                             Vocabulary vocabulary = selectedItem.getBaseObject();
                             if (vocabulary.isManagedInternally())
@@ -214,10 +217,12 @@ public class VocabularyGrid extends AbstractSimpleBrowserGrid<Vocabulary>
     }
 
     @Override
-    protected void showEntityViewer(final Vocabulary vocabulary, boolean editMode)
+    protected void showEntityViewer(final Vocabulary vocabulary, boolean editMode,
+            boolean inBackground)
     {
-        final ITabItemFactory tabFactory = new ITabItemFactory()
+        final AbstractTabItemFactory tabFactory = new AbstractTabItemFactory()
             {
+                @Override
                 public ITabItem create()
                 {
                     IDisposableComponent component =
@@ -228,16 +233,19 @@ public class VocabularyGrid extends AbstractSimpleBrowserGrid<Vocabulary>
                     return DefaultTabItem.create(tabTitle, component, viewContext);
                 }
 
+                @Override
                 public String getId()
                 {
                     return VocabularyTermGrid.createBrowserId(vocabulary);
                 }
 
+                @Override
                 public HelpPageIdentifier getHelpPageIdentifier()
                 {
                     return new HelpPageIdentifier(HelpPageDomain.TERM, HelpPageAction.BROWSE);
                 }
             };
+        tabFactory.setInBackground(inBackground);
         DispatcherHelper.dispatchNaviEvent(tabFactory);
     }
 
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/vocabulary/VocabularyTermGrid.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/vocabulary/VocabularyTermGrid.java
index 92f8bde3181aecf9a958e10478cd811915407e88..fdff3ff5ebfd7ac3e650a40527a6f761a2559c5b 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/vocabulary/VocabularyTermGrid.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/vocabulary/VocabularyTermGrid.java
@@ -169,7 +169,8 @@ public class VocabularyTermGrid extends AbstractSimpleBrowserGrid<VocabularyTerm
                             {
 
                                 public void invoke(
-                                        BaseEntityModel<VocabularyTermWithStats> selectedItem)
+                                        BaseEntityModel<VocabularyTermWithStats> selectedItem,
+                                        boolean keyPressed)
                                 {
                                     final VocabularyTermWithStats term =
                                             selectedItem.getBaseObject();
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/util/WidgetUtils.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/util/WidgetUtils.java
index d78a6c75ed41a1623b22b43e61a6435ecaae22a2..77d8ba13754950550ac0cf6d9f310a1f63efa54d 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/util/WidgetUtils.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/util/WidgetUtils.java
@@ -22,6 +22,7 @@ import com.extjs.gxt.ui.client.event.Events;
 import com.extjs.gxt.ui.client.event.Listener;
 import com.extjs.gxt.ui.client.widget.form.Radio;
 import com.extjs.gxt.ui.client.widget.form.RadioGroup;
+import com.google.gwt.dom.client.NativeEvent;
 
 /**
  * Utility methods for widgets.
@@ -81,4 +82,20 @@ public class WidgetUtils
         }
     }
 
+    /**
+     * Returns true and stops event propagation and default behavior if the special key is pressed.
+     */
+    public static final boolean ifSpecialKeyPressed(NativeEvent e)
+    {
+        // Note: using getMetaKey() would allow using Apple Key (Windows Key), but then
+        // preventDefault() might not work in all browsers
+        boolean result = e.getAltKey();
+        if (result)
+        {
+            e.stopPropagation();
+            e.preventDefault();
+        }
+        return result;
+    }
+
 }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/demo/client/web/client/application/ClientPluginFactory.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/demo/client/web/client/application/ClientPluginFactory.java
index 7dad90d9dafe48b9fafe81db5d713dbcc415bd1f..b431b59b2f161811a005d5afcf297ac7826a0352 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/demo/client/web/client/application/ClientPluginFactory.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/demo/client/web/client/application/ClientPluginFactory.java
@@ -29,7 +29,7 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.DefaultTabItem;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.DummyComponent;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.ITabItem;
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.ITabItemFactory;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.AbstractTabItemFactory;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.help.HelpPageIdentifier;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.help.HelpPageIdentifier.HelpPageAction;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.help.HelpPageIdentifier.HelpPageDomain;
@@ -112,12 +112,13 @@ public final class ClientPluginFactory extends AbstractClientPluginFactory<DemoV
         // IViewClientPlugin
         //
 
-        public final ITabItemFactory createEntityViewer(final SampleType sampleType,
+        public final AbstractTabItemFactory createEntityViewer(final SampleType sampleType,
                 final IIdentifiable identifiable)
         {
             final TechId sampleId = TechId.create(identifiable);
-            return new ITabItemFactory()
+            return new AbstractTabItemFactory()
                 {
+                    @Override
                     public ITabItem create()
                     {
                         final DemoSampleViewer sampleViewer =
@@ -126,11 +127,13 @@ public final class ClientPluginFactory extends AbstractClientPluginFactory<DemoV
                                 false);
                     }
 
+                    @Override
                     public String getId()
                     {
                         return DemoSampleViewer.createId(sampleId);
                     }
 
+                    @Override
                     public HelpPageIdentifier getHelpPageIdentifier()
                     {
                         return new HelpPageIdentifier(HelpPageDomain.SAMPLE, HelpPageAction.VIEW);
@@ -157,21 +160,24 @@ public final class ClientPluginFactory extends AbstractClientPluginFactory<DemoV
             return new DummyComponent();
         }
 
-        public ITabItemFactory createEntityEditor(final SampleType sampleType,
+        public AbstractTabItemFactory createEntityEditor(final SampleType sampleType,
                 final IIdentifiable identifiable)
         {
-            return new ITabItemFactory()
+            return new AbstractTabItemFactory()
                 {
+                    @Override
                     public ITabItem create()
                     {
                         return createDummyTab(identifiable.getCode());
                     }
 
+                    @Override
                     public String getId()
                     {
                         return DummyComponent.ID;
                     }
 
+                    @Override
                     public HelpPageIdentifier getHelpPageIdentifier()
                     {
                         return new HelpPageIdentifier(HelpPageDomain.SAMPLE, HelpPageAction.EDIT);
@@ -190,21 +196,24 @@ public final class ClientPluginFactory extends AbstractClientPluginFactory<DemoV
         //
 
         @Override
-        public final ITabItemFactory createEntityViewer(final ExperimentType experimentType,
+        public final AbstractTabItemFactory createEntityViewer(final ExperimentType experimentType,
                 final IIdentifiable identifiable)
         {
-            return new ITabItemFactory()
+            return new AbstractTabItemFactory()
                 {
+                    @Override
                     public ITabItem create()
                     {
                         return createDummyTab(identifiable.getCode());
                     }
 
+                    @Override
                     public String getId()
                     {
                         return DummyComponent.ID;
                     }
 
+                    @Override
                     public HelpPageIdentifier getHelpPageIdentifier()
                     {
                         return new HelpPageIdentifier(HelpPageDomain.EXPERIMENT,
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/demo/client/web/client/application/module/TopMenuItemDemoModuleMenu.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/demo/client/web/client/application/module/TopMenuItemDemoModuleMenu.java
index 4e118449f3523539c799b5513ba6cfc47a8d03a6..6090f471ebeb47ed814db6841f9eada3fadd46ff 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/demo/client/web/client/application/module/TopMenuItemDemoModuleMenu.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/demo/client/web/client/application/module/TopMenuItemDemoModuleMenu.java
@@ -23,7 +23,7 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.GenericCon
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.IViewContext;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.DefaultTabItem;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.ITabItem;
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.ITabItemFactory;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.AbstractTabItemFactory;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.help.HelpPageIdentifier;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.menu.ActionMenu;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.menu.IActionMenuItem;
@@ -40,7 +40,7 @@ public class TopMenuItemDemoModuleMenu extends MenuItem
 {
     public static final String ID = GenericConstants.ID_PREFIX;
 
-    private final class ExperimentStatisticsTabItemFactory implements ITabItemFactory
+    private final class ExperimentStatisticsTabItemFactory extends AbstractTabItemFactory
     {
         private final IViewContext<IDemoClientServiceAsync> viewContext;
 
@@ -49,17 +49,20 @@ public class TopMenuItemDemoModuleMenu extends MenuItem
             this.viewContext = viewContext;
         }
 
+        @Override
         public ITabItem create()
         {
             return DefaultTabItem.create(viewContext.getMessage(Dict.STATISTICS_DEMO_TAB_HEADER),
                     StatisticsWidget.create(viewContext), viewContext, false);
         }
 
+        @Override
         public String getId()
         {
             return StatisticsWidget.ID;
         }
 
+        @Override
         public HelpPageIdentifier getHelpPageIdentifier()
         {
             return HelpPageIdentifier.createSpecific("Experiment Statistics");
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/ClientPluginFactory.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/ClientPluginFactory.java
index 80a1d45d5319219331dab0e52eb136ace49cd3b8..af06b82b93fe05486607db952bd889847fe7a04c 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/ClientPluginFactory.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/client/application/ClientPluginFactory.java
@@ -28,7 +28,7 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.DatabaseModificationAwareWidget;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.DefaultTabItem;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.ITabItem;
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.ITabItemFactory;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.AbstractTabItemFactory;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.help.HelpPageIdentifier;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.help.HelpPageIdentifier.HelpPageAction;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.help.HelpPageIdentifier.HelpPageDomain;
@@ -139,11 +139,12 @@ public final class ClientPluginFactory extends AbstractClientPluginFactory<Gener
         // IViewClientPlugin
         //
 
-        public ITabItemFactory createEntityViewer(final SampleType sampleType,
+        public AbstractTabItemFactory createEntityViewer(final SampleType sampleType,
                 final IIdentifiable identifiable)
         {
-            return new ITabItemFactory()
+            return new AbstractTabItemFactory()
                 {
+                    @Override
                     public ITabItem create()
                     {
                         final DatabaseModificationAwareComponent sampleViewer =
@@ -152,11 +153,13 @@ public final class ClientPluginFactory extends AbstractClientPluginFactory<Gener
                                 sampleViewer, getViewContext(), false);
                     }
 
+                    @Override
                     public String getId()
                     {
                         return GenericSampleViewer.createId(identifiable);
                     }
 
+                    @Override
                     public HelpPageIdentifier getHelpPageIdentifier()
                     {
                         return new HelpPageIdentifier(HelpPageDomain.SAMPLE, HelpPageAction.VIEW);
@@ -182,11 +185,12 @@ public final class ClientPluginFactory extends AbstractClientPluginFactory<Gener
             return new GenericSampleBatchUpdateForm(getViewContext(), sampleType);
         }
 
-        public ITabItemFactory createEntityEditor(final SampleType sampleType,
+        public AbstractTabItemFactory createEntityEditor(final SampleType sampleType,
                 final IIdentifiable identifiable)
         {
-            return new ITabItemFactory()
+            return new AbstractTabItemFactory()
                 {
+                    @Override
                     public ITabItem create()
                     {
                         DatabaseModificationAwareComponent component =
@@ -195,11 +199,13 @@ public final class ClientPluginFactory extends AbstractClientPluginFactory<Gener
                         return DefaultTabItem.create(title, component, getViewContext(), true);
                     }
 
+                    @Override
                     public String getId()
                     {
                         return GenericSampleEditForm.createId(identifiable, EntityKind.SAMPLE);
                     }
 
+                    @Override
                     public HelpPageIdentifier getHelpPageIdentifier()
                     {
                         return new HelpPageIdentifier(HelpPageDomain.SAMPLE, HelpPageAction.EDIT);
@@ -220,12 +226,13 @@ public final class ClientPluginFactory extends AbstractClientPluginFactory<Gener
         }
 
         @Override
-        public final ITabItemFactory createEntityViewer(final MaterialType materialType,
+        public final AbstractTabItemFactory createEntityViewer(final MaterialType materialType,
                 final IIdentifiable identifiable)
         {
             final TechId techId = TechId.create(identifiable);
-            return new ITabItemFactory()
+            return new AbstractTabItemFactory()
                 {
+                    @Override
                     public ITabItem create()
                     {
                         final DatabaseModificationAwareComponent materialViewer =
@@ -234,11 +241,13 @@ public final class ClientPluginFactory extends AbstractClientPluginFactory<Gener
                                 materialViewer, getViewContext(), false);
                     }
 
+                    @Override
                     public String getId()
                     {
                         return GenericMaterialViewer.createId(techId);
                     }
 
+                    @Override
                     public HelpPageIdentifier getHelpPageIdentifier()
                     {
                         return new HelpPageIdentifier(HelpPageDomain.MATERIAL, HelpPageAction.VIEW);
@@ -247,11 +256,12 @@ public final class ClientPluginFactory extends AbstractClientPluginFactory<Gener
         }
 
         @Override
-        public ITabItemFactory createEntityEditor(final MaterialType materialType,
+        public AbstractTabItemFactory createEntityEditor(final MaterialType materialType,
                 final IIdentifiable identifiable)
         {
-            return new ITabItemFactory()
+            return new AbstractTabItemFactory()
                 {
+                    @Override
                     public ITabItem create()
                     {
                         DatabaseModificationAwareComponent component =
@@ -261,11 +271,13 @@ public final class ClientPluginFactory extends AbstractClientPluginFactory<Gener
                         return DefaultTabItem.create(title, component, getViewContext(), true);
                     }
 
+                    @Override
                     public String getId()
                     {
                         return GenericMaterialEditForm.createId(identifiable, EntityKind.MATERIAL);
                     }
 
+                    @Override
                     public HelpPageIdentifier getHelpPageIdentifier()
                     {
                         return new HelpPageIdentifier(HelpPageDomain.MATERIAL, HelpPageAction.EDIT);
@@ -283,11 +295,12 @@ public final class ClientPluginFactory extends AbstractClientPluginFactory<Gener
         //
 
         @Override
-        public final ITabItemFactory createEntityViewer(final ExperimentType experimentType,
+        public final AbstractTabItemFactory createEntityViewer(final ExperimentType experimentType,
                 final IIdentifiable experimentId)
         {
-            return new ITabItemFactory()
+            return new AbstractTabItemFactory()
                 {
+                    @Override
                     public ITabItem create()
                     {
                         final DatabaseModificationAwareComponent experimentViewer =
@@ -297,11 +310,13 @@ public final class ClientPluginFactory extends AbstractClientPluginFactory<Gener
                                 experimentViewer, getViewContext(), false);
                     }
 
+                    @Override
                     public String getId()
                     {
                         return GenericExperimentViewer.createId(experimentId);
                     }
 
+                    @Override
                     public HelpPageIdentifier getHelpPageIdentifier()
                     {
                         return new HelpPageIdentifier(HelpPageDomain.EXPERIMENT,
@@ -320,11 +335,12 @@ public final class ClientPluginFactory extends AbstractClientPluginFactory<Gener
         }
 
         @Override
-        public ITabItemFactory createEntityEditor(final ExperimentType entityType,
+        public AbstractTabItemFactory createEntityEditor(final ExperimentType entityType,
                 final IIdentifiable identifiable)
         {
-            return new ITabItemFactory()
+            return new AbstractTabItemFactory()
                 {
+                    @Override
                     public ITabItem create()
                     {
                         DatabaseModificationAwareComponent component =
@@ -333,12 +349,14 @@ public final class ClientPluginFactory extends AbstractClientPluginFactory<Gener
                         return DefaultTabItem.create(title, component, getViewContext(), true);
                     }
 
+                    @Override
                     public String getId()
                     {
                         return GenericExperimentEditForm.createId(identifiable,
                                 EntityKind.EXPERIMENT);
                     }
 
+                    @Override
                     public HelpPageIdentifier getHelpPageIdentifier()
                     {
                         return new HelpPageIdentifier(HelpPageDomain.EXPERIMENT,
@@ -352,11 +370,12 @@ public final class ClientPluginFactory extends AbstractClientPluginFactory<Gener
     {
 
         @Override
-        public final ITabItemFactory createEntityViewer(final DataSetType dataSetType,
+        public final AbstractTabItemFactory createEntityViewer(final DataSetType dataSetType,
                 final IIdentifiable identifiable)
         {
-            return new ITabItemFactory()
+            return new AbstractTabItemFactory()
                 {
+                    @Override
                     public ITabItem create()
                     {
                         final DatabaseModificationAwareComponent dataSetViewer =
@@ -365,11 +384,13 @@ public final class ClientPluginFactory extends AbstractClientPluginFactory<Gener
                                 dataSetViewer, getViewContext(), false);
                     }
 
+                    @Override
                     public String getId()
                     {
                         return GenericDataSetViewer.createId(identifiable);
                     }
 
+                    @Override
                     public HelpPageIdentifier getHelpPageIdentifier()
                     {
                         return new HelpPageIdentifier(HelpPageDomain.DATA_SET, HelpPageAction.VIEW);
@@ -378,11 +399,12 @@ public final class ClientPluginFactory extends AbstractClientPluginFactory<Gener
         }
 
         @Override
-        public ITabItemFactory createEntityEditor(final DataSetType dataSetType,
+        public AbstractTabItemFactory createEntityEditor(final DataSetType dataSetType,
                 final IIdentifiable identifiable)
         {
-            return new ITabItemFactory()
+            return new AbstractTabItemFactory()
                 {
+                    @Override
                     public ITabItem create()
                     {
                         DatabaseModificationAwareComponent component =
@@ -391,11 +413,13 @@ public final class ClientPluginFactory extends AbstractClientPluginFactory<Gener
                         return DefaultTabItem.create(title, component, getViewContext(), true);
                     }
 
+                    @Override
                     public String getId()
                     {
                         return GenericDataSetEditForm.createId(identifiable, EntityKind.DATA_SET);
                     }
 
+                    @Override
                     public HelpPageIdentifier getHelpPageIdentifier()
                     {
                         return new HelpPageIdentifier(HelpPageDomain.DATA_SET, HelpPageAction.EDIT);
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/query/client/web/client/application/locator/QueryLocatorResolver.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/query/client/web/client/application/locator/QueryLocatorResolver.java
index 861bd33c455967bf41f13a1dde2c0f1740addc5d..3442a88b92472b3ab68d17afc34e0c3480ed66aa 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/query/client/web/client/application/locator/QueryLocatorResolver.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/query/client/web/client/application/locator/QueryLocatorResolver.java
@@ -1,11 +1,11 @@
 package ch.systemsx.cisd.openbis.plugin.query.client.web.client.application.locator;
 
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.IViewContext;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.AbstractTabItemFactory;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.DatabaseModificationAwareComponent;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.DefaultTabItem;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.DispatcherHelper;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.ITabItem;
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.ITabItemFactory;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.help.HelpPageIdentifier;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.locator.AbstractViewLocatorResolver;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.locator.IViewLocatorResolver;
@@ -51,19 +51,22 @@ public class QueryLocatorResolver extends AbstractViewLocatorResolver
         final ITabActionMenuItemDefinition<IQueryClientServiceAsync> definition =
                 ActionMenuDefinition.RUN_CANNED_QUERY;
         final String tabLabelKey = definition.getName() + "_tab_label";
-        final ITabItemFactory tabItemFactory = new ITabItemFactory()
+        final AbstractTabItemFactory tabItemFactory = new AbstractTabItemFactory()
             {
+                @Override
                 public String getId()
                 {
                     return QueryModuleDatabaseMenuItem.ID + "_" + tabLabelKey;
                 }
 
+                @Override
                 public ITabItem create()
                 {
                     String tabItemText = viewContext.getMessage(tabLabelKey);
                     return DefaultTabItem.create(tabItemText, component, viewContext, false);
                 }
 
+                @Override
                 public HelpPageIdentifier getHelpPageIdentifier()
                 {
                     return HelpPageIdentifier.createSpecific(definition.getHelpPageTitle());
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/query/client/web/client/application/module/QueryBrowserGrid.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/query/client/web/client/application/module/QueryBrowserGrid.java
index 211a6912573a0bbc88f6672eb006fcf539328cda..8fdb2b9dfba31b613f28c1e7e4eeb8eda2854ab4 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/query/client/web/client/application/module/QueryBrowserGrid.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/query/client/web/client/application/module/QueryBrowserGrid.java
@@ -137,7 +137,8 @@ public class QueryBrowserGrid extends AbstractSimpleBrowserGrid<QueryExpression>
                 createSelectedItemButton(viewContext.getMessage(Dict.BUTTON_EDIT),
                         new ISelectedEntityInvoker<BaseEntityModel<QueryExpression>>()
                             {
-                                public void invoke(BaseEntityModel<QueryExpression> selectedItem)
+                                public void invoke(BaseEntityModel<QueryExpression> selectedItem,
+                                        boolean keyPressed)
                                 {
                                     QueryExpression query = selectedItem.getBaseObject();
                                     new QueryEditor(viewContext, query, createRefreshGridAction(),
diff --git a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/web/client/application/ClientPluginFactory.java b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/web/client/application/ClientPluginFactory.java
index bf5090f49095cdf6b3edaeb068e7b97f852767a3..626e46220c8a28ec06461efbdd2d70524eb73798 100644
--- a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/web/client/application/ClientPluginFactory.java
+++ b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/web/client/application/ClientPluginFactory.java
@@ -27,7 +27,7 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.DatabaseModificationAwareWidget;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.DefaultTabItem;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.ITabItem;
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.ITabItemFactory;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.AbstractTabItemFactory;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.help.HelpPageIdentifier;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.help.HelpPageIdentifier.HelpPageAction;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.help.HelpPageIdentifier.HelpPageDomain;
@@ -103,11 +103,12 @@ public class ClientPluginFactory extends AbstractClientPluginFactory<ViewContext
         //
 
         @Override
-        public final ITabItemFactory createEntityViewer(final ExperimentType experimentType,
+        public final AbstractTabItemFactory createEntityViewer(final ExperimentType experimentType,
                 final IIdentifiable identifiable)
         {
-            return new ITabItemFactory()
+            return new AbstractTabItemFactory()
                 {
+                    @Override
                     public ITabItem create()
                     {
                         final DatabaseModificationAwareComponent experimentViewer =
@@ -117,11 +118,13 @@ public class ClientPluginFactory extends AbstractClientPluginFactory<ViewContext
                                 experimentViewer, getViewContext(), false);
                     }
 
+                    @Override
                     public String getId()
                     {
                         return GenericExperimentViewer.createId(identifiable);
                     }
 
+                    @Override
                     public HelpPageIdentifier getHelpPageIdentifier()
                     {
                         return new HelpPageIdentifier(HelpPageDomain.EXPERIMENT,
@@ -140,11 +143,12 @@ public class ClientPluginFactory extends AbstractClientPluginFactory<ViewContext
         }
 
         @Override
-        public ITabItemFactory createEntityEditor(final ExperimentType experimentType,
+        public AbstractTabItemFactory createEntityEditor(final ExperimentType experimentType,
                 final IIdentifiable identifiable)
         {
-            return new ITabItemFactory()
+            return new AbstractTabItemFactory()
                 {
+                    @Override
                     public ITabItem create()
                     {
                         DatabaseModificationAwareComponent component =
@@ -154,12 +158,14 @@ public class ClientPluginFactory extends AbstractClientPluginFactory<ViewContext
                         return DefaultTabItem.create(title, component, getViewContext(), true);
                     }
 
+                    @Override
                     public String getId()
                     {
                         return GenericExperimentEditForm.createId(identifiable,
                                 EntityKind.EXPERIMENT);
                     }
 
+                    @Override
                     public HelpPageIdentifier getHelpPageIdentifier()
                     {
                         return new HelpPageIdentifier(HelpPageDomain.EXPERIMENT,
diff --git a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/web/client/application/ProteinByExperimentBrowserGrid.java b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/web/client/application/ProteinByExperimentBrowserGrid.java
index d3c6ee35ee94b2c149f5c0aa79cdeb58b9427d80..7cd4e98f61576e21fc73e3b1f5841d351f85b106 100644
--- a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/web/client/application/ProteinByExperimentBrowserGrid.java
+++ b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/web/client/application/ProteinByExperimentBrowserGrid.java
@@ -33,6 +33,7 @@ import com.extjs.gxt.ui.client.widget.layout.RowLayout;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.AbstractAsyncCallback;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.GenericConstants;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.IViewContext;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.AbstractTabItemFactory;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.DispatcherHelper;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.model.BaseEntityModel;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.renderer.LinkRenderer;
@@ -93,7 +94,7 @@ class ProteinByExperimentBrowserGrid extends AbstractSimpleBrowserGrid<ProteinIn
             {
             }
         };
-    
+
     static IDisposableComponent create(
             final IViewContext<IPhosphoNetXClientServiceAsync> viewContext,
             ExperimentType experimentType, IIdentifiable experimentId)
@@ -148,9 +149,10 @@ class ProteinByExperimentBrowserGrid extends AbstractSimpleBrowserGrid<ProteinIn
         tabItem.add(component);
         return tabItem;
     }
-    
+
     private ProteinByExperimentBrowserGrid(
-            final IViewContext<IPhosphoNetXClientServiceAsync> viewContext, IIdentifiable experimentId)
+            final IViewContext<IPhosphoNetXClientServiceAsync> viewContext,
+            IIdentifiable experimentId)
     {
         super(viewContext.getCommonViewContext(), BROWSER_ID, GRID_ID, false,
                 PhosphoNetXDisplayTypeIDGenerator.PROTEIN_BY_EXPERIMENT_BROWSER_GRID);
@@ -160,14 +162,17 @@ class ProteinByExperimentBrowserGrid extends AbstractSimpleBrowserGrid<ProteinIn
         registerLinkClickListenerFor(ProteinColDefKind.ACCESSION_NUMBER.id(),
                 new ICellListener<ProteinInfo>()
                     {
-                        public void handle(ProteinInfo rowItem)
+                        public void handle(ProteinInfo rowItem, boolean keyPressed)
                         {
-                            DispatcherHelper.dispatchNaviEvent(ProteinViewer.createTabItemFactory(
-                                    viewContext, toolbar.getExperimentOrNull(), rowItem));
+                            AbstractTabItemFactory tabItemFactory =
+                                    ProteinViewer.createTabItemFactory(viewContext, toolbar
+                                            .getExperimentOrNull(), rowItem);
+                            tabItemFactory.setInBackground(keyPressed);
+                            DispatcherHelper.dispatchNaviEvent(tabItemFactory);
                         }
                     });
     }
-    
+
     void update(TechId experimentID, double falseDiscoveryRate,
             AggregateFunction aggregateFunction, String treatmentTypeCode,
             boolean aggregateOriginal, List<AbundanceColumnDefinition> definitions)
@@ -181,7 +186,7 @@ class ProteinByExperimentBrowserGrid extends AbstractSimpleBrowserGrid<ProteinIn
         abundanceColumnDefinitions = definitions;
         refresh(postRefreshCallback, true);
     }
-    
+
     void setPostRefreshCallback(IDataRefreshCallback postRefreshCallback)
     {
         this.postRefreshCallback = postRefreshCallback;
diff --git a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/web/client/application/ProteinViewer.java b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/web/client/application/ProteinViewer.java
index c8b0f0cb8124ecef536c64fc29060aa5da5ed959..7cf47d189f466e7e43db6b624c2530e71ef6099d 100644
--- a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/web/client/application/ProteinViewer.java
+++ b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/web/client/application/ProteinViewer.java
@@ -37,7 +37,7 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.DefaultTabItem;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.IDatabaseModificationObserver;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.ITabItem;
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.ITabItemFactory;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.AbstractTabItemFactory;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.help.HelpPageIdentifier;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.AbstractViewer;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.IDisposableComponent;
@@ -72,17 +72,19 @@ public class ProteinViewer extends AbstractViewer<IEntityInformationHolder> impl
 
     public static final String ID_PREFIX = GenericConstants.ID_PREFIX + PREFIX;
 
-    static ITabItemFactory createTabItemFactory(
+    static AbstractTabItemFactory createTabItemFactory(
             final IViewContext<IPhosphoNetXClientServiceAsync> viewContext,
             final IIdentifiable experimentId, final ProteinInfo proteinInfo)
     {
-        return new ITabItemFactory()
+        return new AbstractTabItemFactory()
             {
+                @Override
                 public String getId()
                 {
                     return createWidgetID(experimentId, proteinInfo.getId());
                 }
 
+                @Override
                 public ITabItem create()
                 {
                     ProteinViewer viewer =
@@ -96,6 +98,7 @@ public class ProteinViewer extends AbstractViewer<IEntityInformationHolder> impl
                             viewContext, false);
                 }
 
+                @Override
                 public HelpPageIdentifier getHelpPageIdentifier()
                 {
                     return HelpPageIdentifier.createSpecific("Protein Viewer");
diff --git a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/web/client/application/RawDataSampleGrid.java b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/web/client/application/RawDataSampleGrid.java
index 5ca62f5cc36ea3ff0bf532a19b06a1f5bbb89595..7f03a8aabf0e4ec9e9de0af4be44613e93ad6de5 100644
--- a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/web/client/application/RawDataSampleGrid.java
+++ b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/web/client/application/RawDataSampleGrid.java
@@ -69,9 +69,9 @@ class RawDataSampleGrid extends GenericTableBrowserGrid
         specificViewContext = viewContext;
         registerLinkClickListenerFor("CODE", new ICellListener<GenericTableRow>()
             {
-                public void handle(GenericTableRow rowItem)
+                public void handle(GenericTableRow rowItem, boolean keyPressed)
                 {
-                    showEntityViewer(rowItem, false);
+                    showEntityViewer(rowItem, false, keyPressed);
                 }
             });
         allowMultipleSelection();
@@ -113,7 +113,7 @@ class RawDataSampleGrid extends GenericTableBrowserGrid
     }
 
     @Override
-    protected void showEntityViewer(final GenericTableRow entity, boolean editMode)
+    protected void showEntityViewer(final GenericTableRow entity, boolean editMode, boolean active)
     {
         showEntityInformationHolderViewer(new IEntityInformationHolder()
             {
@@ -139,6 +139,6 @@ class RawDataSampleGrid extends GenericTableBrowserGrid
                 {
                     return EntityKind.SAMPLE;
                 }
-            }, editMode);
+            }, editMode, active);
     }
 }
diff --git a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/web/client/application/SampleAbundanceBrowserGrid.java b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/web/client/application/SampleAbundanceBrowserGrid.java
index 157e5320fdb672764b000df573e413ebef532ff2..a87ab050daaf5a98002b7f95fef193e20ff8071e 100644
--- a/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/web/client/application/SampleAbundanceBrowserGrid.java
+++ b/rtd_phosphonetx/source/java/ch/systemsx/cisd/openbis/plugin/phosphonetx/client/web/client/application/SampleAbundanceBrowserGrid.java
@@ -286,9 +286,10 @@ public class SampleAbundanceBrowserGrid
     }
 
     @Override
-    protected void showEntityViewer(SampleWithPropertiesAndAbundance sample, boolean editMode)
+    protected void showEntityViewer(SampleWithPropertiesAndAbundance sample, boolean editMode,
+            boolean active)
     {
-        showEntityInformationHolderViewer(sample, editMode);
+        showEntityInformationHolderViewer(sample, editMode, active);
     }
 
     @Override
diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/ClientPluginFactory.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/ClientPluginFactory.java
index 3b5bce833644d73d374fb028cb5c8971a313542a..fdf796edb97258820a159528e5545d4a9add4f6c 100644
--- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/ClientPluginFactory.java
+++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/ClientPluginFactory.java
@@ -24,12 +24,12 @@ import com.google.gwt.user.client.ui.Widget;
 import ch.systemsx.cisd.openbis.generic.client.web.client.ICommonClientServiceAsync;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.AbstractClientPluginFactory;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.IViewContext;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.AbstractTabItemFactory;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.DatabaseModificationAwareComponent;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.DatabaseModificationAwareWidget;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.DefaultTabItem;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.DispatcherHelper;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.ITabItem;
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.ITabItemFactory;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.help.HelpPageIdentifier;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.plugin.IClientPlugin;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.plugin.IClientPluginFactory;
@@ -132,7 +132,7 @@ public final class ClientPluginFactory extends AbstractClientPluginFactory<Scree
         }
 
         @Override
-        public final ITabItemFactory createEntityViewer(final MaterialType materialType,
+        public final AbstractTabItemFactory createEntityViewer(final MaterialType materialType,
                 final IIdentifiable materialId)
         {
             return createGeneMaterialViewerTabFactory(materialId, null, getViewContext());
@@ -144,17 +144,19 @@ public final class ClientPluginFactory extends AbstractClientPluginFactory<Scree
             final ExperimentIdentifier experimentIdentifier,
             final IViewContext<IScreeningClientServiceAsync> viewContext)
     {
-        ITabItemFactory tab =
+        AbstractTabItemFactory tab =
                 createGeneMaterialViewerTabFactory(materialId, experimentIdentifier, viewContext);
+        // 
         DispatcherHelper.dispatchNaviEvent(tab);
     }
 
-    private static final ITabItemFactory createGeneMaterialViewerTabFactory(
+    private static final AbstractTabItemFactory createGeneMaterialViewerTabFactory(
             final IIdentifiable materialId, final ExperimentIdentifier experimentIdentifierOrNull,
             final IViewContext<IScreeningClientServiceAsync> viewContext)
     {
-        return new ITabItemFactory()
+        return new AbstractTabItemFactory()
             {
+                @Override
                 public ITabItem create()
                 {
                     final DatabaseModificationAwareComponent viewer =
@@ -163,11 +165,13 @@ public final class ClientPluginFactory extends AbstractClientPluginFactory<Scree
                     return createMaterialViewerTab(materialId, viewer, viewContext);
                 }
 
+                @Override
                 public String getId()
                 {
                     return GeneMaterialViewer.createId(materialId);
                 }
 
+                @Override
                 public HelpPageIdentifier getHelpPageIdentifier()
                 {
                     return GeneMaterialViewer.getHelpPageIdentifier();
@@ -192,11 +196,12 @@ public final class ClientPluginFactory extends AbstractClientPluginFactory<Scree
         }
 
         @Override
-        public final ITabItemFactory createEntityViewer(final DataSetType dataSetType,
+        public final AbstractTabItemFactory createEntityViewer(final DataSetType dataSetType,
                 final IIdentifiable identifiable)
         {
-            return new ITabItemFactory()
+            return new AbstractTabItemFactory()
                 {
+                    @Override
                     public ITabItem create()
                     {
                         final DatabaseModificationAwareComponent viewer =
@@ -205,12 +210,14 @@ public final class ClientPluginFactory extends AbstractClientPluginFactory<Scree
                                 screeningViewContext);
                     }
 
+                    @Override
                     public String getId()
                     {
                         final TechId sampleId = TechId.create(identifiable);
                         return PlateDatasetViewer.createId(sampleId);
                     }
 
+                    @Override
                     public HelpPageIdentifier getHelpPageIdentifier()
                     {
                         return HelpPageIdentifier.createSpecific("Plate Dataset Viewer");
@@ -230,11 +237,12 @@ public final class ClientPluginFactory extends AbstractClientPluginFactory<Scree
         }
 
         @Override
-        public final ITabItemFactory createEntityViewer(final SampleType sampleType,
+        public final AbstractTabItemFactory createEntityViewer(final SampleType sampleType,
                 final IIdentifiable identifiable)
         {
-            return new ITabItemFactory()
+            return new AbstractTabItemFactory()
                 {
+                    @Override
                     public ITabItem create()
                     {
                         final DatabaseModificationAwareComponent viewer =
@@ -243,12 +251,14 @@ public final class ClientPluginFactory extends AbstractClientPluginFactory<Scree
                                 screeningViewContext);
                     }
 
+                    @Override
                     public String getId()
                     {
                         final TechId sampleId = TechId.create(identifiable);
                         return PlateSampleViewer.createId(sampleId);
                     }
 
+                    @Override
                     public HelpPageIdentifier getHelpPageIdentifier()
                     {
                         return HelpPageIdentifier.createSpecific("Plate Sample Viewer");
@@ -305,7 +315,7 @@ public final class ClientPluginFactory extends AbstractClientPluginFactory<Scree
             return clientPluginFactory;
         }
 
-        public ITabItemFactory createEntityViewer(final T entityType,
+        public AbstractTabItemFactory createEntityViewer(final T entityType,
                 final IIdentifiable identifiable)
         {
             return delegator.createEntityViewer(entityType, identifiable);
@@ -321,7 +331,7 @@ public final class ClientPluginFactory extends AbstractClientPluginFactory<Scree
             return delegator.createBatchUpdateForEntityType(entityType);
         }
 
-        public ITabItemFactory createEntityEditor(final T entityType,
+        public AbstractTabItemFactory createEntityEditor(final T entityType,
                 final IIdentifiable identifiable)
         {
             return delegator.createEntityEditor(entityType, identifiable);
diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/PlateLayouter.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/PlateLayouter.java
index 3ef47c606c7e126be6ab9e51a7e2d66a8198f7c1..d140ace6a476d5d85c45f24d64c8e84cade56c80 100644
--- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/PlateLayouter.java
+++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/PlateLayouter.java
@@ -37,10 +37,10 @@ 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.IViewContext;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.AbstractTabItemFactory;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.DefaultTabItem;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.DispatcherHelper;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.ITabItem;
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.ITabItemFactory;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.help.HelpPageIdentifier;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.help.HelpPageIdentifier.HelpPageAction;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.help.HelpPageIdentifier.HelpPageDomain;
@@ -330,10 +330,11 @@ public class PlateLayouter
                     DispatcherHelper.dispatchNaviEvent(createPlateMetadataTabFactory());
                 }
 
-                private ITabItemFactory createPlateMetadataTabFactory()
+                private AbstractTabItemFactory createPlateMetadataTabFactory()
                 {
-                    return new ITabItemFactory()
+                    return new AbstractTabItemFactory()
                         {
+                            @Override
                             public ITabItem create()
                             {
                                 return DefaultTabItem.create("Plate Report: " + plate.getCode(),
@@ -341,12 +342,14 @@ public class PlateLayouter
                                                 .getId())), viewContext);
                             }
 
+                            @Override
                             public String getId()
                             {
                                 return GenericConstants.ID_PREFIX + "plate-metadata-"
                                         + plate.getId();
                             }
 
+                            @Override
                             public HelpPageIdentifier getHelpPageIdentifier()
                             {
                                 return new HelpPageIdentifier(HelpPageDomain.SAMPLE,
diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/PlateMetadataBrowser.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/PlateMetadataBrowser.java
index b3ccd2ffa39af69dd8da732c279076b387eb9a14..3e4cf96024e37bfa5aae5f9883a6db4941f86723 100644
--- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/PlateMetadataBrowser.java
+++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/client/application/detailviewers/PlateMetadataBrowser.java
@@ -74,32 +74,32 @@ class PlateMetadataBrowser extends GenericTableBrowserGrid
         registerLinkClickListenerFor(PlateMetadataStaticColumns.WELL.colId(),
                 new ICellListener<GenericTableRow>()
                     {
-                        public void handle(GenericTableRow rowItem)
+                        public void handle(GenericTableRow rowItem, boolean keyPressed)
                         {
-                            showEntityViewer(rowItem, false);
+                            showEntityViewer(rowItem, false, keyPressed);
                         }
                     });
         registerLinkClickListenerFor(PlateMetadataStaticColumns.CONTENT.colId(),
                 new ICellListener<GenericTableRow>()
                     {
-                        public void handle(GenericTableRow rowItem)
+                        public void handle(GenericTableRow rowItem, boolean keyPressed)
                         {
-                            showMaterialViewer(rowItem, false);
+                            showMaterialViewer(rowItem, false, keyPressed);
                         }
                     });
         registerLinkClickListenerFor(PlateMetadataStaticColumns.INHIBITED_GENE.colId(),
                 new ICellListener<GenericTableRow>()
                     {
-                        public void handle(GenericTableRow rowItem)
+                        public void handle(GenericTableRow rowItem, boolean keyPressed)
                         {
-                            showGeneViewer(rowItem, false);
+                            showGeneViewer(rowItem, false, keyPressed);
                         }
                     });
         registerLinkClickListenerFor(PlateMetadataStaticColumns.GENE_DETAILS.colId(),
                 new ICellListener<GenericTableRow>()
                     {
 
-                        public void handle(GenericTableRow rowItem)
+                        public void handle(GenericTableRow rowItem, boolean keyPressed)
                         {
                             ISerializableComparable gene =
                                     rowItem.tryToGetValue(PlateMetadataStaticColumns.INHIBITED_GENE
@@ -137,7 +137,7 @@ class PlateMetadataBrowser extends GenericTableBrowserGrid
     }
 
     @Override
-    protected void showEntityViewer(final GenericTableRow entity, boolean editMode)
+    protected void showEntityViewer(final GenericTableRow entity, boolean editMode, boolean active)
     {
         showEntityInformationHolderViewer(new IEntityInformationHolder()
             {
@@ -165,10 +165,10 @@ class PlateMetadataBrowser extends GenericTableBrowserGrid
                 {
                     return EntityKind.SAMPLE;
                 }
-            }, editMode);
+            }, editMode, active);
     }
 
-    protected void showMaterialViewer(final GenericTableRow entity, boolean editMode)
+    protected void showMaterialViewer(final GenericTableRow entity, boolean editMode, boolean active)
     {
         showEntityInformationHolderViewer(new IEntityInformationHolder()
             {
@@ -196,10 +196,10 @@ class PlateMetadataBrowser extends GenericTableBrowserGrid
                 {
                     return EntityKind.MATERIAL;
                 }
-            }, editMode);
+            }, editMode, active);
     }
 
-    protected void showGeneViewer(final GenericTableRow entity, boolean editMode)
+    protected void showGeneViewer(final GenericTableRow entity, boolean editMode, boolean active)
     {
         showEntityInformationHolderViewer(new IEntityInformationHolder()
             {
@@ -229,7 +229,7 @@ class PlateMetadataBrowser extends GenericTableBrowserGrid
                 {
                     return EntityKind.MATERIAL;
                 }
-            }, editMode);
+            }, editMode, active);
     }
 
 }
\ No newline at end of file