diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/ICommonClientService.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/ICommonClientService.java
index e5e11de14a277e8340359a12c1eeb3a5c3c9dc4c..5bfd4b8b9cb99e71ab04f4c09c85311cb8ca4feb 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/ICommonClientService.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/ICommonClientService.java
@@ -118,7 +118,7 @@ public interface ICommonClientService extends IClientService
     /**
      * Returns a list of all groups.
      */
-    public ResultSet<Space> listGroups(DefaultResultSetConfig<String, Space> criteria)
+    public TypedTableResultSet<Space> listGroups(DefaultResultSetConfig<String, TableModelRowWithObject<Space>> criteria)
             throws UserFailureException;
 
     /**
@@ -136,7 +136,7 @@ public interface ICommonClientService extends IClientService
     /**
      * Like {@link #prepareExportSamples(TableExportCriteria)}, but for groups.
      */
-    public String prepareExportGroups(final TableExportCriteria<Space> criteria)
+    public String prepareExportGroups(final TableExportCriteria<TableModelRowWithObject<Space>> criteria)
             throws UserFailureException;
 
     /**
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/ICommonClientServiceAsync.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/ICommonClientServiceAsync.java
index b92befc7d14ac5b1d4788e0beb9a6220dcf6b900..c4ce6960389217d810846a4a217b2ceb2bff5101 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/ICommonClientServiceAsync.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/ICommonClientServiceAsync.java
@@ -109,8 +109,8 @@ public interface ICommonClientServiceAsync extends IClientServiceAsync
     public void keepSessionAlive(final AsyncCallback<Boolean> asyncCallback);
 
     /** @see ICommonClientService#listGroups(DefaultResultSetConfig) */
-    public void listGroups(DefaultResultSetConfig<String, Space> criteria,
-            final AsyncCallback<ResultSet<Space>> asyncCallback);
+    public void listGroups(DefaultResultSetConfig<String, TableModelRowWithObject<Space>> criteria,
+            final AsyncCallback<TypedTableResultSet<Space>> asyncCallback);
 
     /** @see ICommonClientService#listScripts(DefaultResultSetConfig) */
     public void listScripts(DefaultResultSetConfig<String, Script> criteria,
@@ -121,7 +121,7 @@ public interface ICommonClientServiceAsync extends IClientServiceAsync
             AsyncCallback<String> callback);
 
     /** @see ICommonClientService#prepareExportGroups(TableExportCriteria) */
