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 f14dd347b31e3e89e56b6b57ce0b2a3a7fa65eab..b24e5b9b36692c06d6d6d0ef0a9a8450a6322ee9 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
@@ -19,6 +19,7 @@ package ch.systemsx.cisd.openbis.generic.client.web.client.application;
 import ch.systemsx.cisd.openbis.generic.client.web.client.dto.ApplicationInfo;
 import ch.systemsx.cisd.openbis.generic.client.web.client.dto.SessionContext;
 import ch.systemsx.cisd.openbis.generic.shared.basic.ViewMode;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Person;
 
 /**
  * The view model.
@@ -89,4 +90,9 @@ public class GenericViewModel
     {
         return anonymousAllowed;
     }
+
+    public Person getLoggedInPerson()
+    {
+        return sessionContext.getUser().getUserPersonObject();
+    }
 }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/model/BaseEntityModel.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/model/BaseEntityModel.java
index 345e33857da5e9ad542febf37d4a8f0f3c387418..4a200731731151a08c8eabfc523230eea2464697 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/model/BaseEntityModel.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/model/BaseEntityModel.java
@@ -16,8 +16,10 @@
 
 package ch.systemsx.cisd.openbis.generic.client.web.client.application.model;
 
+import java.util.HashSet;
 import java.util.List;
 import java.util.Map.Entry;
+import java.util.Set;
 
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.columns.framework.IColumnDefinitionUI;
 import ch.systemsx.cisd.openbis.generic.shared.basic.GridRowModel;
@@ -35,6 +37,10 @@ public class BaseEntityModel<T> extends SimplifiedBaseModelData
 {
     private static final long serialVersionUID = 1L;
 
+    private boolean outdated = false;
+
+    private final Set<String> outdatable = new HashSet<String>();
+
     /** NOTE: it's assumed that columnDefinitions do not contain custom columns */
     public BaseEntityModel(final GridRowModel<T> entity,
             List<? extends IColumnDefinition<T>> columnDefinitions)
@@ -49,6 +55,10 @@ public class BaseEntityModel<T> extends SimplifiedBaseModelData
             {
                 set(ModelDataPropertyNames.link(column.getIdentifier()),
                         ((IColumnDefinitionUI<T>) column).tryGetLink(entity.getOriginalObject()));
+                if (((IColumnDefinitionUI<?>) column).isDynamicProperty())
+                {
+                    outdatable.add(column.getIdentifier());
+                }
             }
         }
         addCustomColumns(entity);
@@ -59,6 +69,7 @@ public class BaseEntityModel<T> extends SimplifiedBaseModelData
         for (Entry<String, PrimitiveValue> entry : model.getCalculatedColumnValues().entrySet())
         {
             set(entry.getKey(), entry.getValue());
+            outdatable.add(entry.getKey());
         }
     }
 
@@ -72,4 +83,18 @@ public class BaseEntityModel<T> extends SimplifiedBaseModelData
         return get(ModelDataPropertyNames.link(columnId));
     }
 
+    public boolean isOutdated()
+    {
+        return outdated;
+    }
+
+    public void setOutdated(boolean outdated)
+    {
+        this.outdated = outdated;
+    }
+
+    public boolean isOutdatable(String columnName)
+    {
+        return outdatable.contains(columnName);
+    }
 }
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 f64962e97c902cdcaeebf57af0a475b61ff224fe..914c3a37cc0155a2c569adb52a7b6557c92defc1 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
@@ -82,10 +82,17 @@ public final class PersonRenderer
                             ColumnData config, int rowIndex, int colIndex,
                             ListStore<BaseEntityModel<?>> store, Grid<BaseEntityModel<?>> grid)
                     {
-                        Person registrator =
-                                ((TableModelRowWithObject<IRegistratorAndModifierHolder>) model
-                                        .getBaseObject()).getObjectOrNull().getModifier();
-                        return PersonRenderer.createPersonAnchor(registrator);
+                        Person modifier = null;
+                        if (model.get(property) != null && model.get(property) instanceof Person)
+                        {
+                            modifier = model.get(property);
+                        } else
+                        {
+                            modifier =
+                                    ((TableModelRowWithObject<IRegistratorAndModifierHolder>) model
+                                            .getBaseObject()).getObjectOrNull().getModifier();
+                        }
+                        return PersonRenderer.createPersonAnchor(modifier);
                     }
                 };
 
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/TypedTableGrid.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/TypedTableGrid.java
index a9edbc747c3842adac479ed35e1614ad37646fb9..c4ea1a2fdc7fee89dddccb0459dd387c41e8ab44 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/TypedTableGrid.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/TypedTableGrid.java
@@ -19,6 +19,7 @@ package ch.systemsx.cisd.openbis.generic.client.web.client.application.ui;
 import java.io.Serializable;
 import java.util.ArrayList;
 import java.util.Collections;
+import java.util.Date;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.LinkedHashMap;
@@ -132,6 +133,7 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.IDele
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.IMessageProvider;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.WindowUtils;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.lang.StringEscapeUtils;
+import ch.systemsx.cisd.openbis.generic.client.web.client.dto.CommonGridColumnIDs;
 import ch.systemsx.cisd.openbis.generic.client.web.client.dto.Constants;
 import ch.systemsx.cisd.openbis.generic.client.web.client.dto.DefaultResultSetConfig;
 import ch.systemsx.cisd.openbis.generic.client.web.client.dto.EntityPropertyUpdatesResult;
@@ -149,12 +151,14 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.GridRowModel;
 import ch.systemsx.cisd.openbis.generic.shared.basic.IColumnDefinition;
 import ch.systemsx.cisd.openbis.generic.shared.basic.IEntityInformationHolder;
 import ch.systemsx.cisd.openbis.generic.shared.basic.IEntityInformationHolderWithPermId;
+import ch.systemsx.cisd.openbis.generic.shared.basic.SimpleDateRenderer;
 import ch.systemsx.cisd.openbis.generic.shared.basic.URLMethodWithParameters;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.BasicEntityDescription;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.BasicEntityType;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ColumnSetting;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataTypeCode;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DatabaseModificationKind;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DateTableCell;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityKind;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityTableCell;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.IEntityPropertiesHolder;
@@ -2398,7 +2402,7 @@ public abstract class TypedTableGrid<T extends Serializable> extends LayoutConta
                         }
                         if (isApplyModificationsComplete())
                         {
-                            onApplyModificationsComplete();
+                            onApplyModificationsComplete(model);
                         }
                     }
 
@@ -2409,7 +2413,7 @@ public abstract class TypedTableGrid<T extends Serializable> extends LayoutConta
                         handleError(caught.getMessage());
                         if (isApplyModificationsComplete())
                         {
-                            onApplyModificationsComplete();
+                            onApplyModificationsComplete(model);
                         }
                     }
 
