diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/Client.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/Client.java
index c4a4957a3489aadd30a6038f7d32fd077bb167a4..b0ae65688c9d69a98d84416ffd98f1eb5be90867 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/Client.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/Client.java
@@ -19,17 +19,6 @@ package ch.systemsx.cisd.openbis.generic.client.web.client.application;
 import java.util.ArrayList;
 import java.util.List;
 
-import com.extjs.gxt.ui.client.mvc.Controller;
-import com.extjs.gxt.ui.client.mvc.Dispatcher;
-import com.google.gwt.core.client.EntryPoint;
-import com.google.gwt.core.client.GWT;
-import com.google.gwt.event.logical.shared.ValueChangeEvent;
-import com.google.gwt.event.logical.shared.ValueChangeHandler;
-import com.google.gwt.user.client.History;
-import com.google.gwt.user.client.Window;
-import com.google.gwt.user.client.rpc.AsyncCallback;
-import com.google.gwt.user.client.rpc.ServiceDefTarget;
-
 import ch.systemsx.cisd.common.shared.basic.utils.StringUtils;
 import ch.systemsx.cisd.openbis.generic.client.web.client.IClientServiceAsync;
 import ch.systemsx.cisd.openbis.generic.client.web.client.ICommonClientService;
@@ -38,6 +27,7 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.CommonView
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.AppController;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.AppEvents;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.LoginController;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.locator.AggregationServiceLocatorResolver;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.locator.AttachmentDownloadLocatorResolver;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.locator.BrowserLocatorResolver;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.locator.GlobalSearchLocatorResolver;
@@ -63,6 +53,17 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.BasicConstant;
 import ch.systemsx.cisd.openbis.generic.shared.basic.ViewMode;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DisplaySettings;
 
+import com.extjs.gxt.ui.client.mvc.Controller;
+import com.extjs.gxt.ui.client.mvc.Dispatcher;
+import com.google.gwt.core.client.EntryPoint;
+import com.google.gwt.core.client.GWT;
+import com.google.gwt.event.logical.shared.ValueChangeEvent;
+import com.google.gwt.event.logical.shared.ValueChangeHandler;
+import com.google.gwt.user.client.History;
+import com.google.gwt.user.client.Window;
+import com.google.gwt.user.client.rpc.AsyncCallback;
+import com.google.gwt.user.client.rpc.ServiceDefTarget;
+
 /**
  * The {@link EntryPoint} implementation.
  * 
@@ -441,6 +442,7 @@ public class Client implements EntryPoint, ValueChangeHandler<String>
         handlerRegistry.registerHandler(new GlobalSearchLocatorResolver(context));
         handlerRegistry.registerHandler(new HomeLocatorResolver(context));
         handlerRegistry.registerHandler(new SampleRegistrationLocatorResolver(context));
+        handlerRegistry.registerHandler(new AggregationServiceLocatorResolver(context));
     }
 
     @Override
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/framework/AggregationServicePanelHelper.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/framework/AggregationServicePanelHelper.java
new file mode 100644
index 0000000000000000000000000000000000000000..b59a4f6439dbb95dcf1e9f86807283d74d928df2
--- /dev/null
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/framework/AggregationServicePanelHelper.java
@@ -0,0 +1,48 @@
+/*
+ * Copyright 2010 ETH Zuerich, CISD
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package ch.systemsx.cisd.openbis.generic.client.web.client.application.framework;
+
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.IViewContext;
+
+import com.extjs.gxt.ui.client.Style.LayoutRegion;
+import com.extjs.gxt.ui.client.widget.Component;
+import com.extjs.gxt.ui.client.widget.LayoutContainer;
+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.HTML;
+
+/**
+ * Helper methods that create a panel for displaying the results of an aggregation service. This
+ * panel is not used directly in the openBIS UI. It is used to support implementers of web UIs and
+ * give them an opportunity to leverage our powerful table grid framework.
+ * 
+ * @author Chandrasekhar Ramakrishnan
+ */
+public class AggregationServicePanelHelper
+{
+    public static final Component createAggregationServicePanel(IViewContext<?> viewContext,
+            String idPrefix)
+    {
+        final LayoutContainer layoutContainer = new LayoutContainer(new BorderLayout());
+        layoutContainer.setStyleAttribute("background-color", "white");
+        layoutContainer.setId(idPrefix + "aggregation_service");
+        HTML content = new HTML("<p>Welcome to aggregation services</p>");
+        layoutContainer.add(content, new BorderLayoutData(LayoutRegion.CENTER, 1f));
+        return layoutContainer;
+    }
+
+}
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/locator/AggregationServiceLocatorResolver.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/locator/AggregationServiceLocatorResolver.java
new file mode 100644
index 0000000000000000000000000000000000000000..712b1dd29db99306a65816eba2498cc56c1d3198
--- /dev/null
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/locator/AggregationServiceLocatorResolver.java
@@ -0,0 +1,76 @@
+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.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.AggregationServicePanelHelper;
+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.MainPagePanel;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.help.HelpPageIdentifier;
+import ch.systemsx.cisd.openbis.generic.client.web.client.exception.UserFailureException;
+
+/**
+ * An {@link IViewLocatorResolver} that shows the results of an aggregation service as a table
+ * model.
+ * 
+ * @author Chandrasekhar Ramakrishnan
+ */
+public class AggregationServiceLocatorResolver extends AbstractViewLocatorResolver
+{
+    public final static String ACTION = "AGGREGATION_SERVICE";
+
+    private final IViewContext<ICommonClientServiceAsync> viewContext;
+
+    public AggregationServiceLocatorResolver(IViewContext<ICommonClientServiceAsync> viewContext)
+    {
+        super(ACTION);
+        this.viewContext = viewContext;
+    }
+
+    @Override
+    public void resolve(final ViewLocator locator) throws UserFailureException
+    {
+        DispatcherHelper.dispatchNaviEvent(new AbstractTabItemFactory()
+            {
+
+                private final static String ID = GenericConstants.ID_PREFIX + ACTION;
+
+                @Override
+                public ITabItem create()
+                {
+                    return DefaultTabItem.createUnaware(getTabTitle(),
+                            AggregationServicePanelHelper.createAggregationServicePanel(
+                                    viewContext, MainPagePanel.PREFIX), false, viewContext);
+                }
+
+                @Override
+                public String getId()
+                {
+                    return ID;
+                }
+
+                @Override
+                public HelpPageIdentifier getHelpPageIdentifier()
+                {
+                    return null;
+                }
+
+                @Override
+                public String getTabTitle()
+                {
+                    return viewContext.getMessage(Dict.APPLICATION_NAME);
+                }
+
+                @Override
+                public String tryGetLink()
+                {
+                    return locator.getHistoryToken();
+                }
+
+            });
+    }
+}
\ No newline at end of file