diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/renderer/RealNumberRenderer.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/renderer/RealNumberRenderer.java
index 0794c5f85d9a15649d655053372b6171a9d0a660..5b4ef0763262a24c3ac320807c62715b0969a9d0 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/renderer/RealNumberRenderer.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/renderer/RealNumberRenderer.java
@@ -33,9 +33,15 @@ public final class RealNumberRenderer implements GridCellRenderer<BaseEntityMode
         {
             format += "E000";
         }
-        double doubleValue = Double.parseDouble(value);
-        String formattedValue = NumberFormat.getFormat(format).format(doubleValue);
-        return MultilineHTML.wrapUpInDivWithTooltip(formattedValue, value);
+        try
+        {
+            double doubleValue = Double.parseDouble(value);
+            String formattedValue = NumberFormat.getFormat(format).format(doubleValue);
+            return MultilineHTML.wrapUpInDivWithTooltip(formattedValue, value);
+        } catch (NumberFormatException ex)
+        {
+            return value;
+        }
     }
 
     private final RealNumberFormatingParameters realNumberFormatingParameters;
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 97ede91094c18f911df2eeb98d6d8924a9dd314c..f456e2c55f1ea247b275b7e3997704f4c174375e 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
@@ -21,6 +21,7 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.columns
 import ch.systemsx.cisd.openbis.generic.client.web.client.dto.GridCustomColumnInfo;
 import ch.systemsx.cisd.openbis.generic.shared.basic.GridRowModel;
 import ch.systemsx.cisd.openbis.generic.shared.basic.PrimitiveValue;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataTypeCode;
 
 /**
  * Column definition for a grid custom column.
@@ -48,7 +49,8 @@ public class GridCustomColumnDefinition<T> implements IColumnDefinitionUI<T>
 
     public boolean isNumeric()
     {
-        return false;
+        DataTypeCode dataType = columnMetadata.getDataType();
+        return dataType == DataTypeCode.INTEGER || dataType == DataTypeCode.REAL;
     }
 
     public boolean isLink()
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/grid/AbstractBrowserGrid.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/grid/AbstractBrowserGrid.java
index 21fccad7c59c7811d37c5c2b46f0bc4c6143c474..b691b6da1921b2d63c9c7c8751eff1966f6fb0b7 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/grid/AbstractBrowserGrid.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/grid/AbstractBrowserGrid.java
@@ -77,6 +77,7 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.application.plugin.ICl
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.plugin.IClientPluginFactory;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.renderer.InternalLinkCellRenderer;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.renderer.MultilineStringCellRenderer;
+import ch.systemsx.cisd.openbis.generic.client.web.client.application.renderer.RealNumberRenderer;
 import ch.systemsx.cisd.openbis.generic.client.web.client.application.ui.columns.framework.AbstractColumnDefinitionKind;
 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.framework.IColumnDefinitionUI;
@@ -100,6 +101,7 @@ 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.IIdentifiable;
 import ch.systemsx.cisd.openbis.generic.shared.basic.URLMethodWithParameters;
+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.EntityKind;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.EntityType;
@@ -980,10 +982,24 @@ public abstract class AbstractBrowserGrid<T/* Entity */, M extends BaseEntityMod
     {
         ColumnDefsAndConfigs<T> defsAndConfigs = createColumnsDefinition();
         // add custom columns
+        List<GridCustomColumnInfo> customColumnsMetadata =
+                customColumnsMetadataProvider.tryGetCustomColumnsMetadata();
         List<IColumnDefinitionUI<T>> customColumnsDefs =
-                createCustomColumnDefinitions(customColumnsMetadataProvider
-                        .tryGetCustomColumnsMetadata());
+                createCustomColumnDefinitions(customColumnsMetadata);
         defsAndConfigs.addColumns(customColumnsDefs);
+        if (customColumnsMetadata != null)
+        {
+            RealNumberRenderer renderer =
+                new RealNumberRenderer(viewContext.getDisplaySettingsManager()
+                        .getRealNumberFormatingParameters());
+            for (GridCustomColumnInfo gridCustomColumnInfo : customColumnsMetadata)
+            {
+                if (gridCustomColumnInfo.getDataType() == DataTypeCode.REAL)
+                {
+                    defsAndConfigs.setGridCellRendererFor(gridCustomColumnInfo.getCode(), renderer);
+                }
+            }
+        }
 
         this.columnDefinitions = defsAndConfigs.getColumnDefs();
         ColumnModel columnModel = createColumnModel(defsAndConfigs.getColumnConfigs());
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/grid/AbstractColumnSettingsDataModelProvider.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/grid/AbstractColumnSettingsDataModelProvider.java
index 66a3513d8d1fe14631e08c96525128af3f3fe389..d09f33c496999d7d2f3481e3acdaf0c4ec704f16 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/grid/AbstractColumnSettingsDataModelProvider.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/grid/AbstractColumnSettingsDataModelProvider.java
@@ -96,7 +96,7 @@ public abstract class AbstractColumnSettingsDataModelProvider
 
     private GridCustomColumnInfo createCustomColumnInfo(GridCustomColumn column)
     {
-        return new GridCustomColumnInfo(getId(column), column.getName(), column.getDescription());
+        return new GridCustomColumnInfo(getId(column), column.getName(), column.getDescription(), column.getDataType());
     }
 
     private void addColumns(List<GridCustomColumn> columns)
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/dto/GridCustomColumnInfo.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/dto/GridCustomColumnInfo.java
index 8cfdfc4a4dbd5d7b3486303684d42a318a436e62..714fd3635812050f458e6443173dd78f6cff3282 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/dto/GridCustomColumnInfo.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/dto/GridCustomColumnInfo.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.DataTypeCode;
+
 /**
  * Basic metadata about a grid custom column: code (column identifier), label and description.
  * 
@@ -31,11 +33,14 @@ public class GridCustomColumnInfo implements IsSerializable
 
     private String description;
 
-    public GridCustomColumnInfo(String code, String label, String description)
+    private DataTypeCode dataType;
+
+    public GridCustomColumnInfo(String code, String label, String description, DataTypeCode dataType)
     {
         this.code = code;
         this.label = label;
         this.description = description;
+        this.dataType = dataType;
     }
 
     public String getCode()
@@ -58,6 +63,11 @@ public class GridCustomColumnInfo implements IsSerializable
     {
         return description;
     }
+    
+    public DataTypeCode getDataType()
+    {
+        return dataType;
+    }
 
     @Override
     public boolean equals(Object obj)
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/GenericColumnsHelper.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/GenericColumnsHelper.java
index 8fcaac3afb76afa94fb49bfc9fd6263abd2a152d..a2eae7faba4eb099b6dcfbf3f16252a906350780 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/GenericColumnsHelper.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/GenericColumnsHelper.java
@@ -24,7 +24,6 @@ import java.util.Map;
 import java.util.Set;
 import java.util.TreeMap;
 
-import ch.systemsx.cisd.openbis.generic.client.web.server.util.DataTypeUtils;
 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.GenericTableColumnHeader;
@@ -33,6 +32,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ISerializableComparable
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.PropertyType;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.SerializableComparableIDDecorator;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.StringTableCell;
+import ch.systemsx.cisd.openbis.generic.shared.util.DataTypeUtils;
 
 /**
  * @author Franz-Josef Elmer
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/calculator/GridExpressionUtils.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/calculator/GridExpressionUtils.java
index ee1574cd3a6bafb90481589197bfaa286479b8fb..66dcd02922d15fd98cbe92325625e4a7d311bc1e 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/calculator/GridExpressionUtils.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/calculator/GridExpressionUtils.java
@@ -37,6 +37,7 @@ import ch.systemsx.cisd.openbis.generic.shared.basic.IColumnDefinition;
 import ch.systemsx.cisd.openbis.generic.shared.basic.PrimitiveValue;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.GridCustomColumn;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Person;
+import ch.systemsx.cisd.openbis.generic.shared.util.DataTypeUtils;
 
 /**
  * Utility class containing functions helpful with dealing with grid custom filters or columns.
@@ -127,6 +128,8 @@ public class GridExpressionUtils
                 String columnId = customColumn.getCode();
                 RowCalculator<T> calculator = calculators.get(columnId);
                 PrimitiveValue value = evalCustomColumn(rowData, customColumn, calculator);
+                customColumn.setDataType(DataTypeUtils.getCompatibleDataType(customColumn
+                        .getDataType(), value.getDataType()));
                 customColumnValues.put(columnId, value);
             }
             result.add(new GridRowModel<T>(rowData, customColumnValues));
@@ -157,7 +160,7 @@ public class GridExpressionUtils
         {
             GridCustomColumnInfo columnInfo =
                     new GridCustomColumnInfo(column.getCode(), column.getName(), column
-                            .getDescription());
+                            .getDescription(), column.getDataType());
             result.add(columnInfo);
         }
         return result;
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/PrimitiveValue.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/PrimitiveValue.java
index 8f5964e13b626f864d0a43961e1cbfcce3d3060d..581e1844d2a61d41199ed168fbe38a868d5b97a8 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/PrimitiveValue.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/PrimitiveValue.java
@@ -18,6 +18,8 @@ package ch.systemsx.cisd.openbis.generic.shared.basic;
 
 import com.google.gwt.user.client.rpc.IsSerializable;
 
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataTypeCode;
+
 /**
  * Stores one primitive value: Double, Long or String.
  * <p>
@@ -49,7 +51,20 @@ public class PrimitiveValue implements IsSerializable
     {
         stringValueOrNull = value;
     }
-
+    
+    public DataTypeCode getDataType()
+    {
+        if (doubleValueOrNull != null)
+        {
+            return DataTypeCode.REAL;
+        }
+        if (longValueOrNull != null)
+        {
+            return DataTypeCode.INTEGER;
+        }
+        return DataTypeCode.VARCHAR;
+    }
+    
     public Comparable<?> getComparableValue()
     {
         if (doubleValueOrNull != null)
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/GridCustomColumn.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/GridCustomColumn.java
index c3cc927c3110646f09a92e021a182519893cfd20..fc21d1036bdd5667eca2f2cb00fb79cbad833979 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/GridCustomColumn.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/GridCustomColumn.java
@@ -16,6 +16,7 @@
 
 package ch.systemsx.cisd.openbis.generic.shared.basic.dto;
 
+
 /**
  * Stores information describing the grid custom column.
  * 
@@ -27,6 +28,7 @@ public class GridCustomColumn extends AbstractGridExpression
     private static final long serialVersionUID = ServiceVersionHolder.VERSION;
 
     private String code;
+    private DataTypeCode dataType;
 
     public String getCode()
     {
@@ -37,4 +39,15 @@ public class GridCustomColumn extends AbstractGridExpression
     {
         this.code = code;
     }
+
+    public void setDataType(DataTypeCode dataType)
+    {
+        this.dataType = dataType;
+    }
+
+    public DataTypeCode getDataType()
+    {
+        return dataType;
+    }
+
 }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/util/DataTypeUtils.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/util/DataTypeUtils.java
similarity index 77%
rename from openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/util/DataTypeUtils.java
rename to openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/util/DataTypeUtils.java
index adf626ff6874b55951f37c1b6e0940122f0e8f2d..e15abd5d91011caa92aa45a8f4d6cf5d4f3cf4dc 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/util/DataTypeUtils.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/util/DataTypeUtils.java
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-package ch.systemsx.cisd.openbis.generic.client.web.server.util;
+package ch.systemsx.cisd.openbis.generic.shared.util;
 
 import java.util.HashMap;
 import java.util.Map;
@@ -124,6 +124,43 @@ public class DataTypeUtils
         return Converter.resolve(dataTypeCode).convert(value);
     }
     
+    /**
+     * Returns a data type which is compatible with the previous data type and the new data type.
+     */
+    public static DataTypeCode getCompatibleDataType(DataTypeCode previousDataTypeOrNull, DataTypeCode dataType)
+    {
+        if (previousDataTypeOrNull == null)
+        {
+            return dataType;
+        } 
+        if (previousDataTypeOrNull == DataTypeCode.REAL)
+        {
+            if (dataType == DataTypeCode.REAL || dataType == DataTypeCode.INTEGER)
+            {
+                return DataTypeCode.REAL;
+            }
+            return DataTypeCode.VARCHAR;
+        }
+        if (previousDataTypeOrNull == DataTypeCode.INTEGER)
+        {
+            if (dataType == DataTypeCode.REAL)
+            {
+                return DataTypeCode.REAL;
+            }
+            if (dataType == DataTypeCode.INTEGER)
+            {
+                return DataTypeCode.INTEGER;
+            }
+            return DataTypeCode.VARCHAR;
+        } 
+        if (previousDataTypeOrNull == DataTypeCode.TIMESTAMP
+                && dataType == DataTypeCode.TIMESTAMP)
+        {
+            return DataTypeCode.TIMESTAMP;
+        }
+        return DataTypeCode.VARCHAR;
+    }
+    
     private DataTypeUtils()
     {
     }