@@ -2427,7 +2431,7 @@ public abstract class TypedTableGrid<T extends Serializable> extends LayoutConta
             return finishedModifications == modificationsByModel.size();
         }
 
-        private void onApplyModificationsComplete()
+        private void onApplyModificationsComplete(BaseEntityModel<TableModelRowWithObject<T>> model)
         {
             if (failedModifications.size() > 0)
             {
@@ -2440,6 +2444,10 @@ public abstract class TypedTableGrid<T extends Serializable> extends LayoutConta
             } else
             {
                 GWTUtils.displayInfo("All modifications successfully applied.");
+                model.setOutdated(true);
+                model.set(CommonGridColumnIDs.MODIFIER, viewContext.getModel().getLoggedInPerson());
+                model.set(CommonGridColumnIDs.MODIFICATION_DATE, SimpleDateRenderer
+                        .renderDate((new DateTableCell(new Date())).getDateTime()));
                 grid.getStore().commitChanges(); // no need to refresh - everything should be valid
             }
             clearModifications();
@@ -2501,7 +2509,6 @@ public abstract class TypedTableGrid<T extends Serializable> extends LayoutConta
                     }
                 }));
         }
-
     }
 
     /**
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/TypedTableGridColumnDefinitionUI.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/TypedTableGridColumnDefinitionUI.java
index 66e82c3f779d7b965013e39f669b76ccc6c1fa2b..f8fd602772511b60be2873fc028bbbc45b098220 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/TypedTableGridColumnDefinitionUI.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/TypedTableGridColumnDefinitionUI.java
@@ -79,6 +79,12 @@ public class TypedTableGridColumnDefinitionUI<T extends Serializable> extends
         return header.isEditable();
     }
 
+    @Override
+    public boolean isDynamicProperty()
+    {
+        return header.isDynamicProperty();
+    }
+
     public boolean isLink()
     {
         return false;
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/columns/framework/IColumnDefinitionUI.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/columns/framework/IColumnDefinitionUI.java
index e9d5a12e208524e6915966a5e78ccc84c2ae83dd..c7363fc91665d1199ab442be45cb557c4eab7048 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/columns/framework/IColumnDefinitionUI.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/columns/framework/IColumnDefinitionUI.java
@@ -37,4 +37,9 @@ public interface IColumnDefinitionUI<T> extends IColumnDefinition<T>
     Vocabulary tryGetVocabulary();
 
     String tryGetLink(T entity);
+
+    /**
+     * Returns <code>true</code> if the column cell is a dynamic property
+     */
+    boolean isDynamicProperty();
 }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/columns/specific/GridCustomColumnDefinition.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/columns/specific/GridCustomColumnDefinition.java
index b72a7ea05fc990eae1c695cdaba8a34489146512..51fbc2fdbee74f0423456ed99bdf8d2d51dd40fd 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/columns/specific/GridCustomColumnDefinition.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/columns/specific/GridCustomColumnDefinition.java
@@ -74,6 +74,12 @@ public class GridCustomColumnDefinition<T> implements IColumnDefinitionUI<T>
         return false;
     }
 
