diff --git a/dataframe-csv.cabal b/dataframe-csv.cabal
--- a/dataframe-csv.cabal
+++ b/dataframe-csv.cabal
@@ -1,6 +1,6 @@
 cabal-version:      3.4
 name:               dataframe-csv
-version:            2.3.0.0
+version:            2.3.0.1
 synopsis:           CSV reader and writer for the dataframe ecosystem.
 description:
     @DataFrame.IO.CSV@ — strict single-pass CSV read/write (pure
@@ -39,8 +39,8 @@
     build-depends:      base >= 4 && < 5,
                         bytestring >= 0.11 && < 0.14,
                         containers >= 0.6.7 && < 0.10,
-                        dataframe-core >= 2.2 && < 2.3,
-                        dataframe-operations >= 2.2 && < 2.3,
+                        dataframe-core >= 2.5 && < 2.6,
+                        dataframe-operations >= 2.5 && < 2.6,
                         dataframe-parsing >= 2.2 && < 2.3,
                         text >= 2.1 && < 3,
                         time >= 1.12 && < 2,
diff --git a/src-internal/DataFrame/IO/Internal/MutableColumn.hs b/src-internal/DataFrame/IO/Internal/MutableColumn.hs
--- a/src-internal/DataFrame/IO/Internal/MutableColumn.hs
+++ b/src-internal/DataFrame/IO/Internal/MutableColumn.hs
@@ -22,14 +22,13 @@
 
 import Data.Maybe (fromMaybe)
 import Data.Type.Equality (TestEquality (..), type (:~:) (Refl))
-import Type.Reflection (typeRep)
-
 import DataFrame.Internal.Column (
     Column (..),
     MutableColumn (..),
-    buildBitmapFromNulls,
  )
+import DataFrame.Internal.Column.Bitmap (buildBitmapFromNulls)
 import DataFrame.Internal.Parsing (isNullish, readDouble, readInt)
+import Type.Reflection (typeRep)
 
 writeColumn :: Int -> T.Text -> MutableColumn -> IO (Either T.Text Bool)
 writeColumn i value (MBoxedColumn (col :: VBM.IOVector a)) =
diff --git a/src/DataFrame/IO/CSV.hs b/src/DataFrame/IO/CSV.hs
--- a/src/DataFrame/IO/CSV.hs
+++ b/src/DataFrame/IO/CSV.hs
@@ -35,7 +35,7 @@
 import qualified Data.Map.Strict as M
 import qualified Data.Text as T
 import qualified Data.Text.Encoding as TE
-import qualified Data.Text.IO as TIO
+import qualified Data.Text.IO.Utf8 as TIO
 
 import Control.Exception (SomeException, catch)
 import Data.Maybe (fromMaybe)
diff --git a/src/DataFrame/IO/CSV/Internal/Infer.hs b/src/DataFrame/IO/CSV/Internal/Infer.hs
--- a/src/DataFrame/IO/CSV/Internal/Infer.hs
+++ b/src/DataFrame/IO/CSV/Internal/Infer.hs
@@ -29,16 +29,36 @@
 import Data.Word (Word8)
 import DataFrame.IO.CSV.Internal.Options
 import DataFrame.IO.CSV.Internal.Sink (Cells (..), cellAt, withCell)
-import DataFrame.Internal.Column
-import DataFrame.Internal.ColumnBuilder
-import DataFrame.Internal.Parsing
+import DataFrame.Internal.Column (
+    Column (UnboxedColumn),
+    Columnable,
+    finalizeParseResult,
+    fromVector,
+ )
+import DataFrame.Internal.Column.Bitmap (Bitmap)
+import DataFrame.Internal.Column.Builder (
+    ColumnBuilder (appendNull, freezeBuilder),
+    appendTextSliceFromPtr,
+    newTextBuilder,
+ )
+import DataFrame.Internal.Parsing (
+    readByteStringBool,
+    readByteStringDate,
+    readByteStringDouble,
+    readByteStringInt,
+ )
 import DataFrame.Internal.Parsing.Fast (
     parseBoolFieldSlice,
     parseDateFieldSlice,
     parseDoubleFieldSlice,
     parseIntFieldSlice,
  )
-import DataFrame.Operations.Typing
+import DataFrame.Operations.Typing (
+    ParsingAssumption (..),
+    SafeReadMode (EitherRead),
+    makeParsingAssumptionBytes,
+    promoteIntColumnIndexed,
+ )
 import Foreign.Ptr (Ptr, castPtr, plusPtr)
 
 inferColumnFromBS :: SafeReadMode -> ReadOptions -> Cells -> IO Column
diff --git a/src/DataFrame/IO/CSV/Internal/Read.hs b/src/DataFrame/IO/CSV/Internal/Read.hs
--- a/src/DataFrame/IO/CSV/Internal/Read.hs
+++ b/src/DataFrame/IO/CSV/Internal/Read.hs
@@ -30,7 +30,7 @@
 import DataFrame.IO.CSV.Internal.Scanner
 import DataFrame.IO.CSV.Internal.Sink
 import DataFrame.Internal.Column (Column, ensureOptional)
-import DataFrame.Internal.ColumnBuilder
+import DataFrame.Internal.Column.Builder
 import DataFrame.Internal.DataFrame (DataFrame (..), forceDataFrame)
 import DataFrame.Operations.Typing (
     SafeReadMode (..),
diff --git a/src/DataFrame/IO/CSV/Internal/Sink.hs b/src/DataFrame/IO/CSV/Internal/Sink.hs
--- a/src/DataFrame/IO/CSV/Internal/Sink.hs
+++ b/src/DataFrame/IO/CSV/Internal/Sink.hs
@@ -33,7 +33,7 @@
 import Data.IORef
 import Data.Word (Word8)
 import DataFrame.IO.CSV.Internal.Scanner
-import DataFrame.Internal.ColumnBuilder
+import DataFrame.Internal.Column.Builder
 import DataFrame.Internal.Parsing.Fast (
     isMissingFieldSlice,
     parseDoubleFieldSlice,
