diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/locator/PermlinkLocatorResolver.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/locator/PermlinkLocatorResolver.java
index 190ddfbcf08902a4cfe6236eaa6afc4b3c38f415..336d10e504f66d41a96b4f8678edf2b7d947c969 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/locator/PermlinkLocatorResolver.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/locator/PermlinkLocatorResolver.java
@@ -1,5 +1,8 @@
 package ch.systemsx.cisd.openbis.generic.client.web.client.application.locator;
 
+import java.util.HashMap;
+import java.util.Map;
+
 import com.google.gwt.user.client.rpc.AsyncCallback;
 
 import ch.systemsx.cisd.openbis.generic.client.web.client.ICommonClientServiceAsync;
@@ -62,10 +65,26 @@ public class PermlinkLocatorResolver extends AbstractViewLocatorResolver
             checkRequiredParameter(entityKindValueOrNull,
                     PermlinkUtilities.ENTITY_KIND_PARAMETER_KEY);
             checkRequiredParameter(permIdValueOrNull, PermlinkUtilities.PERM_ID_PARAMETER_KEY);
-            openInitialEntityViewer(entityKindValueOrNull, permIdValueOrNull);
+            
+            String subtab = parseHistoryToken(locator.getHistoryToken()).get(PermlinkUtilities.SUBTAB_PARAMETER_KEY);
+            
+            openInitialEntityViewer(entityKindValueOrNull, permIdValueOrNull, subtab);
         }
     }
+    
+    private Map<String, String> parseHistoryToken(String token) {
+        Map<String, String> map = new HashMap<String,String>();
 
+        for (String parameter : token.split("&")) {
+            String[] keyval = parameter.split("=", 2);
+            if (keyval.length == 2) {
+                map.put(keyval[0], keyval[1]);
+            }
+        }
+        
+        return map;
+    }
+    
     protected String tryGetEntityKind(ViewLocator locator)
     {
         return locator.tryGetEntity();
@@ -93,8 +112,14 @@ public class PermlinkLocatorResolver extends AbstractViewLocatorResolver
     protected void openInitialEntityViewer(String entityKindValue, String permIdValue)
             throws UserFailureException
     {
-        EntityKind entityKind = getEntityKind(entityKindValue);
-        OpenEntityDetailsTabHelper.open(viewContext, entityKind, permIdValue, false);
+        openInitialEntityViewer(entityKindValue, permIdValue, "");
     }
+    
+    protected void openInitialEntityViewer(String entityKindValue, String permIdValue, String subtab)
+            throws UserFailureException
+    {
+        EntityKind entityKind = getEntityKind(entityKindValue);
+        OpenEntityDetailsTabHelper.open(viewContext, entityKind, permIdValue, false, subtab);
+    }    
 
 }
\ No newline at end of file
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/locator/SearchLocatorResolver.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/locator/SearchLocatorResolver.java
index f295d4ea1ced56b04c0f3acb1a9405020e006092..ebf124a93ba3a20d10b7e485c6b2652209c15382 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/locator/SearchLocatorResolver.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/locator/SearchLocatorResolver.java
@@ -112,9 +112,11 @@ public class SearchLocatorResolver extends AbstractViewLocatorResolver
                     }
                 } else
                 {
-                    DetailedSearchCriterion searchCriterion =
-                            getSearchCriterionForKeyValueAndEntityKind(key, value);
-                    criterionList.add(searchCriterion);
+                    if (key.startsWith("ui-") == false) {
+                        DetailedSearchCriterion searchCriterion =
+                                getSearchCriterionForKeyValueAndEntityKind(key, value);
+                        criterionList.add(searchCriterion);
+                    }
                 }
             }
 
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 01fcdbfb4ad5ea8cebbb868527f3779c2547e9e6..a375d8124ec67a8235fc761e6718b01343cd555b 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
@@ -19,6 +19,7 @@ package ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.listen
 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.DisplayTypeIDGenerator;
 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,6 +39,8 @@ public final class OpenEntityDetailsTabAction implements IDelegatedAction
     private final IViewContext<?> viewContext;
 
     private final boolean keyPressed;
+    
+    private final String subtab;
 
     public OpenEntityDetailsTabAction(IEntityInformationHolderWithPermId entity,
             final IViewContext<?> viewContext)
@@ -47,12 +50,20 @@ public final class OpenEntityDetailsTabAction implements IDelegatedAction
 
     public OpenEntityDetailsTabAction(IEntityInformationHolderWithPermId entity,
             final IViewContext<?> viewContext, boolean keyPressed)
+    {
+        this(entity, viewContext, keyPressed, "");
+    }
+
+    public OpenEntityDetailsTabAction(IEntityInformationHolderWithPermId entity,
+            final IViewContext<?> viewContext, boolean keyPressed, String subtab)
     {
         this.entity = entity;
         this.viewContext = viewContext;
         this.keyPressed = keyPressed;
+        this.subtab = subtab;
     }