+    @Override
+    public boolean isDynamicProperty()
+    {
+        return false;
+    }
+
     public boolean isLink()
     {
         return false;
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 3fd598a4a79ed1305764837221a20836015d5bab..ee03c2f7d1f985e7ada2c69ba1fb1891fb281c63 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
@@ -48,6 +48,7 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid.en
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.listener.OpenEntityDetailsTabHelper;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.IDelegatedActionWithResult;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.TextToolItem;
+import ch.systemsx.cisd.openbis.generic.client.web.client.dto.CommonGridColumnIDs;
 import ch.systemsx.cisd.openbis.generic.client.web.client.dto.DisplayedOrSelectedDatasetCriteria;
 import ch.systemsx.cisd.openbis.generic.client.web.client.dto.ExternalDataGridColumnIDs;
 import ch.systemsx.cisd.openbis.generic.client.web.client.dto.TableExportCriteria;
@@ -287,7 +288,7 @@ public abstract class AbstractExternalDataGrid extends AbstractEntityGrid<Extern
                 super.createColumnsDefinition();
         schema.setGridCellRendererFor(ExternalDataGridColumnIDs.REGISTRATOR,
                 PersonRenderer.REGISTRATOR_RENDERER);
-        schema.setGridCellRendererFor(ExternalDataGridColumnIDs.MODIFIER,
+        schema.setGridCellRendererFor(CommonGridColumnIDs.MODIFIER,
                 PersonRenderer.MODIFIER_RENDERER);
         schema.setGridCellRendererFor(ExternalDataGridColumnIDs.SHOW_DETAILS_LINK,
                 createShowDetailsLinkCellRenderer());
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 dd22513cf05a70d9131da6be4867e5388a4c394c..187f3451d0ebb82298ab30c91600c45427a583b3 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
@@ -55,6 +55,7 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.IDele
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.IDelegatedActionWithResult;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.IMessageProvider;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.TextToolItem;
+import ch.systemsx.cisd.openbis.generic.client.web.client.dto.CommonGridColumnIDs;
 import ch.systemsx.cisd.openbis.generic.client.web.client.dto.DefaultResultSetConfig;
 import ch.systemsx.cisd.openbis.generic.client.web.client.dto.ExperimentBrowserGridColumnIDs;
 import ch.systemsx.cisd.openbis.generic.client.web.client.dto.ListExperimentsCriteria;
@@ -336,7 +337,7 @@ public class ExperimentBrowserGrid extends AbstractEntityGrid<Experiment>
                 super.createColumnsDefinition();
         schema.setGridCellRendererFor(ExperimentBrowserGridColumnIDs.REGISTRATOR,
                 PersonRenderer.REGISTRATOR_RENDERER);
-        schema.setGridCellRendererFor(ExperimentBrowserGridColumnIDs.MODIFIER,
+        schema.setGridCellRendererFor(CommonGridColumnIDs.MODIFIER,
                 PersonRenderer.MODIFIER_RENDERER);
         schema.setGridCellRendererFor(ExperimentBrowserGridColumnIDs.SHOW_DETAILS_LINK,
                 createShowDetailsLinkCellRenderer());
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/grid/ExtendedGridView.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/grid/ExtendedGridView.java
index 3588cbc6fa41ea2b76fe7b8d1bcd167ed60ec590..3b097fe1141c89ef590587d3394161fb405f84f0 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/grid/ExtendedGridView.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/grid/ExtendedGridView.java
@@ -3,16 +3,27 @@ package ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.grid;
 import java.util.ArrayList;
 import java.util.List;
 
+import com.extjs.gxt.ui.client.GXT;
+import com.extjs.gxt.ui.client.core.XDOM;
 import com.extjs.gxt.ui.client.data.ModelData;
 import com.extjs.gxt.ui.client.event.ComponentEvent;
 import com.extjs.gxt.ui.client.event.GridEvent;
+import com.extjs.gxt.ui.client.store.Record;
+import com.extjs.gxt.ui.client.widget.grid.CheckBoxSelectionModel;
+import com.extjs.gxt.ui.client.widget.grid.ColumnConfig;
+import com.extjs.gxt.ui.client.widget.grid.ColumnData;
 import com.extjs.gxt.ui.client.widget.grid.ColumnHeader;
 import com.extjs.gxt.ui.client.widget.grid.Grid;
 import com.extjs.gxt.ui.client.widget.grid.GridView;
+import com.extjs.gxt.ui.client.widget.grid.RowExpander;
+import com.extjs.gxt.ui.client.widget.grid.RowNumberer;
 import com.extjs.gxt.ui.client.widget.menu.Menu;
 import com.google.gwt.dom.client.Node;
 import com.google.gwt.dom.client.NodeList;
 import com.google.gwt.user.client.Element;
+import com.google.gwt.user.client.ui.Widget;
+
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.model.BaseEntityModel;
 
 /**
  * {@link GridView} with {@link ColumnHeader} allowing to define additional behavior for header
@@ -152,4 +163,160 @@ public class ExtendedGridView extends GridView
         return headerCellIndex;
     }
 
+    @Override
+    // WORKAROUND extended rendering of the cells to include information about potentially outdated
+    // values (see SP-198). Basically the method was copied from super class ant only part
+    // responsible for rendering outdated cells was added.
+    protected String doRender(List<ColumnData> cs, List<ModelData> rows, int startRow,
+            int colCount, boolean stripe)
+    {
+        int last = colCount - 1;
+        String tstyle = "width:" + getTotalWidth() + "px;";
+
+        StringBuilder buf = new StringBuilder();
+
+        for (int j = 0; j < rows.size(); j++)
+        {
+            @SuppressWarnings("cast")
+            ModelData model = (ModelData) rows.get(j);
+
+            model = prepareData(model);
+
+            Record r = ds.hasRecord(model) ? ds.getRecord(model) : null;
+
+            int rowBodyColSpanCount = colCount;
+            if (enableRowBody)
+            {
+                if (grid.getSelectionModel() instanceof CheckBoxSelectionModel<?>)
+                {
+                    CheckBoxSelectionModel<?> sm =
+                            (CheckBoxSelectionModel<?>) grid.getSelectionModel();
+                    if (cm.getColumnById(sm.getColumn().getId()) != null)
+                    {
+                        rowBodyColSpanCount--;
+                    }
+                }
+                for (ColumnConfig c : cm.getColumns())
+                {
+                    if (c instanceof RowExpander || c instanceof RowNumberer)
+                    {
+                        rowBodyColSpanCount--;
+                    }
+                }
+            }
+            int rowIndex = (j + startRow);
+
+            if (GXT.isAriaEnabled())
+            {
+                buf.append("<div role=\"row\" aria-level=\"2\" class=\"x-grid3-row ");
+            } else
+            {
+                buf.append("<div class=\"x-grid3-row ");
+            }
+
+            if (stripe && ((rowIndex + 1) % 2 == 0))
+            {
+                buf.append(" x-grid3-row-alt");
+            }
+            if (!selectable)
+            {
+                buf.append(" x-unselectable-single");
+            }
+
+            if (super.isShowDirtyCells() && r != null && r.isDirty())
+            {
+                buf.append(" x-grid3-dirty-row");
+            }
+            if (viewConfig != null)
+            {
+                buf.append(" ");
+                buf.append(viewConfig.getRowStyle(model, rowIndex, ds));
+            }
+            buf.append("\" style=\"");
+            buf.append(tstyle);
+            buf.append("\" id=\"");
+            buf.append(grid.getId());
+            buf.append("_");
+            buf.append(ds.getKeyProvider() != null ? ds.getKeyProvider().getKey(model) : XDOM
+                    .getUniqueId());
+            buf.append("\" unselectable=\"");
+            buf.append(selectable ? "off" : "on");
+            buf.append("\"><table class=x-grid3-row-table role=presentation border=0 cellspacing=0 cellpadding=0 style=\"");
+
+            buf.append(tstyle);
+            buf.append("\"><tbody role=presentation><tr role=presentation>");
+            widgetList.add(rowIndex, new ArrayList<Widget>());
+            for (int i = 0; i < colCount; i++)
+            {
+                ColumnData c = cs.get(i);
+                c.css = c.css == null ? "" : c.css;
+                String rv = getRenderedValue(c, rowIndex, i, model, c.name);
+                String role = "gridcell";
+                if (GXT.isAriaEnabled())
+                {
+                    ColumnConfig cc = cm.getColumn(i);
+                    if (cc.isRowHeader())
+                    {
+                        role = "rowheader";
+                    }
+                }
+
+                String attr = c.cellAttr != null ? c.cellAttr : "";
+                String cellAttr = c.cellAttr != null ? c.cellAttr : "";
+
+                buf.append("<td id=\"" + XDOM.getUniqueId() + "\" role=\"" + role
+                        + "\" class=\"x-grid3-col x-grid3-cell x-grid3-td-");
+                buf.append(c.id);
+                buf.append(" ");
+                buf.append(i == 0 ? "x-grid-cell-first " : (i == last ? "x-grid3-cell-last " : ""));
+                if (c.css != null)
+                {
+                    buf.append(c.css);
+                }
+                if (super.isShowInvalidCells() && r != null && !r.isValid(c.name))
+                {
+                    buf.append(" x-grid3-invalid-cell");
+                }
+                if (super.isShowDirtyCells() && r != null && r.getChanges().containsKey(c.name))
+                {
+                    buf.append(" x-grid3-dirty-cell");
+                } else
+                { // rendiring of the outdated cells
+                    if (model instanceof BaseEntityModel<?>)
+                    {
+                        BaseEntityModel<?> baseEntityModel = (BaseEntityModel<?>) model;
+                        if (baseEntityModel.isOutdated() && baseEntityModel.isOutdatable(c.name))
+                        {
+                            buf.append(" cisd-grid-outdated-cell");
+                        }
+                    } // and of the rendering of the outdated cells
+                }
+
+                buf.append("\" style=\"");
+                buf.append(c.style);
+                buf.append("\" ");
+                buf.append(cellAttr);
+                buf.append("><div unselectable=\"");
+                buf.append(selectable ? "off" : "on");
+                buf.append("\" class=\"x-grid3-cell-inner x-grid3-col-");
+                buf.append(c.id);
+                buf.append("\" ");
+                buf.append(attr);
+                buf.append(">");
+                buf.append(rv);
+                buf.append("</div></td>");
+            }
+
+            buf.append("</tr>");
+            if (enableRowBody)
+            {
+                buf.append("<tr class=x-grid3-row-body-tr style=\"\"><td colspan=");
+                buf.append(rowBodyColSpanCount);
+                buf.append(" class=x-grid3-body-cell><div class=x-grid3-row-body>${body}</div></td></tr>");
+            }
+            buf.append("</tbody></table></div>");
+        }
+
+        return buf.toString();
+    }
 }
\ No newline at end of file
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 bef714863617189d87ec220958da485a1354d6fd..527ae07b3bc239d11964265f2ff9f9cb079fa791 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
@@ -50,6 +50,7 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.columns
 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;
+import ch.systemsx.cisd.openbis.generic.client.web.client.dto.CommonGridColumnIDs;
 import ch.systemsx.cisd.openbis.generic.client.web.client.dto.DefaultResultSetConfig;
 import ch.systemsx.cisd.openbis.generic.client.web.client.dto.ProjectGridColumnIDs;
 import ch.systemsx.cisd.openbis.generic.client.web.client.dto.TableExportCriteria;
@@ -179,7 +180,7 @@ public class ProjectGrid extends TypedTableGrid<Project>
                 createMultilineStringCellRenderer());
         schema.setGridCellRendererFor(ProjectGridColumnIDs.REGISTRATOR,
                 PersonRenderer.REGISTRATOR_RENDERER);
-        schema.setGridCellRendererFor(ProjectGridColumnIDs.MODIFIER,
+        schema.setGridCellRendererFor(CommonGridColumnIDs.MODIFIER,
                 PersonRenderer.MODIFIER_RENDERER);
         return schema;
     }
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 f7ae5b7b2a3de9074efa250bb7a67f67e316e26a..e39848020f230b2462b0f888b23d7a21c25501a4 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
@@ -57,6 +57,7 @@ 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.IDelegatedActionWithResult;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.IDirectlyConnectedController;
+import ch.systemsx.cisd.openbis.generic.client.web.client.dto.CommonGridColumnIDs;
 import ch.systemsx.cisd.openbis.generic.client.web.client.dto.DefaultResultSetConfig;
 import ch.systemsx.cisd.openbis.generic.client.web.client.dto.ListEntityDisplayCriteriaKind;
 import ch.systemsx.cisd.openbis.generic.client.web.client.dto.ListSampleDisplayCriteria;
@@ -433,7 +434,7 @@ public class SampleBrowserGrid extends AbstractEntityGrid<Sample>
                 super.createColumnsDefinition();
         definitions.setGridCellRendererFor(SampleGridColumnIDs.REGISTRATOR,
                 PersonRenderer.REGISTRATOR_RENDERER);
-        definitions.setGridCellRendererFor(SampleGridColumnIDs.MODIFIER,
+        definitions.setGridCellRendererFor(CommonGridColumnIDs.MODIFIER,
                 PersonRenderer.MODIFIER_RENDERER);
         definitions.setGridCellRendererFor(SampleGridColumnIDs.SHOW_DETAILS_LINK_COLUMN_NAME,
                 createShowDetailsLinkCellRenderer());
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/dto/CommonGridColumnIDs.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/dto/CommonGridColumnIDs.java
new file mode 100644
index 0000000000000000000000000000000000000000..2df7936d460e0ee07a234b749f2d5589430fca3b
--- /dev/null
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/dto/CommonGridColumnIDs.java
@@ -0,0 +1,29 @@
+/*
+ * Copyright 2012 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;
+
+/**
+ * IDs of static columns common to many grids
+ * 
+ * @author Pawel Glyzewski
+ */
+public class CommonGridColumnIDs
+{
+    public static final String MODIFIER = "MODIFIER";
+
+    public static final String MODIFICATION_DATE = "MODIFICATION_DATE";
+}
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/dto/ExperimentBrowserGridColumnIDs.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/dto/ExperimentBrowserGridColumnIDs.java
index 3bf00449745cb583bb2f160093066d1a7d3fcc18..74e4bdba1aadf0fc2c48e7fa1569f97ea318ee95 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/dto/ExperimentBrowserGridColumnIDs.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/dto/ExperimentBrowserGridColumnIDs.java
@@ -37,12 +37,8 @@ public class ExperimentBrowserGridColumnIDs
 
     public static final String REGISTRATOR = "REGISTRATOR";
 
-    public static final String MODIFIER = "MODIFIER";
-
     public static final String REGISTRATION_DATE = "REGISTRATION_DATE";
 
-    public static final String MODIFICATION_DATE = "MODIFICATION_DATE";
-
     public static final String IS_DELETED = "IS_DELETED";
 
     public static final String PERM_ID = "PERM_ID";
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/dto/ExternalDataGridColumnIDs.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/dto/ExternalDataGridColumnIDs.java
index 5206beb69407bb6c5730fcc2a8323f1f1f1511da..bc930ba972c3f9da70dadd334314bbd40e89e9a3 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/dto/ExternalDataGridColumnIDs.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/dto/ExternalDataGridColumnIDs.java
@@ -54,12 +54,8 @@ public class ExternalDataGridColumnIDs
 
     public static final String REGISTRATOR = "REGISTRATOR";
 
-    public static final String MODIFIER = "MODIFIER";
-
     public static final String REGISTRATION_DATE = "REGISTRATION_DATE";
 
-    public static final String MODIFICATION_DATE = "MODIFICATION_DATE";
-
     public static final String IS_DELETED = "IS_DELETED";
 
     public static final String SOURCE_TYPE = "SOURCE_TYPE";
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/dto/ProjectGridColumnIDs.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/dto/ProjectGridColumnIDs.java
index 78036df077dd4201c5c87652ca99d386ef04f9bd..c7da1f69fbc55852479be4b2f59757163b33ca2c 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/dto/ProjectGridColumnIDs.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/dto/ProjectGridColumnIDs.java
@@ -34,8 +34,4 @@ public class ProjectGridColumnIDs
     public static final String REGISTRATOR = "REGISTRATOR";
 
     public static final String REGISTRATION_DATE = "REGISTRATION_DATE";
-
-    public static final String MODIFIER = "MODIFIER";
-
-    public static final String MODIFICATION_DATE = "MODIFICATION_DATE";
 }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/dto/SampleGridColumnIDs.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/dto/SampleGridColumnIDs.java
index 20c6ce6aa0d4b9bf8bd8b20fc0a1b20b667e402f..83a763fa5a67d1d0cd42b20fc69c43d844d5a780 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/dto/SampleGridColumnIDs.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/dto/SampleGridColumnIDs.java
@@ -33,12 +33,8 @@ public class SampleGridColumnIDs
 
     public static final String REGISTRATOR = "REGISTRATOR";
 
-    public static final String MODIFIER = "MODIFIER";
-
     public static final String REGISTRATION_DATE = "REGISTRATION_DATE";
 
-    public static final String MODIFICATION_DATE = "MODIFICATION_DATE";
-
     public static final String SAMPLE_TYPE = "SAMPLE_TYPE";
 
     public static final String DATABASE_INSTANCE = "DATABASE_INSTANCE";
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/dto/User.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/dto/User.java
index 392d5d2e3d7eeb7325e6db01906e21e274a04b9e..7110c697c5d496ef04cfca4536423093f67d16cb 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/dto/User.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/dto/User.java
@@ -18,6 +18,8 @@ package ch.systemsx.cisd.openbis.generic.client.web.client.dto;
 
 import com.google.gwt.user.client.rpc.IsSerializable;
 
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Person;
+
 /**
  * User information to be shown in Web client.
  * 
@@ -31,15 +33,19 @@ public final class User implements IsSerializable
 
     private String userEmail;
 
+    private Person userPersonObject;
+
     public User()
     {
     }
 
-    public User(String userName, String homeGroupCodeOrNull, String userEmail)
+    public User(String userName, String homeGroupCodeOrNull, String userEmail,
+            Person userPersonObject)
     {
         this.userName = userName;
         this.homeGroupCode = homeGroupCodeOrNull;
         this.userEmail = userEmail;
+        this.userPersonObject = userPersonObject;
     }
 
     /** can be null */
@@ -73,4 +79,13 @@ public final class User implements IsSerializable
         return userEmail;
     }
 
+    public Person getUserPersonObject()
+    {
+        return userPersonObject;
+    }
+
+    public void setUserPersonObject(Person userPersonObject)
+    {
+        this.userPersonObject = userPersonObject;
+    }
 }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/AbstractClientService.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/AbstractClientService.java
