diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/DataSetTable.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/DataSetTable.java
index b9c01820e33cb7f00fa21d0009667f72631417a3..79991401f10492da279649966654045505410ed7 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/DataSetTable.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/business/bo/DataSetTable.java
@@ -60,6 +60,7 @@ import ch.systemsx.cisd.openbis.generic.shared.IDataStoreService;
 import ch.systemsx.cisd.openbis.generic.shared.basic.BasicConstant;
 import ch.systemsx.cisd.openbis.generic.shared.basic.TableModelAppender;
 import ch.systemsx.cisd.openbis.generic.shared.basic.TableModelAppender.TableModelWithDifferentColumnCountException;
+import ch.systemsx.cisd.openbis.generic.shared.basic.TableModelAppender.TableModelWithDifferentColumnIdsException;
 import ch.systemsx.cisd.openbis.generic.shared.basic.TableModelAppender.TableModelWithIncompatibleColumnTypesException;
 import ch.systemsx.cisd.openbis.generic.shared.basic.TechId;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.AbstractExternalData;
@@ -675,6 +676,11 @@ public final class DataSetTable extends AbstractDataSetBusinessObject implements
                 throw new UserFailureException("Could not merge reports from multiple data stores because '" + batchResults.getBatchId()
                         + "' data store returned a table with an incorrect number of columns (expected: " + e.getExpectedColumnCount()
                         + ", got: " + e.getAppendedColumnCount() + ")");
+            } catch (TableModelWithDifferentColumnIdsException e)
+            {
+                throw new UserFailureException("Could not merge reports from multiple data stores because '" + batchResults.getBatchId()
+                        + "' data store returned a table with different column ids (expected: " + e.getExpectedColumnIds()
+                        + ", got: " + e.getAppendedColumnIds() + ")");
             } catch (TableModelWithIncompatibleColumnTypesException e)
             {
                 throw new UserFailureException("Could not merge reports from multiple data stores because '" + batchResults.getBatchId()
diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/TableModelAppender.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/TableModelAppender.java
index 691eccf82c8c60f362a41896a8ae4d96f64e7e8b..dee47f32831d81c9f0d815260a064a4a9e6ca4c4 100644
--- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/TableModelAppender.java
+++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/basic/TableModelAppender.java
@@ -58,6 +58,7 @@ public class TableModelAppender
         } else
         {
             checkColumnCount(tableModel);
+            checkColumnIds(tableModel);
             checkColumnTypes(tableModel);
             rows.addAll(tableModel.getRows());
         }
@@ -74,6 +75,30 @@ public class TableModelAppender
         }
     }
 
+    private void checkColumnIds(TableModel tableModel)
+    {
+        List<String> expectedIds = new ArrayList<String>();
+        List<String> appendedIds = new ArrayList<String>();
+
+        for (TableModelColumnHeader expectedHeader : headers)
+        {
+            expectedIds.add(expectedHeader.getId());
+        }
+
+        if (tableModel.getHeader() != null)
+        {
+            for (TableModelColumnHeader appendedHeader : tableModel.getHeader())
+            {
+                appendedIds.add(appendedHeader.getId());
+            }
+        }
+
+        if (expectedIds.equals(appendedIds) == false)
+        {
+            throw new TableModelWithDifferentColumnIdsException(expectedIds, appendedIds);
+        }
+    }
+
     private void checkColumnTypes(TableModel tableModel)
     {
         List<DataTypeCode> expectedTypes = new ArrayList<DataTypeCode>();
@@ -147,6 +172,33 @@ public class TableModelAppender
 
     }
 
