diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,11 @@
 # Revision history for brick-tabular-list
 
+## 2.1.0.0 -- 2023-03-16
+
+* Wrap `ColHdrRowHdr` in `Maybe` for semantic correctness.
+* This should be the last version that intentionally introduces brekaing changes due to design decisions.
+* After this version, it should take many years before any unexpected breaking change is deemed necessary.
+
 ## 2.0.1.0 -- 2023-03-14
 
 * Name the single field in `RowHdrCtxt` newtype for semantic correctness.
diff --git a/brick-tabular-list.cabal b/brick-tabular-list.cabal
--- a/brick-tabular-list.cabal
+++ b/brick-tabular-list.cabal
@@ -1,6 +1,6 @@
 cabal-version: 3.0
 name: brick-tabular-list
-version: 2.0.1.0
+version: 2.1.0.0
 
 synopsis: Tabular list widgets for brick.
 
diff --git a/demo/GridTabularList.hs b/demo/GridTabularList.hs
--- a/demo/GridTabularList.hs
+++ b/demo/GridTabularList.hs
@@ -157,7 +157,7 @@
       _ -> fill ' '
 , rowHdr = Just rowHdr
 , colHdr = Just colHdr
-, colHdrRowHdr = CHRH $ \_ _ -> vLimit 1 (fill ' ') <=> hBorder
+, colHdrRowHdr = Just $ CHRH $ \_ _ -> vLimit 1 (fill ' ') <=> hBorder
 }
 
 theList :: LibraryList
diff --git a/demo/MixedTabularList.hs b/demo/MixedTabularList.hs
--- a/demo/MixedTabularList.hs
+++ b/demo/MixedTabularList.hs
@@ -168,7 +168,7 @@
           cell = dc
         , rowHdr = Just rowHdr
         , colHdr = Just colHdr
-        , colHdrRowHdr = CHRH $ \_ _ -> vLimit 1 (fill ' ') <=> hBorder
+        , colHdrRowHdr = Just $ CHRH $ \_ _ -> vLimit 1 (fill ' ') <=> hBorder
         }
       , listWidth = 80
       }
diff --git a/src/Brick/Widgets/TabularList/Grid.hs b/src/Brick/Widgets/TabularList/Grid.hs
--- a/src/Brick/Widgets/TabularList/Grid.hs
+++ b/src/Brick/Widgets/TabularList/Grid.hs
@@ -98,7 +98,7 @@
   cell :: ListFocused -> WidthDeficit -> GridCtxt -> e -> Widget n
 , rowHdr :: Maybe (RowHdr n e r)
 , colHdr :: Maybe (GridColHdr n)
-, colHdrRowHdr :: ColHdrRowHdr n
+, colHdrRowHdr :: Maybe (ColHdrRowHdr n)
 } deriving Generic
 
 -- | * [Type Variables]("Brick.Widgets.TabularList#g:TypeVariables")
@@ -262,8 +262,8 @@
         Just (GridColHdr {draw, height=ColHdrH chh}) -> let
           col wd c (ColW w) = sz (w, chh) $ draw (LstFcs f) wd $ GColC c $ Sel (c == curCol)
           chrw = case r ^. #colHdrRowHdr of
-            BlankCHRH -> fill ' '
-            CHRH dchrw -> dchrw (LstFcs f) (WdthD rhwd)
+            Nothing -> fill ' '
+            Just (CHRH chrh) -> chrh (LstFcs f) (WdthD rhwd)
           in sz (rhw, chh) chrw <+> renderColumns l vCs col (H chh)
       row vCs i f r = let
         col wd c (ColW w) = let gc = GrdCtxt (GRowC (Ix i) (Sel f)) $ GColC c $ Sel (c == curCol)
diff --git a/src/Brick/Widgets/TabularList/Mixed.hs b/src/Brick/Widgets/TabularList/Mixed.hs
--- a/src/Brick/Widgets/TabularList/Mixed.hs
+++ b/src/Brick/Widgets/TabularList/Mixed.hs
@@ -88,7 +88,7 @@
   cell :: ListFocused -> MixedCtxt -> e -> Widget n
 , rowHdr :: Maybe (RowHdr n e r)
 , colHdr :: Maybe (MixedColHdr n w)
-, colHdrRowHdr :: ColHdrRowHdr n
+, colHdrRowHdr :: Maybe (ColHdrRowHdr n)
 } deriving Generic
 
 -- | Calculate widths per row kind from visible list rows and the width available after row header.
@@ -140,8 +140,8 @@
         Just (MixedColHdr {draw, widths, height=ColHdrH chh}) -> let
           col ci (ColW w) = sz (w, chh) $ draw (LstFcs f) (MColC ci)
           chrw = case r ^. #colHdrRowHdr of
-            BlankCHRH -> fill ' '
-            CHRH chrw -> chrw (LstFcs f) (WdthD rhwd)
+            Nothing -> fill ' '
+            Just (CHRH chrw) -> chrw (LstFcs f) (WdthD rhwd)
           in sz (rhw, chh) chrw <+> hBox (zipWith col [Ix 0..] $ widths wprk)
       row wprk i f r = let
         col ci (ColW w) = sz (w, iH) $ cell (LstFcs f) (MxdCtxt (MRowC (Ix i) (Sel f)) $ MColC ci) r
diff --git a/src/Brick/Widgets/TabularList/Types.hs b/src/Brick/Widgets/TabularList/Types.hs
--- a/src/Brick/Widgets/TabularList/Types.hs
+++ b/src/Brick/Widgets/TabularList/Types.hs
@@ -93,6 +93,6 @@
 
 -- | The renderer for column header row header.
 --
--- If row headers and column headers exist and 'ColHdrRowHdr' is 'BlankCHRH', then column header row header is
--- filled with empty space. 'ColHdrRowHdr' merely allows you to customize column header row header.
-data ColHdrRowHdr n = BlankCHRH | CHRH (ListFocused -> WidthDeficit -> Widget n) deriving Generic
+-- If row headers and column headers exist and 'ColHdrRowHdr' doesn't exist, then column header row header is filled
+-- with empty space. 'ColHdrRowHdr' merely allows you to customize column header row header.
+newtype ColHdrRowHdr n = CHRH (ListFocused -> WidthDeficit -> Widget n) deriving Generic