index a4425988bf0451c51e8be6242ab58de91cb8cdc1..e8b1e22a66253297c7f5c9c9acf911767c40453d 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/AbstractClientService.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/AbstractClientService.java
@@ -312,6 +312,7 @@ public abstract class AbstractClientService implements IClientService,
         user.setUserName(session.getUserName());
         user.setHomeGroupCode(session.tryGetHomeGroupCode());
         user.setUserEmail(session.getUserEmail());
+        user.setUserPersonObject(session.getUserPersonObject());
         sessionContext.setUser(user);
         sessionContext.setAnonymous(session.isAnonymous());
 
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/resultset/AbstractExternalDataProvider.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/resultset/AbstractExternalDataProvider.java
index 7b102894603c41d26919ac69bfae3bc5919d1dfb..d2953c0945db0cb8d96282740556812aaf92284e 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/resultset/AbstractExternalDataProvider.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/resultset/AbstractExternalDataProvider.java
@@ -16,6 +16,8 @@
 
 package ch.systemsx.cisd.openbis.generic.client.web.server.resultset;
 
+import static ch.systemsx.cisd.openbis.generic.client.web.client.dto.CommonGridColumnIDs.MODIFICATION_DATE;
+import static ch.systemsx.cisd.openbis.generic.client.web.client.dto.CommonGridColumnIDs.MODIFIER;
 import static ch.systemsx.cisd.openbis.generic.client.web.client.dto.ExternalDataGridColumnIDs.ARCHIVING_STATUS;
 import static ch.systemsx.cisd.openbis.generic.client.web.client.dto.ExternalDataGridColumnIDs.CODE;
 import static ch.systemsx.cisd.openbis.generic.client.web.client.dto.ExternalDataGridColumnIDs.CONTAINER_DATASET;
