diff --git a/core/DataTable.php b/core/DataTable.php
index 221af5315acf540fe5c2fdbb2339c92fcf79a5a3..0b68a96f501f9ada6cd289f397943aa577e9b283 100644
--- a/core/DataTable.php
+++ b/core/DataTable.php
@@ -1714,6 +1714,7 @@ class DataTable implements DataTableInterface, \IteratorAggregate, \ArrayAccess
     public function mergeSubtables($labelColumn = false, $useMetadataColumn = false)
     {
         $result = new DataTable();
+        $result->setAllTableMetadata($this->getAllTableMetadata());
         foreach ($this->getRowsWithoutSummaryRow() as $row) {
             $subtable = $row->getSubtable();
             if ($subtable !== false) {
diff --git a/tests/PHPUnit/Unit/DataTableTest.php b/tests/PHPUnit/Unit/DataTableTest.php
index c427adeae779a371ee430ad51e2a824ebf719372..fa7fe2266914a2e4269f213cc44a505073cacc51 100644
--- a/tests/PHPUnit/Unit/DataTableTest.php
+++ b/tests/PHPUnit/Unit/DataTableTest.php
@@ -898,6 +898,14 @@ class DataTableTest extends \PHPUnit_Framework_TestCase
         $this->assertNull($unserialized[0][3], "found the id sub table in the serialized, not expected");
     }
 
+    public function testMergeSubtablesKeepsMetadata()
+    {
+        $dataTable = $this->_getDataTable1ForTest();
+        $dataTable->setMetadata('additionalMetadata', 'test');
+        $dataTable = $dataTable->mergeSubtables();
+        $this->assertEquals('test', $dataTable->getMetadata('additionalMetadata'));
+    }
+
     private function createDataTable($rows)
     {
         $useless1 = new DataTable;