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 f8fd602772511b60be2873fc028bbbc45b098220..d557d2f3445d67dcca5dd1827c23f9d4b78da996 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
@@ -121,4 +121,10 @@ public class TypedTableGridColumnDefinitionUI<T extends Serializable> extends
     {
         return header.tryGetVocabulary();
     }
+
+    @Override
+    public boolean isCustom()
+    {
+        return false;
+    }
 }
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 51fbc2fdbee74f0423456ed99bdf8d2d51dd40fd..693e87981fb9c2a842868e1930310cca644e810d 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
@@ -140,4 +140,10 @@ public class GridCustomColumnDefinition<T> implements IColumnDefinitionUI<T>
     private GridCustomColumnDefinition()
     {
     }
+
+    @Override
+    public boolean isCustom()
+    {
+        return true;
+    }
 }
\ No newline at end of file
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 5b70afc2a01f802eeae0b34be6e592d8f186c037..c9fdce86c681461fd982ff2e18a06a47201830e1 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
@@ -119,6 +119,7 @@ import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.id.metaproject.IMetapr
 import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.id.metaproject.MetaprojectIdentifierId;
 import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.id.metaproject.MetaprojectTechIdId;
 import ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.id.sample.SampleTechIdId;
+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.IIdHolder;
@@ -295,6 +296,21 @@ public final class CommonClientService extends AbstractClientService implements
         // Not directly needed but this refreshes the session.
         String session = getSessionToken();
         final TableExportCriteria<T> exportCriteria = getAndRemoveExportCriteria(exportDataKey);
+
+        // Remove custom column definitions, as they are not needed in export (and are expensive to
+        // calculate).
+        Set<IColumnDefinition<T>> availableColumns = exportCriteria.getAvailableColumns();
+        Set<IColumnDefinition<T>> nonCustomColumns = new HashSet<IColumnDefinition<T>>();
+        for (IColumnDefinition<T> def : availableColumns)
+        {
+            if (def.isCustom() == false)
+            {
+                nonCustomColumns.add(def);
+            }
+        }
+        availableColumns.retainAll(nonCustomColumns);
+        exportCriteria.getColumnDefs().retainAll(nonCustomColumns);
+
         final GridRowModels<T> entities = fetchCachedEntities(exportCriteria);
         EntityKind entityKindForUpdate = exportCriteria.getEntityKindForUpdateOrNull();
         if (entityKindForUpdate != null)
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/resultset/CachedResultSetManager.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/resultset/CachedResultSetManager.java
index fb9629d311b01249657d5bfb00690fb54beb5727..991979b056b8ab9b19ce3266980ce2e4b09ea645 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/resultset/CachedResultSetManager.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/resultset/CachedResultSetManager.java
@@ -223,6 +223,12 @@ public final class CachedResultSetManager<K> implements IResultSetManager<K>, Se
                         {
                             throw new UnsupportedOperationException();
                         }
+
+                        @Override
+                        public boolean isCustom()
+                        {
+                            return false;
+                        }
                     });
             }
             this.customColumnsProvider = customColumnsProvider;
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/IColumnDefinition.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/IColumnDefinition.java
index b5a1ce152a0dc8baa08e7eb7c2f8a9688e45dc91..efde92ff9142c4265270351bbc150778016fa144 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/IColumnDefinition.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/IColumnDefinition.java
@@ -48,4 +48,7 @@ public interface IColumnDefinition<T> extends IsSerializable
     /** Tries to get specified property or <code>null</code> if not found. */
     String tryToGetProperty(String key);
 
+    /** Returns true if this is a custom column */
+    boolean isCustom();
+
 }
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/TypedTableGridColumnDefinition.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/TypedTableGridColumnDefinition.java
index bba96e8f7ae99520860e7c699bd0b4b6d741d3ca..e5fc51a99dad377b386b2efa335367b3337c9d4d 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/TypedTableGridColumnDefinition.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/dto/TypedTableGridColumnDefinition.java
@@ -106,4 +106,10 @@ public class TypedTableGridColumnDefinition<T extends Serializable> implements
         // The check of index is needed because the column is applied to the wrong model
         return index < values.size() ? values.get(index) : null;
     }
+
+    @Override
+    public boolean isCustom()
+    {
+        return false;
+    }
 }
\ No newline at end of file
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/server/resultset/CachedResultSetManagerTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/server/resultset/CachedResultSetManagerTest.java
index 5260ac348bfb8da8cf93a06ee31aeb80b34de186..4765ac38765c45f116e4f46511534b14eccd223f 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/server/resultset/CachedResultSetManagerTest.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/client/web/server/resultset/CachedResultSetManagerTest.java
@@ -1154,6 +1154,12 @@ public final class CachedResultSetManagerTest extends AssertJUnit
                     return "a".equals(key) ? "42" : null;
                 }
 
+                @Override
+                public boolean isCustom()
+                {
+                    return false;
+                }
+
             };
     }