@@ -33,8 +35,6 @@ import static ch.systemsx.cisd.openbis.generic.client.web.client.dto.ExternalDat
 import static ch.systemsx.cisd.openbis.generic.client.web.client.dto.ExternalDataGridColumnIDs.IS_COMPLETE;
 import static ch.systemsx.cisd.openbis.generic.client.web.client.dto.ExternalDataGridColumnIDs.IS_DELETED;
 import static ch.systemsx.cisd.openbis.generic.client.web.client.dto.ExternalDataGridColumnIDs.LOCATION;
-import static ch.systemsx.cisd.openbis.generic.client.web.client.dto.ExternalDataGridColumnIDs.MODIFICATION_DATE;
-import static ch.systemsx.cisd.openbis.generic.client.web.client.dto.ExternalDataGridColumnIDs.MODIFIER;
 import static ch.systemsx.cisd.openbis.generic.client.web.client.dto.ExternalDataGridColumnIDs.ORDER_IN_CONTAINER;
 import static ch.systemsx.cisd.openbis.generic.client.web.client.dto.ExternalDataGridColumnIDs.PARENT_DATASETS;
 import static ch.systemsx.cisd.openbis.generic.client.web.client.dto.ExternalDataGridColumnIDs.PERM_ID;
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/resultset/AbstractMaterialProvider.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/resultset/AbstractMaterialProvider.java
index c8a227c7c79c54507305cfd0009480e62af52825..ee38b64ac7c46d31e089c0c5cb4896b9b224f309 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/resultset/AbstractMaterialProvider.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/resultset/AbstractMaterialProvider.java
@@ -16,7 +16,7 @@
 
 package ch.systemsx.cisd.openbis.generic.client.web.server.resultset;
 
-import static ch.systemsx.cisd.openbis.generic.client.web.client.dto.ExternalDataGridColumnIDs.MODIFICATION_DATE;
+import static ch.systemsx.cisd.openbis.generic.client.web.client.dto.CommonGridColumnIDs.MODIFICATION_DATE;
 import static ch.systemsx.cisd.openbis.generic.client.web.client.dto.ExternalDataGridColumnIDs.REGISTRATION_DATE;
 import static ch.systemsx.cisd.openbis.generic.client.web.client.dto.ExternalDataGridColumnIDs.REGISTRATOR;
 import static ch.systemsx.cisd.openbis.generic.client.web.client.dto.MaterialGridColumnIDs.CODE;
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/resultset/ExperimentProvider.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/resultset/ExperimentProvider.java
index 0ef7b23977655ca9e0dabba66bcf545975febe7d..d6188e112314d854372a28abe9a9a46d6f40f4c9 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/resultset/ExperimentProvider.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/resultset/ExperimentProvider.java
@@ -16,13 +16,13 @@
 
 package ch.systemsx.cisd.openbis.generic.client.web.server.resultset;
 