-
+    
+    
     @Override
     public void execute()
     {
@@ -64,6 +75,33 @@ public final class OpenEntityDetailsTabAction implements IDelegatedAction
         final IClientPlugin<BasicEntityType, IEntityInformationHolderWithPermId> createClientPlugin =
                 clientPluginFactory.createClientPlugin(entityKind);
         final AbstractTabItemFactory tabView = createClientPlugin.createEntityViewer(entity);
+
+        String tabGroupDisplayId = null;
+        
+        switch (entityKind) {
+            case DATA_SET:
+                tabGroupDisplayId = DisplayTypeIDGenerator.GENERIC_DATASET_VIEWER.createID(entityType.getCode());
+                break;
+            case EXPERIMENT:
+                tabGroupDisplayId = DisplayTypeIDGenerator.GENERIC_EXPERIMENT_VIEWER.createID(entityType.getCode());
+                break;
+            case MATERIAL:
+                tabGroupDisplayId = DisplayTypeIDGenerator.GENERIC_MATERIAL_VIEWER.createID(entityType.getCode());
+                break;
+            case SAMPLE:
+                tabGroupDisplayId = DisplayTypeIDGenerator.GENERIC_SAMPLE_VIEWER.createID(entityType.getCode());
+                break;
+            default:
+                break;
+        }
+        
+        if (subtab != null && subtab.length() > 0 && tabGroupDisplayId != null) {
+            viewContext.getDisplaySettingsManager().storeActiveTabSettings(
+                    tabGroupDisplayId,
+                    subtab, null);
+            tabView.setForceReopen(true);
+        }
+        
         tabView.setInBackground(keyPressed);
 
         DispatcherHelper.dispatchNaviEvent(tabView);
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 03e52c6172f823f6217b18d83590aab38d668339..8b6802e30736b10c44a877c2ad64eb5e67b4c989 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
@@ -50,9 +50,15 @@ public class OpenEntityDetailsTabHelper
     public static void open(IViewContext<?> viewContext, EntityKind entityKind, String permId,
             boolean keyPressed)
     {
-        viewContext.getCommonService().getEntityInformationHolder(entityKind, permId,
-                new OpenEntityDetailsTabCallback(viewContext, keyPressed));
+       open(viewContext, entityKind, permId, keyPressed, "");
     }
+    
+    public static void open(IViewContext<?> viewContext, EntityKind entityKind, String permId,
+            boolean keyPressed, String subtab)
+    {
+        viewContext.getCommonService().getEntityInformationHolder(entityKind, permId,
+                new OpenEntityDetailsTabCallback(viewContext, keyPressed, subtab));
+    }    
 
     public static void open(IViewContext<?> viewContext, BasicEntityDescription description,
             boolean keyPressed)
@@ -74,14 +80,24 @@ public class OpenEntityDetailsTabHelper
     {
 
         private final boolean keyPressed;
+        
+        private final String subtab;
 
         private OpenEntityDetailsTabCallback(final IViewContext<?> viewContext,
-                final boolean keyPressed)
+                final boolean keyPressed, final String subtab)
         {
             super(viewContext);
             this.keyPressed = keyPressed;
+            this.subtab = subtab;
+        }
+
+        private OpenEntityDetailsTabCallback(final IViewContext<?> viewContext,
+                final boolean keyPressed)
+        {
+            this(viewContext, keyPressed, "");
         }
 
+        
         private OpenEntityDetailsTabCallback(final IViewContext<?> viewContext)
         {
             this(viewContext, false);
@@ -97,7 +113,7 @@ public class OpenEntityDetailsTabHelper
         @Override
         protected final void process(final IEntityInformationHolderWithPermId result)
         {
-            new OpenEntityDetailsTabAction(result, viewContext, keyPressed).execute();
+            new OpenEntityDetailsTabAction(result, viewContext, keyPressed, subtab).execute();
         }
     }
 
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/PermlinkUtilities.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/PermlinkUtilities.java
index 88cd95f021bb8a6d888389df1ffb49b92ef53814..bdfa260d11771cbeaccfd49de5ee4f583dae1a1b 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/PermlinkUtilities.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/PermlinkUtilities.java
@@ -34,6 +34,9 @@ public class PermlinkUtilities
     /** The HTTP URL parameter used to specify the entity kind. */
     public static final String ENTITY_KIND_PARAMETER_KEY = "entity";
 
+    /** The optional HTTP URL parameter used to specify the subtab that should be opened. */    
+    public static final String SUBTAB_PARAMETER_KEY = "ui-subtab";
+
     public final static String createPermlinkURL(final String baseIndexURL,
             final EntityKind entityKind, final String permId)
     {