-    public void prepareExportGroups(TableExportCriteria<Space> exportCriteria,
+    public void prepareExportGroups(TableExportCriteria<TableModelRowWithObject<Space>> exportCriteria,
             AsyncCallback<String> callback);
 
     /** @see ICommonClientService#registerGroup(String, String) */
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 b7b1cf936e5ddc3a9147716af62e3fe0ee2b0d05..25b59ba8ce10bd2fc89dc04d942b4434b33690ca 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
@@ -26,7 +26,7 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.help.HelpP
 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;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.AuthorizationGroupGrid;
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.GroupGrid;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.SpaceGrid;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.PersonGrid;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.RoleAssignmentGrid;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.columns.framework.LinkExtractor;
@@ -203,14 +203,14 @@ public final class ComponentProvider
                 @Override
                 public ITabItem create()
                 {
-                    IDisposableComponent component = GroupGrid.create(viewContext);
+                    IDisposableComponent component = SpaceGrid.create(viewContext);
                     return createTab(getTabTitle(), component);
                 }
 
                 @Override
                 public String getId()
                 {
-                    return GroupGrid.BROWSER_ID;
+                    return SpaceGrid.BROWSER_ID;
                 }
 
                 @Override
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/framework/DisplayTypeIDGenerator.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/framework/DisplayTypeIDGenerator.java
index 8b6982b872d135602b193e05f894539b515eb4ab..ed88ab4984400105baf7685009aa417eeb259c2a 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/framework/DisplayTypeIDGenerator.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/framework/DisplayTypeIDGenerator.java
@@ -58,7 +58,7 @@ public enum DisplayTypeIDGenerator implements IDisplayTypeIDGenerator
 
     PLUGIN_TASKS_BROWSER_GRID("plugin-tasks-browser-grid"),
 
-    GROUPS_BROWSER_GRID("group-browser-grid"),
+    SPACES_BROWSER_GRID("space-browser-grid"),
 
     SCRIPTS_BROWSER_GRID("script-browser-grid"),
 
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/renderer/PersonRenderer.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/renderer/PersonRenderer.java
index 18ea0b6a14174ca75e649bc29a053a76c6f93b9c..8b88e8edf1501a8f92f99fc70f0274356e6b7d66 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/renderer/PersonRenderer.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/renderer/PersonRenderer.java
@@ -16,14 +16,21 @@
 
 package ch.systemsx.cisd.openbis.generic.client.web.client.application.renderer;
 
+import com.extjs.gxt.ui.client.store.ListStore;
+import com.extjs.gxt.ui.client.widget.grid.ColumnData;
+import com.extjs.gxt.ui.client.widget.grid.Grid;
+import com.extjs.gxt.ui.client.widget.grid.GridCellRenderer;
 import com.google.gwt.user.client.DOM;
 import com.google.gwt.user.client.Element;
 
 import ch.systemsx.cisd.common.shared.basic.utils.StringUtils;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.model.BaseEntityModel;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.DOMUtils;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.lang.StringEscapeUtils;
 import ch.systemsx.cisd.openbis.generic.shared.basic.SimplePersonRenderer;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.AbstractRegistrationHolder;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Person;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.TableModelRowWithObject;
 
 /**
  * A <i>static</i> class to render {@link Person}.
@@ -40,6 +47,25 @@ public final class PersonRenderer
     private static final char LOGIN_END = ']';
 
     private static final char LOGIN_START = '[';
+    
+    /**
+     * Registrator renderer. Works only with {@link TableModelRowWithObject} wrapping a
+     * subclass of {@link AbstractRegistrationHolder}.
+     */
+    public static final GridCellRenderer<BaseEntityModel<?>> REGISTRATOR_RENDERER =
+            new GridCellRenderer<BaseEntityModel<?>>()
+                {
+                    @SuppressWarnings("unchecked")
+                    public Object render(BaseEntityModel<?> model, String property,
+                            ColumnData config, int rowIndex, int colIndex,
+                            ListStore<BaseEntityModel<?>> store, Grid<BaseEntityModel<?>> grid)
+                    {
+                        Person registrator =
+                                ((TableModelRowWithObject<AbstractRegistrationHolder>) model
+                                        .getBaseObject()).getObjectOrNull().getRegistrator();
+                        return PersonRenderer.createPersonAnchor(registrator);
+                    }
+                };
 
     private PersonRenderer()
     {
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/GroupSelectionWidget.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/GroupSelectionWidget.java
index be5425fee72455889e90f2d0ee36ede7ba6bef42..d5a7b7637dc4ab72005aedc35636566b3163db37 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/GroupSelectionWidget.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/GroupSelectionWidget.java
@@ -16,6 +16,7 @@
 
 package ch.systemsx.cisd.openbis.generic.client.web.client.application.ui;
 
+import java.util.ArrayList;
 import java.util.List;
 
 import com.extjs.gxt.ui.client.store.ListStore;
@@ -30,12 +31,13 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.model.Mode
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.widget.DropDownList;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.GWTUtils;
 import ch.systemsx.cisd.openbis.generic.client.web.client.dto.DefaultResultSetConfig;
-import ch.systemsx.cisd.openbis.generic.client.web.client.dto.ResultSet;
 import ch.systemsx.cisd.openbis.generic.client.web.client.dto.SessionContext;
+import ch.systemsx.cisd.openbis.generic.client.web.client.dto.TypedTableResultSet;
 import ch.systemsx.cisd.openbis.generic.client.web.client.dto.User;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DatabaseModificationKind;
-import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Space;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DatabaseModificationKind.ObjectKind;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Space;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.TableModelRowWithObject;
 
 /**
  * {@link ComboBox} containing list of groups loaded from the server.
@@ -114,7 +116,7 @@ public class GroupSelectionWidget extends DropDownList<GroupModel, Space>
         return space;
     }
 
-    private final class ListGroupsCallback extends AbstractAsyncCallback<ResultSet<Space>>
+    private final class ListGroupsCallback extends AbstractAsyncCallback<TypedTableResultSet<Space>>
     {
         ListGroupsCallback(final IViewContext<?> viewContext)
         {
@@ -122,7 +124,7 @@ public class GroupSelectionWidget extends DropDownList<GroupModel, Space>
         }
 
         @Override
-        protected final void process(final ResultSet<Space> result)
+        protected final void process(final TypedTableResultSet<Space> result)
         {
             final ListStore<GroupModel> groupStore = getStore();
             groupStore.removeAll();
@@ -134,7 +136,13 @@ public class GroupSelectionWidget extends DropDownList<GroupModel, Space>
             {
                 groupStore.add(new GroupModel(createAllSpaces()));
             }
-            groupStore.add(convertItems(result.getList().extractOriginalObjects()));
+            List<TableModelRowWithObject<Space>> tableRows = result.getResultSet().getList().extractOriginalObjects();
+            List<Space> spaces = new ArrayList<Space>();
+            for (TableModelRowWithObject<Space> tableModelRowWithObject : tableRows)
+            {
+                spaces.add(tableModelRowWithObject.getObjectOrNull());
+            }
+            groupStore.add(convertItems(spaces));
             dataLoaded = true;
             if (groupStore.getCount() > 0)
             {
@@ -206,7 +214,7 @@ public class GroupSelectionWidget extends DropDownList<GroupModel, Space>
     @Override
     protected void loadData(AbstractAsyncCallback<List<Space>> callback)
     {
-        DefaultResultSetConfig<String, Space> config = DefaultResultSetConfig.createFetchAll();
+        DefaultResultSetConfig<String, TableModelRowWithObject<Space>> config = DefaultResultSetConfig.createFetchAll();
         viewContext.getCommonService().listGroups(config, new ListGroupsCallback(viewContext));
         callback.ignore();
     }
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/SpaceGrid.java
similarity index 80%
rename from openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/GroupGrid.java
rename to openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/SpaceGrid.java
index f9d75f4776cb79e974f56a26fe55607a43753615..34acb9212d27e14a2c624535c956b18a56436ab8 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/SpaceGrid.java
@@ -16,6 +16,7 @@
 
 package ch.systemsx.cisd.openbis.generic.client.web.client.application.ui;
 
+import java.util.ArrayList;
 import java.util.List;
 
 import com.extjs.gxt.ui.client.event.ButtonEvent;
@@ -32,11 +33,9 @@ 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.DisplayTypeIDGenerator;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.model.BaseEntityModel;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.renderer.PersonRenderer;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.amc.AddGroupDialog;
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.columns.framework.IColumnDefinitionKind;
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.columns.specific.GroupColDefKind;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.field.DescriptionField;
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.AbstractSimpleBrowserGrid;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.ColumnDefsAndConfigs;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.IBrowserGridActionInvoker;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.IDisposableComponent;
@@ -45,23 +44,24 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.widget.
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.IDelegatedAction;
 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;
+import ch.systemsx.cisd.openbis.generic.client.web.client.dto.SpaceGridColumnIDs;
 import ch.systemsx.cisd.openbis.generic.client.web.client.dto.TableExportCriteria;
-import ch.systemsx.cisd.openbis.generic.shared.basic.IColumnDefinition;
+import ch.systemsx.cisd.openbis.generic.client.web.client.dto.TypedTableResultSet;
 import ch.systemsx.cisd.openbis.generic.shared.basic.TechId;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DatabaseModificationKind;
-import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Space;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DatabaseModificationKind.ObjectKind;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Space;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.TableModelRowWithObject;
 
 /**
- * Grid displaying groups.
+ * Grid displaying spaces.
  * 
  * @author Piotr Buczek
  */
-public class GroupGrid extends AbstractSimpleBrowserGrid<Space>
+public class SpaceGrid extends TypedTableGrid<Space>
 {
     // browser consists of the grid and the paging toolbar
-    public static final String BROWSER_ID = GenericConstants.ID_PREFIX + "group-browser";
+    public static final String BROWSER_ID = GenericConstants.ID_PREFIX + "space-browser";
 
     public static final String GRID_ID = BROWSER_ID + "_grid";
 
@@ -76,14 +76,14 @@ public class GroupGrid extends AbstractSimpleBrowserGrid<Space>
     public static IDisposableComponent create(
             final IViewContext<ICommonClientServiceAsync> viewContext)
     {
-        final GroupGrid grid = new GroupGrid(viewContext);
+        final SpaceGrid grid = new SpaceGrid(viewContext);
         grid.extendBottomToolbar();
         return grid.asDisposableWithoutToolbar();
     }
 
-    private GroupGrid(IViewContext<ICommonClientServiceAsync> viewContext)
+    private SpaceGrid(IViewContext<ICommonClientServiceAsync> viewContext)
     {
-        super(viewContext, BROWSER_ID, GRID_ID, DisplayTypeIDGenerator.GROUPS_BROWSER_GRID);
+        super(viewContext, BROWSER_ID, true, DisplayTypeIDGenerator.SPACES_BROWSER_GRID);
         postRegistrationCallback = createRefreshGridAction();
     }
 
@@ -108,12 +108,12 @@ public class GroupGrid extends AbstractSimpleBrowserGrid<Space>
 
         Button editButton =
                 createSelectedItemButton(viewContext.getMessage(Dict.BUTTON_EDIT),
-                        new ISelectedEntityInvoker<BaseEntityModel<Space>>()
+                        new ISelectedEntityInvoker<BaseEntityModel<TableModelRowWithObject<Space>>>()
                             {
-                                public void invoke(BaseEntityModel<Space> selectedItem,
+                                public void invoke(BaseEntityModel<TableModelRowWithObject<Space>> selectedItem,
                                         boolean keyPressed)
                                 {
-                                    Space space = selectedItem.getBaseObject();
+                                    Space space = selectedItem.getBaseObject().getObjectOrNull();
                                     createEditDialog(space).show();
                                 }
                             });
@@ -125,7 +125,7 @@ public class GroupGrid extends AbstractSimpleBrowserGrid<Space>
                         new AbstractCreateDialogListener()
                             {
                                 @Override
-                                protected Dialog createDialog(List<Space> groups,
+                                protected Dialog createDialog(List<TableModelRowWithObject<Space>> groups,
                                         IBrowserGridActionInvoker invoker)
                                 {
                                     return new GroupListDeletionConfirmationDialog(viewContext,
@@ -168,47 +168,36 @@ public class GroupGrid extends AbstractSimpleBrowserGrid<Space>
     }
 
     @Override
-    protected IColumnDefinitionKind<Space>[] getStaticColumnsDefinition()
+    protected String translateColumnIdToDictionaryKey(String columnID)
     {
-        return GroupColDefKind.values();
+        return columnID.toLowerCase();
     }
-
+    
     @Override
-    protected ColumnDefsAndConfigs<Space> createColumnsDefinition()
+    protected ColumnDefsAndConfigs<TableModelRowWithObject<Space>> createColumnsDefinition()
     {
-        ColumnDefsAndConfigs<Space> schema = super.createColumnsDefinition();
-        schema.setGridCellRendererFor(GroupColDefKind.DESCRIPTION.id(),
-                createMultilineStringCellRenderer());
-        return schema;
+        ColumnDefsAndConfigs<TableModelRowWithObject<Space>> definitions =
+                super.createColumnsDefinition();
+        definitions.setGridCellRendererFor(SpaceGridColumnIDs.REGISTRATOR, PersonRenderer.REGISTRATOR_RENDERER);
+        return definitions;
     }
 
     @Override
-    protected void listEntities(DefaultResultSetConfig<String, Space> resultSetConfig,
-            AbstractAsyncCallback<ResultSet<Space>> callback)
+    protected void listTableRows(
+            DefaultResultSetConfig<String, TableModelRowWithObject<Space>> resultSetConfig,
+            AsyncCallback<TypedTableResultSet<Space>> callback)
     {
         viewContext.getService().listGroups(resultSetConfig, callback);
     }
 
     @Override
-    protected void prepareExportEntities(TableExportCriteria<Space> exportCriteria,
+    protected void prepareExportEntities(TableExportCriteria<TableModelRowWithObject<Space>> exportCriteria,
             AbstractAsyncCallback<String> callback)
     {
         viewContext.getService().prepareExportGroups(exportCriteria, callback);
     }
 
     @Override
-    protected List<IColumnDefinition<Space>> getInitialFilters()
-    {
-        return asColumnFilters(new GroupColDefKind[]
-            { GroupColDefKind.CODE });
-    }
-
-    @Override
-    protected void showEntityViewer(final Space space, boolean editMode, boolean inBackground)
-    {
-        assert false : "not implemented";
-    }
-
     public DatabaseModificationKind[] getRelevantModifications()
     {
         return new DatabaseModificationKind[]
@@ -217,7 +206,7 @@ public class GroupGrid extends AbstractSimpleBrowserGrid<Space>
     }
 
     private static final class GroupListDeletionConfirmationDialog extends
-            AbstractDataListDeletionConfirmationDialog<Space>
+            AbstractDataListDeletionConfirmationDialog<TableModelRowWithObject<Space>>
     {
 
         private final IViewContext<ICommonClientServiceAsync> viewContext;
@@ -225,7 +214,7 @@ public class GroupGrid extends AbstractSimpleBrowserGrid<Space>
         private final AbstractAsyncCallback<Void> callback;
 
         public GroupListDeletionConfirmationDialog(
-                IViewContext<ICommonClientServiceAsync> viewContext, List<Space> data,
+                IViewContext<ICommonClientServiceAsync> viewContext, List<TableModelRowWithObject<Space>> data,
                 AbstractAsyncCallback<Void> callback)
         {
             super(viewContext, data);
@@ -236,7 +225,14 @@ public class GroupGrid extends AbstractSimpleBrowserGrid<Space>
         @Override
         protected void executeConfirmedAction()
         {
-            viewContext.getCommonService().deleteGroups(TechId.createList(data), reason.getValue(),
+            
+            List<TableModelRowWithObject<Space>> d = data;
+            List<TechId> list = new ArrayList<TechId>();
+            for (TableModelRowWithObject<Space> tableModelRowWithObject : d)
+            {
+                list.add(new  TechId(tableModelRowWithObject.getObjectOrNull().getId()));
+            }
+            viewContext.getCommonService().deleteGroups(list, reason.getValue(),
                     callback);
         }
 
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/dto/SpaceGridColumnIDs.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/dto/SpaceGridColumnIDs.java
new file mode 100644
index 0000000000000000000000000000000000000000..cf085bca53485c45d917e34c74b620e00db53a5a
--- /dev/null
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/dto/SpaceGridColumnIDs.java
@@ -0,0 +1,35 @@
+/*
+ * 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.dto;
+
+
+/**
+ * 
+ *
+ * @author Franz-Josef Elmer
+ */
+public class SpaceGridColumnIDs
+{
+    public static final String CODE = "CODE";
+
+    public static final String DESCRIPTION = "DESCRIPTION";
+
+    public static final String REGISTRATOR = "REGISTRATOR";
+
+    public static final String REGISTRATION_DATE = "REGISTRATION_DATE";
+
+}
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/CommonClientService.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/CommonClientService.java
index 0f7baef7a347044b9f769965214f4746ef79b0f1..bc83472150531a40b0e997317ca3751ed0342865 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/CommonClientService.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/CommonClientService.java
@@ -67,6 +67,7 @@ import ch.systemsx.cisd.openbis.generic.client.web.server.resultset.CacheManager
 import ch.systemsx.cisd.openbis.generic.client.web.server.resultset.DataProviderAdapter;
 import ch.systemsx.cisd.openbis.generic.client.web.server.resultset.IOriginalDataProvider;
 import ch.systemsx.cisd.openbis.generic.client.web.server.resultset.IResultSet;
+import ch.systemsx.cisd.openbis.generic.client.web.server.resultset.SpacesProvider;
 import ch.systemsx.cisd.openbis.generic.client.web.server.resultset.TableDataProviderFactory;
 import ch.systemsx.cisd.openbis.generic.client.web.server.resultset.VocabularyTermsProvider;
 import ch.systemsx.cisd.openbis.generic.client.web.server.translator.ResultSetTranslator;
@@ -475,7 +476,7 @@ public final class CommonClientService extends AbstractClientService implements
         return prepareExportEntities(criteria);
     }
 
-    public String prepareExportGroups(TableExportCriteria<Space> criteria)
+    public String prepareExportGroups(TableExportCriteria<TableModelRowWithObject<Space>> criteria)
     {
         return prepareExportEntities(criteria);
     }
@@ -611,15 +612,12 @@ public final class CommonClientService extends AbstractClientService implements
         }
     }
 
-    public ResultSet<Space> listGroups(DefaultResultSetConfig<String, Space> criteria)
+    public TypedTableResultSet<Space> listGroups(DefaultResultSetConfig<String, TableModelRowWithObject<Space>> criteria)
     {
-        return listEntities(criteria, new AbstractOriginalDataProviderWithoutHeaders<Space>()
-            {
-                public List<Space> getOriginalData() throws UserFailureException
-                {
-                    return listGroups();
-                }
-            });
+        SpacesProvider spacesProvider = new SpacesProvider(commonServer, getSessionToken());
+        DataProviderAdapter<Space> dataProvider = new DataProviderAdapter<Space>(spacesProvider);
+        ResultSet<TableModelRowWithObject<Space>> resultSet = listEntities(criteria, dataProvider);
+        return new TypedTableResultSet<Space>(resultSet);
     }
 
     public ResultSet<Script> listScripts(DefaultResultSetConfig<String, Script> criteria)
@@ -647,21 +645,6 @@ public final class CommonClientService extends AbstractClientService implements
         }
     }
 
-    private List<Space> listGroups()
-            throws ch.systemsx.cisd.openbis.generic.client.web.client.exception.UserFailureException
-    {
-        try
-        {
-            final String sessionToken = getSessionToken();
-            final DatabaseInstanceIdentifier identifier = new DatabaseInstanceIdentifier(null);
-            final List<Space> groups = commonServer.listSpaces(sessionToken, identifier);
-            return groups;
-        } catch (final UserFailureException e)
-        {
-            throw UserFailureExceptionTranslator.translate(e);
-        }
-    }
-
     public List<AuthorizationGroup> listAuthorizationGroups()
             throws ch.systemsx.cisd.openbis.generic.client.web.client.exception.UserFailureException
     {
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/resultset/SpacesProvider.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/resultset/SpacesProvider.java
new file mode 100644
index 0000000000000000000000000000000000000000..ab687ebda08ffb4d719028b0eb676101c5e0f840
--- /dev/null
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/resultset/SpacesProvider.java
@@ -0,0 +1,65 @@
+/*
+ * 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.server.resultset;
+
+import static ch.systemsx.cisd.openbis.generic.client.web.client.dto.SpaceGridColumnIDs.CODE;
+import static ch.systemsx.cisd.openbis.generic.client.web.client.dto.SpaceGridColumnIDs.DESCRIPTION;
+import static ch.systemsx.cisd.openbis.generic.client.web.client.dto.SpaceGridColumnIDs.REGISTRATION_DATE;
+import static ch.systemsx.cisd.openbis.generic.client.web.client.dto.SpaceGridColumnIDs.REGISTRATOR;
+
+import java.util.List;
+
+import ch.systemsx.cisd.openbis.generic.shared.ICommonServer;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Space;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.TypedTableModel;
+import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.DatabaseInstanceIdentifier;
+import ch.systemsx.cisd.openbis.generic.shared.util.TypedTableModelBuilder;
+
+/**
+ * 
+ *
+ * @author Franz-Josef Elmer
+ */
+public class SpacesProvider extends AbstractCommonTableModelProvider<Space>
+{
+    public SpacesProvider(ICommonServer commonServer, String sessionToken)
+    {
+        super(commonServer, sessionToken);
+    }
+
+    @Override
+    protected TypedTableModel<Space> createTableModel()
+    {
+        DatabaseInstanceIdentifier identifier = new DatabaseInstanceIdentifier(null);
+        List<Space> spaces = commonServer.listSpaces(sessionToken, identifier);
+        TypedTableModelBuilder<Space> builder = new TypedTableModelBuilder<Space>();
+        builder.addColumn(CODE);
+        builder.addColumn(DESCRIPTION).withDefaultWidth(200);
+        builder.addColumn(REGISTRATOR).withDefaultWidth(200);
+        builder.addColumn(REGISTRATION_DATE).withDefaultWidth(300).hideByDefault();
+        for (Space space : spaces)
+        {
+            builder.addRow(space);
+            builder.column(CODE).addString(space.getCode());
+            builder.column(DESCRIPTION).addString(space.getDescription());
+            builder.column(REGISTRATOR).addPerson(space.getRegistrator());
+            builder.column(REGISTRATION_DATE).addDate(space.getRegistrationDate());
+        }
+        return builder.getModel();
+    }
+
+}
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/resultset/VocabularyTermsProvider.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/resultset/VocabularyTermsProvider.java
index 10e0b83cb2e8720a70b422486bf0ae35541d9678..fac647a6ce7d0ccb0584755ece42f81d423e55c0 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/resultset/VocabularyTermsProvider.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/resultset/VocabularyTermsProvider.java
@@ -32,7 +32,6 @@ import static ch.systemsx.cisd.openbis.generic.shared.basic.dto.VocabularyTermGr
 import java.util.List;
 
 import ch.systemsx.cisd.openbis.generic.shared.ICommonServer;
-import ch.systemsx.cisd.openbis.generic.shared.basic.SimplePersonRenderer;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityKind;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.TypedTableModel;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Vocabulary;
@@ -85,7 +84,7 @@ public class VocabularyTermsProvider extends AbstractCommonTableModelProvider<Vo
             builder.column(DESCRIPTION).addString(term.getDescription());
             builder.column(ORDINAL).addInteger(term.getOrdinal());
             builder.column(URL).addString(term.getUrl());
-            builder.column(REGISTRATOR).addString(SimplePersonRenderer.createPersonName(term.getRegistrator()).toString());
+            builder.column(REGISTRATOR).addPerson(term.getRegistrator());
             builder.column(REGISTRATION_DATE).addDate(term.getRegistrationDate());
             builder.column(TERM_TOTAL_USAGE).addInteger((long) termWithStats.getTotalUsageCounter());
             builder.column(TERM_FOR_DATA_SET_USAGE).addInteger(termWithStats.getUsageCounter(EntityKind.DATA_SET));
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/PersonTableCell.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/PersonTableCell.java
new file mode 100644
index 0000000000000000000000000000000000000000..cd7b07f89d0b737b1d4769190af78fc2fcc0ce8f
--- /dev/null
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/PersonTableCell.java
@@ -0,0 +1,53 @@
+/*
+ * 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.shared.basic.dto;
+
+/**
+ * 
+ *
+ * @author Franz-Josef Elmer
+ */
+public class PersonTableCell implements ISerializableComparable
+{
+    private static final long serialVersionUID = ServiceVersionHolder.VERSION;
+    
+    private Person person;
+    
+    public PersonTableCell(Person person)
+    {
+        this.person = person;
+    }
+    
+    public Person getPerson()
+    {
+        return person;
+    }
+
+    public int compareTo(ISerializableComparable o)
+    {
+        // TODO Auto-generated method stub
+        return 0;
+    }
+
+    // ---------------------------
+
+    // GWT only
+    @SuppressWarnings("unused")
+    private PersonTableCell()
+    {
+    }
+}
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/util/IColumn.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/util/IColumn.java
index 9a68c4ffd2ad1418b430f620498f27d4119ffdb8..041f422920db662e260f94699e18a132e54f48fb 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/util/IColumn.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/util/IColumn.java
@@ -20,6 +20,7 @@ import java.util.Date;
 
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataTypeCode;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ISerializableComparable;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Person;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.TypedTableModel;
 
 /**
@@ -68,4 +69,9 @@ public interface IColumn
      * Adds a date value to the column.
      */
     public void addDate(Date valueOrNull);
+    
+    /**
+     * Adds a person to the column as a string.
+     */
+    public void addPerson(Person personOrNull);
 }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/util/TypedTableModelBuilder.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/util/TypedTableModelBuilder.java
index 62f3b5729deb70f04c85cb82f8bcd340a0d30498..991742c7e3b4baf1660216e2b94659a62f5bdc6b 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/util/TypedTableModelBuilder.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/util/TypedTableModelBuilder.java
@@ -32,12 +32,14 @@ import org.apache.commons.lang.StringUtils;
 
 import com.google.gwt.user.client.rpc.IsSerializable;
 
+import ch.systemsx.cisd.openbis.generic.shared.basic.SimplePersonRenderer;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataTypeCode;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DateTableCell;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DoubleTableCell;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.IEntityProperty;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ISerializableComparable;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.IntegerTableCell;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Person;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.PropertyType;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.StringTableCell;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.TableModelColumnHeader;
@@ -236,6 +238,11 @@ public class TypedTableModelBuilder<T extends IsSerializable>
         {
             header.setDataType(DataTypeUtils.getCompatibleDataType(header.getDataType(), dataType));
         }
+
+        public void addPerson(Person personOrNull)
+        {
+            addString(SimplePersonRenderer.createPersonName(personOrNull).toString());
+        }
     }
     
     private final Map<String, Column> columns = new HashMap<String, Column>();
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/amc/CheckGroupTable.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/amc/CheckGroupTable.java
index a32e781e4a5d014d21bb446b8f034bae420eb873..e2d28f1566ffcd647b7ecdb64878d2678233fd50 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/amc/CheckGroupTable.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/amc/CheckGroupTable.java
@@ -16,7 +16,7 @@
 
 package ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.amc;
 
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.GroupGrid;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.SpaceGrid;
 import ch.systemsx.cisd.openbis.generic.client.web.client.testframework.AbstractDefaultTestCommand;
 import ch.systemsx.cisd.openbis.generic.client.web.client.testframework.CheckTableCommand;
 
@@ -29,7 +29,7 @@ public class CheckGroupTable extends CheckTableCommand
 {
     public CheckGroupTable()
     {
-        super(GroupGrid.GRID_ID);
+        super(SpaceGrid.GRID_ID);
     }
 
 }
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/amc/CreateGroup.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/amc/CreateGroup.java
index b2cc3bde11761b6b94bd64962122dd1ebd00898d..bc987a8cd1422d011792908e98e3f5f3366381e7 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/amc/CreateGroup.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/amc/CreateGroup.java
@@ -17,7 +17,7 @@
 package ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.amc;
 
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.framework.MainTabPanel;
-import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.GroupGrid;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.SpaceGrid;
 import ch.systemsx.cisd.openbis.generic.client.web.client.testframework.AbstractDefaultTestCommand;
 import ch.systemsx.cisd.openbis.generic.client.web.client.testframework.CheckTableCommand;
 import ch.systemsx.cisd.openbis.generic.client.web.client.testframework.GWTTestUtil;
@@ -33,7 +33,7 @@ public final class CreateGroup extends CheckTableCommand
 
     public CreateGroup(final String groupCode)
     {
-        super(GroupGrid.GRID_ID);
+        super(SpaceGrid.GRID_ID);
         this.groupCode = groupCode;
     }
 
@@ -44,9 +44,9 @@ public final class CreateGroup extends CheckTableCommand
     @Override
     public final void execute()
     {
-        GWTTestUtil.selectTabItemWithId(MainTabPanel.ID, GroupGrid.BROWSER_ID
+        GWTTestUtil.selectTabItemWithId(MainTabPanel.ID, SpaceGrid.BROWSER_ID
                 + MainTabPanel.TAB_SUFFIX);
-        GWTTestUtil.clickButtonWithID(GroupGrid.ADD_BUTTON_ID);
+        GWTTestUtil.clickButtonWithID(SpaceGrid.ADD_BUTTON_ID);
         GWTTestUtil.getTextFieldWithID(AddGroupDialog.CODE_FIELD_ID).setValue(groupCode);
         GWTTestUtil.clickButtonWithID(AddGroupDialog.SAVE_BUTTON_ID);
     }