diff --git a/dataframe-lazy.cabal b/dataframe-lazy.cabal
--- a/dataframe-lazy.cabal
+++ b/dataframe-lazy.cabal
@@ -1,6 +1,6 @@
 cabal-version:      3.4
 name:               dataframe-lazy
-version:            2.3.0.0
+version:            2.4.0.0
 synopsis:           Lazy query engine for the dataframe ecosystem.
 description:
     The lazy/streaming query engine: relational-algebra plans, optimizer,
@@ -45,11 +45,11 @@
                         attoparsec >= 0.12 && < 0.16,
                         bytestring >= 0.11 && < 0.14,
                         containers >= 0.6.7 && < 0.10,
-                        dataframe-core >= 2.2 && < 2.3,
-                        dataframe-core >= 2.2 && < 2.3,
+                        dataframe-core >= 2.4 && < 2.5,
+                        dataframe-core >= 2.4 && < 2.5,
                         dataframe-csv >= 2.3 && < 2.4,
                         dataframe-csv >= 2.3 && < 2.4,
-                        dataframe-operations >= 2.2 && < 2.3,
+                        dataframe-operations >= 2.4 && < 2.5,
                         dataframe-parquet >= 1.5 && < 1.6,
                         dataframe-parsing >= 2.2 && < 2.3,
                         directory >= 1.3.0.0 && < 2,
diff --git a/src/DataFrame/Lazy/IO/Binary.hs b/src/DataFrame/Lazy/IO/Binary.hs
--- a/src/DataFrame/Lazy/IO/Binary.hs
+++ b/src/DataFrame/Lazy/IO/Binary.hs
@@ -58,6 +58,7 @@
     Column (..),
     bitmapTestBit,
     buildBitmapFromValid,
+    materializeMerged,
     materializePacked,
  )
 import DataFrame.Internal.DataFrame (DataFrame (..))
@@ -114,6 +115,7 @@
     nameLen = fromIntegral (BS.length nameBytes) :: Word16
 
 columnTypeTag :: Column -> Word8
+columnTypeTag c@(MergedColumn _ _) = columnTypeTag (materializeMerged c)
 columnTypeTag (UnboxedColumn Nothing (_ :: VU.Vector a)) =
     case testEquality (typeRep @a) (typeRep @Int) of
         Just Refl -> tagInt
@@ -132,6 +134,7 @@
 columnTypeTag (PackedText (Just _) _) = tagMaybeText
 
 buildColumnData :: Int -> Column -> BSB.Builder
+buildColumnData n c@(MergedColumn _ _) = buildColumnData n (materializeMerged c)
 buildColumnData _ (UnboxedColumn Nothing (v :: VU.Vector a)) =
     case testEquality (typeRep @a) (typeRep @Int) of
         Just Refl -> buildIntVector v
diff --git a/src/DataFrame/Lazy/Internal/Executor.hs b/src/DataFrame/Lazy/Internal/Executor.hs
--- a/src/DataFrame/Lazy/Internal/Executor.hs
+++ b/src/DataFrame/Lazy/Internal/Executor.hs
@@ -661,6 +661,7 @@
 
     dispatch :: C.Column -> Perm.SortOrder
     dispatch column = case column of
+        c@(C.MergedColumn _ _) -> dispatch (C.materializeMerged c)
         C.PackedText{} -> mk @T.Text
         C.BoxedColumn _ (_ :: VB.Vector b) -> pick @b
         C.UnboxedColumn _ (_ :: VU.Vector b) -> pick @b