+import static ch.systemsx.cisd.openbis.generic.client.web.client.dto.CommonGridColumnIDs.MODIFICATION_DATE;
+import static ch.systemsx.cisd.openbis.generic.client.web.client.dto.CommonGridColumnIDs.MODIFIER;
 import static ch.systemsx.cisd.openbis.generic.client.web.client.dto.ExperimentBrowserGridColumnIDs.CODE;
 import static ch.systemsx.cisd.openbis.generic.client.web.client.dto.ExperimentBrowserGridColumnIDs.DATABASE_INSTANCE;
 import static ch.systemsx.cisd.openbis.generic.client.web.client.dto.ExperimentBrowserGridColumnIDs.EXPERIMENT_IDENTIFIER;
 import static ch.systemsx.cisd.openbis.generic.client.web.client.dto.ExperimentBrowserGridColumnIDs.EXPERIMENT_TYPE;
 import static ch.systemsx.cisd.openbis.generic.client.web.client.dto.ExperimentBrowserGridColumnIDs.IS_DELETED;
-import static ch.systemsx.cisd.openbis.generic.client.web.client.dto.ExperimentBrowserGridColumnIDs.MODIFICATION_DATE;
-import static ch.systemsx.cisd.openbis.generic.client.web.client.dto.ExperimentBrowserGridColumnIDs.MODIFIER;
 import static ch.systemsx.cisd.openbis.generic.client.web.client.dto.ExperimentBrowserGridColumnIDs.PERM_ID;
 import static ch.systemsx.cisd.openbis.generic.client.web.client.dto.ExperimentBrowserGridColumnIDs.PROJECT;
 import static ch.systemsx.cisd.openbis.generic.client.web.client.dto.ExperimentBrowserGridColumnIDs.REGISTRATION_DATE;
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/resultset/ProjectsProvider.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/resultset/ProjectsProvider.java
index 2ca04ca35ff1264d60a84fc5bafa24811ef7569b..62d128baaecad75b968b45c0c0b953d1ada239ba 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/resultset/ProjectsProvider.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/resultset/ProjectsProvider.java
@@ -16,10 +16,10 @@
 
 package ch.systemsx.cisd.openbis.generic.client.web.server.resultset;
 
+import static ch.systemsx.cisd.openbis.generic.client.web.client.dto.CommonGridColumnIDs.MODIFICATION_DATE;
+import static ch.systemsx.cisd.openbis.generic.client.web.client.dto.CommonGridColumnIDs.MODIFIER;
 import static ch.systemsx.cisd.openbis.generic.client.web.client.dto.ProjectGridColumnIDs.CODE;
 import static ch.systemsx.cisd.openbis.generic.client.web.client.dto.ProjectGridColumnIDs.DESCRIPTION;
-import static ch.systemsx.cisd.openbis.generic.client.web.client.dto.ProjectGridColumnIDs.MODIFICATION_DATE;
-import static ch.systemsx.cisd.openbis.generic.client.web.client.dto.ProjectGridColumnIDs.MODIFIER;
 import static ch.systemsx.cisd.openbis.generic.client.web.client.dto.ProjectGridColumnIDs.REGISTRATION_DATE;
 import static ch.systemsx.cisd.openbis.generic.client.web.client.dto.ProjectGridColumnIDs.REGISTRATOR;
 import static ch.systemsx.cisd.openbis.generic.client.web.client.dto.ProjectGridColumnIDs.SPACE;
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/resultset/SampleProvider.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/resultset/SampleProvider.java
index c573cd0e5e7e386a1fb28251a8a4f7a015049db2..83db1227003324eca56ef3e55bcebc9628a602c6 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/resultset/SampleProvider.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/resultset/SampleProvider.java
@@ -16,6 +16,8 @@
 
 package ch.systemsx.cisd.openbis.generic.client.web.server.resultset;
 
+import static ch.systemsx.cisd.openbis.generic.client.web.client.dto.CommonGridColumnIDs.MODIFICATION_DATE;
+import static ch.systemsx.cisd.openbis.generic.client.web.client.dto.CommonGridColumnIDs.MODIFIER;
 import static ch.systemsx.cisd.openbis.generic.client.web.client.dto.SampleGridColumnIDs.CODE;
 import static ch.systemsx.cisd.openbis.generic.client.web.client.dto.SampleGridColumnIDs.CONTAINER_SAMPLE;
 import static ch.systemsx.cisd.openbis.generic.client.web.client.dto.SampleGridColumnIDs.DATABASE_INSTANCE;
@@ -23,8 +25,6 @@ import static ch.systemsx.cisd.openbis.generic.client.web.client.dto.SampleGridC
 import static ch.systemsx.cisd.openbis.generic.client.web.client.dto.SampleGridColumnIDs.EXPERIMENT_IDENTIFIER;
 import static ch.systemsx.cisd.openbis.generic.client.web.client.dto.SampleGridColumnIDs.IS_DELETED;
 import static ch.systemsx.cisd.openbis.generic.client.web.client.dto.SampleGridColumnIDs.IS_INSTANCE_SAMPLE;
-import static ch.systemsx.cisd.openbis.generic.client.web.client.dto.SampleGridColumnIDs.MODIFICATION_DATE;
-import static ch.systemsx.cisd.openbis.generic.client.web.client.dto.SampleGridColumnIDs.MODIFIER;
 import static ch.systemsx.cisd.openbis.generic.client.web.client.dto.SampleGridColumnIDs.PARENTS;
 import static ch.systemsx.cisd.openbis.generic.client.web.client.dto.SampleGridColumnIDs.PERM_ID;
 import static ch.systemsx.cisd.openbis.generic.client.web.client.dto.SampleGridColumnIDs.PROJECT;
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/AbstractServer.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/AbstractServer.java
index 089585b2eb33887cf906fa4fe723c25b7e7618fb..69b71647c8493fda5b91c1e91586c78d35cd5b88 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/AbstractServer.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/AbstractServer.java
@@ -85,6 +85,7 @@ import ch.systemsx.cisd.openbis.generic.shared.dto.SimpleSession;
 import ch.systemsx.cisd.openbis.generic.shared.dto.SpacePE;
 import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.SpaceIdentifier;
 import ch.systemsx.cisd.openbis.generic.shared.translator.GridCustomExpressionTranslator.GridCustomColumnTranslator;
+import ch.systemsx.cisd.openbis.generic.shared.translator.PersonTranslator;
 import ch.systemsx.cisd.openbis.generic.shared.util.HibernateUtils;
 import ch.systemsx.cisd.openbis.generic.shared.util.ServerUtils;
 
@@ -627,6 +628,7 @@ public abstract class AbstractServer<T> extends AbstractServiceWithLogger<T> imp
         result.setUserName(session.getUserName());
         result.setUserEmail(session.getUserEmail());
         result.setAnonymous(session.isAnonymous());
