diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/GenericViewModel.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/GenericViewModel.java
index b24e5b9b36692c06d6d6d0ef0a9a8450a6322ee9..88f1e42392eb045c001c3e91244a0eef3e93caab 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/GenericViewModel.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/GenericViewModel.java
@@ -76,6 +76,11 @@ public class GenericViewModel
         return viewMode == ViewMode.EMBEDDED;
     }
 
+    public boolean isGridMode()
+    {
+        return viewMode == ViewMode.GRID;
+    }
+
     public boolean isDisplaySettingsSaving()
     {
         return isAnonymousLogin() == false && ViewMode.NORMAL.equals(getViewMode());
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 2af6c7b52b4d542dc9b773feedec4c16dc22d79d..19fc1b420d243df21abdb5065e0eecf72c6fe503 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
@@ -16,6 +16,13 @@
 
 package ch.systemsx.cisd.openbis.generic.client.web.client.application.framework;
 
+import ch.systemsx.cisd.openbis.generic.client.web.client.ICommonClientServiceAsync;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.CommonViewContext;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.IViewContext;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.menu.TopMenu;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.SimpleModeHeader;
+import ch.systemsx.cisd.openbis.generic.shared.basic.ViewMode;
+
 import com.extjs.gxt.ui.client.Style.LayoutRegion;
 import com.extjs.gxt.ui.client.Style.Scroll;
 import com.extjs.gxt.ui.client.mvc.AppEvent;
@@ -28,13 +35,6 @@ import com.extjs.gxt.ui.client.widget.layout.BorderLayout;
 import com.extjs.gxt.ui.client.widget.layout.BorderLayoutData;
 import com.google.gwt.user.client.ui.RootPanel;
 
-import ch.systemsx.cisd.openbis.generic.client.web.client.ICommonClientServiceAsync;
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.CommonViewContext;
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.IViewContext;
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.menu.TopMenu;
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.SimpleModeHeader;
-import ch.systemsx.cisd.openbis.generic.shared.basic.ViewMode;
-
 /**
  * Main application view.
  * 
@@ -87,7 +87,7 @@ final class AppView extends View
         } else if (viewMode == ViewMode.NORMAL)
         {
             north = new TopMenu(viewContext, componentProvider);
-        } else if (viewMode == ViewMode.EMBEDDED)
+        } else if (viewMode == ViewMode.EMBEDDED || viewMode == ViewMode.GRID)
         {
             north = null;
         } else
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/aggregation/AggregationServiceLocatorResolver.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/aggregation/AggregationServiceLocatorResolver.java
index 1597bd3c36e7693e65269076c15f4eb7a5874317..0c5fd93e13c12811f3ce7fc3d29b9cdb51ae71e0 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/aggregation/AggregationServiceLocatorResolver.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/aggregation/AggregationServiceLocatorResolver.java
@@ -1,7 +1,6 @@
 package ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.aggregation;
 
 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.GenericConstants;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.IViewContext;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.AbstractTabItemFactory;
@@ -44,7 +43,14 @@ public class AggregationServiceLocatorResolver extends AbstractViewLocatorResolv
                 @Override
                 public ITabItem create()
                 {
-                    return DefaultTabItem.createUnaware(getTabTitle(), new AggregationServicePanel(
+                    String tabTitle =
+                            locator.getParameters().get(AggregationServicePanel.SERVICE_KEY_PARAM);
+                    if (null == tabTitle)
+                    {
+                        tabTitle = getTabTitle();
+                    }
+
+                    return DefaultTabItem.createUnaware(tabTitle, new AggregationServicePanel(
                             viewContext, MainPagePanel.PREFIX, locator), false, viewContext);
                 }
 
@@ -63,7 +69,9 @@ public class AggregationServiceLocatorResolver extends AbstractViewLocatorResolv
                 @Override
                 public String getTabTitle()
                 {
-                    return viewContext.getMessage(Dict.APPLICATION_NAME);
+                    // No need to go through the dictionary for this, since the panel is not a
+                    // normal part of the openBIS app.
+                    return "aggregation service";
                 }
 
                 @Override
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/aggregation/AggregationServicePanel.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/aggregation/AggregationServicePanel.java
index b896e0faa60f5c22d80efda08d3e58f5be3b60aa..bdea6d34e4057c3b8eb7124078e80515fe418798 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/aggregation/AggregationServicePanel.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/aggregation/AggregationServicePanel.java
@@ -44,7 +44,7 @@ import com.google.gwt.user.client.ui.HTML;
  */
 public class AggregationServicePanel extends ContentPanel
 {
-    private static final String SERVICE_KEY_PARAM = "serviceKey";
+    static final String SERVICE_KEY_PARAM = "serviceKey";
 
     private static final String DSS_CODE_PARAM = "dss";
 
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/ViewMode.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/ViewMode.java
index 9e4b1f464e30a58c94848df0405fbaf94997d162..2acc4442c9c2ddcfd640bc696ae7d2dd5cef186b 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/ViewMode.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/ViewMode.java
@@ -32,5 +32,10 @@ public enum ViewMode implements IsSerializable
      */
     EMBEDDED,
 
+    /**
+     * Grid mode is similar to embedded, but it has full-featured grid functionality.
+     */
+    GRID,
+
     NORMAL;
 }