+    public static class TableModelWithDifferentColumnIdsException extends IllegalTableModelException
+    {
+
+        private static final long serialVersionUID = 1L;
+
+        private List<String> expectedColumnIds;
+
+        private List<String> appendedColumnIds;
+
+        public TableModelWithDifferentColumnIdsException(List<String> expectedColumnIds, List<String> appendedColumnIds)
+        {
+            this.expectedColumnIds = expectedColumnIds;
+            this.appendedColumnIds = appendedColumnIds;
+        }
+
+        public List<String> getExpectedColumnIds()
+        {
+            return expectedColumnIds;
+        }
+
+        public List<String> getAppendedColumnIds()
+        {
+            return appendedColumnIds;
+        }
+
+    }
+
     public static class TableModelWithIncompatibleColumnTypesException extends IllegalTableModelException
     {
 
diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/basic/TableModelAppenderTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/basic/TableModelAppenderTest.java
index 04a21ee063c71326164ec9895f86b7732a8a7ee6..e21b941c71fba47cc4101d3a7bcef1ca98ba042e 100644
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/basic/TableModelAppenderTest.java
+++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/basic/TableModelAppenderTest.java
@@ -24,6 +24,7 @@ import junit.framework.Assert;
 import org.testng.annotations.Test;
 
 import ch.systemsx.cisd.openbis.generic.shared.basic.TableModelAppender.TableModelWithDifferentColumnCountException;
+import ch.systemsx.cisd.openbis.generic.shared.basic.TableModelAppender.TableModelWithDifferentColumnIdsException;
 import ch.systemsx.cisd.openbis.generic.shared.basic.TableModelAppender.TableModelWithIncompatibleColumnTypesException;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DataTypeCode;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ISerializableComparable;
@@ -40,14 +41,14 @@ public class TableModelAppenderTest
 {
 
     @Test(expectedExceptions = IllegalArgumentException.class)
-    public void testAppendNull()
+    public void testAppendNullModel()
     {
         TableModelAppender appender = new TableModelAppender();
         appender.append(null);
     }
 
     @Test
-    public void testAppendEmpty()
+    public void testAppendEmptyModel()
     {
         TableModelAppender appender = new TableModelAppender();
         appender.append(new TableModel(Collections.<TableModelColumnHeader> emptyList(), Collections.<TableModelRow> emptyList()));
@@ -58,7 +59,7 @@ public class TableModelAppenderTest
     }
 
     @Test
-    public void testAppendWithSameColumns()
+    public void testAppendModelWithSameColumns()
     {
         SimpleTableModelBuilder builder1 = new SimpleTableModelBuilder();
         builder1.addHeader("column1");
@@ -86,7 +87,7 @@ public class TableModelAppenderTest
     }
 
     @Test
-    public void testAppendWithDifferentNumberOfColumns()
+    public void testAppendModelWithDifferentNumberOfColumns()
     {
         SimpleTableModelBuilder builder1 = new SimpleTableModelBuilder();
         builder1.addHeader("column1");
@@ -112,7 +113,7 @@ public class TableModelAppenderTest
     }
 
     @Test
-    public void testAppendWithCompatibleTypesOfColumns()
+    public void testAppendModelWithSameIdsAndCompatibleTypesOfColumns()
     {
         SimpleTableModelBuilder builder1 = new SimpleTableModelBuilder();
         builder1.addHeader("column1");
@@ -140,7 +141,7 @@ public class TableModelAppenderTest
     }
 
     @Test
-    public void testAppendWithIncompatibleTypesOfColumns()
+    public void testAppendModelWithSameIdsAndIncompatibleTypesOfColumns()
     {
         SimpleTableModelBuilder builder1 = new SimpleTableModelBuilder();
         builder1.addHeader("column1");
@@ -166,6 +167,33 @@ public class TableModelAppenderTest
         }
     }
 
+    @Test
+    public void testAppendModelWithDifferentIdsOfColumns()
+    {
+        SimpleTableModelBuilder builder1 = new SimpleTableModelBuilder();
+        builder1.addHeader("column1");
+        builder1.addHeader("column2");
+        builder1.addFullRow("row1_column1", "row1_column2");
+        builder1.addFullRow("row2_column1", "row2_column2");
+
+        SimpleTableModelBuilder builder2 = new SimpleTableModelBuilder();
+        builder2.addHeader("column1");
+        builder2.addHeader("column2a");
+        builder2.addFullRow("row3_column1", "row3_column2a");
+
+        try
+        {
+            TableModelAppender appender = new TableModelAppender();
+            appender.append(builder1.getTableModel());
+            appender.append(builder2.getTableModel());
+            Assert.fail();
+        } catch (TableModelWithDifferentColumnIdsException e)
+        {
+            Assert.assertEquals(Arrays.asList("column1", "column2"), e.getExpectedColumnIds());
+            Assert.assertEquals(Arrays.asList("column1", "column2a"), e.getAppendedColumnIds());
+        }
+    }
+
     private void assertHeaders(TableModel tableModel, String... headers)
     {
         int columnIndex = 0;