+        result.setUserPersonObject(PersonTranslator.translate(person));
         return result;
     }
 
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/common/BaseEntityPropertyRecord.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/common/BaseEntityPropertyRecord.java
index 6367efa1d40784da7e576fe4c37fc637c1412981..2afec55c0499d6619a36041cafaef6b783e3ec28 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/common/BaseEntityPropertyRecord.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/common/BaseEntityPropertyRecord.java
@@ -1,6 +1,5 @@
 package ch.systemsx.cisd.openbis.generic.server.business.bo.common;
 
-
 /**
  * A record object for a sample property.
  */
@@ -9,7 +8,8 @@ public class BaseEntityPropertyRecord
     public long entity_id;
 
     public long prty_id;
-    
+
     public Long script_id;
-    
+
+    public String script_type;
 }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/common/EntityPropertiesEnricher.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/common/EntityPropertiesEnricher.java
index ba827c7ac92efb0005baca88b5b26bbacc0a84a4..f204e421bf455067e2a1e2462bb153de8fee7815 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/common/EntityPropertiesEnricher.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/common/EntityPropertiesEnricher.java
@@ -29,6 +29,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Material;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.MaterialEntityProperty;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.MaterialType;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.PropertyType;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ScriptType;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.VocabularyTerm;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.VocabularyTermEntityProperty;
 
@@ -124,6 +125,7 @@ public final class EntityPropertiesEnricher implements IEntityPropertiesEnricher
             property.setValue(val.value);
             property.setPropertyType(propertyTypes.get(val.prty_id));
             property.setScriptable(val.script_id != null);
+            property.setDynamic(ScriptType.DYNAMIC_PROPERTY.name().equals(val.script_type));
             entity.getProperties().add(property);
         }
 
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/datasetlister/IDatasetListingQuery.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/datasetlister/IDatasetListingQuery.java
index 8ec3ac7b9cc5b5da3d4580d67914022f3249f793..7962debb9ff866301a4e85c38996790b15a89d6b 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/datasetlister/IDatasetListingQuery.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/datasetlister/IDatasetListingQuery.java
@@ -245,9 +245,10 @@ public interface IDatasetListingQuery extends TransactionQuery, IPropertyListing
      * 
      * @param entityIds The set of sample ids to get the property values for.
      */
-    @Select(sql = "SELECT pr.ds_id as entity_id, etpt.prty_id, etpt.script_id, pr.value "
+    @Select(sql = "SELECT pr.ds_id as entity_id, etpt.prty_id, etpt.script_id, pr.value, sc.script_type "
             + "      FROM data_set_properties pr"
             + "      JOIN data_set_type_property_types etpt ON pr.dstpt_id=etpt.id"
+            + "      LEFT OUTER JOIN scripts sc ON etpt.script_id = sc.id"
             + "     WHERE pr.value is not null AND pr.ds_id = any(?{1})", parameterBindings =
         { LongSetMapper.class }, fetchSize = FETCH_SIZE)
     public DataIterator<GenericEntityPropertyRecord> getEntityPropertyGenericValues(
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/materiallister/IMaterialListingQuery.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/materiallister/IMaterialListingQuery.java
index 57875909cc5caa38594e6d69ffa744beb6c5c8bf..f19fc7affe4578a20fb6134b069f7962f77ab754 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/materiallister/IMaterialListingQuery.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/materiallister/IMaterialListingQuery.java
@@ -80,9 +80,10 @@ public interface IMaterialListingQuery extends TransactionQuery, IPropertyListin
      * 
      * @param entityIds The set of material ids to get the property values for.
      */
-    @Select(sql = "SELECT pr.mate_id as entity_id, etpt.prty_id, etpt.script_id, pr.value "
+    @Select(sql = "SELECT pr.mate_id as entity_id, etpt.prty_id, etpt.script_id, pr.value, sc.script_type "
             + "      FROM material_properties pr"
             + "      JOIN material_type_property_types etpt ON pr.mtpt_id=etpt.id"
+            + "      LEFT OUTER JOIN scripts sc ON etpt.script_id = sc.id"
             + "     WHERE pr.value is not null AND pr.mate_id = any(?{1})", parameterBindings =
         { LongSetMapper.class }, fetchSize = FETCH_SIZE)
     public DataIterator<GenericEntityPropertyRecord> getEntityPropertyGenericValues(
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/samplelister/ISampleListingQuery.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/samplelister/ISampleListingQuery.java
index d5530d4e1201bd5bd17b3b037d77a88a1267e59e..109ca510c40990f76a64cb4c7b77aa118c8d4ad4 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/samplelister/ISampleListingQuery.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/samplelister/ISampleListingQuery.java
@@ -388,9 +388,10 @@ public interface ISampleListingQuery extends TransactionQuery, IPropertyListingQ
      * 
      * @param sampleIds The set of sample ids to get the property values for.
      */
-    @Select(sql = "SELECT sp.samp_id as entity_id, stpt.prty_id, stpt.script_id, sp.value "
+    @Select(sql = "SELECT sp.samp_id as entity_id, stpt.prty_id, stpt.script_id, sp.value, sc.script_type "
             + "      FROM sample_properties sp"
             + "      JOIN sample_type_property_types stpt ON sp.stpt_id=stpt.id"
+            + "      LEFT OUTER JOIN scripts sc ON stpt.script_id = sc.id"
             + "     WHERE sp.value is not null AND sp.samp_id = any(?{1})", parameterBindings =
         { LongSetMapper.class }, fetchSize = FETCH_SIZE)
     public DataIterator<GenericEntityPropertyRecord> getEntityPropertyGenericValues(
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/AbstractEntityProperty.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/AbstractEntityProperty.java
index df9eb401234540abc22c1e23e6f2e46eb5ab4d69..fe2d078ffa0caad29910fc9ba365031e70f3c7f4 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/AbstractEntityProperty.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/AbstractEntityProperty.java
@@ -33,9 +33,11 @@ public abstract class AbstractEntityProperty implements IEntityProperty
     private PropertyType propertyType;
 
     private Long ordinal;
-    
+
     private boolean scriptable;
 
+    private boolean dynamic;
+
     @Override
     public PropertyType getPropertyType()
     {
@@ -142,6 +144,17 @@ public abstract class AbstractEntityProperty implements IEntityProperty
         return scriptable;
     }
 
+    @Override
+    public boolean isDynamic()
+    {
+        return dynamic;
+    }
+
+    public void setDynamic(boolean dynamic)
+    {
+        this.dynamic = dynamic;
+    }
+
     //
     // Object
     //
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/IEntityProperty.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/IEntityProperty.java
index 7181b6f59cefa79dc7e1d9b865bc9d1a7cd43433..1e202f4a3e5f3d28069d7753b2cb85b39ba137bb 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/IEntityProperty.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/IEntityProperty.java
@@ -57,6 +57,8 @@ public interface IEntityProperty extends Serializable, Comparable<IEntityPropert
 
     boolean isManaged();
 
+    boolean isDynamic();
+
     boolean isScriptable();
 
 }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/ManagedEntityProperty.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/ManagedEntityProperty.java
index d60220c3da16ec1650f1723bb3ce69a13111047a..214dcc52504e474173bf870de4290d4fd357f61e 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/ManagedEntityProperty.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/ManagedEntityProperty.java
@@ -69,7 +69,7 @@ public class ManagedEntityProperty implements IEntityProperty, IManagedProperty
     {
         return entityProperty.getPropertyType().getCode();
     }
-    
+
     @Override
     public boolean isSpecialValue()
     {
@@ -91,7 +91,13 @@ public class ManagedEntityProperty implements IEntityProperty, IManagedProperty
     {
         return true;
     }
-    
+
+    @Override
+    public boolean isDynamic()
+    {
+        return false;
+    }
+
     //
     // IEntityProperty delegated methods
     //
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/TableModelColumnHeader.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/TableModelColumnHeader.java
index 267cebf5615b367e6efbbf0437035b2f9bb57497..40f4ec170df56023372dd5ed8f53c138adae5abb 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/TableModelColumnHeader.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/TableModelColumnHeader.java
@@ -49,6 +49,8 @@ public class TableModelColumnHeader implements Serializable
 
     private boolean editable;
 
+    private boolean dynamicProperty;
+
     private boolean linkEntitiesOnly;
 
     protected Vocabulary vocabularyOrNull;
@@ -154,6 +156,16 @@ public class TableModelColumnHeader implements Serializable
         return editable;
     }
 
+    public void setDynamicProperty(boolean dynamicProperty)
+    {
+        this.dynamicProperty = dynamicProperty;
+    }
+
+    public boolean isDynamicProperty()
+    {
+        return dynamicProperty;
+    }
+
     public void setLinkEntitiesOnly(boolean linkEntitiesOnly)
     {
         this.linkEntitiesOnly = linkEntitiesOnly;
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/SessionContextDTO.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/SessionContextDTO.java
index 7e052b92ca744a47087daed2741d687637b5b00e..c523ba6d6887e1032e8164fae65abb4fb84ea47e 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/SessionContextDTO.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/SessionContextDTO.java
@@ -20,6 +20,7 @@ import java.io.Serializable;
 
 import ch.systemsx.cisd.openbis.generic.shared.IServer;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DisplaySettings;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Person;
 
 /**
  * An extract from the Session object, used internally on the server side.
@@ -44,6 +45,8 @@ public class SessionContextDTO implements Serializable
 
     private boolean isAnonymous;
 
+    private Person userPersonObject;
+
     public void setSessionToken(String sessionToken)
     {
         this.sessionToken = sessionToken;
@@ -114,4 +117,13 @@ public class SessionContextDTO implements Serializable
         this.isAnonymous = isAnonymous;
     }
 
+    public void setUserPersonObject(Person userPersonObject)
+    {
+        this.userPersonObject = userPersonObject;
+    }
+
+    public Person getUserPersonObject()
+    {
+        return userPersonObject;
+    }
 }
\ No newline at end of file
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/translator/PropertyTranslatorUtils.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/translator/PropertyTranslatorUtils.java
index 9cb238b01a31bec194ba90a18cca60c07b3b4dad..f61cd4d373cbe2a6dc131cddb157a0266c607d5e 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/translator/PropertyTranslatorUtils.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/translator/PropertyTranslatorUtils.java
@@ -68,6 +68,7 @@ final class PropertyTranslatorUtils
         final DataTypeCode typeCode = PropertyTranslatorUtils.getDataTypeCode(propertyPE);
         final AbstractEntityProperty basicProperty = createEntityProperty(typeCode);
         basicProperty.setScriptable(propertyPE.getEntityTypePropertyType().isScriptable());
+        basicProperty.setDynamic(propertyPE.getEntityTypePropertyType().isDynamic());
         return basicProperty;
     }
 
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 64ac5119c5d0e5043b91b8b40d473ae80f767cc3..d2f6966d3d489bd38801808be3dd638d6c5dfa89 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
@@ -59,6 +59,11 @@ public interface IColumn
      */
     public IColumn editable();
 
+    /**
+     * Sets dynamic property flag to <code>true</code>.
+     */
+    public IColumn dynamicProperty();
+
     /**
      * Sets the vocabulary for controlled vocabulary property type
      */
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 f1377d6f15a295780255b414e2d6a544640a0f3a..13b825c2b7fbcdd3b8953e465903ffcca9649024 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
@@ -253,6 +253,7 @@ public class TypedTableModelBuilder<T extends Serializable>
                         value = DataTypeUtils.convertTo(dataType, property.tryGetAsString());
                 }
                 setEditableFlag(column, propertyType);
+                setDynamicFlag(column, property);
                 column.addValue(value);
             }
         }
@@ -269,6 +270,14 @@ public class TypedTableModelBuilder<T extends Serializable>
             }
         }
 
+        private void setDynamicFlag(IColumn column, IEntityProperty property)
+        {
+            if (property.isDynamic())
+            {
+                column.dynamicProperty();
+            }
+        }
+
         private void setVocabulary(IColumn column, Vocabulary vocabularyOrNull)
         {
             column.setVocabulary(vocabularyOrNull);
@@ -341,6 +350,13 @@ public class TypedTableModelBuilder<T extends Serializable>
             return this;
         }
 
+        @Override
+        public IColumn dynamicProperty()
+        {
+            header.setDynamicProperty(true);
+            return this;
+        }
+
         @Override
         public IColumn property(String key, String value)
         {
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/public/css/openbis.css b/openbis/source/java/ch/systemsx/cisd/openbis/public/css/openbis.css
index cdaf17cfa8e0e422f60271bad4b417d4e0d8563a..f46937cd134fa05c483517dee32254aea3a321c7 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/public/css/openbis.css
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/public/css/openbis.css
@@ -314,3 +314,16 @@ body,div,td,.default-text {
 .linkDataViewLabel {
 	margin-right: 5px;	
 }
+
+/*************************
+ * Outdated grid cells
+ *************************/
+
+.cisd-grid-outdated-cell {
+  background: transparent no-repeat 0 0;
+  color: gray;
+}
+
+.cisd-grid-outdated-cell {
+  background-image: url(../images/outdated.gif);
+}
\ No newline at end of file
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/public/images/outdated.gif b/openbis/source/java/ch/systemsx/cisd/openbis/public/images/outdated.gif
new file mode 100644
index 0000000000000000000000000000000000000000..e2030606c0c6c3744482eb4d690f4f641de1482f
Binary files /dev/null and b/openbis/source/java/ch/systemsx/cisd/openbis/public/images/outdated.gif differ